{"id":"452a9fca62513e86c5ed37fb6cce7080","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"contracts/contracts/arbitrum/IArbToken.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\n/**\n * @title Minimum expected interface for L2 token that interacts with the L2 token bridge (this is the interface necessary\n * for a custom token that interacts with the bridge, see TestArbCustomToken.sol for an example implementation).\n */\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Arbitrum Token Interface\n * @author Edge & Node\n * @notice Interface for tokens that can be minted and burned on Arbitrum L2\n */\ninterface IArbToken {\n    /**\n     * @notice should increase token supply by amount, and should (probably) only be callable by the L1 bridge.\n     * @param account Account to mint tokens to\n     * @param amount Amount of tokens to mint\n     */\n    function bridgeMint(address account, uint256 amount) external;\n\n    /**\n     * @notice should decrease token supply by amount, and should (probably) only be callable by the L1 bridge.\n     * @param account Account to burn tokens from\n     * @param amount Amount of tokens to burn\n     */\n    function bridgeBurn(address account, uint256 amount) external;\n\n    /**\n     * @notice Get the L1 token address\n     * @return address of layer 1 token\n     */\n    function l1Address() external view returns (address);\n}\n"},"contracts/contracts/arbitrum/IBridge.sol":{"content":"// SPDX-License-Identifier: Apache-2.0\n\n/*\n * Copyright 2021, 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-eth\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.0;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\n/**\n * @title Bridge Interface\n * @author Edge & Node\n * @notice Interface for the Arbitrum Bridge contract\n */\ninterface IBridge {\n    /**\n     * @notice Emitted when a message is delivered to the inbox\n     * @param messageIndex Index of the message\n     * @param beforeInboxAcc Inbox accumulator before this message\n     * @param inbox Address of the inbox\n     * @param kind Type of the message\n     * @param sender Address that sent the message\n     * @param messageDataHash Hash of the message data\n     */\n    event MessageDelivered(\n        uint256 indexed messageIndex,\n        bytes32 indexed beforeInboxAcc,\n        address inbox,\n        uint8 kind,\n        address sender,\n        bytes32 messageDataHash\n    );\n\n    /**\n     * @notice Emitted when a bridge call is triggered\n     * @param outbox Address of the outbox\n     * @param destAddr Destination address for the call\n     * @param amount ETH amount sent with the call\n     * @param data Calldata for the function call\n     */\n    event BridgeCallTriggered(address indexed outbox, address indexed destAddr, uint256 amount, bytes data);\n\n    /**\n     * @notice Emitted when an inbox is enabled or disabled\n     * @param inbox Address of the inbox\n     * @param enabled Whether the inbox is enabled\n     */\n    event InboxToggle(address indexed inbox, bool enabled);\n\n    /**\n     * @notice Emitted when an outbox is enabled or disabled\n     * @param outbox Address of the outbox\n     * @param enabled Whether the outbox is enabled\n     */\n    event OutboxToggle(address indexed outbox, bool enabled);\n\n    /**\n     * @notice Deliver a message to the inbox\n     * @param kind Type of the message\n     * @param sender Address that is sending the message\n     * @param messageDataHash keccak256 hash of the message data\n     * @return The message index\n     */\n    function deliverMessageToInbox(\n        uint8 kind,\n        address sender,\n        bytes32 messageDataHash\n    ) external payable returns (uint256);\n\n    /**\n     * @notice Execute a call from L2 to L1\n     * @param destAddr Contract to call\n     * @param amount ETH value to send\n     * @param data Calldata for the function call\n     * @return success True if the call was successful, false otherwise\n     * @return returnData Return data from the call\n     */\n    function executeCall(\n        address destAddr,\n        uint256 amount,\n        bytes calldata data\n    ) external returns (bool success, bytes memory returnData);\n\n    /**\n     * @notice Set the address of an inbox\n     * @param inbox Address of the inbox\n     * @param enabled Whether to enable the inbox\n     */\n    function setInbox(address inbox, bool enabled) external;\n\n    /**\n     * @notice Set the address of an outbox\n     * @param inbox Address of the outbox\n     * @param enabled Whether to enable the outbox\n     */\n    function setOutbox(address inbox, bool enabled) external;\n\n    // View functions\n\n    /**\n     * @notice Get the active outbox address\n     * @return The active outbox address\n     */\n    function activeOutbox() external view returns (address);\n\n    /**\n     * @notice Check if an address is an allowed inbox\n     * @param inbox Address to check\n     * @return True if the address is an allowed inbox, false otherwise\n     */\n    function allowedInboxes(address inbox) external view returns (bool);\n\n    /**\n     * @notice Check if an address is an allowed outbox\n     * @param outbox Address to check\n     * @return True if the address is an allowed outbox, false otherwise\n     */\n    function allowedOutboxes(address outbox) external view returns (bool);\n\n    /**\n     * @notice Get the inbox accumulator at a specific index\n     * @param index Index to query\n     * @return The inbox accumulator at the given index\n     */\n    function inboxAccs(uint256 index) external view returns (bytes32);\n\n    /**\n     * @notice Get the count of messages in the inbox\n     * @return Number of messages in the inbox\n     */\n    function messageCount() external view returns (uint256);\n}\n"},"contracts/contracts/arbitrum/IInbox.sol":{"content":"// SPDX-License-Identifier: Apache-2.0\n\n/*\n * Copyright 2021, 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-eth\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.0;\n\nimport { IBridge } from \"./IBridge.sol\";\nimport { IMessageProvider } from \"./IMessageProvider.sol\";\n\n/**\n * @title Inbox Interface\n * @author Edge & Node\n * @notice Interface for the Arbitrum Inbox contract\n */\ninterface IInbox is IMessageProvider {\n    /**\n     * @notice Send a message to L2\n     * @param messageData Encoded data to send in the message\n     * @return Message number returned by the inbox\n     */\n    function sendL2Message(bytes calldata messageData) external returns (uint256);\n\n    /**\n     * @notice Send an unsigned transaction to L2\n     * @param maxGas Maximum gas for the L2 transaction\n     * @param gasPriceBid Gas price bid for the L2 transaction\n     * @param nonce Nonce for the transaction\n     * @param destAddr Destination address on L2\n     * @param amount Amount of ETH to send\n     * @param data Transaction data\n     * @return Message number returned by the inbox\n     */\n    function sendUnsignedTransaction(\n        uint256 maxGas,\n        uint256 gasPriceBid,\n        uint256 nonce,\n        address destAddr,\n        uint256 amount,\n        bytes calldata data\n    ) external returns (uint256);\n\n    /**\n     * @notice Send a contract transaction to L2\n     * @param maxGas Maximum gas for the L2 transaction\n     * @param gasPriceBid Gas price bid for the L2 transaction\n     * @param destAddr Destination address on L2\n     * @param amount Amount of ETH to send\n     * @param data Transaction data\n     * @return Message number returned by the inbox\n     */\n    function sendContractTransaction(\n        uint256 maxGas,\n        uint256 gasPriceBid,\n        address destAddr,\n        uint256 amount,\n        bytes calldata data\n    ) external returns (uint256);\n\n    /**\n     * @notice Send an L1-funded unsigned transaction to L2\n     * @param maxGas Maximum gas for the L2 transaction\n     * @param gasPriceBid Gas price bid for the L2 transaction\n     * @param nonce Nonce for the transaction\n     * @param destAddr Destination address on L2\n     * @param data Transaction data\n     * @return Message number returned by the inbox\n     */\n    function sendL1FundedUnsignedTransaction(\n        uint256 maxGas,\n        uint256 gasPriceBid,\n        uint256 nonce,\n        address destAddr,\n        bytes calldata data\n    ) external payable returns (uint256);\n\n    /**\n     * @notice Send an L1-funded contract transaction to L2\n     * @param maxGas Maximum gas for the L2 transaction\n     * @param gasPriceBid Gas price bid for the L2 transaction\n     * @param destAddr Destination address on L2\n     * @param data Transaction data\n     * @return Message number returned by the inbox\n     */\n    function sendL1FundedContractTransaction(\n        uint256 maxGas,\n        uint256 gasPriceBid,\n        address destAddr,\n        bytes calldata data\n    ) external payable returns (uint256);\n\n    /**\n     * @notice Create a retryable ticket for an L2 transaction\n     * @param destAddr Destination address on L2\n     * @param arbTxCallValue Call value for the L2 transaction\n     * @param maxSubmissionCost Maximum cost for submitting the ticket\n     * @param submissionRefundAddress Address to refund submission cost to\n     * @param valueRefundAddress Address to refund excess value to\n     * @param maxGas Maximum gas for the L2 transaction\n     * @param gasPriceBid Gas price bid for the L2 transaction\n     * @param data Transaction data\n     * @return Message number returned by the inbox\n     */\n    function createRetryableTicket(\n        address destAddr,\n        uint256 arbTxCallValue,\n        uint256 maxSubmissionCost,\n        address submissionRefundAddress,\n        address valueRefundAddress,\n        uint256 maxGas,\n        uint256 gasPriceBid,\n        bytes calldata data\n    ) external payable returns (uint256);\n\n    /**\n     * @notice Deposit ETH to L2\n     * @param maxSubmissionCost Maximum cost for submitting the deposit\n     * @return Message number returned by the inbox\n     */\n    function depositEth(uint256 maxSubmissionCost) external payable returns (uint256);\n\n    /**\n     * @notice Get the bridge contract\n     * @return The bridge contract address\n     */\n    function bridge() external view returns (IBridge);\n\n    /**\n     * @notice Pause the creation of retryable tickets\n     */\n    function pauseCreateRetryables() external;\n\n    /**\n     * @notice Unpause the creation of retryable tickets\n     */\n    function unpauseCreateRetryables() external;\n\n    /**\n     * @notice Start rewriting addresses\n     */\n    function startRewriteAddress() external;\n\n    /**\n     * @notice Stop rewriting addresses\n     */\n    function stopRewriteAddress() external;\n}\n"},"contracts/contracts/arbitrum/IMessageProvider.sol":{"content":"// SPDX-License-Identifier: Apache-2.0\n\n/*\n * Copyright 2021, 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-eth\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.0;\n\n/**\n * @title Message Provider Interface\n * @author Edge & Node\n * @notice Interface for Arbitrum message providers\n */\ninterface IMessageProvider {\n    /**\n     * @notice Emitted when a message is delivered to the inbox\n     * @param messageNum Message number\n     * @param data Message data\n     */\n    event InboxMessageDelivered(uint256 indexed messageNum, bytes data);\n\n    /**\n     * @notice Emitted when a message is delivered from origin\n     * @param messageNum Message number\n     */\n    event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum);\n}\n"},"contracts/contracts/arbitrum/IOutbox.sol":{"content":"// SPDX-License-Identifier: Apache-2.0\n\n/*\n * Copyright 2021, 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-eth\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.0;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\n/**\n * @title Arbitrum Outbox Interface\n * @author Edge & Node\n * @notice Interface for the Arbitrum outbox contract\n */\ninterface IOutbox {\n    /**\n     * @notice Emitted when an outbox entry is created\n     * @param batchNum Batch number\n     * @param outboxEntryIndex Index of the outbox entry\n     * @param outputRoot Output root hash\n     * @param numInBatch Number of messages in the batch\n     */\n    event OutboxEntryCreated(\n        uint256 indexed batchNum,\n        uint256 outboxEntryIndex,\n        bytes32 outputRoot,\n        uint256 numInBatch\n    );\n\n    /**\n     * @notice Emitted when an outbox transaction is executed\n     * @param destAddr Destination address\n     * @param l2Sender L2 sender address\n     * @param outboxEntryIndex Index of the outbox entry\n     * @param transactionIndex Index of the transaction\n     */\n    event OutBoxTransactionExecuted(\n        address indexed destAddr,\n        address indexed l2Sender,\n        uint256 indexed outboxEntryIndex,\n        uint256 transactionIndex\n    );\n\n    /**\n     * @notice Get the L2 to L1 sender address\n     * @return The sender address\n     */\n    function l2ToL1Sender() external view returns (address);\n\n    /**\n     * @notice Get the L2 to L1 block number\n     * @return The block number\n     */\n    function l2ToL1Block() external view returns (uint256);\n\n    /**\n     * @notice Get the L2 to L1 Ethereum block number\n     * @return The Ethereum block number\n     */\n    function l2ToL1EthBlock() external view returns (uint256);\n\n    /**\n     * @notice Get the L2 to L1 timestamp\n     * @return The timestamp\n     */\n    function l2ToL1Timestamp() external view returns (uint256);\n\n    /**\n     * @notice Get the L2 to L1 batch number\n     * @return The batch number\n     */\n    function l2ToL1BatchNum() external view returns (uint256);\n\n    /**\n     * @notice Get the L2 to L1 output ID\n     * @return The output ID\n     */\n    function l2ToL1OutputId() external view returns (bytes32);\n\n    /**\n     * @notice Process outgoing messages\n     * @param sendsData Encoded message data\n     * @param sendLengths Array of message lengths\n     */\n    function processOutgoingMessages(bytes calldata sendsData, uint256[] calldata sendLengths) external;\n\n    /**\n     * @notice Check if an outbox entry exists\n     * @param batchNum Batch number to check\n     * @return True if the entry exists\n     */\n    function outboxEntryExists(uint256 batchNum) external view returns (bool);\n}\n"},"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.3 || ^0.8.0;\n\n/**\n * @title Token Gateway Interface\n * @author Edge & Node\n * @notice Interface for token gateways that handle cross-chain token transfers\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    /**\n     * @notice Transfer tokens from L1 to L2 or L2 to L1\n     * @param token Address of the token being transferred\n     * @param to Recipient address on the destination chain\n     * @param amount Amount of tokens to transfer\n     * @param maxGas Maximum gas for the transaction\n     * @param gasPriceBid Gas price bid for the transaction\n     * @param data Additional data for the transfer\n     * @return Transaction data\n     */\n    function outboundTransfer(\n        address token,\n        address to,\n        uint256 amount,\n        uint256 maxGas,\n        uint256 gasPriceBid,\n        bytes calldata data\n    ) external payable returns (bytes memory);\n\n    /**\n     * @notice Finalize an inbound token transfer\n     * @param token Address of the token being transferred\n     * @param from Sender address on the source chain\n     * @param to Recipient address on the destination chain\n     * @param amount Amount of tokens being transferred\n     * @param data Additional data for the transfer\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"},"contracts/contracts/base/IMulticall.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\n/**\n * @title Multicall interface\n * @author Edge & Node\n * @notice Enables calling multiple methods in a single call to the contract\n */\ninterface IMulticall {\n    /**\n     * @notice Call multiple functions in the current contract and return the data from all of them if they all succeed\n     * @param data The encoded function data for each of the calls to make to this contract\n     * @return results The results from each of the calls passed in via data\n     */\n    function multicall(bytes[] calldata data) external returns (bytes[] memory results);\n}\n"},"contracts/contracts/curation/ICuration.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Curation Interface\n * @author Edge & Node\n * @notice 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"},"contracts/contracts/discovery/erc1056/IEthereumDIDRegistry.sol":{"content":"// SPDX-License-Identifier: Apache-2.0\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Ethereum DID Registry Interface\n * @author Edge & Node\n * @notice Interface for the Ethereum DID Registry contract\n */\ninterface IEthereumDIDRegistry {\n    /**\n     * @notice Get the owner of an identity\n     * @param identity The identity address\n     * @return The address of the identity owner\n     */\n    function identityOwner(address identity) external view returns (address);\n\n    /**\n     * @notice Set an attribute for an identity\n     * @param identity The identity address\n     * @param name The attribute name\n     * @param value The attribute value\n     * @param validity The validity period in seconds\n     */\n    function setAttribute(address identity, bytes32 name, bytes calldata value, uint256 validity) external;\n}\n"},"contracts/contracts/discovery/IGNS.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Interface for GNS\n * @author Edge & Node\n * @notice Interface for the Graph Name System (GNS) contract\n */\ninterface IGNS {\n    // -- Pool --\n\n    /**\n     * @dev The SubgraphData struct holds information about subgraphs\n     * and their signal; both nSignal (i.e. name signal at the GNS level)\n     * and vSignal (i.e. version signal at the Curation contract level)\n     * @param vSignal The token of the subgraph-deployment bonding curve\n     * @param nSignal The token of the subgraph bonding curve\n     * @param curatorNSignal Mapping of curator addresses to their name signal amounts\n     * @param subgraphDeploymentID The deployment ID this subgraph points to\n     * @param __DEPRECATED_reserveRatio Deprecated reserve ratio field\n     * @param disabled Whether the subgraph is disabled/deprecated\n     * @param withdrawableGRT Amount of GRT available for withdrawal after deprecation\n     */\n    struct SubgraphData {\n        uint256 vSignal; // The token of the subgraph-deployment bonding curve\n        uint256 nSignal; // The token of the subgraph bonding curve\n        mapping(address => uint256) curatorNSignal;\n        bytes32 subgraphDeploymentID;\n        uint32 __DEPRECATED_reserveRatio; // solhint-disable-line var-name-mixedcase\n        bool disabled;\n        uint256 withdrawableGRT;\n    }\n\n    /**\n     * @dev The LegacySubgraphKey struct holds the account and sequence ID\n     * used to generate subgraph IDs in legacy subgraphs.\n     * @param account The account that created the legacy subgraph\n     * @param accountSeqID The sequence ID for the account's subgraphs\n     */\n    struct LegacySubgraphKey {\n        address account;\n        uint256 accountSeqID;\n    }\n\n    // -- Configuration --\n\n    /**\n     * @notice Approve curation contract to pull funds.\n     */\n    function approveAll() external;\n\n    /**\n     * @notice Set the owner fee percentage. This is used to prevent a subgraph owner to drain all\n     * the name curators tokens while upgrading or deprecating and is configurable in parts per million.\n     * @param ownerTaxPercentage Owner tax percentage\n     */\n    function setOwnerTaxPercentage(uint32 ownerTaxPercentage) external;\n\n    // -- Publishing --\n\n    /**\n     * @notice Allows a graph account to set a default name\n     * @param graphAccount Account that is setting its name\n     * @param nameSystem Name system account already has ownership of a name in\n     * @param nameIdentifier The unique identifier that is used to identify the name in the system\n     * @param name The name being set as default\n     */\n    function setDefaultName(\n        address graphAccount,\n        uint8 nameSystem,\n        bytes32 nameIdentifier,\n        string calldata name\n    ) external;\n\n    /**\n     * @notice Allows a subgraph owner to update the metadata of a subgraph they have published\n     * @param subgraphID Subgraph ID\n     * @param subgraphMetadata IPFS hash for the subgraph metadata\n     */\n    function updateSubgraphMetadata(uint256 subgraphID, bytes32 subgraphMetadata) external;\n\n    /**\n     * @notice Publish a new subgraph.\n     * @param subgraphDeploymentID Subgraph deployment for the subgraph\n     * @param versionMetadata IPFS hash for the subgraph version metadata\n     * @param subgraphMetadata IPFS hash for the subgraph metadata\n     */\n    function publishNewSubgraph(\n        bytes32 subgraphDeploymentID,\n        bytes32 versionMetadata,\n        bytes32 subgraphMetadata\n    ) external;\n\n    /**\n     * @notice Publish a new version of an existing subgraph.\n     * @param subgraphID Subgraph ID\n     * @param subgraphDeploymentID Subgraph deployment ID of the new version\n     * @param versionMetadata IPFS hash for the subgraph version metadata\n     */\n    function publishNewVersion(uint256 subgraphID, bytes32 subgraphDeploymentID, bytes32 versionMetadata) external;\n\n    /**\n     * @notice Deprecate a subgraph. The bonding curve is destroyed, the vSignal is burned, and the GNS\n     * contract holds the GRT from burning the vSignal, which all curators can withdraw manually.\n     * Can only be done by the subgraph owner.\n     * @param subgraphID Subgraph ID\n     */\n    function deprecateSubgraph(uint256 subgraphID) external;\n\n    // -- Curation --\n\n    /**\n     * @notice Deposit GRT into a subgraph and mint signal.\n     * @param subgraphID Subgraph ID\n     * @param tokensIn The amount of tokens the nameCurator wants to deposit\n     * @param nSignalOutMin Expected minimum amount of name signal to receive\n     */\n    function mintSignal(uint256 subgraphID, uint256 tokensIn, uint256 nSignalOutMin) external;\n\n    /**\n     * @notice Burn signal for a subgraph and return the GRT.\n     * @param subgraphID Subgraph ID\n     * @param nSignal The amount of nSignal the nameCurator wants to burn\n     * @param tokensOutMin Expected minimum amount of tokens to receive\n     */\n    function burnSignal(uint256 subgraphID, uint256 nSignal, uint256 tokensOutMin) external;\n\n    /**\n     * @notice Move subgraph signal from sender to `recipient`\n     * @param subgraphID Subgraph ID\n     * @param recipient Address to send the signal to\n     * @param amount The amount of nSignal to transfer\n     */\n    function transferSignal(uint256 subgraphID, address recipient, uint256 amount) external;\n\n    /**\n     * @notice Withdraw tokens from a deprecated subgraph.\n     * When the subgraph is deprecated, any curator can call this function and\n     * withdraw the GRT they are entitled for its original deposit\n     * @param subgraphID Subgraph ID\n     */\n    function withdraw(uint256 subgraphID) external;\n\n    // -- Getters --\n\n    /**\n     * @notice Return the owner of a subgraph.\n     * @param tokenID Subgraph ID\n     * @return Owner address\n     */\n    function ownerOf(uint256 tokenID) external view returns (address);\n\n    /**\n     * @notice Return the total signal on the subgraph.\n     * @param subgraphID Subgraph ID\n     * @return Total signal on the subgraph\n     */\n    function subgraphSignal(uint256 subgraphID) external view returns (uint256);\n\n    /**\n     * @notice Return the total tokens on the subgraph at current value.\n     * @param subgraphID Subgraph ID\n     * @return Total tokens on the subgraph\n     */\n    function subgraphTokens(uint256 subgraphID) external view returns (uint256);\n\n    /**\n     * @notice Calculate subgraph signal to be returned for an amount of tokens.\n     * @param subgraphID Subgraph ID\n     * @param tokensIn Tokens being exchanged for subgraph signal\n     * @return Amount of subgraph signal that can be bought\n     * @return Amount of version signal that can be bought\n     * @return Amount of curation tax\n     */\n    function tokensToNSignal(uint256 subgraphID, uint256 tokensIn) external view returns (uint256, uint256, uint256);\n\n    /**\n     * @notice Calculate tokens returned for an amount of subgraph signal.\n     * @param subgraphID Subgraph ID\n     * @param nSignalIn Subgraph signal being exchanged for tokens\n     * @return Amount of tokens returned for an amount of subgraph signal\n     * @return Amount of version signal returned\n     */\n    function nSignalToTokens(uint256 subgraphID, uint256 nSignalIn) external view returns (uint256, uint256);\n\n    /**\n     * @notice Calculate subgraph signal to be returned for an amount of subgraph deployment signal.\n     * @param subgraphID Subgraph ID\n     * @param vSignalIn Amount of subgraph deployment signal to exchange for subgraph signal\n     * @return Amount of subgraph signal that can be bought\n     */\n    function vSignalToNSignal(uint256 subgraphID, uint256 vSignalIn) external view returns (uint256);\n\n    /**\n     * @notice Calculate subgraph deployment signal to be returned for an amount of subgraph signal.\n     * @param subgraphID Subgraph ID\n     * @param nSignalIn Subgraph signal being exchanged for subgraph deployment signal\n     * @return Amount of subgraph deployment signal that can be returned\n     */\n    function nSignalToVSignal(uint256 subgraphID, uint256 nSignalIn) external view returns (uint256);\n\n    /**\n     * @notice Get the amount of subgraph signal a curator has.\n     * @param subgraphID Subgraph ID\n     * @param curator Curator address\n     * @return Amount of subgraph signal owned by a curator\n     */\n    function getCuratorSignal(uint256 subgraphID, address curator) external view returns (uint256);\n\n    /**\n     * @notice Return whether a subgraph is published.\n     * @param subgraphID Subgraph ID\n     * @return Return true if subgraph is currently published\n     */\n    function isPublished(uint256 subgraphID) external view returns (bool);\n\n    /**\n     * @notice Return whether a subgraph is a legacy subgraph (created before subgraph NFTs).\n     * @param subgraphID Subgraph ID\n     * @return Return true if subgraph is a legacy subgraph\n     */\n    function isLegacySubgraph(uint256 subgraphID) external view returns (bool);\n\n    /**\n     * @notice Returns account and sequence ID for a legacy subgraph (created before subgraph NFTs).\n     * @param subgraphID Subgraph ID\n     * @return account Account that created the subgraph (or 0 if it's not a legacy subgraph)\n     * @return seqID Sequence number for the subgraph\n     */\n    function getLegacySubgraphKey(uint256 subgraphID) external view returns (address account, uint256 seqID);\n}\n"},"contracts/contracts/discovery/IServiceRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Service Registry Interface\n * @author Edge & Node\n * @notice Interface for the Service Registry contract that manages indexer service information\n */\ninterface IServiceRegistry {\n    /**\n     * @dev Indexer service information\n     * @param url URL of the indexer service\n     * @param geohash Geohash of the indexer service location\n     */\n    struct IndexerService {\n        string url;\n        string geohash;\n    }\n\n    /**\n     * @notice Register an indexer service\n     * @param url URL of the indexer service\n     * @param geohash Geohash of the indexer service location\n     */\n    function register(string calldata url, string calldata geohash) external;\n\n    /**\n     * @notice Register an indexer service\n     * @param indexer Address of the indexer\n     * @param url URL of the indexer service\n     * @param geohash Geohash of the indexer service location\n     */\n    function registerFor(address indexer, string calldata url, string calldata geohash) external;\n\n    /**\n     * @notice Unregister an indexer service\n     */\n    function unregister() external;\n\n    /**\n     * @notice Unregister an indexer service\n     * @param indexer Address of the indexer\n     */\n    function unregisterFor(address indexer) external;\n\n    /**\n     * @notice Return the registration status of an indexer service\n     * @param indexer Address of the indexer\n     * @return True if the indexer service is registered\n     */\n    function isRegistered(address indexer) external view returns (bool);\n}\n"},"contracts/contracts/discovery/ISubgraphNFTDescriptor.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Describes subgraph NFT tokens via URI\n * @author Edge & Node\n * @notice Interface for describing subgraph NFT tokens via URI\n */\ninterface ISubgraphNFTDescriptor {\n    /// @notice Produces the URI describing a particular token ID for a Subgraph\n    /// @dev Note this URI may be data: URI with the JSON contents directly inlined\n    /// @param minter Address of the allowed minter\n    /// @param tokenId The ID of the subgraph NFT for which to produce a description, which may not be valid\n    /// @param baseURI The base URI that could be prefixed to the final URI\n    /// @param subgraphMetadata Subgraph metadata set for the subgraph\n    /// @return The URI of the ERC721-compliant metadata\n    function tokenURI(\n        address minter,\n        uint256 tokenId,\n        string calldata baseURI,\n        bytes32 subgraphMetadata\n    ) external view returns (string memory);\n}\n"},"contracts/contracts/disputes/IDisputeManager.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\n/**\n * @title Dispute Manager Interface\n * @author Edge & Node\n * @notice Interface for the Dispute Manager contract that handles indexing and query disputes\n */\ninterface IDisputeManager {\n    // -- Dispute --\n\n    /**\n     * @dev Types of disputes that can be created\n     */\n    enum DisputeType {\n        Null,\n        IndexingDispute,\n        QueryDispute\n    }\n\n    /**\n     * @dev Status of a dispute\n     */\n    enum DisputeStatus {\n        Null,\n        Accepted,\n        Rejected,\n        Drawn,\n        Pending\n    }\n\n    /**\n     * @dev Disputes contain info necessary for the Arbitrator to verify and resolve\n     * @param indexer Address of the indexer being disputed\n     * @param fisherman Address of the challenger creating the dispute\n     * @param deposit Amount of tokens staked as deposit\n     * @param relatedDisputeID ID of related dispute (for conflicting attestations)\n     * @param disputeType Type of dispute (Query or Indexing)\n     * @param status Current status of the dispute\n     */\n    struct Dispute {\n        address indexer;\n        address fisherman;\n        uint256 deposit;\n        bytes32 relatedDisputeID;\n        DisputeType disputeType;\n        DisputeStatus status;\n    }\n\n    // -- Attestation --\n\n    /**\n     * @dev Receipt content sent from indexer in response to request\n     * @param requestCID Content ID of the request\n     * @param responseCID Content ID of the response\n     * @param subgraphDeploymentID ID of the subgraph deployment\n     */\n    struct Receipt {\n        bytes32 requestCID;\n        bytes32 responseCID;\n        bytes32 subgraphDeploymentID;\n    }\n\n    /**\n     * @dev Attestation sent from indexer in response to a request\n     * @param requestCID Content ID of the request\n     * @param responseCID Content ID of the response\n     * @param subgraphDeploymentID ID of the subgraph deployment\n     * @param r R component of the signature\n     * @param s S component of the signature\n     * @param v Recovery ID of the signature\n     */\n    struct Attestation {\n        bytes32 requestCID;\n        bytes32 responseCID;\n        bytes32 subgraphDeploymentID;\n        bytes32 r;\n        bytes32 s;\n        uint8 v;\n    }\n\n    // -- Configuration --\n\n    /**\n     * @dev Set the arbitrator address.\n     * @notice Update the arbitrator to `arbitrator`\n     * @param arbitrator The address of the arbitration contract or party\n     */\n    function setArbitrator(address arbitrator) external;\n\n    /**\n     * @dev Set the minimum deposit required to create a dispute.\n     * @notice Update the minimum deposit to `minimumDeposit` Graph Tokens\n     * @param minimumDeposit The minimum deposit in Graph Tokens\n     */\n    function setMinimumDeposit(uint256 minimumDeposit) external;\n\n    /**\n     * @dev Set the percent reward that the fisherman gets when slashing occurs.\n     * @notice Update the reward percentage to `percentage`\n     * @param percentage Reward as a percentage of indexer stake\n     */\n    function setFishermanRewardPercentage(uint32 percentage) external;\n\n    /**\n     * @notice Set the percentage used for slashing indexers.\n     * @param qryPercentage Percentage slashing for query disputes\n     * @param idxPercentage Percentage slashing for indexing disputes\n     */\n    function setSlashingPercentage(uint32 qryPercentage, uint32 idxPercentage) external;\n\n    // -- Getters --\n\n    /**\n     * @notice Check if a dispute has been created\n     * @param disputeID Dispute identifier\n     * @return True if the dispute exists\n     */\n    function isDisputeCreated(bytes32 disputeID) external view returns (bool);\n\n    /**\n     * @notice Encode a receipt into a hash for EIP-712 signature verification\n     * @param receipt The receipt to encode\n     * @return The encoded hash\n     */\n    function encodeHashReceipt(Receipt memory receipt) external view returns (bytes32);\n\n    /**\n     * @notice Check if two attestations are conflicting\n     * @param attestation1 First attestation\n     * @param attestation2 Second attestation\n     * @return True if attestations are conflicting\n     */\n    function areConflictingAttestations(\n        Attestation memory attestation1,\n        Attestation memory attestation2\n    ) external pure returns (bool);\n\n    /**\n     * @notice Get the indexer address from an attestation\n     * @param attestation The attestation to extract indexer from\n     * @return The indexer address\n     */\n    function getAttestationIndexer(Attestation memory attestation) external view returns (address);\n\n    // -- Dispute --\n\n    /**\n     * @notice Create a query dispute for the arbitrator to resolve.\n     * This function is called by a fisherman that will need to `deposit` at\n     * least `minimumDeposit` GRT tokens.\n     * @param attestationData Attestation bytes submitted by the fisherman\n     * @param deposit Amount of tokens staked as deposit\n     * @return The dispute ID\n     */\n    function createQueryDispute(bytes calldata attestationData, uint256 deposit) external returns (bytes32);\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 submitter 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 First dispute ID\n     * @return Second dispute ID\n     */\n    function createQueryDisputeConflict(\n        bytes calldata attestationData1,\n        bytes calldata attestationData2\n    ) external returns (bytes32, bytes32);\n\n    /**\n     * @notice Create an indexing dispute\n     * @param allocationID Allocation ID being disputed\n     * @param deposit Deposit amount for the dispute\n     * @return The dispute ID\n     */\n    function createIndexingDispute(address allocationID, uint256 deposit) external returns (bytes32);\n\n    /**\n     * @notice Accept a dispute (arbitrator only)\n     * @param disputeID ID of the dispute to accept\n     */\n    function acceptDispute(bytes32 disputeID) external;\n\n    /**\n     * @notice Reject a dispute (arbitrator only)\n     * @param disputeID ID of the dispute to reject\n     */\n    function rejectDispute(bytes32 disputeID) external;\n\n    /**\n     * @notice Draw a dispute (arbitrator only)\n     * @param disputeID ID of the dispute to draw\n     */\n    function drawDispute(bytes32 disputeID) external;\n}\n"},"contracts/contracts/epochs/IEpochManager.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Epoch Manager Interface\n * @author Edge & Node\n * @notice Interface for the Epoch Manager contract that handles protocol epochs\n */\ninterface IEpochManager {\n    // -- Configuration --\n\n    /**\n     * @notice Set epoch length to `epochLength` blocks\n     * @param epochLength Epoch length in blocks\n     */\n    function setEpochLength(uint256 epochLength) external;\n\n    // -- Epochs\n\n    /**\n     * @dev Run a new epoch, should be called once at the start of any epoch.\n     * @notice Perform state changes for the current epoch\n     */\n    function runEpoch() external;\n\n    // -- Getters --\n\n    /**\n     * @notice Check if the current epoch has been run\n     * @return True if current epoch has been run, false otherwise\n     */\n    function isCurrentEpochRun() external view returns (bool);\n\n    /**\n     * @notice Get the current block number\n     * @return Current block number\n     */\n    function blockNum() external view returns (uint256);\n\n    /**\n     * @notice Get the hash of a specific block\n     * @param blockNumber Block number to get hash for\n     * @return Block hash\n     */\n    function blockHash(uint256 blockNumber) external view returns (bytes32);\n\n    /**\n     * @notice Get the current epoch number\n     * @return Current epoch number\n     */\n    function currentEpoch() external view returns (uint256);\n\n    /**\n     * @notice Get the block number when the current epoch started\n     * @return Block number of current epoch start\n     */\n    function currentEpochBlock() external view returns (uint256);\n\n    /**\n     * @notice Get the number of blocks since the current epoch started\n     * @return Number of blocks since current epoch start\n     */\n    function currentEpochBlockSinceStart() external view returns (uint256);\n\n    /**\n     * @notice Get the number of epochs since a given epoch\n     * @param epoch Epoch to calculate from\n     * @return Number of epochs since the given epoch\n     */\n    function epochsSince(uint256 epoch) external view returns (uint256);\n\n    /**\n     * @notice Get the number of epochs since the last epoch length update\n     * @return Number of epochs since last update\n     */\n    function epochsSinceUpdate() external view returns (uint256);\n}\n"},"contracts/contracts/gateway/ICallhookReceiver.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\n/**\n * @title Interface for contracts that can receive callhooks through the Arbitrum GRT bridge\n * @author Edge & Node\n * @notice Any contract that can receive a callhook on L2, sent through the bridge from L1, must\n * be allowlisted by the governor, but also implement this interface that contains\n * the function that will actually be called by the L2GraphTokenGateway.\n */\npragma solidity ^0.7.3 || ^0.8.0;\n\n/**\n * @title Callhook Receiver Interface\n * @author Edge & Node\n * @notice Interface for contracts that can receive tokens with callhook from the bridge\n */\ninterface ICallhookReceiver {\n    /**\n     * @notice Receive tokens with a callhook from the bridge\n     * @param from Token sender in L1\n     * @param amount Amount of tokens that were transferred\n     * @param data ABI-encoded callhook data\n     */\n    function onTokenTransfer(address from, uint256 amount, bytes calldata data) external;\n}\n"},"contracts/contracts/governance/IController.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Controller Interface\n * @author Edge & Node\n * @notice Interface for the Controller contract that manages protocol governance and contract registry\n */\ninterface IController {\n    /**\n     * @notice Return the governor address\n     * @return The governor address\n     */\n    function getGovernor() external view returns (address);\n\n    // -- Registry --\n\n    /**\n     * @notice Register contract id and mapped address\n     * @param id Contract id (keccak256 hash of contract name)\n     * @param contractAddress Contract address\n     */\n    function setContractProxy(bytes32 id, address contractAddress) external;\n\n    /**\n     * @notice Unregister a contract address\n     * @param id Contract id (keccak256 hash of contract name)\n     */\n    function unsetContractProxy(bytes32 id) external;\n\n    /**\n     * @notice Update contract's controller\n     * @param id Contract id (keccak256 hash of contract name)\n     * @param controller Controller address\n     */\n    function updateController(bytes32 id, address controller) external;\n\n    /**\n     * @notice Get contract proxy address by its id\n     * @param id Contract id\n     * @return Address of the proxy contract for the provided id\n     */\n    function getContractProxy(bytes32 id) external view returns (address);\n\n    // -- Pausing --\n\n    /**\n     * @notice Change the partial paused state of the contract\n     * Partial pause is intended as a partial pause of the protocol\n     * @param partialPause True if the contracts should be (partially) paused, false otherwise\n     */\n    function setPartialPaused(bool partialPause) external;\n\n    /**\n     * @notice Change the paused state of the contract\n     * Full pause most of protocol functions\n     * @param pause True if the contracts should be paused, false otherwise\n     */\n    function setPaused(bool pause) external;\n\n    /**\n     * @notice Change the Pause Guardian\n     * @param newPauseGuardian The address of the new Pause Guardian\n     */\n    function setPauseGuardian(address newPauseGuardian) external;\n\n    /**\n     * @notice Return whether the protocol is paused\n     * @return True if the protocol is paused\n     */\n    function paused() external view returns (bool);\n\n    /**\n     * @notice Return whether the protocol is partially paused\n     * @return True if the protocol is partially paused\n     */\n    function partialPaused() external view returns (bool);\n}\n"},"contracts/contracts/governance/IGoverned.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title IGoverned\n * @author Edge & Node\n * @notice Interface for governed contracts\n */\ninterface IGoverned {\n    // -- State getters --\n\n    /**\n     * @notice Get the current governor address\n     * @return The address of the current governor\n     */\n    function governor() external view returns (address);\n\n    /**\n     * @notice Get the pending governor address\n     * @return The address of the pending governor\n     */\n    function pendingGovernor() external view returns (address);\n\n    // -- External functions --\n\n    /**\n     * @notice Admin function to begin change of governor.\n     * @param newGovernor Address of new `governor`\n     */\n    function transferOwnership(address newGovernor) external;\n\n    /**\n     * @notice Admin function for pending governor to accept role and update governor.\n     */\n    function acceptOwnership() external;\n\n    // -- Events --\n\n    /**\n     * @notice Emitted when a new pending governor is set\n     * @param from The address of the current governor\n     * @param to The address of the new pending governor\n     */\n    event NewPendingOwnership(address indexed from, address indexed to);\n\n    /**\n     * @notice Emitted when governance is transferred to a new governor\n     * @param from The address of the previous governor\n     * @param to The address of the new governor\n     */\n    event NewOwnership(address indexed from, address indexed to);\n}\n"},"contracts/contracts/governance/IManaged.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\nimport { IController } from \"./IController.sol\";\n\n/**\n * @title Managed Interface\n * @author Edge & Node\n * @notice Interface for contracts that can be managed by a controller.\n */\ninterface IManaged {\n    /**\n     * @notice Set the controller that manages this contract\n     * @dev Only the current controller can set a new controller\n     * @param newController Address of the new controller\n     */\n    function setController(address newController) external;\n\n    /**\n     * @notice Sync protocol contract addresses from the Controller registry\n     * @dev This function will cache all the contracts using the latest addresses.\n     * Anyone can call the function whenever a Proxy contract change in the\n     * controller to ensure the protocol is using the latest version.\n     */\n    function syncAllContracts() external;\n\n    /**\n     * @notice Get the Controller that manages this contract\n     * @return The Controller as an IController interface\n     */\n    function controller() external view returns (IController);\n}\n"},"contracts/contracts/l2/curation/IL2Curation.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Interface of the L2 Curation contract.\n * @author Edge & Node\n * @notice Interface for the L2 Curation contract that handles curation on Layer 2\n */\ninterface IL2Curation {\n    /**\n     * @notice Set the subgraph service address.\n     * @param subgraphService Address of the SubgraphService contract\n     */\n    function setSubgraphService(address subgraphService) external;\n\n    /**\n     * @notice Deposit Graph Tokens in exchange for signal of a SubgraphDeployment curation pool.\n     * @dev This function charges no tax and can only be called by GNS in specific scenarios (for now\n     * only during an L1-L2 transfer).\n     * @param subgraphDeploymentID Subgraph deployment pool from where to mint signal\n     * @param tokensIn Amount of Graph Tokens to deposit\n     * @return Signal minted\n     */\n    function mintTaxFree(bytes32 subgraphDeploymentID, uint256 tokensIn) external returns (uint256);\n\n    /**\n     * @notice Calculate amount of signal that can be bought with tokens in a curation pool,\n     * without accounting for curation tax.\n     * @param subgraphDeploymentID Subgraph deployment for which to mint signal\n     * @param tokensIn Amount of tokens used to mint signal\n     * @return Amount of signal that can be bought\n     */\n    function tokensToSignalNoTax(bytes32 subgraphDeploymentID, uint256 tokensIn) external view returns (uint256);\n\n    /**\n     * @notice Calculate the amount of tokens that would be recovered if minting signal with\n     * the input tokens and then burning it. This can be used to compute rounding error.\n     * This function does not account for curation tax.\n     * @param subgraphDeploymentID Subgraph deployment for which to mint signal\n     * @param tokensIn Amount of tokens used to mint signal\n     * @return Amount of tokens that would be recovered after minting and burning signal\n     */\n    function tokensToSignalToTokensNoTax(\n        bytes32 subgraphDeploymentID,\n        uint256 tokensIn\n    ) external view returns (uint256);\n}\n"},"contracts/contracts/l2/discovery/IL2GNS.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\nimport { ICallhookReceiver } from \"../../gateway/ICallhookReceiver.sol\";\n\n/**\n * @title Interface for the L2GNS contract.\n * @author Edge & Node\n * @notice Interface for the L2 Graph Name System (GNS) contract\n */\ninterface IL2GNS is ICallhookReceiver {\n    /**\n     * @dev Message codes for L1 to L2 communication\n     * @param RECEIVE_SUBGRAPH_CODE Code for receiving subgraph transfers\n     * @param RECEIVE_CURATOR_BALANCE_CODE Code for receiving curator balance transfers\n     */\n    enum L1MessageCodes {\n        RECEIVE_SUBGRAPH_CODE,\n        RECEIVE_CURATOR_BALANCE_CODE\n    }\n\n    /**\n     * @dev The SubgraphL2TransferData struct holds information\n     * about a subgraph related to its transfer from L1 to L2.\n     * @param tokens GRT that will be sent to L2 to mint signal\n     * @param curatorBalanceClaimed True for curators whose balance has been claimed in L2\n     * @param l2Done Transfer finished on L2 side\n     * @param subgraphReceivedOnL2BlockNumber Block number when the subgraph was received on L2\n     */\n    struct SubgraphL2TransferData {\n        uint256 tokens; // GRT that will be sent to L2 to mint signal\n        mapping(address => bool) curatorBalanceClaimed; // True for curators whose balance has been claimed in L2\n        bool l2Done; // Transfer finished on L2 side\n        uint256 subgraphReceivedOnL2BlockNumber; // Block number when the subgraph was received on L2\n    }\n\n    /**\n     * @notice Finish a subgraph transfer from L1.\n     * The subgraph must have been previously sent through the bridge\n     * using the sendSubgraphToL2 function on L1GNS.\n     * @param l2SubgraphID Subgraph ID in L2 (aliased from the L1 subgraph ID)\n     * @param subgraphDeploymentID Latest subgraph deployment to assign to the subgraph\n     * @param subgraphMetadata IPFS hash of the subgraph metadata\n     * @param versionMetadata IPFS hash of the version metadata\n     */\n    function finishSubgraphTransferFromL1(\n        uint256 l2SubgraphID,\n        bytes32 subgraphDeploymentID,\n        bytes32 subgraphMetadata,\n        bytes32 versionMetadata\n    ) external;\n\n    /**\n     * @notice Return the aliased L2 subgraph ID from a transferred L1 subgraph ID\n     * @param l1SubgraphID L1 subgraph ID\n     * @return L2 subgraph ID\n     */\n    function getAliasedL2SubgraphID(uint256 l1SubgraphID) external pure returns (uint256);\n\n    /**\n     * @notice Return the unaliased L1 subgraph ID from a transferred L2 subgraph ID\n     * @param l2SubgraphID L2 subgraph ID\n     * @return L1subgraph ID\n     */\n    function getUnaliasedL1SubgraphID(uint256 l2SubgraphID) external pure returns (uint256);\n}\n"},"contracts/contracts/l2/gateway/IL2GraphTokenGateway.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\n/**\n * @title IL2GraphTokenGateway\n * @author Edge & Node\n * @notice Interface for the L2 Graph Token Gateway contract that handles token bridging on L2\n */\ninterface IL2GraphTokenGateway {\n    // Structs\n    struct OutboundCalldata {\n        address from;\n        bytes extraData;\n    }\n\n    // Events\n    /**\n     * @notice Emitted when a deposit from L1 is finalized on L2\n     * @param l1Token The L1 token address\n     * @param from The sender address on L1\n     * @param to The recipient address on L2\n     * @param amount The amount of tokens deposited\n     */\n    event DepositFinalized(address indexed l1Token, address indexed from, address indexed to, uint256 amount);\n\n    /**\n     * @notice Emitted when a withdrawal from L2 to L1 is initiated\n     * @param l1Token The L1 token address\n     * @param from The sender address on L2\n     * @param to The recipient address on L1\n     * @param l2ToL1Id The L2 to L1 message ID\n     * @param exitNum The exit number\n     * @param amount The amount of tokens withdrawn\n     */\n    event WithdrawalInitiated(\n        address l1Token,\n        address indexed from,\n        address indexed to,\n        uint256 indexed l2ToL1Id,\n        uint256 exitNum,\n        uint256 amount\n    );\n\n    /**\n     * @notice Emitted when the L2 router address is set\n     * @param l2Router The new L2 router address\n     */\n    event L2RouterSet(address l2Router);\n\n    /**\n     * @notice Emitted when the L1 token address is set\n     * @param l1GRT The L1 GRT token address\n     */\n    event L1TokenAddressSet(address l1GRT);\n\n    /**\n     * @notice Emitted when the L1 counterpart address is set\n     * @param l1Counterpart The L1 counterpart gateway address\n     */\n    event L1CounterpartAddressSet(address l1Counterpart);\n\n    // Functions\n    /**\n     * @notice Initialize the gateway contract\n     * @param controller The controller contract address\n     */\n    function initialize(address controller) external;\n\n    /**\n     * @notice Set the L2 router address\n     * @param l2Router The L2 router contract address\n     */\n    function setL2Router(address l2Router) external;\n\n    /**\n     * @notice Set the L1 token address\n     * @param l1GRT The L1 GRT token contract address\n     */\n    function setL1TokenAddress(address l1GRT) external;\n\n    /**\n     * @notice Set the L1 counterpart gateway address\n     * @param l1Counterpart The L1 counterpart gateway contract address\n     */\n    function setL1CounterpartAddress(address l1Counterpart) external;\n\n    /**\n     * @notice Transfer tokens from L2 to L1\n     * @param l1Token The L1 token address\n     * @param to The recipient address on L1\n     * @param amount The amount of tokens to transfer\n     * @param data Additional data for the transfer\n     * @return The encoded outbound transfer data\n     */\n    function outboundTransfer(\n        address l1Token,\n        address to,\n        uint256 amount,\n        bytes calldata data\n    ) external returns (bytes memory);\n\n    /**\n     * @notice Finalize an inbound transfer from L1 to L2\n     * @param l1Token The L1 token address\n     * @param from The sender address on L1\n     * @param to The recipient address on L2\n     * @param amount The amount of tokens to transfer\n     * @param data Additional data for the transfer\n     */\n    function finalizeInboundTransfer(\n        address l1Token,\n        address from,\n        address to,\n        uint256 amount,\n        bytes calldata data\n    ) external payable;\n\n    /**\n     * @notice Transfer tokens from L2 to L1 (overloaded version with unused parameters)\n     * @param l1Token The L1 token address\n     * @param to The recipient address on L1\n     * @param amount The amount of tokens to transfer\n     * @param unused1 Unused parameter for compatibility\n     * @param unused2 Unused parameter for compatibility\n     * @param data Additional data for the transfer\n     * @return The encoded outbound transfer data\n     */\n    function outboundTransfer(\n        address l1Token,\n        address to,\n        uint256 amount,\n        uint256 unused1,\n        uint256 unused2,\n        bytes calldata data\n    ) external payable returns (bytes memory);\n\n    /**\n     * @notice Calculate the L2 token address for a given L1 token\n     * @param l1ERC20 The L1 token address\n     * @return The corresponding L2 token address\n     */\n    function calculateL2TokenAddress(address l1ERC20) external view returns (address);\n\n    /**\n     * @notice Get the encoded calldata for an outbound transfer\n     * @param token The token address\n     * @param from The sender address\n     * @param to The recipient address\n     * @param amount The amount of tokens\n     * @param data Additional transfer data\n     * @return The encoded calldata\n     */\n    function getOutboundCalldata(\n        address token,\n        address from,\n        address to,\n        uint256 amount,\n        bytes memory data\n    ) external pure returns (bytes memory);\n}\n"},"contracts/contracts/l2/staking/IL2Staking.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\nimport { IStaking } from \"../../staking/IStaking.sol\";\nimport { IL2StakingBase } from \"./IL2StakingBase.sol\";\nimport { IL2StakingTypes } from \"./IL2StakingTypes.sol\";\n\n/**\n * @title Interface for the L2 Staking contract\n * @author Edge & Node\n * @notice This is the interface that should be used when interacting with the L2 Staking contract.\n * It extends the IStaking interface with the functions that are specific to L2, adding the callhook receiver\n * to receive transferred stake and delegation from L1.\n * @dev Note that L2Staking doesn't actually inherit this interface. This is because of\n * the custom setup of the Staking contract where part of the functionality is implemented\n * in a separate contract (StakingExtension) to which calls are delegated through the fallback function.\n */\ninterface IL2Staking is IStaking, IL2StakingBase, IL2StakingTypes {}\n"},"contracts/contracts/l2/staking/IL2StakingBase.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { ICallhookReceiver } from \"../../gateway/ICallhookReceiver.sol\";\n\n/**\n * @title Base interface for the L2Staking contract.\n * @author Edge & Node\n * @notice This interface is used to define the callhook receiver interface that is implemented by L2Staking.\n * @dev Note it includes only the L2-specific functionality, not the full IStaking interface.\n */\ninterface IL2StakingBase is ICallhookReceiver {\n    /**\n     * @notice Emitted when transferred delegation is returned to a delegator\n     * @param indexer Address of the indexer\n     * @param delegator Address of the delegator\n     * @param amount Amount of delegation returned\n     */\n    event TransferredDelegationReturnedToDelegator(address indexed indexer, address indexed delegator, uint256 amount);\n}\n"},"contracts/contracts/l2/staking/IL2StakingTypes.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title IL2StakingTypes\n * @author Edge & Node\n * @notice Interface defining types and enums used by L2 staking contracts\n */\ninterface IL2StakingTypes {\n    /// @dev Message codes for the L1 -> L2 bridge callhook\n    enum L1MessageCodes {\n        RECEIVE_INDEXER_STAKE_CODE,\n        RECEIVE_DELEGATION_CODE\n    }\n\n    /// @dev Encoded message struct when receiving indexer stake through the bridge\n    struct ReceiveIndexerStakeData {\n        address indexer;\n    }\n\n    /// @dev Encoded message struct when receiving delegation through the bridge\n    struct ReceiveDelegationData {\n        address indexer;\n        address delegator;\n    }\n}\n"},"contracts/contracts/rewards/ILegacyRewardsManager.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title ILegacyRewardsManager\n * @author Edge & Node\n * @notice Interface for the legacy rewards manager contract\n */\ninterface ILegacyRewardsManager {\n    /**\n     * @notice Get the accumulated rewards for a given allocation\n     * @param allocationID The allocation identifier\n     * @return The amount of accumulated rewards\n     */\n    function getRewards(address allocationID) external view returns (uint256);\n}\n"},"contracts/contracts/rewards/IRewardsIssuer.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Rewards Issuer Interface\n * @author Edge & Node\n * @notice Interface for contracts that issue rewards based on allocation data\n */\ninterface IRewardsIssuer {\n    /**\n     * @notice Get allocation data to calculate rewards issuance\n     *\n     * @param allocationId The allocation Id\n     * @return isActive Whether the allocation is active or not\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            bool isActive,\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"},"contracts/contracts/rewards/IRewardsManager.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title IRewardsManager\n * @author Edge & Node\n * @notice Interface for the RewardsManager contract that handles reward distribution\n */\ninterface IRewardsManager {\n    /**\n     * @dev Stores accumulated rewards and snapshots related to a particular SubgraphDeployment\n     * @param accRewardsForSubgraph Accumulated rewards for the subgraph\n     * @param accRewardsForSubgraphSnapshot Snapshot of accumulated rewards for the subgraph\n     * @param accRewardsPerSignalSnapshot Snapshot of accumulated rewards per signal\n     * @param accRewardsPerAllocatedToken Accumulated rewards per allocated token\n     */\n    struct Subgraph {\n        uint256 accRewardsForSubgraph;\n        uint256 accRewardsForSubgraphSnapshot;\n        uint256 accRewardsPerSignalSnapshot;\n        uint256 accRewardsPerAllocatedToken;\n    }\n\n    // -- Config --\n\n    /**\n     * @notice Set the issuance per block for rewards distribution\n     * @param issuancePerBlock The amount of tokens to issue per block\n     */\n    function setIssuancePerBlock(uint256 issuancePerBlock) external;\n\n    /**\n     * @notice Sets the minimum signaled tokens on a subgraph to start accruing rewards\n     * @dev Can be set to zero which means that this feature is not being used\n     * @param minimumSubgraphSignal Minimum signaled tokens\n     */\n    function setMinimumSubgraphSignal(uint256 minimumSubgraphSignal) external;\n\n    /**\n     * @notice Set the subgraph service address\n     * @param subgraphService Address of the subgraph service contract\n     */\n    function setSubgraphService(address subgraphService) external;\n\n    // -- Denylist --\n\n    /**\n     * @notice Set the subgraph availability oracle address\n     * @param subgraphAvailabilityOracle The address of the subgraph availability oracle\n     */\n    function setSubgraphAvailabilityOracle(address subgraphAvailabilityOracle) external;\n\n    /**\n     * @notice Set the denied status for a subgraph deployment\n     * @param subgraphDeploymentID The subgraph deployment ID\n     * @param deny True to deny, false to allow\n     */\n    function setDenied(bytes32 subgraphDeploymentID, bool deny) external;\n\n    /**\n     * @notice Check if a subgraph deployment is denied\n     * @param subgraphDeploymentID The subgraph deployment ID to check\n     * @return True if the subgraph is denied, false otherwise\n     */\n    function isDenied(bytes32 subgraphDeploymentID) external view returns (bool);\n\n    // -- Getters --\n\n    /**\n     * @notice Gets the issuance of rewards per signal since last updated\n     * @return newly accrued rewards per signal since last update\n     */\n    function getNewRewardsPerSignal() external view returns (uint256);\n\n    /**\n     * @notice Gets the currently accumulated rewards per signal\n     * @return Currently accumulated rewards per signal\n     */\n    function getAccRewardsPerSignal() external view returns (uint256);\n\n    /**\n     * @notice Get the accumulated rewards for a specific subgraph\n     * @param subgraphDeploymentID The subgraph deployment ID\n     * @return The accumulated rewards for the subgraph\n     */\n    function getAccRewardsForSubgraph(bytes32 subgraphDeploymentID) external view returns (uint256);\n\n    /**\n     * @notice Gets the accumulated rewards per allocated token for the subgraph\n     * @param subgraphDeploymentID Subgraph deployment\n     * @return Accumulated rewards per allocated token for the subgraph\n     * @return Accumulated rewards for subgraph\n     */\n    function getAccRewardsPerAllocatedToken(bytes32 subgraphDeploymentID) external view returns (uint256, uint256);\n\n    /**\n     * @notice Calculate current rewards for a given allocation on demand\n     * @param rewardsIssuer The rewards issuer contract\n     * @param allocationID Allocation\n     * @return Rewards amount for an allocation\n     */\n    function getRewards(address rewardsIssuer, address allocationID) external view returns (uint256);\n\n    /**\n     * @notice Calculate rewards based on tokens and accumulated rewards per allocated token\n     * @param tokens The number of tokens allocated\n     * @param accRewardsPerAllocatedToken The accumulated rewards per allocated token\n     * @return The calculated rewards amount\n     */\n    function calcRewards(uint256 tokens, uint256 accRewardsPerAllocatedToken) external pure returns (uint256);\n\n    // -- Updates --\n\n    /**\n     * @notice Updates the accumulated rewards per signal and save checkpoint block number\n     * @dev Must be called before `issuancePerBlock` or `total signalled GRT` changes.\n     * Called from the Curation contract on mint() and burn()\n     * @return Accumulated rewards per signal\n     */\n    function updateAccRewardsPerSignal() external returns (uint256);\n\n    /**\n     * @notice Pull rewards from the contract for a particular allocation\n     * @dev This function can only be called by the Staking contract.\n     * This function will mint the necessary tokens to reward based on the inflation calculation.\n     * @param allocationID Allocation\n     * @return Assigned rewards amount\n     */\n    function takeRewards(address allocationID) external returns (uint256);\n\n    // -- Hooks --\n\n    /**\n     * @notice Triggers an update of rewards for a subgraph\n     * @dev Must be called before `signalled GRT` on a subgraph changes.\n     * Hook called from the Curation contract on mint() and burn()\n     * @param subgraphDeploymentID Subgraph deployment\n     * @return Accumulated rewards for subgraph\n     */\n    function onSubgraphSignalUpdate(bytes32 subgraphDeploymentID) external returns (uint256);\n\n    /**\n     * @notice Triggers an update of rewards for a subgraph\n     * @dev Must be called before allocation on a subgraph changes.\n     * Hook called from the Staking contract on allocate() and close()\n     * @param subgraphDeploymentID Subgraph deployment\n     * @return Accumulated rewards per allocated token for a subgraph\n     */\n    function onSubgraphAllocationUpdate(bytes32 subgraphDeploymentID) external returns (uint256);\n}\n"},"contracts/contracts/staking/IL1GraphTokenLockTransferTool.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\n/**\n * @title Interface for the L1GraphTokenLockTransferTool contract\n * @author Edge & Node\n * @notice This interface defines the function to get the L2 wallet address for a given L1 token lock wallet.\n * The Transfer Tool contract is implemented in the token-distribution repo: https://github.com/graphprotocol/token-distribution/pull/64\n * and is only included here to provide support in L1Staking for the transfer of stake and delegation\n * owned by token lock contracts. See GIP-0046 for details: https://forum.thegraph.com/t/4023\n */\ninterface IL1GraphTokenLockTransferTool {\n    /**\n     * @notice Pulls ETH from an L1 wallet's account to use for L2 ticket gas.\n     * @dev This function is only callable by the staking contract.\n     * @param l1Wallet Address of the L1 token lock wallet\n     * @param amount Amount of ETH to pull from the transfer tool contract\n     */\n    function pullETH(address l1Wallet, uint256 amount) external;\n\n    /**\n     * @notice Get the L2 token lock wallet address for a given L1 token lock wallet\n     * @dev In the actual L1GraphTokenLockTransferTool contract, this is simply the default getter for a public mapping variable.\n     * @param l1Wallet Address of the L1 token lock wallet\n     * @return Address of the L2 token lock wallet if the wallet has an L2 counterpart, or address zero if\n     * the wallet doesn't have an L2 counterpart (or is not known to be a token lock wallet).\n     */\n    function l2WalletAddress(address l1Wallet) external view returns (address);\n}\n"},"contracts/contracts/staking/IL1Staking.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\nimport { IStaking } from \"./IStaking.sol\";\nimport { IL1StakingBase } from \"./IL1StakingBase.sol\";\n\n/**\n * @title Interface for the L1 Staking contract\n * @author Edge & Node\n * @notice This is the interface that should be used when interacting with the L1 Staking contract.\n * It extends the IStaking interface with the functions that are specific to L1, adding the transfer tools\n * to send stake and delegation to L2.\n * @dev Note that L1Staking doesn't actually inherit this interface. This is because of\n * the custom setup of the Staking contract where part of the functionality is implemented\n * in a separate contract (StakingExtension) to which calls are delegated through the fallback function.\n */\ninterface IL1Staking is IStaking, IL1StakingBase {}\n"},"contracts/contracts/staking/IL1StakingBase.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IL1GraphTokenLockTransferTool } from \"./IL1GraphTokenLockTransferTool.sol\";\n\n/**\n * @title Base interface for the L1Staking contract.\n * @author Edge & Node\n * @notice This interface is used to define the transfer tools that are implemented in L1Staking.\n * @dev Note it includes only the L1-specific functionality, not the full IStaking interface.\n */\ninterface IL1StakingBase {\n    /**\n     * @notice Emitted when an indexer transfers their stake to L2.\n     * This can happen several times as indexers can transfer partial stake.\n     * @param indexer Address of the indexer on L1\n     * @param l2Indexer Address of the indexer on L2\n     * @param transferredStakeTokens Amount of stake tokens transferred\n     */\n    event IndexerStakeTransferredToL2(\n        address indexed indexer,\n        address indexed l2Indexer,\n        uint256 transferredStakeTokens\n    );\n\n    /**\n     * @notice Emitted when a delegator transfers their delegation to L2\n     * @param delegator Address of the delegator on L1\n     * @param l2Delegator Address of the delegator on L2\n     * @param indexer Address of the indexer on L1\n     * @param l2Indexer Address of the indexer on L2\n     * @param transferredDelegationTokens Amount of delegation tokens transferred\n     */\n    event DelegationTransferredToL2(\n        address indexed delegator,\n        address indexed l2Delegator,\n        address indexed indexer,\n        address l2Indexer,\n        uint256 transferredDelegationTokens\n    );\n\n    /**\n     * @notice Emitted when the L1GraphTokenLockTransferTool is set\n     * @param l1GraphTokenLockTransferTool Address of the L1GraphTokenLockTransferTool contract\n     */\n    event L1GraphTokenLockTransferToolSet(address l1GraphTokenLockTransferTool);\n\n    /**\n     * @notice Emitted when a delegator unlocks their tokens ahead of time because the indexer has transferred to L2\n     * @param indexer Address of the indexer that transferred to L2\n     * @param delegator Address of the delegator unlocking their tokens\n     */\n    event StakeDelegatedUnlockedDueToL2Transfer(address indexed indexer, address indexed delegator);\n\n    /**\n     * @notice Set the L1GraphTokenLockTransferTool contract address\n     * @dev This function can only be called by the governor.\n     * @param l1GraphTokenLockTransferTool Address of the L1GraphTokenLockTransferTool contract\n     */\n    function setL1GraphTokenLockTransferTool(IL1GraphTokenLockTransferTool l1GraphTokenLockTransferTool) external;\n\n    /**\n     * @notice Send an indexer's stake to L2.\n     * @dev This function can only be called by the indexer (not an operator).\n     * It will validate that the remaining stake is sufficient to cover all the allocated\n     * stake, so the indexer might have to close some allocations before transferring.\n     * It will also check that the indexer's stake is not locked for withdrawal.\n     * Since the indexer address might be an L1-only contract, the function takes a beneficiary\n     * address that will be the indexer's address in L2.\n     * The caller must provide an amount of ETH to use for the L2 retryable ticket, that\n     * must be at least `maxSubmissionCost + gasPriceBid * maxGas`.\n     * @param l2Beneficiary Address of the indexer in L2. If the indexer has previously transferred stake, this must match the previously-used value.\n     * @param amount Amount of stake GRT to transfer to L2\n     * @param maxGas Max gas to use for the L2 retryable ticket\n     * @param gasPriceBid Gas price bid for the L2 retryable ticket\n     * @param maxSubmissionCost Max submission cost for the L2 retryable ticket\n     */\n    function transferStakeToL2(\n        address l2Beneficiary,\n        uint256 amount,\n        uint256 maxGas,\n        uint256 gasPriceBid,\n        uint256 maxSubmissionCost\n    ) external payable;\n\n    /**\n     * @notice Send an indexer's stake to L2, from a GraphTokenLockWallet vesting contract.\n     * @dev This function can only be called by the indexer (not an operator).\n     * It will validate that the remaining stake is sufficient to cover all the allocated\n     * stake, so the indexer might have to close some allocations before transferring.\n     * It will also check that the indexer's stake is not locked for withdrawal.\n     * The L2 beneficiary for the stake will be determined by calling the L1GraphTokenLockTransferTool contract,\n     * so the caller must have previously transferred tokens through that first\n     * (see GIP-0046 for details: https://forum.thegraph.com/t/4023).\n     * The ETH for the L2 gas will be pulled from the L1GraphTokenLockTransferTool, so the owner of\n     * the GraphTokenLockWallet must have previously deposited at least `maxSubmissionCost + gasPriceBid * maxGas`\n     * ETH into the L1GraphTokenLockTransferTool contract (using its depositETH function).\n     * @param amount Amount of stake GRT to transfer to L2\n     * @param maxGas Max gas to use for the L2 retryable ticket\n     * @param gasPriceBid Gas price bid for the L2 retryable ticket\n     * @param maxSubmissionCost Max submission cost for the L2 retryable ticket\n     */\n    function transferLockedStakeToL2(\n        uint256 amount,\n        uint256 maxGas,\n        uint256 gasPriceBid,\n        uint256 maxSubmissionCost\n    ) external;\n\n    /**\n     * @notice Send a delegator's delegated tokens to L2\n     * @dev This function can only be called by the delegator.\n     * This function will validate that the indexer has transferred their stake using transferStakeToL2,\n     * and that the delegation is not locked for undelegation.\n     * Since the delegator's address might be an L1-only contract, the function takes a beneficiary\n     * address that will be the delegator's address in L2.\n     * The caller must provide an amount of ETH to use for the L2 retryable ticket, that\n     * must be at least `maxSubmissionCost + gasPriceBid * maxGas`.\n     * @param indexer Address of the indexer (in L1, before transferring to L2)\n     * @param l2Beneficiary Address of the delegator in L2\n     * @param maxGas Max gas to use for the L2 retryable ticket\n     * @param gasPriceBid Gas price bid for the L2 retryable ticket\n     * @param maxSubmissionCost Max submission cost for the L2 retryable ticket\n     */\n    function transferDelegationToL2(\n        address indexer,\n        address l2Beneficiary,\n        uint256 maxGas,\n        uint256 gasPriceBid,\n        uint256 maxSubmissionCost\n    ) external payable;\n\n    /**\n     * @notice Send a delegator's delegated tokens to L2, for a GraphTokenLockWallet vesting contract\n     * @dev This function can only be called by the delegator.\n     * This function will validate that the indexer has transferred their stake using transferStakeToL2,\n     * and that the delegation is not locked for undelegation.\n     * The L2 beneficiary for the delegation will be determined by calling the L1GraphTokenLockTransferTool contract,\n     * so the caller must have previously transferred tokens through that first\n     * (see GIP-0046 for details: https://forum.thegraph.com/t/4023).\n     * The ETH for the L2 gas will be pulled from the L1GraphTokenLockTransferTool, so the owner of\n     * the GraphTokenLockWallet must have previously deposited at least `maxSubmissionCost + gasPriceBid * maxGas`\n     * ETH into the L1GraphTokenLockTransferTool contract (using its depositETH function).\n     * @param indexer Address of the indexer (in L1, before transferring to L2)\n     * @param maxGas Max gas to use for the L2 retryable ticket\n     * @param gasPriceBid Gas price bid for the L2 retryable ticket\n     * @param maxSubmissionCost Max submission cost for the L2 retryable ticket\n     */\n    function transferLockedDelegationToL2(\n        address indexer,\n        uint256 maxGas,\n        uint256 gasPriceBid,\n        uint256 maxSubmissionCost\n    ) external;\n\n    /**\n     * @notice Unlock a delegator's delegated tokens, if the indexer has transferred to L2\n     * @dev This function can only be called by the delegator.\n     * This function will validate that the indexer has transferred their stake using transferStakeToL2,\n     * and that the indexer has no remaining stake in L1.\n     * The tokens must previously be locked for undelegation by calling `undelegate()`,\n     * and can be withdrawn with `withdrawDelegated()` immediately after calling this.\n     * @param indexer Address of the indexer (in L1, before transferring to L2)\n     */\n    function unlockDelegationToTransferredIndexer(address indexer) external;\n}\n"},"contracts/contracts/staking/IStaking.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\nimport { IStakingBase } from \"./IStakingBase.sol\";\nimport { IStakingExtension } from \"./IStakingExtension.sol\";\nimport { IMulticall } from \"../base/IMulticall.sol\";\nimport { IManaged } from \"../governance/IManaged.sol\";\n\n/**\n * @title Interface for the Staking contract\n * @author Edge & Node\n * @notice This is the interface that should be used when interacting with the Staking contract.\n * @dev Note that Staking doesn't actually inherit this interface. This is because of\n * the custom setup of the Staking contract where part of the functionality is implemented\n * in a separate contract (StakingExtension) to which calls are delegated through the fallback function.\n */\ninterface IStaking is IStakingBase, IStakingExtension, IMulticall, IManaged {}\n"},"contracts/contracts/staking/IStakingBase.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IStakingData } from \"./IStakingData.sol\";\n\n/**\n * @title Base interface for the Staking contract.\n * @author Edge & Node\n * @notice Base interface for the Staking contract.\n * @dev This interface includes only what's implemented in the base Staking contract.\n * It does not include the L1 and L2 specific functionality. It also does not include\n * several functions that are implemented in the StakingExtension contract, and are called\n * via delegatecall through the fallback function. See IStaking.sol for an interface\n * that includes the full functionality.\n */\ninterface IStakingBase is IStakingData {\n    /**\n     * @notice Emitted when `indexer` stakes `tokens` amount.\n     * @param indexer Address of the indexer\n     * @param tokens Amount of tokens staked\n     */\n    event StakeDeposited(address indexed indexer, uint256 tokens);\n\n    /**\n     * @notice Emitted when `indexer` unstaked and locked `tokens` amount until `until` block.\n     * @param indexer Address of the indexer\n     * @param tokens Amount of tokens locked\n     * @param until Block number until which tokens are locked\n     */\n    event StakeLocked(address indexed indexer, uint256 tokens, uint256 until);\n\n    /**\n     * @notice Emitted when `indexer` withdrew `tokens` staked.\n     * @param indexer Address of the indexer\n     * @param tokens Amount of tokens withdrawn\n     */\n    event StakeWithdrawn(address indexed indexer, uint256 tokens);\n\n    /**\n     * @notice Emitted when `indexer` allocated `tokens` amount to `subgraphDeploymentID`\n     * during `epoch`.\n     * `allocationID` indexer derived address used to identify the allocation.\n     * `metadata` additional information related to the allocation.\n     * @param indexer Address of the indexer\n     * @param subgraphDeploymentID Subgraph deployment ID\n     * @param epoch Epoch when allocation was created\n     * @param tokens Amount of tokens allocated\n     * @param allocationID Allocation identifier\n     * @param metadata IPFS hash for additional allocation information\n     */\n    event AllocationCreated(\n        address indexed indexer,\n        bytes32 indexed subgraphDeploymentID,\n        uint256 epoch,\n        uint256 tokens,\n        address indexed allocationID,\n        bytes32 metadata\n    );\n\n    /**\n     * @notice 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     * @param indexer Address of the indexer\n     * @param subgraphDeploymentID Subgraph deployment ID\n     * @param epoch Epoch when allocation was closed\n     * @param tokens Amount of tokens unallocated\n     * @param allocationID Allocation identifier\n     * @param sender Address that closed the allocation\n     * @param poi Proof of indexing submitted\n     * @param isPublic True if closed by 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     * @notice 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     * @param assetHolder Address providing the rebate tokens\n     * @param indexer Address of the indexer collecting the rebate\n     * @param subgraphDeploymentID Subgraph deployment ID\n     * @param allocationID Allocation identifier\n     * @param epoch Epoch when rebate was collected\n     * @param tokens Total amount of tokens in the rebate\n     * @param protocolTax Amount burned as protocol tax\n     * @param curationFees Amount distributed to curators\n     * @param queryFees Amount available for rebate after fees\n     * @param queryRebates Amount distributed to the indexer\n     * @param delegationRewards Amount distributed to delegators\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 Emitted when `indexer` update the delegation parameters for its delegation pool.\n     * @param indexer Address of the indexer\n     * @param indexingRewardCut Percentage of indexing rewards left for the indexer\n     * @param queryFeeCut Percentage of query fees left for the indexer\n     * @param __DEPRECATED_cooldownBlocks Deprecated parameter (no longer used)\n     */\n    event DelegationParametersUpdated(\n        address indexed indexer,\n        uint32 indexingRewardCut,\n        uint32 queryFeeCut,\n        uint32 __DEPRECATED_cooldownBlocks // solhint-disable-line var-name-mixedcase\n    );\n\n    /**\n     * @notice Emitted when `indexer` set `operator` access.\n     * @param indexer Address of the indexer\n     * @param operator Address of the operator\n     * @param allowed Whether the operator is authorized\n     */\n    event SetOperator(address indexed indexer, address indexed operator, bool allowed);\n\n    /**\n     * @notice Emitted when `indexer` set an address to receive rewards.\n     * @param indexer Address of the indexer\n     * @param destination Address to receive rewards\n     */\n    event SetRewardsDestination(address indexed indexer, address indexed destination);\n\n    /**\n     * @notice Emitted when `extensionImpl` was set as the address of the StakingExtension contract\n     * to which extended functionality is delegated.\n     * @param extensionImpl Address of the StakingExtension implementation\n     */\n    event ExtensionImplementationSet(address indexed extensionImpl);\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     * @notice Initialize this contract.\n     * @param controller Address of the controller that manages this contract\n     * @param minimumIndexerStake Minimum amount of tokens that an indexer must stake\n     * @param thawingPeriod Number of blocks that tokens get locked after unstaking\n     * @param protocolPercentage Percentage of query fees that are burned as protocol fee (in PPM)\n     * @param curationPercentage Percentage of query fees that are given to curators (in PPM)\n     * @param maxAllocationEpochs The maximum number of epochs that an allocation can be active\n     * @param delegationUnbondingPeriod The period in epochs that tokens get locked after undelegating\n     * @param delegationRatio The ratio between an indexer's own stake and the delegation they can use\n     * @param rebatesParameters Alpha and lambda parameters for rebates function\n     * @param extensionImpl Address of the StakingExtension implementation\n     */\n    function initialize(\n        address controller,\n        uint256 minimumIndexerStake,\n        uint32 thawingPeriod,\n        uint32 protocolPercentage,\n        uint32 curationPercentage,\n        uint32 maxAllocationEpochs,\n        uint32 delegationUnbondingPeriod,\n        uint32 delegationRatio,\n        RebatesParameters calldata rebatesParameters,\n        address extensionImpl\n    ) external;\n\n    /**\n     * @notice Set the address of the StakingExtension implementation.\n     * @dev This function can only be called by the governor.\n     * @param extensionImpl Address of the StakingExtension implementation\n     */\n    function setExtensionImpl(address extensionImpl) external;\n\n    /**\n     * @notice Set the address of the counterpart (L1 or L2) staking contract.\n     * @dev This function can only be called by the governor.\n     * @param counterpart Address of the counterpart staking contract in the other chain, without any aliasing.\n     */\n    function setCounterpartStakingAddress(address counterpart) external;\n\n    /**\n     * @notice Set the minimum stake needed to be an Indexer\n     * @dev This function can only be called by the governor.\n     * @param minimumIndexerStake Minimum amount of tokens that an indexer must stake\n     */\n    function setMinimumIndexerStake(uint256 minimumIndexerStake) external;\n\n    /**\n     * @notice Set the number of blocks that tokens get locked after unstaking\n     * @dev This function can only be called by the governor.\n     * @param thawingPeriod Number of blocks that tokens get locked after unstaking\n     */\n    function setThawingPeriod(uint32 thawingPeriod) external;\n\n    /**\n     * @notice Set the curation percentage of query fees sent to curators.\n     * @dev This function can only be called by the governor.\n     * @param percentage Percentage of query fees sent to curators\n     */\n    function setCurationPercentage(uint32 percentage) external;\n\n    /**\n     * @notice Set a protocol percentage to burn when collecting query fees.\n     * @dev This function can only be called by the governor.\n     * @param percentage Percentage of query fees to burn as protocol fee\n     */\n    function setProtocolPercentage(uint32 percentage) external;\n\n    /**\n     * @notice Set the max time allowed for indexers to allocate on a subgraph\n     * before others are allowed to close the allocation.\n     * @dev This function can only be called by the governor.\n     * @param maxAllocationEpochs Allocation duration limit in epochs\n     */\n    function setMaxAllocationEpochs(uint32 maxAllocationEpochs) external;\n\n    /**\n     * @notice Set the rebate parameters\n     * @dev This function can only be called by the governor.\n     * @param alphaNumerator Numerator of `alpha`\n     * @param alphaDenominator Denominator of `alpha`\n     * @param lambdaNumerator Numerator of `lambda`\n     * @param lambdaDenominator Denominator of `lambda`\n     */\n    function setRebateParameters(\n        uint32 alphaNumerator,\n        uint32 alphaDenominator,\n        uint32 lambdaNumerator,\n        uint32 lambdaDenominator\n    ) external;\n\n    /**\n     * @notice Authorize or unauthorize an address to be an operator for the caller.\n     * @param operator Address to authorize or unauthorize\n     * @param allowed Whether the operator is authorized or not\n     */\n    function setOperator(address operator, bool allowed) external;\n\n    /**\n     * @notice Deposit tokens on the indexer's stake.\n     * The amount staked must be over the minimumIndexerStake.\n     * @param tokens Amount of tokens to stake\n     */\n    function stake(uint256 tokens) external;\n\n    /**\n     * @notice Deposit tokens on the Indexer stake, on behalf of the Indexer.\n     * The amount staked must be over the minimumIndexerStake.\n     * @param indexer Address of the indexer\n     * @param tokens Amount of tokens to stake\n     */\n    function stakeTo(address indexer, uint256 tokens) external;\n\n    /**\n     * @notice Unstake tokens from the indexer stake, lock them until the thawing period expires.\n     * @dev NOTE: The function accepts an amount greater than the currently staked tokens.\n     * If that happens, it will try to unstake the max amount of tokens it can.\n     * The reason for this behaviour is to avoid time conditions while the transaction\n     * is in flight.\n     * @param tokens Amount of tokens to unstake\n     */\n    function unstake(uint256 tokens) external;\n\n    /**\n     * @notice Withdraw indexer tokens once the thawing period has passed.\n     */\n    function withdraw() external;\n\n    /**\n     * @notice Set the destination where to send rewards for an indexer.\n     * @param destination Rewards destination address. If set to zero, rewards will be restaked\n     */\n    function setRewardsDestination(address destination) external;\n\n    /**\n     * @notice Set the delegation parameters for the caller.\n     * @param indexingRewardCut Percentage of indexing rewards left for the indexer\n     * @param queryFeeCut Percentage of query fees left for the indexer\n     * @param cooldownBlocks Deprecated cooldown blocks parameter (no longer used)\n     */\n    function setDelegationParameters(uint32 indexingRewardCut, uint32 queryFeeCut, uint32 cooldownBlocks) external;\n\n    /**\n     * @notice Allocate available tokens to a subgraph deployment.\n     * @param subgraphDeploymentID ID of the SubgraphDeployment where tokens will be allocated\n     * @param tokens Amount of tokens to allocate\n     * @param allocationID The allocation identifier\n     * @param metadata IPFS hash for additional information about the allocation\n     * @param proof A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`\n     */\n    function allocate(\n        bytes32 subgraphDeploymentID,\n        uint256 tokens,\n        address allocationID,\n        bytes32 metadata,\n        bytes calldata proof\n    ) external;\n\n    /**\n     * @notice Allocate available tokens to a subgraph deployment from and indexer's stake.\n     * The caller must be the indexer or the indexer's operator.\n     * @param indexer Indexer address to allocate funds from.\n     * @param subgraphDeploymentID ID of the SubgraphDeployment where tokens will be allocated\n     * @param tokens Amount of tokens to allocate\n     * @param allocationID The allocation identifier\n     * @param metadata IPFS hash for additional information about the allocation\n     * @param proof A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`\n     */\n    function allocateFrom(\n        address indexer,\n        bytes32 subgraphDeploymentID,\n        uint256 tokens,\n        address allocationID,\n        bytes32 metadata,\n        bytes calldata proof\n    ) external;\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 Get the total amount of tokens available to use in allocations.\n     * This considers the indexer stake and delegated tokens according to delegation ratio\n     * @param indexer Address of the indexer\n     * @return Amount of tokens available to allocate including delegation\n     */\n    function getIndexerCapacity(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 Get the allocation data for the rewards manager\n     * @dev New function to get the allocation data for the rewards manager\n     * @dev Note that this is only to make tests pass, as the staking contract with\n     * this changes will never get deployed. HorizonStaking is taking it's place.\n     * @param allocationID The allocation ID\n     * @return active Whether the allocation is active\n     * @return indexer The indexer address\n     * @return subgraphDeploymentID The subgraph deployment ID\n     * @return tokens The allocated tokens\n     * @return createdAtEpoch The epoch when allocation was created\n     * @return closedAtEpoch The epoch when allocation was closed\n     */\n    function getAllocationData(\n        address allocationID\n    ) external view returns (bool, address, bytes32, uint256, uint256, uint256);\n\n    /**\n     * @notice Get the allocation active status for the rewards manager\n     * @dev New function to get the allocation active status for the rewards manager\n     * @dev Note that this is only to make tests pass, as the staking contract with\n     * this changes will never get deployed. HorizonStaking is taking it's place.\n     * @param allocationID The allocation identifier\n     * @return True if the allocation is active, false otherwise\n     */\n    function isActiveAllocation(address allocationID) external view returns (bool);\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 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"},"contracts/contracts/staking/IStakingData.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Staking Data interface\n * @author Edge & Node\n * @notice This interface defines some structures used by the Staking contract.\n */\ninterface IStakingData {\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     * @param indexer Address of the indexer that owns the allocation\n     * @param subgraphDeploymentID Subgraph deployment ID being allocated to\n     * @param tokens Tokens allocated to a SubgraphDeployment\n     * @param createdAtEpoch Epoch when it was created\n     * @param closedAtEpoch Epoch when it was closed\n     * @param collectedFees Collected fees for the allocation\n     * @param __DEPRECATED_effectiveAllocation Deprecated field for effective allocation\n     * @param accRewardsPerAllocatedToken Snapshot used for reward calc\n     * @param distributedRebates Collected rebates that have been rebated\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    // -- Delegation Data --\n\n    /**\n     * @dev Delegation pool information. One per indexer.\n     * @param __DEPRECATED_cooldownBlocks Deprecated field for cooldown blocks\n     * @param indexingRewardCut Indexing reward cut in PPM\n     * @param queryFeeCut Query fee cut in PPM\n     * @param updatedAtBlock Block when the pool was last updated\n     * @param tokens Total tokens as pool reserves\n     * @param shares Total shares minted in the pool\n     * @param delegators Mapping of delegator => Delegation\n     */\n    struct DelegationPool {\n        uint32 __DEPRECATED_cooldownBlocks; // solhint-disable-line var-name-mixedcase\n        uint32 indexingRewardCut; // in PPM\n        uint32 queryFeeCut; // in PPM\n        uint256 updatedAtBlock; // Block when the pool was last updated\n        uint256 tokens; // Total tokens as pool reserves\n        uint256 shares; // Total shares minted in the pool\n        mapping(address => Delegation) delegators; // Mapping of delegator => Delegation\n    }\n\n    /**\n     * @dev Individual delegation data of a delegator in a pool.\n     * @param shares Shares owned by a delegator in the pool\n     * @param tokensLocked Tokens locked for undelegation\n     * @param tokensLockedUntil Epoch when locked tokens can be withdrawn\n     */\n    struct Delegation {\n        uint256 shares; // Shares owned by a delegator in the pool\n        uint256 tokensLocked; // Tokens locked for undelegation\n        uint256 tokensLockedUntil; // Epoch when locked tokens can be withdrawn\n    }\n\n    /**\n     * @dev Rebates parameters. Used to avoid stack too deep errors in Staking initialize function.\n     * @param alphaNumerator Alpha parameter numerator for rebate calculation\n     * @param alphaDenominator Alpha parameter denominator for rebate calculation\n     * @param lambdaNumerator Lambda parameter numerator for rebate calculation\n     * @param lambdaDenominator Lambda parameter denominator for rebate calculation\n     */\n    struct RebatesParameters {\n        uint32 alphaNumerator;\n        uint32 alphaDenominator;\n        uint32 lambdaNumerator;\n        uint32 lambdaDenominator;\n    }\n}\n"},"contracts/contracts/staking/IStakingExtension.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IStakingData } from \"./IStakingData.sol\";\nimport { IStakes } from \"./libs/IStakes.sol\";\n\n/**\n * @title Interface for the StakingExtension contract\n * @author Edge & Node\n * @notice This interface defines the events and functions implemented\n * in the StakingExtension contract, which is used to extend the functionality\n * of the Staking contract while keeping it within the 24kB mainnet size limit.\n * In particular, this interface includes delegation functions and various storage\n * getters.\n */\ninterface IStakingExtension is IStakingData {\n    /**\n     * @dev DelegationPool struct as returned by delegationPools(), since\n     * the original DelegationPool in IStakingData.sol contains a nested mapping.\n     * @param __DEPRECATED_cooldownBlocks Deprecated field for cooldown blocks\n     * @param indexingRewardCut Indexing reward cut in PPM\n     * @param queryFeeCut Query fee cut in PPM\n     * @param updatedAtBlock Block when the pool was last updated\n     * @param tokens Total tokens as pool reserves\n     * @param shares Total shares minted in the pool\n     */\n    struct DelegationPoolReturn {\n        uint32 __DEPRECATED_cooldownBlocks; // solhint-disable-line var-name-mixedcase\n        uint32 indexingRewardCut; // in PPM\n        uint32 queryFeeCut; // in PPM\n        uint256 updatedAtBlock; // Block when the pool was last updated\n        uint256 tokens; // Total tokens as pool reserves\n        uint256 shares; // Total shares minted in the pool\n    }\n\n    /**\n     * @notice Emitted when `delegator` delegated `tokens` to the `indexer`, the delegator\n     * gets `shares` for the delegation pool proportionally to the tokens staked.\n     * @param indexer Address of the indexer receiving the delegation\n     * @param delegator Address of the delegator\n     * @param tokens Amount of tokens delegated\n     * @param shares Amount of shares issued to the delegator\n     */\n    event StakeDelegated(address indexed indexer, address indexed delegator, uint256 tokens, uint256 shares);\n\n    /**\n     * @notice Emitted when `delegator` undelegated `tokens` from `indexer`.\n     * Tokens get locked for withdrawal after a period of time.\n     * @param indexer Address of the indexer from which tokens are undelegated\n     * @param delegator Address of the delegator\n     * @param tokens Amount of tokens undelegated\n     * @param shares Amount of shares returned\n     * @param until Epoch until which tokens are locked\n     */\n    event StakeDelegatedLocked(\n        address indexed indexer,\n        address indexed delegator,\n        uint256 tokens,\n        uint256 shares,\n        uint256 until\n    );\n\n    /**\n     * @notice Emitted when `delegator` withdrew delegated `tokens` from `indexer`.\n     * @param indexer Address of the indexer from which tokens are withdrawn\n     * @param delegator Address of the delegator\n     * @param tokens Amount of tokens withdrawn\n     */\n    event StakeDelegatedWithdrawn(address indexed indexer, address indexed delegator, uint256 tokens);\n\n    /**\n     * @notice Emitted when `indexer` was slashed for a total of `tokens` amount.\n     * Tracks `reward` amount of tokens given to `beneficiary`.\n     * @param indexer Address of the indexer that was slashed\n     * @param tokens Total amount of tokens slashed\n     * @param reward Amount of tokens given as reward\n     * @param beneficiary Address receiving the reward\n     */\n    event StakeSlashed(address indexed indexer, uint256 tokens, uint256 reward, address beneficiary);\n\n    /**\n     * @notice Emitted when `caller` set `slasher` address as `allowed` to slash stakes.\n     * @param caller Address that updated the slasher status\n     * @param slasher Address of the slasher\n     * @param allowed Whether the slasher is allowed to slash\n     */\n    event SlasherUpdate(address indexed caller, address indexed slasher, bool allowed);\n\n    /**\n     * @notice Set the delegation ratio.\n     * If set to 10 it means the indexer can use up to 10x the indexer staked amount\n     * from their delegated tokens\n     * @dev This function is only callable by the governor\n     * @param newDelegationRatio Delegation capacity multiplier\n     */\n    function setDelegationRatio(uint32 newDelegationRatio) external;\n\n    /**\n     * @notice Set the time, in epochs, a Delegator needs to wait to withdraw tokens after undelegating.\n     * @dev This function is only callable by the governor\n     * @param newDelegationUnbondingPeriod Period in epochs to wait for token withdrawals after undelegating\n     */\n    function setDelegationUnbondingPeriod(uint32 newDelegationUnbondingPeriod) external;\n\n    /**\n     * @notice Set a delegation tax percentage to burn when delegated funds are deposited.\n     * @dev This function is only callable by the governor\n     * @param percentage Percentage of delegated tokens to burn as delegation tax, expressed in parts per million\n     */\n    function setDelegationTaxPercentage(uint32 percentage) external;\n\n    /**\n     * @notice Set or unset an address as allowed slasher.\n     * @dev This function can only be called by the governor.\n     * @param slasher Address of the party allowed to slash indexers\n     * @param allowed True if slasher is allowed\n     */\n    function setSlasher(address slasher, bool allowed) external;\n\n    /**\n     * @notice Delegate tokens to an indexer.\n     * @param indexer Address of the indexer to which tokens are delegated\n     * @param tokens Amount of tokens to delegate\n     * @return Amount of shares issued from the delegation pool\n     */\n    function delegate(address indexer, uint256 tokens) external returns (uint256);\n\n    /**\n     * @notice Undelegate tokens from an indexer. Tokens will be locked for the unbonding period.\n     * @param indexer Address of the indexer to which tokens had been delegated\n     * @param shares Amount of shares to return and undelegate tokens\n     * @return Amount of tokens returned for the shares of the delegation pool\n     */\n    function undelegate(address indexer, uint256 shares) external returns (uint256);\n\n    /**\n     * @notice Withdraw undelegated tokens once the unbonding period has passed, and optionally\n     * re-delegate to a new indexer.\n     * @param indexer Withdraw available tokens delegated to indexer\n     * @param newIndexer Re-delegate to indexer address if non-zero, withdraw if zero address\n     * @return Amount of tokens withdrawn\n     */\n    function withdrawDelegated(address indexer, address newIndexer) external returns (uint256);\n\n    /**\n     * @notice Slash the indexer stake. Delegated tokens are not subject to slashing.\n     * @dev Can only be called by the slasher role.\n     * @param indexer Address of indexer to slash\n     * @param tokens Amount of tokens to slash from the indexer stake\n     * @param reward Amount of reward tokens to send to a beneficiary\n     * @param beneficiary Address of a beneficiary to receive a reward for the slashing\n     */\n    function slash(address indexer, uint256 tokens, uint256 reward, address beneficiary) external;\n\n    /**\n     * @notice Return the delegation from a delegator to an indexer.\n     * @param indexer Address of the indexer where funds have been delegated\n     * @param delegator Address of the delegator\n     * @return Delegation data\n     */\n    function getDelegation(address indexer, address delegator) external view returns (Delegation memory);\n\n    /**\n     * @notice Return whether the delegator has delegated to the indexer.\n     * @param indexer Address of the indexer where funds have been delegated\n     * @param delegator Address of the delegator\n     * @return True if delegator has tokens delegated to the indexer\n     */\n    function isDelegator(address indexer, address delegator) external view returns (bool);\n\n    /**\n     * @notice Returns amount of delegated tokens ready to be withdrawn after unbonding period.\n     * @param delegation Delegation of tokens from delegator to indexer\n     * @return Amount of tokens to withdraw\n     */\n    function getWithdraweableDelegatedTokens(Delegation memory delegation) external view returns (uint256);\n\n    /**\n     * @notice Getter for the delegationRatio, i.e. the delegation capacity multiplier:\n     * If delegation ratio is 100, and an Indexer has staked 5 GRT,\n     * then they can use up to 500 GRT from the delegated stake\n     * @return Delegation ratio\n     */\n    function delegationRatio() external view returns (uint32);\n\n    /**\n     * @notice Getter for delegationUnbondingPeriod:\n     * Time in epochs a delegator needs to wait to withdraw delegated stake\n     * @return Delegation unbonding period in epochs\n     */\n    function delegationUnbondingPeriod() external view returns (uint32);\n\n    /**\n     * @notice Getter for delegationTaxPercentage:\n     * Percentage of tokens to tax a delegation deposit, expressed in parts per million\n     * @return Delegation tax percentage in parts per million\n     */\n    function delegationTaxPercentage() external view returns (uint32);\n\n    /**\n     * @notice Getter for delegationPools[_indexer]:\n     * gets the delegation pool structure for a particular indexer.\n     * @param indexer Address of the indexer for which to query the delegation pool\n     * @return Delegation pool as a DelegationPoolReturn struct\n     */\n    function delegationPools(address indexer) external view returns (DelegationPoolReturn memory);\n\n    /**\n     * @notice Getter for operatorAuth[_indexer][_maybeOperator]:\n     * returns true if the operator is authorized to operate on behalf of the indexer.\n     * @param indexer The indexer address for which to query authorization\n     * @param maybeOperator The address that may or may not be an operator\n     * @return True if the operator is authorized to operate on behalf of the indexer\n     */\n    function operatorAuth(address indexer, address maybeOperator) external view returns (bool);\n\n    /**\n     * @notice Getter for rewardsDestination[_indexer]:\n     * returns the address where the indexer's rewards are sent.\n     * @param indexer The indexer address for which to query the rewards destination\n     * @return The address where the indexer's rewards are sent, zero if none is set in which case rewards are re-staked\n     */\n    function rewardsDestination(address indexer) external view returns (address);\n\n    /**\n     * @notice Getter for subgraphAllocations[_subgraphDeploymentId]:\n     * returns the amount of tokens allocated to a subgraph deployment.\n     * @param subgraphDeploymentId The subgraph deployment for which to query the allocations\n     * @return The amount of tokens allocated to the subgraph deployment\n     */\n    function subgraphAllocations(bytes32 subgraphDeploymentId) external view returns (uint256);\n\n    /**\n     * @notice Getter for slashers[_maybeSlasher]:\n     * returns true if the address is a slasher, i.e. an entity that can slash indexers\n     * @param maybeSlasher Address for which to check the slasher role\n     * @return True if the address is a slasher\n     */\n    function slashers(address maybeSlasher) external view returns (bool);\n\n    /**\n     * @notice Getter for minimumIndexerStake: the minimum\n     * amount of GRT that an indexer needs to stake.\n     * @return Minimum indexer stake in GRT\n     */\n    function minimumIndexerStake() external view returns (uint256);\n\n    /**\n     * @notice Getter for thawingPeriod: the time in blocks an\n     * indexer needs to wait to unstake tokens.\n     * @return Thawing period in blocks\n     */\n    function thawingPeriod() external view returns (uint32);\n\n    /**\n     * @notice Getter for curationPercentage: the percentage of\n     * query fees that are distributed to curators.\n     * @return Curation percentage in parts per million\n     */\n    function curationPercentage() external view returns (uint32);\n\n    /**\n     * @notice Getter for protocolPercentage: the percentage of\n     * query fees that are burned as protocol fees.\n     * @return Protocol percentage in parts per million\n     */\n    function protocolPercentage() external view returns (uint32);\n\n    /**\n     * @notice Getter for maxAllocationEpochs: the maximum time in epochs\n     * that an allocation can be open before anyone is allowed to close it. This\n     * also caps the effective allocation when sending the allocation's query fees\n     * to the rebate pool.\n     * @return Maximum allocation period in epochs\n     */\n    function maxAllocationEpochs() external view returns (uint32);\n\n    /**\n     * @notice Getter for the numerator of the rebates alpha parameter\n     * @return Alpha numerator\n     */\n    function alphaNumerator() external view returns (uint32);\n\n    /**\n     * @notice Getter for the denominator of the rebates alpha parameter\n     * @return Alpha denominator\n     */\n    function alphaDenominator() external view returns (uint32);\n\n    /**\n     * @notice Getter for the numerator of the rebates lambda parameter\n     * @return Lambda numerator\n     */\n    function lambdaNumerator() external view returns (uint32);\n\n    /**\n     * @notice Getter for the denominator of the rebates lambda parameter\n     * @return Lambda denominator\n     */\n    function lambdaDenominator() external view returns (uint32);\n\n    /**\n     * @notice Getter for stakes[_indexer]:\n     * gets the stake information for an indexer as a IStakes.Indexer struct.\n     * @param indexer Indexer address for which to query the stake information\n     * @return Stake information for the specified indexer, as a IStakes.Indexer struct\n     */\n    function stakes(address indexer) external view returns (IStakes.Indexer memory);\n\n    /**\n     * @notice Getter for allocations[_allocationID]:\n     * gets an allocation's information as an IStakingData.Allocation struct.\n     * @param allocationID Allocation ID for which to query the allocation information\n     * @return The specified allocation, as an IStakingData.Allocation struct\n     */\n    function allocations(address allocationID) external view returns (IStakingData.Allocation memory);\n}\n"},"contracts/contracts/staking/libs/IStakes.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\n/**\n * @title Interface for staking data structures\n * @author Edge & Node\n * @notice Defines the data structures used for indexer staking\n */\ninterface IStakes {\n    struct Indexer {\n        uint256 tokensStaked; // Tokens on the indexer stake (staked by the indexer)\n        uint256 tokensAllocated; // Tokens used in allocations\n        uint256 tokensLocked; // Tokens locked for withdrawal subject to thawing period\n        uint256 tokensLockedUntil; // Block when locked tokens can be withdrawn\n    }\n}\n"},"contracts/contracts/upgrades/IGraphProxy.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || ^0.8.0;\n\n/**\n * @title Graph Proxy Interface\n * @author Edge & Node\n * @notice Interface for the Graph Proxy contract that handles upgradeable proxy functionality\n */\ninterface IGraphProxy {\n    /**\n     * @notice Get the current admin.\n     *\n     * @dev NOTE: Only the admin can call this function.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n     *\n     * @return adminAddress The address of the current admin\n     */\n    function admin() external returns (address);\n\n    /**\n     * @notice Change the admin of the proxy.\n     *\n     * @dev NOTE: Only the admin can call this function.\n     *\n     * @param newAdmin Address of the new admin\n     */\n    function setAdmin(address newAdmin) external;\n\n    /**\n     * @notice Get the current implementation.\n     *\n     * @dev NOTE: Only the admin can call this function.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n     *\n     * @return implementationAddress The address of the current implementation for this proxy\n     */\n    function implementation() external returns (address);\n\n    /**\n     * @notice Get the current pending implementation.\n     *\n     * @dev NOTE: Only the admin can call this function.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0x9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c`\n     *\n     * @return pendingImplementationAddress The address of the current pending implementation for this proxy\n     */\n    function pendingImplementation() external returns (address);\n\n    /**\n     * @notice Upgrades to a new implementation contract.\n     * @dev NOTE: Only the admin can call this function.\n     * @param newImplementation Address of implementation contract\n     */\n    function upgradeTo(address newImplementation) external;\n\n    /**\n     * @notice Admin function for new implementation to accept its role as implementation.\n     */\n    function acceptUpgrade() external;\n\n    /**\n     * @notice Admin function for new implementation to accept its role as implementation,\n     * calling a function on the new implementation.\n     * @param data Calldata (including selector) for the function to delegatecall into the implementation\n     */\n    function acceptUpgradeAndCall(bytes calldata data) external;\n}\n"},"contracts/contracts/upgrades/IGraphProxyAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\nimport { IGraphProxy } from \"./IGraphProxy.sol\";\nimport { IGoverned } from \"../governance/IGoverned.sol\";\n\n/**\n * @title IGraphProxyAdmin\n * @author Edge & Node\n * @notice GraphProxyAdmin contract interface for managing proxy contracts\n * @dev Note that this interface is not used by the contract implementation, just used for types and abi generation\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 */\ninterface IGraphProxyAdmin is IGoverned {\n    /**\n     * @notice Get the implementation address of a proxy\n     * @param proxy The proxy contract to query\n     * @return The implementation address\n     */\n    function getProxyImplementation(IGraphProxy proxy) external view returns (address);\n\n    /**\n     * @notice Get the pending implementation address of a proxy\n     * @param proxy The proxy contract to query\n     * @return The pending implementation address\n     */\n    function getProxyPendingImplementation(IGraphProxy proxy) external view returns (address);\n\n    /**\n     * @notice Get the admin address of a proxy\n     * @param proxy The proxy contract to query\n     * @return The admin address\n     */\n    function getProxyAdmin(IGraphProxy proxy) external view returns (address);\n\n    /**\n     * @notice Change the admin of a proxy contract\n     * @param proxy The proxy contract to modify\n     * @param newAdmin The new admin address\n     */\n    function changeProxyAdmin(IGraphProxy proxy, address newAdmin) external;\n\n    /**\n     * @notice Upgrade a proxy to a new implementation\n     * @param proxy The proxy contract to upgrade\n     * @param implementation The new implementation address\n     */\n    function upgrade(IGraphProxy proxy, address implementation) external;\n\n    /**\n     * @notice Upgrade a proxy to a new implementation\n     * @param proxy The proxy contract to upgrade\n     * @param implementation The new implementation address\n     */\n    function upgradeTo(IGraphProxy proxy, address implementation) external;\n\n    /**\n     * @notice Upgrade a proxy to a new implementation and call a function\n     * @param proxy The proxy contract to upgrade\n     * @param implementation The new implementation address\n     * @param data The calldata to execute on the new implementation\n     */\n    function upgradeToAndCall(IGraphProxy proxy, address implementation, bytes calldata data) external;\n\n    /**\n     * @notice Accept ownership of a proxy contract\n     * @param proxy The proxy contract to accept\n     */\n    function acceptProxy(IGraphProxy proxy) external;\n\n    /**\n     * @notice Accept ownership of a proxy contract and call a function\n     * @param proxy The proxy contract to accept\n     * @param data The calldata to execute after accepting\n     */\n    function acceptProxyAndCall(IGraphProxy proxy, bytes calldata data) external;\n\n    // storage\n\n    /**\n     * @notice Get the governor address\n     * @return The address of the governor\n     */\n    function governor() external view returns (address);\n}\n"},"contracts/data-service/IDataService.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IGraphPayments } from \"../horizon/IGraphPayments.sol\";\n\n/**\n * @title Interface of the base {DataService} contract as defined by the Graph Horizon specification.\n * @author Edge & Node\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 * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\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     *\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"},"contracts/data-service/IDataServiceFees.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IDataService } from \"./IDataService.sol\";\n\n/**\n * @title Interface for the {DataServiceFees} contract.\n * @author Edge & Node\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 * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\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     * @param tokens The amount of tokens to be locked in the claim\n     * @param createdAt The timestamp when the claim was created\n     * @param releasableAt The timestamp when the tokens can be released\n     * @param nextClaim The next claim in the linked list\n     */\n    struct StakeClaim {\n        uint256 tokens;\n        uint256 createdAt;\n        uint256 releasableAt;\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     * @param claimId The id of the stake claim\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"},"contracts/data-service/IDataServicePausable.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IDataService } from \"./IDataService.sol\";\n\n/**\n * @title Interface for the {DataServicePausable} contract.\n * @author Edge & Node\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 * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\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 Emitted when a pause guardian is set to the same allowed status\n     * @param account The address of the pause guardian\n     * @param allowed The allowed status of the pause guardian\n     */\n    error DataServicePausablePauseGuardianNoChange(address account, bool allowed);\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"},"contracts/data-service/IDataServiceRescuable.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IDataService } from \"./IDataService.sol\";\n\n/**\n * @title Interface for the {IDataServicePausable} contract.\n * @author Edge & Node\n * @notice Extension for the {IDataService} contract, adds the ability to rescue\n * any ERC20 token or ETH from the contract, controlled by a rescuer privileged role.\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 */\ninterface IDataServiceRescuable is IDataService {\n    /**\n     * @notice Emitted when tokens are rescued from the contract.\n     * @param from The address initiating the rescue\n     * @param to The address receiving the rescued tokens\n     * @param token The address of the token being rescued\n     * @param tokens The amount of tokens rescued\n     */\n    event TokensRescued(address indexed from, address indexed to, address indexed token, uint256 tokens);\n\n    /**\n     * @notice Emitted when a rescuer is set.\n     * @param account The address of the rescuer\n     * @param allowed Whether the rescuer is allowed to rescue tokens\n     */\n    event RescuerSet(address indexed account, bool allowed);\n\n    /**\n     * @notice Thrown when trying to rescue zero tokens.\n     */\n    error DataServiceRescuableCannotRescueZero();\n\n    /**\n     * @notice Thrown when the caller is not a rescuer.\n     * @param account The address of the account that attempted the rescue\n     */\n    error DataServiceRescuableNotRescuer(address account);\n\n    /**\n     * @notice Rescues GRT tokens from the contract.\n     * @dev Declared as virtual to allow disabling the function via override.\n     *\n     * Requirements:\n     * - Cannot rescue zero tokens.\n     *\n     * Emits a {TokensRescued} event.\n     *\n     * @param to Address of the tokens recipient.\n     * @param tokens Amount of tokens to rescue.\n     */\n    function rescueGRT(address to, uint256 tokens) external;\n\n    /**\n     * @notice Rescues ether from the contract.\n     * @dev Declared as virtual to allow disabling the function via override.\n     *\n     * Requirements:\n     * - Cannot rescue zeroether.\n     *\n     * Emits a {TokensRescued} event.\n     *\n     * @param to Address of the tokens recipient.\n     * @param tokens Amount of tokens to rescue.\n     */\n    function rescueETH(address payable to, uint256 tokens) external;\n}\n"},"contracts/horizon/IAuthorizable.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n// solhint-disable gas-struct-packing\n\n/**\n * @title Interface for the {Authorizable} contract\n * @author Edge & Node\n * @notice Implements an authorization scheme that allows authorizers to\n * authorize signers to sign on their behalf.\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 */\ninterface IAuthorizable {\n    /**\n     * @notice Details for an authorizer-signer pair\n     * @dev Authorizations can be removed only after a thawing period\n     * @param authorizer The address of the authorizer - resource owner\n     * @param thawEndTimestamp The timestamp at which the thawing period ends (zero if not thawing)\n     * @param revoked Whether the signer authorization was revoked\n     */\n    struct Authorization {\n        address authorizer;\n        uint256 thawEndTimestamp;\n        bool revoked;\n    }\n\n    /**\n     * @notice Emitted when a signer is authorized to sign for a authorizer\n     * @param authorizer The address of the authorizer\n     * @param signer The address of the signer\n     */\n    event SignerAuthorized(address indexed authorizer, address indexed signer);\n\n    /**\n     * @notice Emitted when a signer is thawed to be de-authorized\n     * @param authorizer The address of the authorizer thawing the signer\n     * @param signer The address of the signer to thaw\n     * @param thawEndTimestamp The timestamp at which the thawing period ends\n     */\n    event SignerThawing(address indexed authorizer, address indexed signer, uint256 thawEndTimestamp);\n\n    /**\n     * @notice Emitted when the thawing of a signer is cancelled\n     * @param authorizer The address of the authorizer cancelling the thawing\n     * @param signer The address of the signer\n     * @param thawEndTimestamp The timestamp at which the thawing period was scheduled to end\n     */\n    event SignerThawCanceled(address indexed authorizer, address indexed signer, uint256 thawEndTimestamp);\n\n    /**\n     * @notice Emitted when a signer has been revoked after thawing\n     * @param authorizer The address of the authorizer revoking the signer\n     * @param signer The address of the signer\n     */\n    event SignerRevoked(address indexed authorizer, address indexed signer);\n\n    /**\n     * @notice Thrown when attempting to authorize a signer that is already authorized\n     * @param authorizer The address of the authorizer\n     * @param signer The address of the signer\n     * @param revoked The revoked status of the authorization\n     */\n    error AuthorizableSignerAlreadyAuthorized(address authorizer, address signer, bool revoked);\n\n    /**\n     * @notice Thrown when the signer proof deadline is invalid\n     * @param proofDeadline The deadline for the proof provided\n     * @param currentTimestamp The current timestamp\n     */\n    error AuthorizableInvalidSignerProofDeadline(uint256 proofDeadline, uint256 currentTimestamp);\n\n    /**\n     * @notice Thrown when the signer proof is invalid\n     */\n    error AuthorizableInvalidSignerProof();\n\n    /**\n     * @notice Thrown when the signer is not authorized by the authorizer\n     * @param authorizer The address of the authorizer\n     * @param signer The address of the signer\n     */\n    error AuthorizableSignerNotAuthorized(address authorizer, address signer);\n\n    /**\n     * @notice Thrown when the signer is not thawing\n     * @param signer The address of the signer\n     */\n    error AuthorizableSignerNotThawing(address signer);\n\n    /**\n     * @notice 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 AuthorizableSignerStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp);\n\n    /**\n     * @notice The period after which a signer can be revoked after thawing\n     * @return The period in seconds\n     */\n    function REVOKE_AUTHORIZATION_THAWING_PERIOD() external view returns (uint256);\n\n    /**\n     * @notice Authorize a signer to sign on behalf of the authorizer\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 a {SignerAuthorized} event\n     * @param signer The address of the 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 authorizer\n     * consists of (chain id, verifying contract address, domain, proof deadline, authorizer address)\n     */\n    function authorizeSigner(address signer, uint256 proofDeadline, bytes calldata proof) external;\n\n    /**\n     * @notice Starts thawing a signer to be de-authorized\n     * @dev Thawing a signer signals that signatures from that signer will soon be deemed invalid.\n     * Once a signer is thawed, they should be viewed as revoked regardless of their revocation status.\n     * If a signer is already thawing and this function is called, the thawing period is reset.\n     * Requirements:\n     * - `signer` must be authorized by the authorizer 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 function caller\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 if thawed.\n     * @dev Requirements:\n     * - `signer` must be thawed and authorized by the function caller\n     *\n     * Emits a {SignerRevoked} event\n     * @param signer The address of the signer\n     */\n    function revokeAuthorizedSigner(address signer) external;\n\n    /**\n     * @notice Returns the timestamp at which the thawing period ends for a signer.\n     * Returns 0 if the signer is not thawing.\n     * @param signer The address of the signer\n     * @return The timestamp at which the thawing period ends\n     */\n    function getThawEnd(address signer) external view returns (uint256);\n\n    /**\n     * @notice Returns true if the signer is authorized by the authorizer\n     * @param authorizer The address of the authorizer\n     * @param signer The address of the signer\n     * @return true if the signer is authorized by the authorizer, false otherwise\n     */\n    function isAuthorized(address authorizer, address signer) external view returns (bool);\n}\n"},"contracts/horizon/IGraphPayments.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n/**\n * @title Interface for the {GraphPayments} contract\n * @author Edge & Node\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 * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\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 paymentType The type of payment as defined in {IGraphPayments}\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 tokens The total amount of tokens being collected\n     * @param tokensProtocol Amount of tokens charged as protocol tax\n     * @param tokensDataService Amount of tokens for the data service\n     * @param tokensDelegationPool Amount of tokens for delegators\n     * @param tokensReceiver Amount of tokens for the receiver\n     * @param receiverDestination The address where the receiver's payment cut is sent.\n     */\n    event GraphPaymentCollected(\n        PaymentTypes indexed paymentType,\n        address indexed payer,\n        address receiver,\n        address indexed dataService,\n        uint256 tokens,\n        uint256 tokensProtocol,\n        uint256 tokensDataService,\n        uint256 tokensDelegationPool,\n        uint256 tokensReceiver,\n        address receiverDestination\n    );\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 Thrown when trying to use a cut that is not expressed in PPM\n     * @param cut The cut\n     */\n    error GraphPaymentsInvalidCut(uint256 cut);\n\n    /**\n     * @notice Returns the protocol payment cut\n     * @return The protocol payment cut in PPM\n     */\n    function PROTOCOL_PAYMENT_CUT() external view returns (uint256);\n\n    /**\n     * @notice Initialize the contract\n     */\n    function initialize() external;\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 destination address. If the\n     * destination address is zero the funds are automatically staked to the receiver. Note that the receiver\n     * destination address can be set to the receiver address to collect funds on the receiver without re-staking.\n     *\n     * Note that the collected amount can be zero.\n     *\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 dataServiceCut The data service cut in PPM\n     * @param receiverDestination The address where the receiver's payment cut is sent.\n     */\n    function collect(\n        PaymentTypes paymentType,\n        address receiver,\n        uint256 tokens,\n        address dataService,\n        uint256 dataServiceCut,\n        address receiverDestination\n    ) external;\n}\n"},"contracts/horizon/IGraphTallyCollector.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\nimport { IPaymentsCollector } from \"./IPaymentsCollector.sol\";\nimport { IGraphPayments } from \"./IGraphPayments.sol\";\nimport { IAuthorizable } from \"./IAuthorizable.sol\";\n\n/**\n * @title Interface for the {GraphTallyCollector} contract\n * @author Edge & Node\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 GraphTally RAV (Receipt Aggregate Voucher).\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 */\ninterface IGraphTallyCollector is IPaymentsCollector, IAuthorizable {\n    /**\n     * @notice The Receipt Aggregate Voucher (RAV) struct\n     * @param collectionId The ID of the collection \"bucket\" the RAV belongs to. Note that multiple RAVs can be collected for the same collection id.\n     * @param payer The address of the payer the RAV was issued by\n     * @param serviceProvider The address of the service provider the RAV was issued to\n     * @param dataService The address of the data service the RAV was issued to\n     * @param timestampNs The RAV timestamp, indicating the latest GraphTally Receipt in the RAV\n     * @param valueAggregate The total amount owed to the service provider since the beginning of the payer-service provider relationship, including all debt that is already paid for.\n     * @param metadata Arbitrary metadata to extend functionality if a data service requires it\n     */\n    struct ReceiptAggregateVoucher {\n        bytes32 collectionId;\n        address payer;\n        address serviceProvider;\n        address dataService;\n        uint64 timestampNs;\n        uint128 valueAggregate;\n        bytes metadata;\n    }\n\n    /**\n     * @notice A struct representing a signed RAV\n     * @param rav The RAV\n     * @param signature The signature of the RAV - 65 bytes: r (32 Bytes) || s (32 Bytes) || v (1 Byte)\n     */\n    struct SignedRAV {\n        ReceiptAggregateVoucher rav;\n        bytes signature;\n    }\n\n    /**\n     * @notice Emitted when a RAV is collected\n     * @param collectionId The ID of the collection \"bucket\" the RAV belongs to.\n     * @param payer The address of the payer\n     * @param serviceProvider The address of the service provider\n     * @param dataService The address of the data service\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        bytes32 indexed collectionId,\n        address indexed payer,\n        address serviceProvider,\n        address indexed dataService,\n        uint64 timestampNs,\n        uint128 valueAggregate,\n        bytes metadata,\n        bytes signature\n    );\n\n    /**\n     * @notice Thrown when the RAV signer is invalid\n     */\n    error GraphTallyCollectorInvalidRAVSigner();\n\n    /**\n     * @notice Thrown when the RAV is for a data service the service provider has no provision for\n     * @param dataService The address of the data service\n     */\n    error GraphTallyCollectorUnauthorizedDataService(address dataService);\n\n    /**\n     * @notice 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 GraphTallyCollectorCallerNotDataService(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 GraphTallyCollectorInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected);\n\n    /**\n     * @notice Thrown when the attempting to collect more tokens than what it's owed\n     * @param tokensToCollect The amount of tokens to collect\n     * @param maxTokensToCollect The maximum amount of tokens to collect\n     */\n    error GraphTallyCollectorInvalidTokensToCollectAmount(uint256 tokensToCollect, uint256 maxTokensToCollect);\n\n    /**\n     * @notice See {IPaymentsCollector.collect}\n     * This variant adds the ability to partially collect a RAV by specifying the amount of tokens to collect.\n     *\n     * Requirements:\n     * - The amount of tokens to collect must be less than or equal to the total amount of tokens in the RAV minus\n     *   the tokens already collected.\n     * @param paymentType The payment type to collect\n     * @param data Additional data required for the payment collection. Encoded as follows:\n     * - SignedRAV `signedRAV`: The signed RAV\n     * - uint256 `dataServiceCut`: The data service cut in PPM\n     * - address `receiverDestination`: The address where the receiver's payment should be sent.\n     * @param tokensToCollect The amount of tokens to collect\n     * @return The amount of tokens collected\n     */\n    function collect(\n        IGraphPayments.PaymentTypes paymentType,\n        bytes calldata data,\n        uint256 tokensToCollect\n    ) external returns (uint256);\n\n    /**\n     * @notice 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     * @notice 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"},"contracts/horizon/IHorizonStaking.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\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 * @author Edge & Node\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 * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\n */\ninterface IHorizonStaking is IHorizonStakingTypes, IHorizonStakingBase, IHorizonStakingMain, IHorizonStakingExtension {}\n"},"contracts/horizon/internal/IHorizonStakingBase.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IHorizonStakingTypes } from \"./IHorizonStakingTypes.sol\";\nimport { IGraphPayments } from \"../IGraphPayments.sol\";\n\nimport { ILinkedList } from \"./ILinkedList.sol\";\n\n/**\n * @title Interface for the {HorizonStakingBase} contract.\n * @author Edge & Node\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 * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\n */\ninterface IHorizonStakingBase {\n    /**\n     * @notice Emitted when a service provider stakes tokens.\n     * @dev TRANSITION PERIOD: 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 HorizonStakeDeposited(address indexed serviceProvider, uint256 tokens);\n\n    /**\n     * @notice Thrown when using an invalid thaw request type.\n     */\n    error HorizonStakingInvalidThawRequestType();\n\n    /**\n     * @notice Gets the details of a service provider.\n     * @param serviceProvider The address of the service provider.\n     * @return The service provider details.\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 thawRequestType The type of thaw request.\n     * @param thawRequestId The id of the thaw request.\n     * @return The thaw request details.\n     */\n    function getThawRequest(\n        IHorizonStakingTypes.ThawRequestType thawRequestType,\n        bytes32 thawRequestId\n    ) 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 thawRequestType The type of thaw request.\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        IHorizonStakingTypes.ThawRequestType thawRequestType,\n        address serviceProvider,\n        address verifier,\n        address owner\n    ) external view returns (ILinkedList.List memory);\n\n    /**\n     * @notice Gets the amount of thawed tokens that can be releasedfor a given provision.\n     * @dev Note that the value returned by this function does not return the total amount of thawed tokens\n     * but only those that can be released. If thaw requests are created with different thawing periods it's\n     * possible that an unexpired thaw request temporarily blocks the release of other ones that have already\n     * expired. This function will stop counting when it encounters the first thaw request that is not yet expired.\n     * @param thawRequestType The type of thaw request.\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(\n        IHorizonStakingTypes.ThawRequestType thawRequestType,\n        address serviceProvider,\n        address verifier,\n        address owner\n    ) external view returns (uint256);\n\n    /**\n     * @notice Gets the maximum allowed thawing period for a provision.\n     * @return The maximum allowed thawing period in seconds.\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     * @return True if delegation slashing is enabled, false otherwise\n     */\n    function isDelegationSlashingEnabled() external view returns (bool);\n}\n"},"contracts/horizon/internal/IHorizonStakingExtension.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IRewardsIssuer } from \"../../contracts/rewards/IRewardsIssuer.sol\";\n\n/**\n * @title Interface for {HorizonStakingExtension} contract.\n * @author Edge & Node\n * @notice Provides functions for managing legacy allocations.\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 */\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     * @param indexer The indexer address\n     * @param subgraphDeploymentID The subgraph deployment ID\n     * @param tokens The amount of tokens allocated to the subgraph deployment\n     * @param createdAtEpoch The epoch when the allocation was created\n     * @param closedAtEpoch The epoch when the allocation was closed\n     * @param collectedFees The amount of collected fees for the allocation\n     * @param __DEPRECATED_effectiveAllocation Deprecated field.\n     * @param accRewardsPerAllocatedToken Snapshot used for reward calculation\n     * @param distributedRebates The amount of collected rebates that have been rebated\n     */\n    struct Allocation {\n        address indexer;\n        bytes32 subgraphDeploymentID;\n        uint256 tokens;\n        uint256 createdAtEpoch;\n        uint256 closedAtEpoch;\n        uint256 collectedFees;\n        uint256 __DEPRECATED_effectiveAllocation;\n        uint256 accRewardsPerAllocatedToken;\n        uint256 distributedRebates;\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     * @notice 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     * @param indexer The indexer address\n     * @param subgraphDeploymentID The subgraph deployment ID\n     * @param epoch The protocol epoch the allocation was closed on\n     * @param tokens The amount of tokens unallocated from the allocation\n     * @param allocationID The allocation identifier\n     * @param sender The address closing the allocation\n     * @param poi The proof of indexing submitted by the sender\n     * @param isPublic True if the allocation was force closed by someone other than the indexer/operator\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     * @notice 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     * @param assetHolder The address of the asset holder, the entity paying the query fees\n     * @param indexer The indexer address\n     * @param subgraphDeploymentID The subgraph deployment ID\n     * @param allocationID The allocation identifier\n     * @param epoch The protocol epoch the rebate was collected on\n     * @param tokens The amount of tokens collected\n     * @param protocolTax The amount of tokens burnt as protocol tax\n     * @param curationFees The amount of tokens distributed to the curation pool\n     * @param queryFees The amount of tokens collected as query fees\n     * @param queryRebates The amount of tokens distributed to the indexer\n     * @param delegationRewards The amount of tokens collected from 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 Emitted when `indexer` was slashed for a total of `tokens` amount.\n     * Tracks `reward` amount of tokens given to `beneficiary`.\n     * @param indexer The indexer address\n     * @param tokens The amount of tokens slashed\n     * @param reward The amount of reward tokens to send to a beneficiary\n     * @param beneficiary The address of a beneficiary to receive a reward for the slashing\n     */\n    event StakeSlashed(address indexed indexer, uint256 tokens, uint256 reward, address beneficiary);\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 and rebate query fees to the indexer\n     * This function will accept calls with zero tokens.\n     * We use an exponential rebate formula to calculate the amount of tokens to rebate to the indexer.\n     * This implementation allows collecting multiple times on the same allocation, keeping track of the\n     * total amount rebated, the total amount collected and compensating the indexer for the difference.\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 Slash the indexer stake. Delegated tokens are not subject to slashing.\n     * Note that depending on the state of the indexer's stake, the slashed amount might be smaller than the\n     * requested slash amount. This can happen if the indexer has moved a significant part of their stake to\n     * a provision. Any outstanding slashing amount should be settled using Horizon's slash function\n     * {IHorizonStaking.slash}.\n     * @dev Can only be called by the slasher role.\n     * @param indexer Address of indexer to slash\n     * @param tokens Amount of tokens to slash from the indexer stake\n     * @param reward Amount of reward tokens to send to a beneficiary\n     * @param beneficiary Address of a beneficiary to receive a reward for the slashing\n     */\n    function legacySlash(address indexer, uint256 tokens, uint256 reward, address beneficiary) external;\n\n    /**\n     * @notice (Legacy) Return true if operator is allowed for the service provider on the subgraph data service.\n     * @param operator Address of the operator\n     * @param indexer Address of the service provider\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     * Deprecated, now enforced by each data service (verifier)\n     * @return Thawing period in blocks\n     */\n    function __DEPRECATED_getThawingPeriod() external view returns (uint64);\n\n    /**\n     * @notice Return the address of the subgraph data service.\n     * @dev TRANSITION PERIOD: After transition period move to main HorizonStaking contract\n     * @return Address of the subgraph data service\n     */\n    function getSubgraphService() external view returns (address);\n}\n"},"contracts/horizon/internal/IHorizonStakingMain.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IGraphPayments } from \"../IGraphPayments.sol\";\nimport { IHorizonStakingTypes } from \"./IHorizonStakingTypes.sol\";\n\n/**\n * @title Inferface for the {HorizonStaking} contract.\n * @author Edge & Node\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 * @dev TRANSITION PERIOD: After transition period rename to IHorizonStaking.\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 */\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 now locked (including previously locked tokens)\n     * @param until The block number until the stake is locked\n     */\n    event HorizonStakeLocked(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 HorizonStakeWithdrawn(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     * @notice 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     * @param shares The amount of shares delegated\n     */\n    event TokensDelegated(\n        address indexed serviceProvider,\n        address indexed verifier,\n        address indexed delegator,\n        uint256 tokens,\n        uint256 shares\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     * @param shares The amount of shares undelegated\n     */\n    event TokensUndelegated(\n        address indexed serviceProvider,\n        address indexed verifier,\n        address indexed delegator,\n        uint256 tokens,\n        uint256 shares\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 `delegator` withdrew delegated `tokens` from `indexer` using `withdrawDelegated`.\n     * @dev This event is for the legacy `withdrawDelegated` function.\n     * @param indexer The address of the indexer\n     * @param delegator The address of the delegator\n     * @param tokens The amount of tokens withdrawn\n     */\n    event StakeDelegatedWithdrawn(address indexed indexer, address indexed delegator, uint256 tokens);\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 requestType The type of thaw request\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     * @param nonce The nonce of the thaw request\n     */\n    event ThawRequestCreated(\n        IHorizonStakingTypes.ThawRequestType indexed requestType,\n        address indexed serviceProvider,\n        address indexed verifier,\n        address owner,\n        uint256 shares,\n        uint64 thawingUntil,\n        bytes32 thawRequestId,\n        uint256 nonce\n    );\n\n    /**\n     * @notice Emitted when a thaw request is fulfilled, meaning the stake is released.\n     * @param requestType The type of thaw request\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        IHorizonStakingTypes.ThawRequestType indexed requestType,\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 requestType The type of thaw request\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        IHorizonStakingTypes.ThawRequestType indexed requestType,\n        address indexed serviceProvider,\n        address indexed verifier,\n        address 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     */\n    event DelegationSlashingEnabled();\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 a verifier other than the\n     * subgraph data service. This restriction only applies during the transition period.\n     * @param verifier The verifier address\n     */\n    error HorizonStakingInvalidVerifier(address verifier);\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 the minimum token amount required for delegation is not met.\n     * @param tokens The actual token amount\n     * @param minTokens The minimum required token amount\n     */\n    error HorizonStakingInsufficientDelegationTokens(uint256 tokens, uint256 minTokens);\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    /**\n     * @notice Thrown when attempting to fulfill a thaw request but there is nothing thawing.\n     */\n    error HorizonStakingNothingThawing();\n\n    /**\n     * @notice Thrown when a service provider has too many thaw requests.\n     */\n    error HorizonStakingTooManyThawRequests();\n\n    /**\n     * @notice Thrown when attempting to withdraw tokens that have not thawed (legacy undelegate).\n     */\n    error HorizonStakingNothingToWithdraw();\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     * @param verifier The verifier address\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    /**\n     * @notice Thrown when a legacy slash fails.\n     */\n    error HorizonStakingLegacySlashFailed();\n\n    /**\n     * @notice Thrown when there attempting to slash a provision with no tokens to slash.\n     */\n    error HorizonStakingNoTokensToSlash();\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 {HorizonStakeDeposited} 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 {HorizonStakeDeposited} 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    /**\n     * @notice Deposit tokens on the service provider stake, on behalf of the service provider,\n     * provisioned to a specific verifier.\n     * @dev This function can be called by the service provider, by an authorized operator or by the verifier itself.\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 {HorizonStakeDeposited} 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     * Note that after the transition period if there are tokens still locked they will have to be\n     * withdrawn by calling {withdraw}.\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 {HorizonStakeLocked} event during the transition period.\n     * Emits a {HorizonStakeWithdrawn} 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 During the transition period, only the subgraph data service can be used as a verifier. This\n     * prevents an escape hatch for legacy allocation stake.\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. Otherwise, the function\n     * will attempt to fulfill all thaw requests until the first one that is not yet expired is found.\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}. Calling this function is a no-op if the new parameters are the same as the current\n     * ones.\n     * @dev This two step update process prevents the service provider from changing the parameters\n     * without the verifier's consent.\n     *\n     * Requirements:\n     * - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. Note that if `_maxThawingPeriod` changes the\n     * function will not revert if called with the same thawing period as the current one.\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 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. Otherwise, the function\n     * will attempt to fulfill all thaw requests until the first one that is not yet expired is found.\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 tokens undelegated before horizon upgrade.\n     * @dev See {delegate}.\n     * @param serviceProvider The service provider address\n     * @param deprecated Deprecated parameter kept for backwards compatibility\n     * @return The amount of tokens withdrawn\n     */\n    function withdrawDelegated(\n        address serviceProvider,\n        address deprecated // kept for backwards compatibility\n    ) external returns (uint256);\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    /**\n     * @notice Get the address of the staking extension.\n     * @return The address of the staking extension\n     */\n    function getStakingExtension() external view returns (address);\n}\n"},"contracts/horizon/internal/IHorizonStakingTypes.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\n/**\n * @title Defines the data types used in the Horizon staking contract\n * @author Edge & Node\n * @notice Interface defining data types and structures for Horizon staking\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 * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\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     * @param tokens Service provider tokens in the provision (does not include delegated tokens)\n     * @param tokensThawing Service provider tokens that are being thawed (and will stop being slashable soon)\n     * @param sharesThawing Shares representing the thawing tokens\n     * @param maxVerifierCut Max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed\n     * @param thawingPeriod Time, in seconds, tokens must thaw before being withdrawn\n     * @param createdAt Timestamp when the provision was created\n     * @param maxVerifierCutPending Pending value for `maxVerifierCut`. Verifier needs to accept it before it becomes active.\n     * @param thawingPeriodPending Pending value for `thawingPeriod`. Verifier needs to accept it before it becomes active.\n     * @param lastParametersStagedAt Timestamp when the provision parameters were last staged. Can be used by data service implementation to\n     * implement arbitrary parameter update logic.\n     * @param thawingNonce Value of the current thawing nonce. Thaw requests with older nonces are invalid.\n     */\n    struct Provision {\n        uint256 tokens;\n        uint256 tokensThawing;\n        uint256 sharesThawing;\n        uint32 maxVerifierCut;\n        uint64 thawingPeriod;\n        uint64 createdAt;\n        uint32 maxVerifierCutPending;\n        uint64 thawingPeriodPending;\n        uint256 lastParametersStagedAt;\n        uint256 thawingNonce;\n    }\n\n    /**\n     * @notice Public representation of a service provider.\n     * @dev See {ServiceProviderInternal} for the actual storage representation\n     * @param tokensStaked Total amount of tokens on the provider stake (only staked by the provider, includes all provisions)\n     * @param tokensProvisioned Total amount of tokens locked in provisions (only staked by the provider)\n     */\n    struct ServiceProvider {\n        uint256 tokensStaked;\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     * @param tokensStaked Total amount of tokens on the provider stake (only staked by the provider, includes all provisions)\n     * @param __DEPRECATED_tokensAllocated (Deprecated) Tokens used in allocations\n     * @param __DEPRECATED_tokensLocked (Deprecated) Tokens locked for withdrawal subject to thawing period\n     * @param __DEPRECATED_tokensLockedUntil (Deprecated) Block when locked tokens can be withdrawn\n     * @param tokensProvisioned Total amount of tokens locked in provisions (only staked by the provider)\n     */\n    struct ServiceProviderInternal {\n        uint256 tokensStaked;\n        uint256 __DEPRECATED_tokensAllocated;\n        uint256 __DEPRECATED_tokensLocked;\n        uint256 __DEPRECATED_tokensLockedUntil;\n        uint256 tokensProvisioned;\n    }\n\n    /**\n     * @notice Public representation of a delegation pool.\n     * @dev See {DelegationPoolInternal} for the actual storage representation\n     * @param tokens Total tokens as pool reserves\n     * @param shares Total shares minted in the pool\n     * @param tokensThawing Tokens thawing in the pool\n     * @param sharesThawing Shares representing the thawing tokens\n     * @param thawingNonce Value of the current thawing nonce. Thaw requests with older nonces are invalid.\n     */\n    struct DelegationPool {\n        uint256 tokens;\n        uint256 shares;\n        uint256 tokensThawing;\n        uint256 sharesThawing;\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     * @param __DEPRECATED_cooldownBlocks (Deprecated) Time, in blocks, an indexer must wait before updating delegation parameters\n     * @param __DEPRECATED_indexingRewardCut (Deprecated) Percentage of indexing rewards for the service provider, in PPM\n     * @param __DEPRECATED_queryFeeCut (Deprecated) Percentage of query fees for the service provider, in PPM\n     * @param __DEPRECATED_updatedAtBlock (Deprecated) Block when the delegation parameters were last updated\n     * @param tokens Total tokens as pool reserves\n     * @param shares Total shares minted in the pool\n     * @param delegators Delegation details by delegator\n     * @param tokensThawing Tokens thawing in the pool\n     * @param sharesThawing Shares representing the thawing tokens\n     * @param thawingNonce Value of the current thawing nonce. Thaw requests with older nonces are invalid.\n     */\n    struct DelegationPoolInternal {\n        uint32 __DEPRECATED_cooldownBlocks;\n        uint32 __DEPRECATED_indexingRewardCut;\n        uint32 __DEPRECATED_queryFeeCut;\n        uint256 __DEPRECATED_updatedAtBlock;\n        uint256 tokens;\n        uint256 shares;\n        mapping(address delegator => DelegationInternal delegation) delegators;\n        uint256 tokensThawing;\n        uint256 sharesThawing;\n        uint256 thawingNonce;\n    }\n\n    /**\n     * @notice Public representation of delegation details.\n     * @dev See {DelegationInternal} for the actual storage representation\n     * @param shares Shares owned by a delegator in the pool\n     */\n    struct Delegation {\n        uint256 shares;\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     * @param shares Shares owned by the delegator in the pool\n     * @param __DEPRECATED_tokensLocked Tokens locked for undelegation\n     * @param __DEPRECATED_tokensLockedUntil Epoch when locked tokens can be withdrawn\n     */\n    struct DelegationInternal {\n        uint256 shares;\n        uint256 __DEPRECATED_tokensLocked;\n        uint256 __DEPRECATED_tokensLockedUntil;\n    }\n\n    /**\n     * @dev Enum to specify the type of thaw request.\n     * @param Provision Represents a thaw request for a provision.\n     * @param Delegation Represents a thaw request for a delegation.\n     */\n    enum ThawRequestType {\n        Provision,\n        Delegation\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     * @param shares Shares that represent the tokens being thawed\n     * @param thawingUntil The timestamp when the thawed funds can be removed from the provision\n     * @param nextRequest Id of the next thaw request in the linked list\n     * @param thawingNonce Used to invalidate unfulfilled thaw requests\n     */\n    struct ThawRequest {\n        uint256 shares;\n        uint64 thawingUntil;\n        bytes32 nextRequest;\n        uint256 thawingNonce;\n    }\n\n    /**\n     * @notice Parameters to fulfill thaw requests.\n     * @dev This struct is used to avoid stack too deep error in the `fulfillThawRequests` function.\n     * @param requestType The type of thaw request (Provision or Delegation)\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 tokensThawing The current amount of tokens already thawing\n     * @param sharesThawing The current amount of shares already thawing\n     * @param nThawRequests The number of thaw requests to fulfill. If set to 0, all thaw requests are fulfilled.\n     * @param thawingNonce The current valid thawing nonce. Any thaw request with a different nonce is invalid and should be ignored.\n     */\n    struct FulfillThawRequestsParams {\n        ThawRequestType requestType;\n        address serviceProvider;\n        address verifier;\n        address owner;\n        uint256 tokensThawing;\n        uint256 sharesThawing;\n        uint256 nThawRequests;\n        uint256 thawingNonce;\n    }\n\n    /**\n     * @notice Results of the traversal of thaw requests.\n     * @dev This struct is used to avoid stack too deep error in the `fulfillThawRequests` function.\n     * @param requestsFulfilled The number of thaw requests fulfilled\n     * @param tokensThawed The total amount of tokens thawed\n     * @param tokensThawing The total amount of tokens thawing\n     * @param sharesThawing The total amount of shares thawing\n     */\n    struct TraverseThawRequestsResults {\n        uint256 requestsFulfilled;\n        uint256 tokensThawed;\n        uint256 tokensThawing;\n        uint256 sharesThawing;\n    }\n}\n"},"contracts/horizon/internal/ILinkedList.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\n/**\n * @title Interface for the {LinkedList} library contract.\n * @author Edge & Node\n * @notice Interface for managing linked list data structures\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 */\ninterface ILinkedList {\n    /**\n     * @notice Represents a linked list\n     * @param head The head of the list\n     * @param tail The tail of the list\n     * @param nonce A nonce, which can optionally be used to generate unique ids\n     * @param count The number of items in the list\n     */\n    struct List {\n        bytes32 head;\n        bytes32 tail;\n        uint256 nonce;\n        uint256 count;\n    }\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"},"contracts/horizon/IPaymentsCollector.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\nimport { IGraphPayments } from \"./IGraphPayments.sol\";\n\n/**\n * @title Interface for a payments collector contract as defined by Graph Horizon payments protocol\n * @author Edge & Node\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 * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\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 collectionId The id for the collection. Can be used at the discretion of the collector to group multiple payments.\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 tokens The amount of tokens being collected\n     */\n    event PaymentCollected(\n        IGraphPayments.PaymentTypes paymentType,\n        bytes32 indexed collectionId,\n        address indexed payer,\n        address receiver,\n        address indexed dataService,\n        uint256 tokens\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     *\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     * @return The amount of tokens collected\n     */\n    function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external returns (uint256);\n}\n"},"contracts/horizon/IPaymentsEscrow.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\nimport { IGraphPayments } from \"./IGraphPayments.sol\";\n\n/**\n * @title Interface for the {PaymentsEscrow} contract\n * @author Edge & Node\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 * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\n */\ninterface IPaymentsEscrow {\n    /**\n     * @notice Escrow account for a payer-collector-receiver tuple\n     * @param balance The total token balance for the payer-collector-receiver tuple\n     * @param tokensThawing The amount of tokens currently being thawed\n     * @param thawEndTimestamp The timestamp at which thawing period ends (zero if not thawing)\n     */\n    struct EscrowAccount {\n        uint256 balance;\n        uint256 tokensThawing;\n        uint256 thawEndTimestamp;\n    }\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 collector The address of the collector\n     * @param receiver The address of the receiver\n     * @param tokensThawing The amount of tokens that were being thawed\n     * @param thawEndTimestamp The timestamp at which the thawing period was ending\n     */\n    event CancelThaw(\n        address indexed payer,\n        address indexed collector,\n        address indexed receiver,\n        uint256 tokensThawing,\n        uint256 thawEndTimestamp\n    );\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 paymentType The type of payment being collected as defined in the {IGraphPayments} interface\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     * @param receiverDestination The address where the receiver's payment should be sent.\n     */\n    event EscrowCollected(\n        IGraphPayments.PaymentTypes indexed paymentType,\n        address indexed payer,\n        address indexed collector,\n        address receiver,\n        uint256 tokens,\n        address receiverDestination\n    );\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 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 The maximum thawing period for escrow funds withdrawal\n     * @return The maximum thawing period in seconds\n     */\n    function MAX_WAIT_PERIOD() external view returns (uint256);\n\n    /**\n     * @notice The thawing period for escrow funds withdrawal\n     * @return The thawing period in seconds\n     */\n    function WITHDRAW_ESCROW_THAWING_PERIOD() external view returns (uint256);\n\n    /**\n     * @notice Initialize the contract\n     */\n    function initialize() 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     * 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.\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 Cancels the thawing of escrow from a payer-collector-receiver's escrow account.\n     * @param collector The address of the collector\n     * @param receiver The address of the receiver\n     * @dev Requirements:\n     * - The payer must be thawing funds\n     * Emits a {CancelThaw} event.\n     */\n    function cancelThaw(address collector, address receiver) 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     *\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 dataServiceCut The data service cut in PPM that {GraphPayments} should send\n     * @param receiverDestination The address where the receiver's payment should be sent.\n     */\n    function collect(\n        IGraphPayments.PaymentTypes paymentType,\n        address payer,\n        address receiver,\n        uint256 tokens,\n        address dataService,\n        uint256 dataServiceCut,\n        address receiverDestination\n    ) external;\n\n    /**\n     * @notice Get the balance of a payer-collector-receiver tuple\n     * This function will return 0 if the current balance is less than the amount of funds being thawed.\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     * @return The balance of the payer-collector-receiver tuple\n     */\n    function getBalance(address payer, address collector, address receiver) external view returns (uint256);\n}\n"},"contracts/subgraph-service/IDisputeManager.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IAttestation } from \"./internal/IAttestation.sol\";\n\n/**\n * @title IDisputeManager\n * @author Edge & Node\n * @notice Interface for the {Dispute Manager} 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 */\ninterface IDisputeManager {\n    /// @notice Types of disputes that can be created\n    enum DisputeType {\n        Null,\n        IndexingDispute,\n        QueryDispute,\n        LegacyDispute\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    /**\n     * @notice Dispute details\n     * @param indexer The indexer that is being disputed\n     * @param fisherman The fisherman that created the dispute\n     * @param deposit The amount of tokens deposited by the fisherman\n     * @param relatedDisputeId The link to a related dispute, used when creating dispute via conflicting attestations\n     * @param disputeType The type of dispute\n     * @param status The status of the dispute\n     * @param createdAt The timestamp when the dispute was created\n     * @param cancellableAt The timestamp when the dispute can be cancelled\n     * @param stakeSnapshot The stake snapshot of the indexer at the time of the dispute (includes delegation up to the delegation ratio)\n     */\n    struct Dispute {\n        address indexer;\n        address fisherman;\n        uint256 deposit;\n        bytes32 relatedDisputeId;\n        DisputeType disputeType;\n        DisputeStatus status;\n        uint256 createdAt;\n        uint256 cancellableAt;\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     * @notice 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     * @param disputeId The dispute id\n     * @param indexer The indexer address\n     * @param fisherman The fisherman address\n     * @param tokens The amount of tokens deposited by the fisherman\n     * @param subgraphDeploymentId The subgraph deployment id\n     * @param attestation The attestation\n     * @param stakeSnapshot The stake snapshot of the indexer at the time of the dispute\n     * @param cancellableAt The timestamp when the dispute can be cancelled\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        uint256 cancellableAt\n    );\n\n    /**\n     * @notice 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     * @param disputeId The dispute id\n     * @param indexer The indexer address\n     * @param fisherman The fisherman address\n     * @param tokens The amount of tokens deposited by the fisherman\n     * @param allocationId The allocation id\n     * @param poi The POI\n     * @param blockNumber The block number for which the POI was calculated\n     * @param stakeSnapshot The stake snapshot of the indexer at the time of the dispute\n     * @param cancellableAt The timestamp when the dispute can be cancelled\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 blockNumber,\n        uint256 stakeSnapshot,\n        uint256 cancellableAt\n    );\n\n    /**\n     * @notice Emitted when a legacy dispute is created for `allocationId` and `fisherman`.\n     * The event emits the amount of `tokensSlash` to slash and `tokensRewards` to reward the fisherman.\n     * @param disputeId The dispute id\n     * @param indexer The indexer address\n     * @param fisherman The fisherman address to be credited with the rewards\n     * @param allocationId The allocation id\n     * @param tokensSlash The amount of tokens to slash\n     * @param tokensRewards The amount of tokens to reward the fisherman\n     */\n    event LegacyDisputeCreated(\n        bytes32 indexed disputeId,\n        address indexed indexer,\n        address indexed fisherman,\n        address allocationId,\n        uint256 tokensSlash,\n        uint256 tokensRewards\n    );\n\n    /**\n     * @notice 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     * @param disputeId The dispute id\n     * @param indexer The indexer address\n     * @param fisherman The fisherman address\n     * @param tokens The amount of 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     * @notice Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`.\n     * The event emits the amount `tokens` burned from the fisherman deposit.\n     * @param disputeId The dispute id\n     * @param indexer The indexer address\n     * @param fisherman The fisherman address\n     * @param tokens The amount of 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     * @notice 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     * @param disputeId The dispute id\n     * @param indexer The indexer address\n     * @param fisherman The fisherman address\n     * @param tokens The amount of tokens returned to the fisherman - the deposit\n     */\n    event DisputeDrawn(bytes32 indexed disputeId, address indexed indexer, address indexed fisherman, uint256 tokens);\n\n    /**\n     * @notice 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     * @param disputeId1 The first dispute id\n     * @param disputeId2 The second dispute id\n     */\n    event DisputeLinked(bytes32 indexed disputeId1, bytes32 indexed disputeId2);\n\n    /**\n     * @notice Emitted when a dispute is cancelled by the fisherman.\n     * The event emits the amount `tokens` returned to the fisherman.\n     * @param disputeId The dispute id\n     * @param indexer The indexer address\n     * @param fisherman The fisherman address\n     * @param tokens The amount of tokens returned to the fisherman - the deposit\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    /**\n     * @notice Thrown when the caller is not the arbitrator\n     */\n    error DisputeManagerNotArbitrator();\n\n    /**\n     * @notice Thrown when the caller is not the fisherman\n     */\n    error DisputeManagerNotFisherman();\n\n    /**\n     * @notice Thrown when the address is the zero address\n     */\n    error DisputeManagerInvalidZeroAddress();\n\n    /**\n     * @notice Thrown when the dispute period is zero\n     */\n    error DisputeManagerDisputePeriodZero();\n\n    /**\n     * @notice Thrown when the indexer being disputed has no provisioned tokens\n     */\n    error DisputeManagerZeroTokens();\n\n    /**\n     * @notice Thrown when the dispute id is invalid\n     * @param disputeId The dispute id\n     */\n    error DisputeManagerInvalidDispute(bytes32 disputeId);\n\n    /**\n     * @notice Thrown when the dispute deposit is invalid - less than the minimum dispute deposit\n     * @param disputeDeposit The dispute deposit\n     */\n    error DisputeManagerInvalidDisputeDeposit(uint256 disputeDeposit);\n\n    /**\n     * @notice Thrown when the fisherman reward cut is invalid\n     * @param cut The fisherman reward cut\n     */\n    error DisputeManagerInvalidFishermanReward(uint32 cut);\n\n    /**\n     * @notice Thrown when the max slashing cut is invalid\n     * @param maxSlashingCut The max slashing cut\n     */\n    error DisputeManagerInvalidMaxSlashingCut(uint32 maxSlashingCut);\n\n    /**\n     * @notice Thrown when the tokens slash is invalid\n     * @param tokensSlash The tokens slash\n     * @param maxTokensSlash The max tokens slash\n     */\n    error DisputeManagerInvalidTokensSlash(uint256 tokensSlash, uint256 maxTokensSlash);\n\n    /**\n     * @notice Thrown when the dispute is not pending\n     * @param status The status of the dispute\n     */\n    error DisputeManagerDisputeNotPending(IDisputeManager.DisputeStatus status);\n\n    /**\n     * @notice Thrown when the dispute is already created\n     * @param disputeId The dispute id\n     */\n    error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId);\n\n    /**\n     * @notice Thrown when the dispute period is not finished\n     */\n    error DisputeManagerDisputePeriodNotFinished();\n\n    /**\n     * @notice Thrown when the dispute is in conflict\n     * @param disputeId The dispute id\n     */\n    error DisputeManagerDisputeInConflict(bytes32 disputeId);\n\n    /**\n     * @notice Thrown when the dispute is not in conflict\n     * @param disputeId The dispute id\n     */\n    error DisputeManagerDisputeNotInConflict(bytes32 disputeId);\n\n    /**\n     * @notice Thrown when the dispute must be accepted\n     * @param disputeId The dispute id\n     * @param relatedDisputeId The related dispute id\n     */\n    error DisputeManagerMustAcceptRelatedDispute(bytes32 disputeId, bytes32 relatedDisputeId);\n\n    /**\n     * @notice Thrown when the indexer is not found\n     * @param allocationId The allocation id\n     */\n    error DisputeManagerIndexerNotFound(address allocationId);\n\n    /**\n     * @notice Thrown when the subgraph deployment is not matching\n     * @param subgraphDeploymentId1 The subgraph deployment id of the first attestation\n     * @param subgraphDeploymentId2 The subgraph deployment id of the second attestation\n     */\n    error DisputeManagerNonMatchingSubgraphDeployment(bytes32 subgraphDeploymentId1, bytes32 subgraphDeploymentId2);\n\n    /**\n     * @notice Thrown when the attestations are not conflicting\n     * @param requestCID1 The request CID of the first attestation\n     * @param responseCID1 The response CID of the first attestation\n     * @param subgraphDeploymentId1 The subgraph deployment id of the first attestation\n     * @param requestCID2 The request CID of the second attestation\n     * @param responseCID2 The response CID of the second attestation\n     * @param subgraphDeploymentId2 The subgraph deployment id of the second attestation\n     */\n    error DisputeManagerNonConflictingAttestations(\n        bytes32 requestCID1,\n        bytes32 responseCID1,\n        bytes32 subgraphDeploymentId1,\n        bytes32 requestCID2,\n        bytes32 responseCID2,\n        bytes32 subgraphDeploymentId2\n    );\n\n    /**\n     * @notice Thrown when attempting to get the subgraph service before it is set\n     */\n    error DisputeManagerSubgraphServiceNotSet();\n\n    /**\n     * @notice Initialize this contract.\n     * @param owner The owner of the 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 owner,\n        address arbitrator,\n        uint64 disputePeriod,\n        uint256 disputeDeposit,\n        uint32 fishermanRewardCut_,\n        uint32 maxSlashingCut_\n    ) external;\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;\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;\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;\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;\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;\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;\n\n    // -- Dispute --\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     * @return The dispute id\n     */\n    function createQueryDispute(bytes calldata attestationData) external returns (bytes32);\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     * Two linked disputes will be created and if the arbitrator resolve one, the other\n     * one will be automatically resolved. Note that:\n     * - it's not possible to reject a conflicting query dispute as by definition at least one\n     * of the attestations is incorrect.\n     * - if both attestations are proven to be incorrect, the arbitrator can slash the indexer twice.\n     * Requirements:\n     * - fisherman must have previously approved this contract to pull `disputeDeposit` amount\n     *   of tokens from their balance.\n     * @param attestationData1 First attestation data submitted\n     * @param attestationData2 Second attestation data submitted\n     * @return The first dispute id\n     * @return The second dispute id\n     */\n    function createQueryDisputeConflict(\n        bytes calldata attestationData1,\n        bytes calldata attestationData2\n    ) external returns (bytes32, bytes32);\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     * @param blockNumber The block number for which the POI was calculated\n     * @return The dispute id\n     */\n    function createIndexingDispute(address allocationId, bytes32 poi, uint256 blockNumber) external returns (bytes32);\n\n    /**\n     * @notice Creates and auto-accepts a legacy dispute.\n     * This disputes can be created to settle outstanding slashing amounts with an indexer that has been\n     * \"legacy slashed\" during or shortly after the transition period. See {HorizonStakingExtension.legacySlash}\n     * for more details.\n     *\n     * Note that this type of dispute:\n     * - can only be created by the arbitrator\n     * - does not require a bond\n     * - is automatically accepted when created\n     *\n     * Additionally, note that this type of disputes allow the arbitrator to directly set the slash and rewards\n     * amounts, bypassing the usual mechanisms that impose restrictions on those. This is done to give arbitrators\n     * maximum flexibility to ensure outstanding slashing amounts are settled fairly. This function needs to be removed\n     * after the transition period.\n     *\n     * Requirements:\n     * - Indexer must have been legacy slashed during or shortly after the transition period\n     * - Indexer must have provisioned funds to the Subgraph Service\n     *\n     * @param allocationId The allocation to dispute\n     * @param fisherman The fisherman address to be credited with the rewards\n     * @param tokensSlash The amount of tokens to slash\n     * @param tokensRewards The amount of tokens to reward the fisherman\n     * @return The dispute id\n     */\n    function createAndAcceptLegacyDispute(\n        address allocationId,\n        address fisherman,\n        uint256 tokensSlash,\n        uint256 tokensRewards\n    ) external returns (bytes32);\n\n    // -- Arbitrator --\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     * This function will also revert if the dispute is in conflict, to accept a conflicting dispute\n     * use acceptDisputeConflict.\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(bytes32 disputeId, uint256 tokensSlash) external;\n\n    /**\n     * @notice The arbitrator accepts a conflicting 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.\n     * @param disputeId Id of the dispute to be accepted\n     * @param tokensSlash Amount of tokens to slash from the indexer for the first dispute\n     * @param acceptDisputeInConflict Accept the conflicting dispute. Otherwise it will be drawn automatically\n     * @param tokensSlashRelated Amount of tokens to slash from the indexer for the related dispute in case\n     * acceptDisputeInConflict is true, otherwise it will be ignored\n     */\n    function acceptDisputeConflict(\n        bytes32 disputeId,\n        uint256 tokensSlash,\n        bool acceptDisputeInConflict,\n        uint256 tokensSlashRelated\n    ) external;\n\n    /**\n     * @notice The arbitrator rejects a dispute as being invalid.\n     * Note that conflicting query disputes cannot be rejected.\n     * @dev Reject a dispute with Id `disputeId`\n     * @param disputeId Id of the dispute to be rejected\n     */\n    function rejectDispute(bytes32 disputeId) external;\n\n    /**\n     * @notice The arbitrator draws dispute.\n     * Note that drawing a conflicting query dispute should not be possible however it is allowed\n     * to give arbitrators greater flexibility when resolving disputes.\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;\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     * Note that cancelling a conflicting query dispute will also cancel the related dispute.\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;\n\n    // -- Getters --\n\n    /**\n     * @notice Get the fisherman reward cut.\n     * @return Fisherman reward cut in percentage (ppm)\n     */\n    function getFishermanRewardCut() external view returns (uint32);\n\n    /**\n     * @notice Get the dispute period.\n     * @return Dispute period in seconds\n     */\n    function getDisputePeriod() external view returns (uint64);\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     * @return True if dispute already exists\n     */\n    function isDisputeCreated(bytes32 disputeId) external view returns (bool);\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(IAttestation.Receipt memory receipt) external view returns (bytes32);\n\n    /**\n     * @notice Returns the indexer that signed an attestation.\n     * @param attestation Attestation\n     * @return indexer address\n     */\n    function getAttestationIndexer(IAttestation.State memory attestation) external view returns (address);\n\n    /**\n     * @notice Get the stake snapshot for an indexer.\n     * @param indexer The indexer address\n     * @return The stake snapshot\n     */\n    function getStakeSnapshot(address indexer) external view returns (uint256);\n\n    /**\n     * @notice Checks if two attestations are conflicting\n     * @param attestation1 The first attestation\n     * @param attestation2 The second attestation\n     * @return Whether the attestations are conflicting\n     */\n    function areConflictingAttestations(\n        IAttestation.State memory attestation1,\n        IAttestation.State memory attestation2\n    ) external pure returns (bool);\n}\n"},"contracts/subgraph-service/internal/IAllocation.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\n/**\n * @title Interface for the {Allocation} library contract.\n * @author Edge & Node\n * @notice Interface for managing allocation data and operations\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 */\ninterface IAllocation {\n    /**\n     * @notice Allocation details\n     * @param indexer The indexer that owns the allocation\n     * @param subgraphDeploymentId The subgraph deployment id the allocation is for\n     * @param tokens The number of tokens allocated\n     * @param createdAt The timestamp when the allocation was created\n     * @param closedAt The timestamp when the allocation was closed\n     * @param lastPOIPresentedAt The timestamp when the last POI was presented\n     * @param accRewardsPerAllocatedToken The accumulated rewards per allocated token\n     * @param accRewardsPending The accumulated rewards that are pending to be claimed due allocation resize\n     * @param createdAtEpoch The epoch when the allocation was created\n     */\n    struct State {\n        address indexer;\n        bytes32 subgraphDeploymentId;\n        uint256 tokens;\n        uint256 createdAt;\n        uint256 closedAt;\n        uint256 lastPOIPresentedAt;\n        uint256 accRewardsPerAllocatedToken;\n        uint256 accRewardsPending;\n        uint256 createdAtEpoch;\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"},"contracts/subgraph-service/internal/IAttestation.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\n/**\n * @title Interface for the {Attestation} library contract.\n * @author Edge & Node\n * @notice Interface for managing attestation data and verification\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 */\ninterface IAttestation {\n    /**\n     * @notice Receipt content sent from the service provider in response to request\n     * @param requestCID The request CID\n     * @param responseCID The response CID\n     * @param subgraphDeploymentId The subgraph deployment id\n     */\n    struct Receipt {\n        bytes32 requestCID;\n        bytes32 responseCID;\n        bytes32 subgraphDeploymentId;\n    }\n\n    /**\n     * @notice Attestation sent from the service provider in response to a request\n     * @param requestCID The request CID\n     * @param responseCID The response CID\n     * @param subgraphDeploymentId The subgraph deployment id\n     * @param r The r value of the signature\n     * @param s The s value of the signature\n     * @param v The v value of the signature\n     */\n    struct State {\n        bytes32 requestCID;\n        bytes32 responseCID;\n        bytes32 subgraphDeploymentId;\n        bytes32 r;\n        bytes32 s;\n        uint8 v;\n    }\n\n    /**\n     * @notice The error thrown when the attestation data length is invalid\n     * @param length The length of the attestation data\n     * @param expectedLength The expected length of the attestation data\n     */\n    error AttestationInvalidBytesLength(uint256 length, uint256 expectedLength);\n}\n"},"contracts/subgraph-service/internal/ILegacyAllocation.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.8.22;\n\n/**\n * @title Interface for the {LegacyAllocation} library contract.\n * @author Edge & Node\n * @notice Interface for managing legacy allocation data\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 */\ninterface ILegacyAllocation {\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     * @param indexer The indexer that owns the allocation\n     * @param subgraphDeploymentId The subgraph deployment id the allocation is for\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 LegacyAllocationAlreadyExists(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"},"contracts/subgraph-service/ISubgraphService.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IDataServiceFees } from \"../data-service/IDataServiceFees.sol\";\nimport { IGraphPayments } from \"../horizon/IGraphPayments.sol\";\n\nimport { IAllocation } from \"./internal/IAllocation.sol\";\nimport { ILegacyAllocation } from \"./internal/ILegacyAllocation.sol\";\n\n/**\n * @title Interface for the {SubgraphService} contract\n * @author Edge & Node\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 * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\n */\ninterface ISubgraphService is IDataServiceFees {\n    /**\n     * @notice Indexer details\n     * @param url The URL where the indexer can be reached at for queries\n     * @param geoHash The indexer's geo location, expressed as a geo hash\n     */\n    struct Indexer {\n        string url;\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 payer The address paying for the query fees\n     * @param allocationId The id of the allocation\n     * @param subgraphDeploymentId The id of the subgraph deployment\n     * @param tokensCollected The amount of tokens collected\n     * @param tokensCurators The amount of tokens curators receive\n     */\n    event QueryFeesCollected(\n        address indexed serviceProvider,\n        address indexed payer,\n        address indexed allocationId,\n        bytes32 subgraphDeploymentId,\n        uint256 tokensCollected,\n        uint256 tokensCurators\n    );\n\n    /**\n     * @notice Emitted when an indexer sets a new payments destination\n     * @param indexer The address of the indexer\n     * @param paymentsDestination The address where payments should be sent\n     */\n    event PaymentsDestinationSet(address indexed indexer, address indexed paymentsDestination);\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     * @notice 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 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 after collecting from Graph Payments\n     * @param balanceBefore The contract GRT balance before the collection\n     * @param balanceAfter The contract GRT balance after the collection\n     */\n    error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter);\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 Thrown when collectionId is not a valid address\n     * @param collectionId The collectionId\n     */\n    error SubgraphServiceInvalidCollectionId(bytes32 collectionId);\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 owner The owner of the contract\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        address owner,\n        uint256 minimumProvisionTokens,\n        uint32 maximumDelegationRatio,\n        uint256 stakeToFeesRatio\n    ) external;\n\n    /**\n     * @notice Force close a stale allocation\n     * @dev This function can be permissionlessly called when the allocation is stale. This\n     * ensures that rewards for other allocations are not diluted by an inactive allocation.\n     *\n     * Requirements:\n     * - Allocation must exist and be open\n     * - Allocation must be stale\n     * - Allocation cannot be altruistic\n     *\n     * Emits a {AllocationClosed} event.\n     *\n     * @param allocationId The id of the allocation\n     */\n    function closeStaleAllocation(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 payments destination for an indexer to receive payments\n     * @dev Emits a {PaymentsDestinationSet} event\n     * @param paymentsDestination The address where payments should be sent\n     */\n    function setPaymentsDestination(address paymentsDestination) 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     * @return The allocation details\n     */\n    function getAllocation(address allocationId) external view returns (IAllocation.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     * @return The legacy allocation details\n     */\n    function getLegacyAllocation(address allocationId) external view returns (ILegacyAllocation.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     * @return The encoded allocation proof\n     */\n    function encodeAllocationProof(address indexer, address allocationId) external view returns (bytes32);\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    /**\n     * @notice Gets the address of the dispute manager\n     * @return The address of the dispute manager\n     */\n    function getDisputeManager() external view returns (address);\n\n    /**\n     * @notice Gets the address of the graph tally collector\n     * @return The address of the graph tally collector\n     */\n    function getGraphTallyCollector() external view returns (address);\n\n    /**\n     * @notice Gets the address of the curation contract\n     * @return The address of the curation contract\n     */\n    function getCuration() external view returns (address);\n}\n"},"contracts/token-distribution/IGraphTokenLockWallet.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\n/**\n * @title IGraphTokenLockWallet\n * @author Edge & Node\n * @notice Interface for the GraphTokenLockWallet contract that manages locked tokens with vesting schedules\n * @dev This interface includes core vesting functionality. Protocol interaction functions are in IGraphTokenLockWalletToolshed\n */\ninterface IGraphTokenLockWallet {\n    /**\n     * @notice Revocability status for a vesting contract\n     */\n    enum Revocability {\n        NotSet,\n        Enabled,\n        Disabled\n    }\n\n    // Events\n\n    /// @notice Emitted when the manager is updated\n    /// @param _oldManager The previous manager address\n    /// @param _newManager The new manager address\n    event ManagerUpdated(address indexed _oldManager, address indexed _newManager);\n\n    /// @notice Emitted when ownership is transferred\n    /// @param previousOwner The previous owner address\n    /// @param newOwner The new owner address\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /// @notice Emitted when token destinations are approved\n    event TokenDestinationsApproved();\n\n    /// @notice Emitted when token destinations are revoked\n    event TokenDestinationsRevoked();\n\n    /// @notice Emitted when tokens are released to beneficiary\n    /// @param beneficiary The beneficiary address\n    /// @param amount The amount of tokens released\n    event TokensReleased(address indexed beneficiary, uint256 amount);\n\n    /// @notice Emitted when tokens are revoked\n    /// @param beneficiary The beneficiary address\n    /// @param amount The amount of tokens revoked\n    event TokensRevoked(address indexed beneficiary, uint256 amount);\n\n    /// @notice Emitted when tokens are withdrawn\n    /// @param beneficiary The beneficiary address\n    /// @param amount The amount of tokens withdrawn\n    event TokensWithdrawn(address indexed beneficiary, uint256 amount);\n\n    // View functions - Vesting Details\n\n    /// @notice Get the beneficiary address\n    /// @return The beneficiary address\n    function beneficiary() external view returns (address);\n\n    /// @notice Get the token contract address\n    /// @return The token contract address\n    function token() external view returns (address);\n\n    /// @notice Get the total amount of tokens managed by this contract\n    /// @return The managed token amount\n    function managedAmount() external view returns (uint256);\n\n    /// @notice Get the vesting start time\n    /// @return The start time timestamp\n    function startTime() external view returns (uint256);\n\n    /// @notice Get the vesting end time\n    /// @return The end time timestamp\n    function endTime() external view returns (uint256);\n\n    /// @notice Get the number of vesting periods\n    /// @return The number of periods\n    function periods() external view returns (uint256);\n\n    /// @notice Get the release start time\n    /// @return The release start time timestamp\n    function releaseStartTime() external view returns (uint256);\n\n    /// @notice Get the vesting cliff time\n    /// @return The cliff time timestamp\n    function vestingCliffTime() external view returns (uint256);\n\n    /// @notice Get the revocability status\n    /// @return The revocability status\n    function revocable() external view returns (Revocability);\n\n    /// @notice Check if the vesting has been revoked\n    /// @return True if revoked, false otherwise\n    function isRevoked() external view returns (bool);\n\n    // View functions - Vesting Calculations\n\n    /// @notice Get the current timestamp\n    /// @return The current timestamp\n    function currentTime() external view returns (uint256);\n\n    /// @notice Get the total vesting duration\n    /// @return The duration in seconds\n    function duration() external view returns (uint256);\n\n    /// @notice Get the time elapsed since vesting start\n    /// @return The elapsed time in seconds\n    function sinceStartTime() external view returns (uint256);\n\n    /// @notice Get the amount of tokens released per period\n    /// @return The amount per period\n    function amountPerPeriod() external view returns (uint256);\n\n    /// @notice Get the duration of each vesting period\n    /// @return The period duration in seconds\n    function periodDuration() external view returns (uint256);\n\n    /// @notice Get the current vesting period\n    /// @return The current period number\n    function currentPeriod() external view returns (uint256);\n\n    /// @notice Get the number of periods that have passed\n    /// @return The number of passed periods\n    function passedPeriods() external view returns (uint256);\n\n    // View functions - Token Amounts\n\n    /// @notice Get the amount of tokens that can be released\n    /// @return The releasable token amount\n    function releasableAmount() external view returns (uint256);\n\n    /// @notice Get the amount of tokens that have vested\n    /// @return The vested token amount\n    function vestedAmount() external view returns (uint256);\n\n    /// @notice Get the amount of tokens that have been released\n    /// @return The released token amount\n    function releasedAmount() external view returns (uint256);\n\n    /// @notice Get the amount of tokens that have been used\n    /// @return The used token amount\n    function usedAmount() external view returns (uint256);\n\n    /// @notice Get the current token balance of the contract\n    /// @return The current balance\n    function currentBalance() external view returns (uint256);\n\n    /// @notice Get the surplus amount of tokens\n    /// @return The surplus token amount\n    function surplusAmount() external view returns (uint256);\n\n    /// @notice Get the total outstanding token amount\n    /// @return The total outstanding amount\n    function totalOutstandingAmount() external view returns (uint256);\n\n    // State-changing functions\n\n    /// @notice Release vested tokens to the beneficiary\n    function release() external;\n\n    /// @notice Withdraw surplus tokens\n    /// @param _amount The amount of surplus tokens to withdraw\n    function withdrawSurplus(uint256 _amount) external;\n\n    /// @notice Approve protocol interactions\n    function approveProtocol() external;\n\n    /// @notice Revoke protocol interactions\n    function revokeProtocol() external;\n\n    // Fallback for forwarding calls\n\n    /// @notice Fallback function for forwarding calls\n    fallback() external payable;\n}\n"},"contracts/toolshed/IControllerToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\n\n// solhint-disable use-natspec\n\nimport { IController } from \"../contracts/governance/IController.sol\";\nimport { IGoverned } from \"../contracts/governance/IGoverned.sol\";\n\ninterface IControllerToolshed is IController, IGoverned {}\n"},"contracts/toolshed/IDisputeManagerToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.8.22;\n\n// solhint-disable use-natspec\n\nimport { IDisputeManager } from \"../subgraph-service/IDisputeManager.sol\";\nimport { IOwnable } from \"./internal/IOwnable.sol\";\n\ninterface IDisputeManagerToolshed is IDisputeManager, IOwnable {\n    /**\n     * @notice Get the dispute period.\n     * @return Dispute period in seconds\n     */\n    function disputePeriod() external view returns (uint64);\n\n    /**\n     * @notice Get the fisherman reward cut.\n     * @return Fisherman reward cut in percentage (ppm)\n     */\n    function fishermanRewardCut() external view returns (uint32);\n\n    /**\n     * @notice Get the maximum percentage that can be used for slashing indexers.\n     * @return Max percentage slashing for disputes\n     */\n    function maxSlashingCut() external view returns (uint32);\n\n    /**\n     * @notice Get the dispute deposit.\n     * @return Dispute deposit\n     */\n    function disputeDeposit() external view returns (uint256);\n\n    /**\n     * @notice Get the subgraph service address.\n     * @return Subgraph service address\n     */\n    function subgraphService() external view returns (address);\n\n    /**\n     * @notice Get the arbitrator address.\n     * @return Arbitrator address\n     */\n    function arbitrator() external view returns (address);\n\n    /**\n     * @notice Get the dispute status.\n     * @param disputeId The dispute ID\n     * @return Dispute status\n     */\n    function disputes(bytes32 disputeId) external view returns (IDisputeManager.Dispute memory);\n}\n"},"contracts/toolshed/IEpochManagerToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\n\n// solhint-disable use-natspec\n\nimport { IEpochManager } from \"../contracts/epochs/IEpochManager.sol\";\n\ninterface IEpochManagerToolshed is IEpochManager {\n    function epochLength() external view returns (uint256);\n}\n"},"contracts/toolshed/IGraphTallyCollectorToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// solhint-disable use-natspec\n\nimport { IGraphTallyCollector } from \"../horizon/IGraphTallyCollector.sol\";\n\ninterface IGraphTallyCollectorToolshed is IGraphTallyCollector {\n    function authorizations(address signer) external view returns (Authorization memory);\n    function tokensCollected(\n        address serviceProvider,\n        bytes32 collectionId,\n        address receiver,\n        address payer\n    ) external view returns (uint256);\n}\n"},"contracts/toolshed/IGraphTokenLockWalletToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\n\n// solhint-disable use-natspec\n\nimport { IGraphTokenLockWallet } from \"../token-distribution/IGraphTokenLockWallet.sol\";\nimport { IGraphPayments } from \"../horizon/IGraphPayments.sol\";\n\n/**\n * @title IGraphTokenLockWalletToolshed\n * @author Edge & Node\n * @notice Extended interface for GraphTokenLockWallet that includes Horizon protocol interaction functions\n * @dev Functions included are based on the GraphTokenLockManager whitelist for vesting contracts on Horizon\n */\ninterface IGraphTokenLockWalletToolshed is IGraphTokenLockWallet {\n    // === STAKE MANAGEMENT ===\n    function stake(uint256 tokens) external;\n    function unstake(uint256 tokens) external;\n    function withdraw() external;\n\n    // === PROVISION MANAGEMENT ===\n    function provisionLocked(\n        address serviceProvider,\n        address verifier,\n        uint256 tokens,\n        uint32 maxVerifierCut,\n        uint64 thawingPeriod\n    ) external;\n    function thaw(address serviceProvider, address verifier, uint256 tokens) external;\n    function deprovision(address serviceProvider, address verifier, uint256 nThawRequests) external;\n\n    // === PROVISION CONFIGURATION ===\n    function setOperatorLocked(address verifier, address operator, bool allowed) external;\n    function setDelegationFeeCut(\n        address serviceProvider,\n        address verifier,\n        IGraphPayments.PaymentTypes paymentType,\n        uint256 feeCut\n    ) external;\n    function setRewardsDestination(address serviceProvider, address rewardsDestination) external;\n\n    // === DELEGATION MANAGEMENT ===\n    function delegate(address serviceProvider, uint256 tokens) external;\n    function undelegate(address serviceProvider, uint256 shares) external;\n    function withdrawDelegated(address serviceProvider, address verifier, uint256 nThawRequests) external;\n\n    // === LEGACY DELEGATION MANAGEMENT ===\n    function withdrawDelegated(address indexer, address __DEPRECATED_delegateToIndexer) external;\n}\n"},"contracts/toolshed/IHorizonStakingToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\n\n// solhint-disable use-natspec\n\nimport { IHorizonStaking } from \"../horizon/IHorizonStaking.sol\";\nimport { IMulticall } from \"../contracts/base/IMulticall.sol\";\n\ninterface IHorizonStakingToolshed is IHorizonStaking, IMulticall {}\n"},"contracts/toolshed/IL2CurationToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\n\n// solhint-disable use-natspec\n\nimport { ICuration } from \"../contracts/curation/ICuration.sol\";\nimport { IL2Curation } from \"../contracts/l2/curation/IL2Curation.sol\";\n\ninterface IL2CurationToolshed is ICuration, IL2Curation {\n    function subgraphService() external view returns (address);\n}\n"},"contracts/toolshed/IL2GNSToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\npragma abicoder v2;\n\n// solhint-disable use-natspec\n\nimport { IGNS } from \"../contracts/discovery/IGNS.sol\";\nimport { IL2GNS } from \"../contracts/l2/discovery/IL2GNS.sol\";\nimport { IMulticall } from \"../contracts/base/IMulticall.sol\";\n\ninterface IL2GNSToolshed is IGNS, IL2GNS, IMulticall {\n    function nextAccountSeqID(address account) external view returns (uint256);\n    function subgraphNFT() external view returns (address);\n}\n"},"contracts/toolshed/internal/IAllocationManager.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// solhint-disable use-natspec\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\ninterface IAllocationManager {\n    // Events\n    event AllocationCreated(\n        address indexed indexer,\n        address indexed allocationId,\n        bytes32 indexed subgraphDeploymentId,\n        uint256 tokens,\n        uint256 currentEpoch\n    );\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        bytes poiMetadata,\n        uint256 currentEpoch\n    );\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    event AllocationClosed(\n        address indexed indexer,\n        address indexed allocationId,\n        bytes32 indexed subgraphDeploymentId,\n        uint256 tokens,\n        bool forceClosed\n    );\n\n    event LegacyAllocationMigrated(\n        address indexed indexer,\n        address indexed allocationId,\n        bytes32 indexed subgraphDeploymentId\n    );\n\n    event MaxPOIStalenessSet(uint256 maxPOIStaleness);\n\n    // Errors\n    error AllocationManagerInvalidAllocationProof(address signer, address allocationId);\n    error AllocationManagerInvalidZeroAllocationId();\n    error AllocationManagerAllocationClosed(address allocationId);\n    error AllocationManagerAllocationSameSize(address allocationId, uint256 tokens);\n}\n"},"contracts/toolshed/internal/IOwnable.sol":{"content":"// SPDX-License-Identifier: MIT\n// solhint-disable use-natspec\n\npragma solidity ^0.8.22;\n\n/// @title IOwnable\n/// @notice Interface for Ownable contracts\ninterface IOwnable {\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /// @notice Returns the address of the current owner\n    function owner() external view returns (address);\n\n    /// @notice Leaves the contract without an owner\n    function renounceOwnership() external;\n\n    /// @notice Transfers ownership of the contract to a new account\n    /// @param newOwner The address of the new owner\n    function transferOwnership(address newOwner) external;\n}\n"},"contracts/toolshed/internal/IPausable.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.22;\n\n// solhint-disable use-natspec\n\n/// @title IPausable\n/// @notice Interface for Pausable contract\ninterface IPausable {\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    /// @notice Returns true if the contract is paused, and false otherwise\n    function paused() external view returns (bool);\n}\n"},"contracts/toolshed/internal/IProvisionManager.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// solhint-disable use-natspec\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\ninterface IProvisionManager {\n    // Events\n    event ProvisionTokensRangeSet(uint256 min, uint256 max);\n    event DelegationRatioSet(uint32 ratio);\n    event VerifierCutRangeSet(uint32 min, uint32 max);\n    event ThawingPeriodRangeSet(uint64 min, uint64 max);\n\n    // Errors\n    error ProvisionManagerInvalidValue(bytes message, uint256 value, uint256 min, uint256 max);\n    error ProvisionManagerInvalidRange(uint256 min, uint256 max);\n    error ProvisionManagerNotAuthorized(address serviceProvider, address caller);\n    error ProvisionManagerProvisionNotFound(address serviceProvider);\n}\n"},"contracts/toolshed/internal/IProvisionTracker.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n// solhint-disable use-natspec\n\npragma solidity ^0.8.22;\n\ninterface IProvisionTracker {\n    // Errors\n    error ProvisionTrackerInsufficientTokens(uint256 tokensAvailable, uint256 tokensRequired);\n\n    /**\n     * @notice Gets the fees provision tracker\n     * @param indexer The address of the indexer\n     * @return The fees provision tracker\n     */\n    function feesProvisionTracker(address indexer) external view returns (uint256);\n}\n"},"contracts/toolshed/IPaymentsEscrowToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// solhint-disable use-natspec\n\nimport { IPaymentsEscrow } from \"../horizon/IPaymentsEscrow.sol\";\n\ninterface IPaymentsEscrowToolshed is IPaymentsEscrow {\n    function escrowAccounts(\n        address payer,\n        address collector,\n        address receiver\n    ) external view returns (EscrowAccount memory);\n}\n"},"contracts/toolshed/IRewardsManagerToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\n\n// solhint-disable use-natspec\n\n// TODO: Re-enable and fix issues when publishing a new version\n// solhint-disable gas-indexed-events\n\nimport { IRewardsManager } from \"../contracts/rewards/IRewardsManager.sol\";\n\ninterface IRewardsManagerToolshed is IRewardsManager {\n    /**\n     * @dev Emitted when rewards are assigned to an indexer.\n     */\n    event RewardsAssigned(address indexed indexer, address indexed allocationID, uint256 amount);\n\n    /**\n     * @notice Emitted when rewards are assigned to an indexer (Horizon version)\n     * @dev We use the Horizon prefix to change the event signature which makes network subgraph development much easier\n     */\n    event HorizonRewardsAssigned(address indexed indexer, address indexed allocationID, uint256 amount);\n\n    /**\n     * @notice Emitted when rewards are denied to an indexer\n     */\n    event RewardsDenied(address indexed indexer, address indexed allocationID);\n\n    /**\n     * @notice Emitted when a subgraph is denied for claiming rewards\n     */\n    event RewardsDenylistUpdated(bytes32 indexed subgraphDeploymentID, uint256 sinceBlock);\n\n    /**\n     * @notice Emitted when the subgraph service is set\n     */\n    event SubgraphServiceSet(address indexed oldSubgraphService, address indexed newSubgraphService);\n\n    function subgraphService() external view returns (address);\n}\n"},"contracts/toolshed/IServiceRegistryToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.7.6 || ^0.8.0;\n\n// solhint-disable use-natspec\n\nimport { IServiceRegistry } from \"../contracts/discovery/IServiceRegistry.sol\";\n\ninterface IServiceRegistryToolshed is IServiceRegistry {\n    event ServiceRegistered(address indexed indexer, string url, string geohash);\n\n    /**\n     * @notice Gets the indexer registrationdetails\n     * @dev Note that this storage getter actually returns a ISubgraphService.IndexerService struct, but ethers v6 is not\n     *      good at dealing with dynamic types on return values.\n     * @param indexer The address of the indexer\n     * @return url The URL where the indexer can be reached at for queries\n     * @return geoHash The indexer's geo location, expressed as a geo hash\n     */\n    function services(address indexer) external view returns (string memory url, string memory geoHash);\n}\n"},"contracts/toolshed/ISubgraphServiceToolshed.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.22;\n\n// solhint-disable use-natspec\n\nimport { ISubgraphService } from \"../subgraph-service/ISubgraphService.sol\";\nimport { IOwnable } from \"./internal/IOwnable.sol\";\nimport { IPausable } from \"./internal/IPausable.sol\";\nimport { ILegacyAllocation } from \"../subgraph-service/internal/ILegacyAllocation.sol\";\nimport { IProvisionManager } from \"./internal/IProvisionManager.sol\";\nimport { IProvisionTracker } from \"./internal/IProvisionTracker.sol\";\nimport { IDataServicePausable } from \"../data-service/IDataServicePausable.sol\";\nimport { IMulticall } from \"../contracts/base/IMulticall.sol\";\nimport { IAllocationManager } from \"./internal/IAllocationManager.sol\";\n\ninterface ISubgraphServiceToolshed is\n    ISubgraphService,\n    IAllocationManager,\n    IOwnable,\n    IPausable,\n    IDataServicePausable,\n    ILegacyAllocation,\n    IProvisionManager,\n    IProvisionTracker,\n    IMulticall\n{\n    /**\n     * @notice Gets the indexer details\n     * @dev Note that this storage getter actually returns a ISubgraphService.Indexer struct, but ethers v6 is not\n     *      good at dealing with dynamic types on return values.\n     * @param indexer The address of the indexer\n     * @return url The URL where the indexer can be reached at for queries\n     * @return geoHash The indexer's geo location, expressed as a geo hash\n     */\n    function indexers(address indexer) external view returns (string memory url, string memory geoHash);\n\n    /**\n     * @notice Gets the allocation provision tracker\n     * @param indexer The address of the indexer\n     * @return The allocation provision tracker\n     */\n    function allocationProvisionTracker(address indexer) external view returns (uint256);\n\n    /**\n     * @notice Gets the stake to fees ratio\n     * @return The stake to fees ratio\n     */\n    function stakeToFeesRatio() external view returns (uint256);\n\n    /**\n     * @notice Gets the max POI staleness\n     * @return The max POI staleness\n     */\n    function maxPOIStaleness() external view returns (uint256);\n\n    /**\n     * @notice Gets the curation fees cut\n     * @return The curation fees cut\n     */\n    function curationFeesCut() external view returns (uint256);\n\n    /**\n     * @notice Gets the pause guardians\n     * @param pauseGuardian The address of the pause guardian\n     * @return The allowed status of the pause guardian\n     */\n    function pauseGuardians(address pauseGuardian) external view returns (bool);\n\n    /**\n     * @notice Gets the payments destination\n     * @param indexer The address of the indexer\n     * @return The payments destination\n     */\n    function paymentsDestination(address indexer) external view returns (address);\n}\n"}},"settings":{"evmVersion":"paris","optimizer":{"enabled":false,"runs":200},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> contracts/token-distribution/IGraphTokenLockWallet.sol:13:1:\n   |\n13 | interface IGraphTokenLockWallet {\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n   --> contracts/token-distribution/IGraphTokenLockWallet.sol:176:5:\n    |\n176 |     fallback() external payable;\n    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":6530,"file":"contracts/token-distribution/IGraphTokenLockWallet.sol","message":"The payable fallback function is defined here.","start":6502}],"severity":"warning","sourceLocation":{"end":6532,"file":"contracts/token-distribution/IGraphTokenLockWallet.sol","start":483},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> contracts/toolshed/IGraphTokenLockWalletToolshed.sol:15:1:\n   |\n15 | interface IGraphTokenLockWalletToolshed is IGraphTokenLockWallet {\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n   --> contracts/token-distribution/IGraphTokenLockWallet.sol:176:5:\n    |\n176 |     fallback() external payable;\n    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":6530,"file":"contracts/token-distribution/IGraphTokenLockWallet.sol","message":"The payable fallback function is defined here.","start":6502}],"severity":"warning","sourceLocation":{"end":2040,"file":"contracts/toolshed/IGraphTokenLockWalletToolshed.sol","start":554},"type":"Warning"}],"sources":{"contracts/contracts/arbitrum/IArbToken.sol":{"ast":{"absolutePath":"contracts/contracts/arbitrum/IArbToken.sol","exportedSymbols":{"IArbToken":[25]},"id":26,"license":"Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"1157:33:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IArbToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"1192:142:0","text":" @title Arbitrum Token Interface\n @author Edge & Node\n @notice Interface for tokens that can be minted and burned on Arbitrum L2"},"fullyImplemented":false,"id":25,"linearizedBaseContracts":[25],"name":"IArbToken","nameLocation":"1345:9:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"1361:217:0","text":" @notice should increase token supply by amount, and should (probably) only be callable by the L1 bridge.\n @param account Account to mint tokens to\n @param amount Amount of tokens to mint"},"functionSelector":"8c2a993e","id":10,"implemented":false,"kind":"function","modifiers":[],"name":"bridgeMint","nameLocation":"1592:10:0","nodeType":"FunctionDefinition","parameters":{"id":8,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5,"mutability":"mutable","name":"account","nameLocation":"1611:7:0","nodeType":"VariableDeclaration","scope":10,"src":"1603:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4,"name":"address","nodeType":"ElementaryTypeName","src":"1603:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7,"mutability":"mutable","name":"amount","nameLocation":"1628:6:0","nodeType":"VariableDeclaration","scope":10,"src":"1620:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6,"name":"uint256","nodeType":"ElementaryTypeName","src":"1620:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1602:33:0"},"returnParameters":{"id":9,"nodeType":"ParameterList","parameters":[],"src":"1644:0:0"},"scope":25,"src":"1583:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":11,"nodeType":"StructuredDocumentation","src":"1651:219:0","text":" @notice should decrease token supply by amount, and should (probably) only be callable by the L1 bridge.\n @param account Account to burn tokens from\n @param amount Amount of tokens to burn"},"functionSelector":"74f4f547","id":18,"implemented":false,"kind":"function","modifiers":[],"name":"bridgeBurn","nameLocation":"1884:10:0","nodeType":"FunctionDefinition","parameters":{"id":16,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13,"mutability":"mutable","name":"account","nameLocation":"1903:7:0","nodeType":"VariableDeclaration","scope":18,"src":"1895:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12,"name":"address","nodeType":"ElementaryTypeName","src":"1895:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15,"mutability":"mutable","name":"amount","nameLocation":"1920:6:0","nodeType":"VariableDeclaration","scope":18,"src":"1912:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14,"name":"uint256","nodeType":"ElementaryTypeName","src":"1912:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1894:33:0"},"returnParameters":{"id":17,"nodeType":"ParameterList","parameters":[],"src":"1936:0:0"},"scope":25,"src":"1875:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":19,"nodeType":"StructuredDocumentation","src":"1943:91:0","text":" @notice Get the L1 token address\n @return address of layer 1 token"},"functionSelector":"c2eeeebd","id":24,"implemented":false,"kind":"function","modifiers":[],"name":"l1Address","nameLocation":"2048:9:0","nodeType":"FunctionDefinition","parameters":{"id":20,"nodeType":"ParameterList","parameters":[],"src":"2057:2:0"},"returnParameters":{"id":23,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24,"src":"2083:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21,"name":"address","nodeType":"ElementaryTypeName","src":"2083:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2082:9:0"},"scope":25,"src":"2039:53:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":26,"src":"1335:759:0","usedErrors":[],"usedEvents":[]}],"src":"1157:938:0"},"id":0},"contracts/contracts/arbitrum/IBridge.sol":{"ast":{"absolutePath":"contracts/contracts/arbitrum/IBridge.sol","exportedSymbols":{"IBridge":[147]},"id":148,"license":"Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":27,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"905:33:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IBridge","contractDependencies":[],"contractKind":"interface","documentation":{"id":28,"nodeType":"StructuredDocumentation","src":"1043:111:1","text":" @title Bridge Interface\n @author Edge & Node\n @notice Interface for the Arbitrum Bridge contract"},"fullyImplemented":false,"id":147,"linearizedBaseContracts":[147],"name":"IBridge","nameLocation":"1165:7:1","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":29,"nodeType":"StructuredDocumentation","src":"1179:376:1","text":" @notice Emitted when a message is delivered to the inbox\n @param messageIndex Index of the message\n @param beforeInboxAcc Inbox accumulator before this message\n @param inbox Address of the inbox\n @param kind Type of the message\n @param sender Address that sent the message\n @param messageDataHash Hash of the message data"},"eventSelector":"23be8e12e420b5da9fb98d8102572f640fb3c11a0085060472dfc0ed194b3cf7","id":43,"name":"MessageDelivered","nameLocation":"1566:16:1","nodeType":"EventDefinition","parameters":{"id":42,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31,"indexed":true,"mutability":"mutable","name":"messageIndex","nameLocation":"1608:12:1","nodeType":"VariableDeclaration","scope":43,"src":"1592:28:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30,"name":"uint256","nodeType":"ElementaryTypeName","src":"1592:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":33,"indexed":true,"mutability":"mutable","name":"beforeInboxAcc","nameLocation":"1646:14:1","nodeType":"VariableDeclaration","scope":43,"src":"1630:30:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":32,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1630:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":35,"indexed":false,"mutability":"mutable","name":"inbox","nameLocation":"1678:5:1","nodeType":"VariableDeclaration","scope":43,"src":"1670:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34,"name":"address","nodeType":"ElementaryTypeName","src":"1670:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37,"indexed":false,"mutability":"mutable","name":"kind","nameLocation":"1699:4:1","nodeType":"VariableDeclaration","scope":43,"src":"1693:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":36,"name":"uint8","nodeType":"ElementaryTypeName","src":"1693:5:1","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":39,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"1721:6:1","nodeType":"VariableDeclaration","scope":43,"src":"1713:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38,"name":"address","nodeType":"ElementaryTypeName","src":"1713:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41,"indexed":false,"mutability":"mutable","name":"messageDataHash","nameLocation":"1745:15:1","nodeType":"VariableDeclaration","scope":43,"src":"1737:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1737:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1582:184:1"},"src":"1560:207:1"},{"anonymous":false,"documentation":{"id":44,"nodeType":"StructuredDocumentation","src":"1773:266:1","text":" @notice Emitted when a bridge call is triggered\n @param outbox Address of the outbox\n @param destAddr Destination address for the call\n @param amount ETH amount sent with the call\n @param data Calldata for the function call"},"eventSelector":"2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466","id":54,"name":"BridgeCallTriggered","nameLocation":"2050:19:1","nodeType":"EventDefinition","parameters":{"id":53,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46,"indexed":true,"mutability":"mutable","name":"outbox","nameLocation":"2086:6:1","nodeType":"VariableDeclaration","scope":54,"src":"2070:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":45,"name":"address","nodeType":"ElementaryTypeName","src":"2070:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48,"indexed":true,"mutability":"mutable","name":"destAddr","nameLocation":"2110:8:1","nodeType":"VariableDeclaration","scope":54,"src":"2094:24:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47,"name":"address","nodeType":"ElementaryTypeName","src":"2094:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":50,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2128:6:1","nodeType":"VariableDeclaration","scope":54,"src":"2120:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49,"name":"uint256","nodeType":"ElementaryTypeName","src":"2120:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":52,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"2142:4:1","nodeType":"VariableDeclaration","scope":54,"src":"2136:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":51,"name":"bytes","nodeType":"ElementaryTypeName","src":"2136:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2069:78:1"},"src":"2044:104:1"},{"anonymous":false,"documentation":{"id":55,"nodeType":"StructuredDocumentation","src":"2154:163:1","text":" @notice Emitted when an inbox is enabled or disabled\n @param inbox Address of the inbox\n @param enabled Whether the inbox is enabled"},"eventSelector":"6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521","id":61,"name":"InboxToggle","nameLocation":"2328:11:1","nodeType":"EventDefinition","parameters":{"id":60,"nodeType":"ParameterList","parameters":[{"constant":false,"id":57,"indexed":true,"mutability":"mutable","name":"inbox","nameLocation":"2356:5:1","nodeType":"VariableDeclaration","scope":61,"src":"2340:21:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56,"name":"address","nodeType":"ElementaryTypeName","src":"2340:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59,"indexed":false,"mutability":"mutable","name":"enabled","nameLocation":"2368:7:1","nodeType":"VariableDeclaration","scope":61,"src":"2363:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":58,"name":"bool","nodeType":"ElementaryTypeName","src":"2363:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2339:37:1"},"src":"2322:55:1"},{"anonymous":false,"documentation":{"id":62,"nodeType":"StructuredDocumentation","src":"2383:167:1","text":" @notice Emitted when an outbox is enabled or disabled\n @param outbox Address of the outbox\n @param enabled Whether the outbox is enabled"},"eventSelector":"49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa","id":68,"name":"OutboxToggle","nameLocation":"2561:12:1","nodeType":"EventDefinition","parameters":{"id":67,"nodeType":"ParameterList","parameters":[{"constant":false,"id":64,"indexed":true,"mutability":"mutable","name":"outbox","nameLocation":"2590:6:1","nodeType":"VariableDeclaration","scope":68,"src":"2574:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63,"name":"address","nodeType":"ElementaryTypeName","src":"2574:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":66,"indexed":false,"mutability":"mutable","name":"enabled","nameLocation":"2603:7:1","nodeType":"VariableDeclaration","scope":68,"src":"2598:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":65,"name":"bool","nodeType":"ElementaryTypeName","src":"2598:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2573:38:1"},"src":"2555:57:1"},{"documentation":{"id":69,"nodeType":"StructuredDocumentation","src":"2618:251:1","text":" @notice Deliver a message to the inbox\n @param kind Type of the message\n @param sender Address that is sending the message\n @param messageDataHash keccak256 hash of the message data\n @return The message index"},"functionSelector":"02bbfad1","id":80,"implemented":false,"kind":"function","modifiers":[],"name":"deliverMessageToInbox","nameLocation":"2883:21:1","nodeType":"FunctionDefinition","parameters":{"id":76,"nodeType":"ParameterList","parameters":[{"constant":false,"id":71,"mutability":"mutable","name":"kind","nameLocation":"2920:4:1","nodeType":"VariableDeclaration","scope":80,"src":"2914:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":70,"name":"uint8","nodeType":"ElementaryTypeName","src":"2914:5:1","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":73,"mutability":"mutable","name":"sender","nameLocation":"2942:6:1","nodeType":"VariableDeclaration","scope":80,"src":"2934:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":72,"name":"address","nodeType":"ElementaryTypeName","src":"2934:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75,"mutability":"mutable","name":"messageDataHash","nameLocation":"2966:15:1","nodeType":"VariableDeclaration","scope":80,"src":"2958:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2958:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2904:83:1"},"returnParameters":{"id":79,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":80,"src":"3014:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77,"name":"uint256","nodeType":"ElementaryTypeName","src":"3014:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3013:9:1"},"scope":147,"src":"2874:149:1","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":81,"nodeType":"StructuredDocumentation","src":"3029:308:1","text":" @notice Execute a call from L2 to L1\n @param destAddr Contract to call\n @param amount ETH value to send\n @param data Calldata for the function call\n @return success True if the call was successful, false otherwise\n @return returnData Return data from the call"},"functionSelector":"9e5d4c49","id":94,"implemented":false,"kind":"function","modifiers":[],"name":"executeCall","nameLocation":"3351:11:1","nodeType":"FunctionDefinition","parameters":{"id":88,"nodeType":"ParameterList","parameters":[{"constant":false,"id":83,"mutability":"mutable","name":"destAddr","nameLocation":"3380:8:1","nodeType":"VariableDeclaration","scope":94,"src":"3372:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":82,"name":"address","nodeType":"ElementaryTypeName","src":"3372:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85,"mutability":"mutable","name":"amount","nameLocation":"3406:6:1","nodeType":"VariableDeclaration","scope":94,"src":"3398:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":84,"name":"uint256","nodeType":"ElementaryTypeName","src":"3398:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":87,"mutability":"mutable","name":"data","nameLocation":"3437:4:1","nodeType":"VariableDeclaration","scope":94,"src":"3422:19:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":86,"name":"bytes","nodeType":"ElementaryTypeName","src":"3422:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3362:85:1"},"returnParameters":{"id":93,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90,"mutability":"mutable","name":"success","nameLocation":"3471:7:1","nodeType":"VariableDeclaration","scope":94,"src":"3466:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":89,"name":"bool","nodeType":"ElementaryTypeName","src":"3466:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":92,"mutability":"mutable","name":"returnData","nameLocation":"3493:10:1","nodeType":"VariableDeclaration","scope":94,"src":"3480:23:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":91,"name":"bytes","nodeType":"ElementaryTypeName","src":"3480:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3465:39:1"},"scope":147,"src":"3342:163:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":95,"nodeType":"StructuredDocumentation","src":"3511:145:1","text":" @notice Set the address of an inbox\n @param inbox Address of the inbox\n @param enabled Whether to enable the inbox"},"functionSelector":"e45b7ce6","id":102,"implemented":false,"kind":"function","modifiers":[],"name":"setInbox","nameLocation":"3670:8:1","nodeType":"FunctionDefinition","parameters":{"id":100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97,"mutability":"mutable","name":"inbox","nameLocation":"3687:5:1","nodeType":"VariableDeclaration","scope":102,"src":"3679:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":96,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":99,"mutability":"mutable","name":"enabled","nameLocation":"3699:7:1","nodeType":"VariableDeclaration","scope":102,"src":"3694:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":98,"name":"bool","nodeType":"ElementaryTypeName","src":"3694:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3678:29:1"},"returnParameters":{"id":101,"nodeType":"ParameterList","parameters":[],"src":"3716:0:1"},"scope":147,"src":"3661:56:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":103,"nodeType":"StructuredDocumentation","src":"3723:148:1","text":" @notice Set the address of an outbox\n @param inbox Address of the outbox\n @param enabled Whether to enable the outbox"},"functionSelector":"cee3d728","id":110,"implemented":false,"kind":"function","modifiers":[],"name":"setOutbox","nameLocation":"3885:9:1","nodeType":"FunctionDefinition","parameters":{"id":108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":105,"mutability":"mutable","name":"inbox","nameLocation":"3903:5:1","nodeType":"VariableDeclaration","scope":110,"src":"3895:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":104,"name":"address","nodeType":"ElementaryTypeName","src":"3895:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":107,"mutability":"mutable","name":"enabled","nameLocation":"3915:7:1","nodeType":"VariableDeclaration","scope":110,"src":"3910:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":106,"name":"bool","nodeType":"ElementaryTypeName","src":"3910:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3894:29:1"},"returnParameters":{"id":109,"nodeType":"ParameterList","parameters":[],"src":"3932:0:1"},"scope":147,"src":"3876:57:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":111,"nodeType":"StructuredDocumentation","src":"3962:97:1","text":" @notice Get the active outbox address\n @return The active outbox address"},"functionSelector":"ab5d8943","id":116,"implemented":false,"kind":"function","modifiers":[],"name":"activeOutbox","nameLocation":"4073:12:1","nodeType":"FunctionDefinition","parameters":{"id":112,"nodeType":"ParameterList","parameters":[],"src":"4085:2:1"},"returnParameters":{"id":115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":114,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":116,"src":"4111:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":113,"name":"address","nodeType":"ElementaryTypeName","src":"4111:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4110:9:1"},"scope":147,"src":"4064:56:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":117,"nodeType":"StructuredDocumentation","src":"4126:175:1","text":" @notice Check if an address is an allowed inbox\n @param inbox Address to check\n @return True if the address is an allowed inbox, false otherwise"},"functionSelector":"c29372de","id":124,"implemented":false,"kind":"function","modifiers":[],"name":"allowedInboxes","nameLocation":"4315:14:1","nodeType":"FunctionDefinition","parameters":{"id":120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":119,"mutability":"mutable","name":"inbox","nameLocation":"4338:5:1","nodeType":"VariableDeclaration","scope":124,"src":"4330:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":118,"name":"address","nodeType":"ElementaryTypeName","src":"4330:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4329:15:1"},"returnParameters":{"id":123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":122,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":124,"src":"4368:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":121,"name":"bool","nodeType":"ElementaryTypeName","src":"4368:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4367:6:1"},"scope":147,"src":"4306:68:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":125,"nodeType":"StructuredDocumentation","src":"4380:178:1","text":" @notice Check if an address is an allowed outbox\n @param outbox Address to check\n @return True if the address is an allowed outbox, false otherwise"},"functionSelector":"413b35bd","id":132,"implemented":false,"kind":"function","modifiers":[],"name":"allowedOutboxes","nameLocation":"4572:15:1","nodeType":"FunctionDefinition","parameters":{"id":128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":127,"mutability":"mutable","name":"outbox","nameLocation":"4596:6:1","nodeType":"VariableDeclaration","scope":132,"src":"4588:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":126,"name":"address","nodeType":"ElementaryTypeName","src":"4588:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4587:16:1"},"returnParameters":{"id":131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":130,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":132,"src":"4627:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":129,"name":"bool","nodeType":"ElementaryTypeName","src":"4627:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4626:6:1"},"scope":147,"src":"4563:70:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":133,"nodeType":"StructuredDocumentation","src":"4639:163:1","text":" @notice Get the inbox accumulator at a specific index\n @param index Index to query\n @return The inbox accumulator at the given index"},"functionSelector":"d9dd67ab","id":140,"implemented":false,"kind":"function","modifiers":[],"name":"inboxAccs","nameLocation":"4816:9:1","nodeType":"FunctionDefinition","parameters":{"id":136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":135,"mutability":"mutable","name":"index","nameLocation":"4834:5:1","nodeType":"VariableDeclaration","scope":140,"src":"4826:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":134,"name":"uint256","nodeType":"ElementaryTypeName","src":"4826:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4825:15:1"},"returnParameters":{"id":139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":140,"src":"4864:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":137,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4864:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4863:9:1"},"scope":147,"src":"4807:66:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":141,"nodeType":"StructuredDocumentation","src":"4879:112:1","text":" @notice Get the count of messages in the inbox\n @return Number of messages in the inbox"},"functionSelector":"3dbcc8d1","id":146,"implemented":false,"kind":"function","modifiers":[],"name":"messageCount","nameLocation":"5005:12:1","nodeType":"FunctionDefinition","parameters":{"id":142,"nodeType":"ParameterList","parameters":[],"src":"5017:2:1"},"returnParameters":{"id":145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":144,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":146,"src":"5043:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":143,"name":"uint256","nodeType":"ElementaryTypeName","src":"5043:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5042:9:1"},"scope":147,"src":"4996:56:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":148,"src":"1155:3899:1","usedErrors":[],"usedEvents":[43,54,61,68]}],"src":"905:4150:1"},"id":1},"contracts/contracts/arbitrum/IInbox.sol":{"ast":{"absolutePath":"contracts/contracts/arbitrum/IInbox.sol","exportedSymbols":{"IBridge":[147],"IInbox":[282],"IMessageProvider":[298]},"id":283,"license":"Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":149,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"905:33:2"},{"absolutePath":"contracts/contracts/arbitrum/IBridge.sol","file":"./IBridge.sol","id":151,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":283,"sourceUnit":148,"src":"940:40:2","symbolAliases":[{"foreign":{"id":150,"name":"IBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":147,"src":"949:7:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/arbitrum/IMessageProvider.sol","file":"./IMessageProvider.sol","id":153,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":283,"sourceUnit":299,"src":"981:58:2","symbolAliases":[{"foreign":{"id":152,"name":"IMessageProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"990:16:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":155,"name":"IMessageProvider","nameLocations":["1171:16:2"],"nodeType":"IdentifierPath","referencedDeclaration":298,"src":"1171:16:2"},"id":156,"nodeType":"InheritanceSpecifier","src":"1171:16:2"}],"canonicalName":"IInbox","contractDependencies":[],"contractKind":"interface","documentation":{"id":154,"nodeType":"StructuredDocumentation","src":"1041:109:2","text":" @title Inbox Interface\n @author Edge & Node\n @notice Interface for the Arbitrum Inbox contract"},"fullyImplemented":false,"id":282,"linearizedBaseContracts":[282,298],"name":"IInbox","nameLocation":"1161:6:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":157,"nodeType":"StructuredDocumentation","src":"1194:161:2","text":" @notice Send a message to L2\n @param messageData Encoded data to send in the message\n @return Message number returned by the inbox"},"functionSelector":"b75436bb","id":164,"implemented":false,"kind":"function","modifiers":[],"name":"sendL2Message","nameLocation":"1369:13:2","nodeType":"FunctionDefinition","parameters":{"id":160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":159,"mutability":"mutable","name":"messageData","nameLocation":"1398:11:2","nodeType":"VariableDeclaration","scope":164,"src":"1383:26:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":158,"name":"bytes","nodeType":"ElementaryTypeName","src":"1383:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1382:28:2"},"returnParameters":{"id":163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":162,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":164,"src":"1429:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":161,"name":"uint256","nodeType":"ElementaryTypeName","src":"1429:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1428:9:2"},"scope":282,"src":"1360:78:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":165,"nodeType":"StructuredDocumentation","src":"1444:406:2","text":" @notice Send an unsigned transaction to L2\n @param maxGas Maximum gas for the L2 transaction\n @param gasPriceBid Gas price bid for the L2 transaction\n @param nonce Nonce for the transaction\n @param destAddr Destination address on L2\n @param amount Amount of ETH to send\n @param data Transaction data\n @return Message number returned by the inbox"},"functionSelector":"5075788b","id":182,"implemented":false,"kind":"function","modifiers":[],"name":"sendUnsignedTransaction","nameLocation":"1864:23:2","nodeType":"FunctionDefinition","parameters":{"id":178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":167,"mutability":"mutable","name":"maxGas","nameLocation":"1905:6:2","nodeType":"VariableDeclaration","scope":182,"src":"1897:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":166,"name":"uint256","nodeType":"ElementaryTypeName","src":"1897:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":169,"mutability":"mutable","name":"gasPriceBid","nameLocation":"1929:11:2","nodeType":"VariableDeclaration","scope":182,"src":"1921:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":168,"name":"uint256","nodeType":"ElementaryTypeName","src":"1921:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":171,"mutability":"mutable","name":"nonce","nameLocation":"1958:5:2","nodeType":"VariableDeclaration","scope":182,"src":"1950:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":170,"name":"uint256","nodeType":"ElementaryTypeName","src":"1950:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":173,"mutability":"mutable","name":"destAddr","nameLocation":"1981:8:2","nodeType":"VariableDeclaration","scope":182,"src":"1973:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":172,"name":"address","nodeType":"ElementaryTypeName","src":"1973:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":175,"mutability":"mutable","name":"amount","nameLocation":"2007:6:2","nodeType":"VariableDeclaration","scope":182,"src":"1999:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":174,"name":"uint256","nodeType":"ElementaryTypeName","src":"1999:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":177,"mutability":"mutable","name":"data","nameLocation":"2038:4:2","nodeType":"VariableDeclaration","scope":182,"src":"2023:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":176,"name":"bytes","nodeType":"ElementaryTypeName","src":"2023:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1887:161:2"},"returnParameters":{"id":181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":182,"src":"2067:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":179,"name":"uint256","nodeType":"ElementaryTypeName","src":"2067:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2066:9:2"},"scope":282,"src":"1855:221:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":183,"nodeType":"StructuredDocumentation","src":"2082:359:2","text":" @notice Send a contract transaction to L2\n @param maxGas Maximum gas for the L2 transaction\n @param gasPriceBid Gas price bid for the L2 transaction\n @param destAddr Destination address on L2\n @param amount Amount of ETH to send\n @param data Transaction data\n @return Message number returned by the inbox"},"functionSelector":"8a631aa6","id":198,"implemented":false,"kind":"function","modifiers":[],"name":"sendContractTransaction","nameLocation":"2455:23:2","nodeType":"FunctionDefinition","parameters":{"id":194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":185,"mutability":"mutable","name":"maxGas","nameLocation":"2496:6:2","nodeType":"VariableDeclaration","scope":198,"src":"2488:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":184,"name":"uint256","nodeType":"ElementaryTypeName","src":"2488:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":187,"mutability":"mutable","name":"gasPriceBid","nameLocation":"2520:11:2","nodeType":"VariableDeclaration","scope":198,"src":"2512:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":186,"name":"uint256","nodeType":"ElementaryTypeName","src":"2512:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":189,"mutability":"mutable","name":"destAddr","nameLocation":"2549:8:2","nodeType":"VariableDeclaration","scope":198,"src":"2541:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":188,"name":"address","nodeType":"ElementaryTypeName","src":"2541:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":191,"mutability":"mutable","name":"amount","nameLocation":"2575:6:2","nodeType":"VariableDeclaration","scope":198,"src":"2567:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":190,"name":"uint256","nodeType":"ElementaryTypeName","src":"2567:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":193,"mutability":"mutable","name":"data","nameLocation":"2606:4:2","nodeType":"VariableDeclaration","scope":198,"src":"2591:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":192,"name":"bytes","nodeType":"ElementaryTypeName","src":"2591:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2478:138:2"},"returnParameters":{"id":197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":196,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":198,"src":"2635:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":195,"name":"uint256","nodeType":"ElementaryTypeName","src":"2635:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2634:9:2"},"scope":282,"src":"2446:198:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":199,"nodeType":"StructuredDocumentation","src":"2650:373:2","text":" @notice Send an L1-funded unsigned transaction to L2\n @param maxGas Maximum gas for the L2 transaction\n @param gasPriceBid Gas price bid for the L2 transaction\n @param nonce Nonce for the transaction\n @param destAddr Destination address on L2\n @param data Transaction data\n @return Message number returned by the inbox"},"functionSelector":"67ef3ab8","id":214,"implemented":false,"kind":"function","modifiers":[],"name":"sendL1FundedUnsignedTransaction","nameLocation":"3037:31:2","nodeType":"FunctionDefinition","parameters":{"id":210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":201,"mutability":"mutable","name":"maxGas","nameLocation":"3086:6:2","nodeType":"VariableDeclaration","scope":214,"src":"3078:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":200,"name":"uint256","nodeType":"ElementaryTypeName","src":"3078:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":203,"mutability":"mutable","name":"gasPriceBid","nameLocation":"3110:11:2","nodeType":"VariableDeclaration","scope":214,"src":"3102:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":202,"name":"uint256","nodeType":"ElementaryTypeName","src":"3102:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":205,"mutability":"mutable","name":"nonce","nameLocation":"3139:5:2","nodeType":"VariableDeclaration","scope":214,"src":"3131:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":204,"name":"uint256","nodeType":"ElementaryTypeName","src":"3131:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":207,"mutability":"mutable","name":"destAddr","nameLocation":"3162:8:2","nodeType":"VariableDeclaration","scope":214,"src":"3154:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":206,"name":"address","nodeType":"ElementaryTypeName","src":"3154:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":209,"mutability":"mutable","name":"data","nameLocation":"3195:4:2","nodeType":"VariableDeclaration","scope":214,"src":"3180:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":208,"name":"bytes","nodeType":"ElementaryTypeName","src":"3180:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3068:137:2"},"returnParameters":{"id":213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":212,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":214,"src":"3232:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":211,"name":"uint256","nodeType":"ElementaryTypeName","src":"3232:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3231:9:2"},"scope":282,"src":"3028:213:2","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":215,"nodeType":"StructuredDocumentation","src":"3247:327:2","text":" @notice Send an L1-funded contract transaction to L2\n @param maxGas Maximum gas for the L2 transaction\n @param gasPriceBid Gas price bid for the L2 transaction\n @param destAddr Destination address on L2\n @param data Transaction data\n @return Message number returned by the inbox"},"functionSelector":"5e916758","id":228,"implemented":false,"kind":"function","modifiers":[],"name":"sendL1FundedContractTransaction","nameLocation":"3588:31:2","nodeType":"FunctionDefinition","parameters":{"id":224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":217,"mutability":"mutable","name":"maxGas","nameLocation":"3637:6:2","nodeType":"VariableDeclaration","scope":228,"src":"3629:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":216,"name":"uint256","nodeType":"ElementaryTypeName","src":"3629:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":219,"mutability":"mutable","name":"gasPriceBid","nameLocation":"3661:11:2","nodeType":"VariableDeclaration","scope":228,"src":"3653:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":218,"name":"uint256","nodeType":"ElementaryTypeName","src":"3653:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":221,"mutability":"mutable","name":"destAddr","nameLocation":"3690:8:2","nodeType":"VariableDeclaration","scope":228,"src":"3682:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":220,"name":"address","nodeType":"ElementaryTypeName","src":"3682:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":223,"mutability":"mutable","name":"data","nameLocation":"3723:4:2","nodeType":"VariableDeclaration","scope":228,"src":"3708:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":222,"name":"bytes","nodeType":"ElementaryTypeName","src":"3708:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3619:114:2"},"returnParameters":{"id":227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":226,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":228,"src":"3760:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":225,"name":"uint256","nodeType":"ElementaryTypeName","src":"3760:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3759:9:2"},"scope":282,"src":"3579:190:2","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":229,"nodeType":"StructuredDocumentation","src":"3775:606:2","text":" @notice Create a retryable ticket for an L2 transaction\n @param destAddr Destination address on L2\n @param arbTxCallValue Call value for the L2 transaction\n @param maxSubmissionCost Maximum cost for submitting the ticket\n @param submissionRefundAddress Address to refund submission cost to\n @param valueRefundAddress Address to refund excess value to\n @param maxGas Maximum gas for the L2 transaction\n @param gasPriceBid Gas price bid for the L2 transaction\n @param data Transaction data\n @return Message number returned by the inbox"},"functionSelector":"679b6ded","id":250,"implemented":false,"kind":"function","modifiers":[],"name":"createRetryableTicket","nameLocation":"4395:21:2","nodeType":"FunctionDefinition","parameters":{"id":246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":231,"mutability":"mutable","name":"destAddr","nameLocation":"4434:8:2","nodeType":"VariableDeclaration","scope":250,"src":"4426:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":230,"name":"address","nodeType":"ElementaryTypeName","src":"4426:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":233,"mutability":"mutable","name":"arbTxCallValue","nameLocation":"4460:14:2","nodeType":"VariableDeclaration","scope":250,"src":"4452:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":232,"name":"uint256","nodeType":"ElementaryTypeName","src":"4452:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":235,"mutability":"mutable","name":"maxSubmissionCost","nameLocation":"4492:17:2","nodeType":"VariableDeclaration","scope":250,"src":"4484:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":234,"name":"uint256","nodeType":"ElementaryTypeName","src":"4484:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":237,"mutability":"mutable","name":"submissionRefundAddress","nameLocation":"4527:23:2","nodeType":"VariableDeclaration","scope":250,"src":"4519:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":236,"name":"address","nodeType":"ElementaryTypeName","src":"4519:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":239,"mutability":"mutable","name":"valueRefundAddress","nameLocation":"4568:18:2","nodeType":"VariableDeclaration","scope":250,"src":"4560:26:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":238,"name":"address","nodeType":"ElementaryTypeName","src":"4560:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":241,"mutability":"mutable","name":"maxGas","nameLocation":"4604:6:2","nodeType":"VariableDeclaration","scope":250,"src":"4596:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":240,"name":"uint256","nodeType":"ElementaryTypeName","src":"4596:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":243,"mutability":"mutable","name":"gasPriceBid","nameLocation":"4628:11:2","nodeType":"VariableDeclaration","scope":250,"src":"4620:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":242,"name":"uint256","nodeType":"ElementaryTypeName","src":"4620:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":245,"mutability":"mutable","name":"data","nameLocation":"4664:4:2","nodeType":"VariableDeclaration","scope":250,"src":"4649:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":244,"name":"bytes","nodeType":"ElementaryTypeName","src":"4649:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4416:258:2"},"returnParameters":{"id":249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":248,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":250,"src":"4701:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":247,"name":"uint256","nodeType":"ElementaryTypeName","src":"4701:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4700:9:2"},"scope":282,"src":"4386:324:2","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":251,"nodeType":"StructuredDocumentation","src":"4716:168:2","text":" @notice Deposit ETH to L2\n @param maxSubmissionCost Maximum cost for submitting the deposit\n @return Message number returned by the inbox"},"functionSelector":"0f4d14e9","id":258,"implemented":false,"kind":"function","modifiers":[],"name":"depositEth","nameLocation":"4898:10:2","nodeType":"FunctionDefinition","parameters":{"id":254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":253,"mutability":"mutable","name":"maxSubmissionCost","nameLocation":"4917:17:2","nodeType":"VariableDeclaration","scope":258,"src":"4909:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":252,"name":"uint256","nodeType":"ElementaryTypeName","src":"4909:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4908:27:2"},"returnParameters":{"id":257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":256,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":258,"src":"4962:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":255,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4961:9:2"},"scope":282,"src":"4889:82:2","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":259,"nodeType":"StructuredDocumentation","src":"4977:93:2","text":" @notice Get the bridge contract\n @return The bridge contract address"},"functionSelector":"e78cea92","id":265,"implemented":false,"kind":"function","modifiers":[],"name":"bridge","nameLocation":"5084:6:2","nodeType":"FunctionDefinition","parameters":{"id":260,"nodeType":"ParameterList","parameters":[],"src":"5090:2:2"},"returnParameters":{"id":264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":263,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":265,"src":"5116:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBridge_$147","typeString":"contract IBridge"},"typeName":{"id":262,"nodeType":"UserDefinedTypeName","pathNode":{"id":261,"name":"IBridge","nameLocations":["5116:7:2"],"nodeType":"IdentifierPath","referencedDeclaration":147,"src":"5116:7:2"},"referencedDeclaration":147,"src":"5116:7:2","typeDescriptions":{"typeIdentifier":"t_contract$_IBridge_$147","typeString":"contract IBridge"}},"visibility":"internal"}],"src":"5115:9:2"},"scope":282,"src":"5075:50:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":266,"nodeType":"StructuredDocumentation","src":"5131:66:2","text":" @notice Pause the creation of retryable tickets"},"functionSelector":"2b40609a","id":269,"implemented":false,"kind":"function","modifiers":[],"name":"pauseCreateRetryables","nameLocation":"5211:21:2","nodeType":"FunctionDefinition","parameters":{"id":267,"nodeType":"ParameterList","parameters":[],"src":"5232:2:2"},"returnParameters":{"id":268,"nodeType":"ParameterList","parameters":[],"src":"5243:0:2"},"scope":282,"src":"5202:42:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":270,"nodeType":"StructuredDocumentation","src":"5250:68:2","text":" @notice Unpause the creation of retryable tickets"},"functionSelector":"9fe12da5","id":273,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseCreateRetryables","nameLocation":"5332:23:2","nodeType":"FunctionDefinition","parameters":{"id":271,"nodeType":"ParameterList","parameters":[],"src":"5355:2:2"},"returnParameters":{"id":272,"nodeType":"ParameterList","parameters":[],"src":"5366:0:2"},"scope":282,"src":"5323:44:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":274,"nodeType":"StructuredDocumentation","src":"5373:52:2","text":" @notice Start rewriting addresses"},"functionSelector":"7ae8d8b3","id":277,"implemented":false,"kind":"function","modifiers":[],"name":"startRewriteAddress","nameLocation":"5439:19:2","nodeType":"FunctionDefinition","parameters":{"id":275,"nodeType":"ParameterList","parameters":[],"src":"5458:2:2"},"returnParameters":{"id":276,"nodeType":"ParameterList","parameters":[],"src":"5469:0:2"},"scope":282,"src":"5430:40:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":278,"nodeType":"StructuredDocumentation","src":"5476:51:2","text":" @notice Stop rewriting addresses"},"functionSelector":"794cfd51","id":281,"implemented":false,"kind":"function","modifiers":[],"name":"stopRewriteAddress","nameLocation":"5541:18:2","nodeType":"FunctionDefinition","parameters":{"id":279,"nodeType":"ParameterList","parameters":[],"src":"5559:2:2"},"returnParameters":{"id":280,"nodeType":"ParameterList","parameters":[],"src":"5570:0:2"},"scope":282,"src":"5532:39:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":283,"src":"1151:4422:2","usedErrors":[],"usedEvents":[292,297]}],"src":"905:4669:2"},"id":2},"contracts/contracts/arbitrum/IMessageProvider.sol":{"ast":{"absolutePath":"contracts/contracts/arbitrum/IMessageProvider.sol","exportedSymbols":{"IMessageProvider":[298]},"id":299,"license":"Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":284,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"905:33:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IMessageProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":285,"nodeType":"StructuredDocumentation","src":"940:119:3","text":" @title Message Provider Interface\n @author Edge & Node\n @notice Interface for Arbitrum message providers"},"fullyImplemented":true,"id":298,"linearizedBaseContracts":[298],"name":"IMessageProvider","nameLocation":"1070:16:3","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":286,"nodeType":"StructuredDocumentation","src":"1093:147:3","text":" @notice Emitted when a message is delivered to the inbox\n @param messageNum Message number\n @param data Message data"},"eventSelector":"ff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b","id":292,"name":"InboxMessageDelivered","nameLocation":"1251:21:3","nodeType":"EventDefinition","parameters":{"id":291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":288,"indexed":true,"mutability":"mutable","name":"messageNum","nameLocation":"1289:10:3","nodeType":"VariableDeclaration","scope":292,"src":"1273:26:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":287,"name":"uint256","nodeType":"ElementaryTypeName","src":"1273:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":290,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"1307:4:3","nodeType":"VariableDeclaration","scope":292,"src":"1301:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":289,"name":"bytes","nodeType":"ElementaryTypeName","src":"1301:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1272:40:3"},"src":"1245:68:3"},{"anonymous":false,"documentation":{"id":293,"nodeType":"StructuredDocumentation","src":"1319:114:3","text":" @notice Emitted when a message is delivered from origin\n @param messageNum Message number"},"eventSelector":"ab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c","id":297,"name":"InboxMessageDeliveredFromOrigin","nameLocation":"1444:31:3","nodeType":"EventDefinition","parameters":{"id":296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":295,"indexed":true,"mutability":"mutable","name":"messageNum","nameLocation":"1492:10:3","nodeType":"VariableDeclaration","scope":297,"src":"1476:26:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":294,"name":"uint256","nodeType":"ElementaryTypeName","src":"1476:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1475:28:3"},"src":"1438:66:3"}],"scope":299,"src":"1060:446:3","usedErrors":[],"usedEvents":[292,297]}],"src":"905:602:3"},"id":3},"contracts/contracts/arbitrum/IOutbox.sol":{"ast":{"absolutePath":"contracts/contracts/arbitrum/IOutbox.sol","exportedSymbols":{"IOutbox":[377]},"id":378,"license":"Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":300,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"905:33:4"},{"abstract":false,"baseContracts":[],"canonicalName":"IOutbox","contractDependencies":[],"contractKind":"interface","documentation":{"id":301,"nodeType":"StructuredDocumentation","src":"1043:120:4","text":" @title Arbitrum Outbox Interface\n @author Edge & Node\n @notice Interface for the Arbitrum outbox contract"},"fullyImplemented":false,"id":377,"linearizedBaseContracts":[377],"name":"IOutbox","nameLocation":"1174:7:4","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":302,"nodeType":"StructuredDocumentation","src":"1188:258:4","text":" @notice Emitted when an outbox entry is created\n @param batchNum Batch number\n @param outboxEntryIndex Index of the outbox entry\n @param outputRoot Output root hash\n @param numInBatch Number of messages in the batch"},"eventSelector":"e5ccc8d7080a4904b2f4e42d91e8f06b13fe6cb2181ad1fe14644e856b44c131","id":312,"name":"OutboxEntryCreated","nameLocation":"1457:18:4","nodeType":"EventDefinition","parameters":{"id":311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":304,"indexed":true,"mutability":"mutable","name":"batchNum","nameLocation":"1501:8:4","nodeType":"VariableDeclaration","scope":312,"src":"1485:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":303,"name":"uint256","nodeType":"ElementaryTypeName","src":"1485:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":306,"indexed":false,"mutability":"mutable","name":"outboxEntryIndex","nameLocation":"1527:16:4","nodeType":"VariableDeclaration","scope":312,"src":"1519:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":305,"name":"uint256","nodeType":"ElementaryTypeName","src":"1519:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":308,"indexed":false,"mutability":"mutable","name":"outputRoot","nameLocation":"1561:10:4","nodeType":"VariableDeclaration","scope":312,"src":"1553:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":307,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1553:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":310,"indexed":false,"mutability":"mutable","name":"numInBatch","nameLocation":"1589:10:4","nodeType":"VariableDeclaration","scope":312,"src":"1581:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":309,"name":"uint256","nodeType":"ElementaryTypeName","src":"1581:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1475:130:4"},"src":"1451:155:4"},{"anonymous":false,"documentation":{"id":313,"nodeType":"StructuredDocumentation","src":"1612:270:4","text":" @notice Emitted when an outbox transaction is executed\n @param destAddr Destination address\n @param l2Sender L2 sender address\n @param outboxEntryIndex Index of the outbox entry\n @param transactionIndex Index of the transaction"},"eventSelector":"20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab18964","id":323,"name":"OutBoxTransactionExecuted","nameLocation":"1893:25:4","nodeType":"EventDefinition","parameters":{"id":322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":315,"indexed":true,"mutability":"mutable","name":"destAddr","nameLocation":"1944:8:4","nodeType":"VariableDeclaration","scope":323,"src":"1928:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":314,"name":"address","nodeType":"ElementaryTypeName","src":"1928:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":317,"indexed":true,"mutability":"mutable","name":"l2Sender","nameLocation":"1978:8:4","nodeType":"VariableDeclaration","scope":323,"src":"1962:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":316,"name":"address","nodeType":"ElementaryTypeName","src":"1962:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":319,"indexed":true,"mutability":"mutable","name":"outboxEntryIndex","nameLocation":"2012:16:4","nodeType":"VariableDeclaration","scope":323,"src":"1996:32:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":318,"name":"uint256","nodeType":"ElementaryTypeName","src":"1996:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":321,"indexed":false,"mutability":"mutable","name":"transactionIndex","nameLocation":"2046:16:4","nodeType":"VariableDeclaration","scope":323,"src":"2038:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":320,"name":"uint256","nodeType":"ElementaryTypeName","src":"2038:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1918:150:4"},"src":"1887:182:4"},{"documentation":{"id":324,"nodeType":"StructuredDocumentation","src":"2075:92:4","text":" @notice Get the L2 to L1 sender address\n @return The sender address"},"functionSelector":"80648b02","id":329,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1Sender","nameLocation":"2181:12:4","nodeType":"FunctionDefinition","parameters":{"id":325,"nodeType":"ParameterList","parameters":[],"src":"2193:2:4"},"returnParameters":{"id":328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":327,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":329,"src":"2219:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":326,"name":"address","nodeType":"ElementaryTypeName","src":"2219:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2218:9:4"},"scope":377,"src":"2172:56:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":330,"nodeType":"StructuredDocumentation","src":"2234:88:4","text":" @notice Get the L2 to L1 block number\n @return The block number"},"functionSelector":"46547790","id":335,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1Block","nameLocation":"2336:11:4","nodeType":"FunctionDefinition","parameters":{"id":331,"nodeType":"ParameterList","parameters":[],"src":"2347:2:4"},"returnParameters":{"id":334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":335,"src":"2373:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":332,"name":"uint256","nodeType":"ElementaryTypeName","src":"2373:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2372:9:4"},"scope":377,"src":"2327:55:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":336,"nodeType":"StructuredDocumentation","src":"2388:106:4","text":" @notice Get the L2 to L1 Ethereum block number\n @return The Ethereum block number"},"functionSelector":"8515bc6a","id":341,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1EthBlock","nameLocation":"2508:14:4","nodeType":"FunctionDefinition","parameters":{"id":337,"nodeType":"ParameterList","parameters":[],"src":"2522:2:4"},"returnParameters":{"id":340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":339,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":341,"src":"2548:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":338,"name":"uint256","nodeType":"ElementaryTypeName","src":"2548:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2547:9:4"},"scope":377,"src":"2499:58:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":342,"nodeType":"StructuredDocumentation","src":"2563:82:4","text":" @notice Get the L2 to L1 timestamp\n @return The timestamp"},"functionSelector":"b0f30537","id":347,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1Timestamp","nameLocation":"2659:15:4","nodeType":"FunctionDefinition","parameters":{"id":343,"nodeType":"ParameterList","parameters":[],"src":"2674:2:4"},"returnParameters":{"id":346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":345,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":347,"src":"2700:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":344,"name":"uint256","nodeType":"ElementaryTypeName","src":"2700:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2699:9:4"},"scope":377,"src":"2650:59:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":348,"nodeType":"StructuredDocumentation","src":"2715:88:4","text":" @notice Get the L2 to L1 batch number\n @return The batch number"},"functionSelector":"11985271","id":353,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1BatchNum","nameLocation":"2817:14:4","nodeType":"FunctionDefinition","parameters":{"id":349,"nodeType":"ParameterList","parameters":[],"src":"2831:2:4"},"returnParameters":{"id":352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":353,"src":"2857:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":350,"name":"uint256","nodeType":"ElementaryTypeName","src":"2857:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2856:9:4"},"scope":377,"src":"2808:58:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":354,"nodeType":"StructuredDocumentation","src":"2872:82:4","text":" @notice Get the L2 to L1 output ID\n @return The output ID"},"functionSelector":"72f2a8c7","id":359,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1OutputId","nameLocation":"2968:14:4","nodeType":"FunctionDefinition","parameters":{"id":355,"nodeType":"ParameterList","parameters":[],"src":"2982:2:4"},"returnParameters":{"id":358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":357,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":359,"src":"3008:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":356,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3008:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3007:9:4"},"scope":377,"src":"2959:58:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":360,"nodeType":"StructuredDocumentation","src":"3023:148:4","text":" @notice Process outgoing messages\n @param sendsData Encoded message data\n @param sendLengths Array of message lengths"},"functionSelector":"0c726847","id":368,"implemented":false,"kind":"function","modifiers":[],"name":"processOutgoingMessages","nameLocation":"3185:23:4","nodeType":"FunctionDefinition","parameters":{"id":366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":362,"mutability":"mutable","name":"sendsData","nameLocation":"3224:9:4","nodeType":"VariableDeclaration","scope":368,"src":"3209:24:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":361,"name":"bytes","nodeType":"ElementaryTypeName","src":"3209:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":365,"mutability":"mutable","name":"sendLengths","nameLocation":"3254:11:4","nodeType":"VariableDeclaration","scope":368,"src":"3235:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":363,"name":"uint256","nodeType":"ElementaryTypeName","src":"3235:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":364,"nodeType":"ArrayTypeName","src":"3235:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3208:58:4"},"returnParameters":{"id":367,"nodeType":"ParameterList","parameters":[],"src":"3275:0:4"},"scope":377,"src":"3176:100:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":369,"nodeType":"StructuredDocumentation","src":"3282:143:4","text":" @notice Check if an outbox entry exists\n @param batchNum Batch number to check\n @return True if the entry exists"},"functionSelector":"f1fd3a39","id":376,"implemented":false,"kind":"function","modifiers":[],"name":"outboxEntryExists","nameLocation":"3439:17:4","nodeType":"FunctionDefinition","parameters":{"id":372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":371,"mutability":"mutable","name":"batchNum","nameLocation":"3465:8:4","nodeType":"VariableDeclaration","scope":376,"src":"3457:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":370,"name":"uint256","nodeType":"ElementaryTypeName","src":"3457:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3456:18:4"},"returnParameters":{"id":375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":374,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":376,"src":"3498:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":373,"name":"bool","nodeType":"ElementaryTypeName","src":"3498:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3497:6:4"},"scope":377,"src":"3430:74:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":378,"src":"1164:2342:4","usedErrors":[],"usedEvents":[312,323]}],"src":"905:2602:4"},"id":4},"contracts/contracts/arbitrum/ITokenGateway.sol":{"ast":{"absolutePath":"contracts/contracts/arbitrum/ITokenGateway.sol","exportedSymbols":{"ITokenGateway":[421]},"id":422,"license":"Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":379,"literals":["solidity","^","0.7",".3","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"913:33:5"},{"abstract":false,"baseContracts":[],"canonicalName":"ITokenGateway","contractDependencies":[],"contractKind":"interface","documentation":{"id":380,"nodeType":"StructuredDocumentation","src":"948:144:5","text":" @title Token Gateway Interface\n @author Edge & Node\n @notice Interface for token gateways that handle cross-chain token transfers"},"fullyImplemented":false,"id":421,"linearizedBaseContracts":[421],"name":"ITokenGateway","nameLocation":"1103:13:5","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":381,"nodeType":"StructuredDocumentation","src":"1762:434:5","text":" @notice Transfer tokens from L1 to L2 or L2 to L1\n @param token Address of the token being transferred\n @param to Recipient address on the destination chain\n @param amount Amount of tokens to transfer\n @param maxGas Maximum gas for the transaction\n @param gasPriceBid Gas price bid for the transaction\n @param data Additional data for the transfer\n @return Transaction data"},"functionSelector":"d2ce7d65","id":398,"implemented":false,"kind":"function","modifiers":[],"name":"outboundTransfer","nameLocation":"2210:16:5","nodeType":"FunctionDefinition","parameters":{"id":394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":383,"mutability":"mutable","name":"token","nameLocation":"2244:5:5","nodeType":"VariableDeclaration","scope":398,"src":"2236:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":382,"name":"address","nodeType":"ElementaryTypeName","src":"2236:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":385,"mutability":"mutable","name":"to","nameLocation":"2267:2:5","nodeType":"VariableDeclaration","scope":398,"src":"2259:10:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":384,"name":"address","nodeType":"ElementaryTypeName","src":"2259:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":387,"mutability":"mutable","name":"amount","nameLocation":"2287:6:5","nodeType":"VariableDeclaration","scope":398,"src":"2279:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":386,"name":"uint256","nodeType":"ElementaryTypeName","src":"2279:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":389,"mutability":"mutable","name":"maxGas","nameLocation":"2311:6:5","nodeType":"VariableDeclaration","scope":398,"src":"2303:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":388,"name":"uint256","nodeType":"ElementaryTypeName","src":"2303:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":391,"mutability":"mutable","name":"gasPriceBid","nameLocation":"2335:11:5","nodeType":"VariableDeclaration","scope":398,"src":"2327:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":390,"name":"uint256","nodeType":"ElementaryTypeName","src":"2327:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":393,"mutability":"mutable","name":"data","nameLocation":"2371:4:5","nodeType":"VariableDeclaration","scope":398,"src":"2356:19:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":392,"name":"bytes","nodeType":"ElementaryTypeName","src":"2356:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2226:155:5"},"returnParameters":{"id":397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":396,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":398,"src":"2408:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":395,"name":"bytes","nodeType":"ElementaryTypeName","src":"2408:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2407:14:5"},"scope":421,"src":"2201:221:5","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":399,"nodeType":"StructuredDocumentation","src":"2428:342:5","text":" @notice Finalize an inbound token transfer\n @param token Address of the token being transferred\n @param from Sender address on the source chain\n @param to Recipient address on the destination chain\n @param amount Amount of tokens being transferred\n @param data Additional data for the transfer"},"functionSelector":"2e567b36","id":412,"implemented":false,"kind":"function","modifiers":[],"name":"finalizeInboundTransfer","nameLocation":"2784:23:5","nodeType":"FunctionDefinition","parameters":{"id":410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":401,"mutability":"mutable","name":"token","nameLocation":"2825:5:5","nodeType":"VariableDeclaration","scope":412,"src":"2817:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":400,"name":"address","nodeType":"ElementaryTypeName","src":"2817:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":403,"mutability":"mutable","name":"from","nameLocation":"2848:4:5","nodeType":"VariableDeclaration","scope":412,"src":"2840:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":402,"name":"address","nodeType":"ElementaryTypeName","src":"2840:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":405,"mutability":"mutable","name":"to","nameLocation":"2870:2:5","nodeType":"VariableDeclaration","scope":412,"src":"2862:10:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":404,"name":"address","nodeType":"ElementaryTypeName","src":"2862:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":407,"mutability":"mutable","name":"amount","nameLocation":"2890:6:5","nodeType":"VariableDeclaration","scope":412,"src":"2882:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":406,"name":"uint256","nodeType":"ElementaryTypeName","src":"2882:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":409,"mutability":"mutable","name":"data","nameLocation":"2921:4:5","nodeType":"VariableDeclaration","scope":412,"src":"2906:19:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":408,"name":"bytes","nodeType":"ElementaryTypeName","src":"2906:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2807:124:5"},"returnParameters":{"id":411,"nodeType":"ParameterList","parameters":[],"src":"2948:0:5"},"scope":421,"src":"2775:174:5","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":413,"nodeType":"StructuredDocumentation","src":"2955:354:5","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":420,"implemented":false,"kind":"function","modifiers":[],"name":"calculateL2TokenAddress","nameLocation":"3323:23:5","nodeType":"FunctionDefinition","parameters":{"id":416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":415,"mutability":"mutable","name":"l1ERC20","nameLocation":"3355:7:5","nodeType":"VariableDeclaration","scope":420,"src":"3347:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":414,"name":"address","nodeType":"ElementaryTypeName","src":"3347:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3346:17:5"},"returnParameters":{"id":419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":418,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":420,"src":"3387:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":417,"name":"address","nodeType":"ElementaryTypeName","src":"3387:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3386:9:5"},"scope":421,"src":"3314:82:5","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":422,"src":"1093:2305:5","usedErrors":[],"usedEvents":[]}],"src":"913:2486:5"},"id":5},"contracts/contracts/base/IMulticall.sol":{"ast":{"absolutePath":"contracts/contracts/base/IMulticall.sol","exportedSymbols":{"IMulticall":[436]},"id":437,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":423,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:6"},{"id":424,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"80:19:6"},{"abstract":false,"baseContracts":[],"canonicalName":"IMulticall","contractDependencies":[],"contractKind":"interface","documentation":{"id":425,"nodeType":"StructuredDocumentation","src":"101:137:6","text":" @title Multicall interface\n @author Edge & Node\n @notice Enables calling multiple methods in a single call to the contract"},"fullyImplemented":false,"id":436,"linearizedBaseContracts":[436],"name":"IMulticall","nameLocation":"249:10:6","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":426,"nodeType":"StructuredDocumentation","src":"266:300:6","text":" @notice Call multiple functions in the current contract and return the data from all of them if they all succeed\n @param data The encoded function data for each of the calls to make to this contract\n @return results The results from each of the calls passed in via data"},"functionSelector":"ac9650d8","id":435,"implemented":false,"kind":"function","modifiers":[],"name":"multicall","nameLocation":"580:9:6","nodeType":"FunctionDefinition","parameters":{"id":430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":429,"mutability":"mutable","name":"data","nameLocation":"607:4:6","nodeType":"VariableDeclaration","scope":435,"src":"590:21:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":427,"name":"bytes","nodeType":"ElementaryTypeName","src":"590:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":428,"nodeType":"ArrayTypeName","src":"590:7:6","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"589:23:6"},"returnParameters":{"id":434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":433,"mutability":"mutable","name":"results","nameLocation":"646:7:6","nodeType":"VariableDeclaration","scope":435,"src":"631:22:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":431,"name":"bytes","nodeType":"ElementaryTypeName","src":"631:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":432,"nodeType":"ArrayTypeName","src":"631:7:6","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"630:24:6"},"scope":436,"src":"571:84:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":437,"src":"239:418:6","usedErrors":[],"usedEvents":[]}],"src":"46:612:6"},"id":6},"contracts/contracts/curation/ICuration.sol":{"ast":{"absolutePath":"contracts/contracts/curation/ICuration.sol","exportedSymbols":{"ICuration":[560]},"id":561,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":438,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:7"},{"abstract":false,"baseContracts":[],"canonicalName":"ICuration","contractDependencies":[],"contractKind":"interface","documentation":{"id":439,"nodeType":"StructuredDocumentation","src":"81:127:7","text":" @title Curation Interface\n @author Edge & Node\n @notice Interface for the Curation contract (and L2Curation too)"},"fullyImplemented":false,"id":560,"linearizedBaseContracts":[560],"name":"ICuration","nameLocation":"219:9:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":440,"nodeType":"StructuredDocumentation","src":"263:141:7","text":" @notice Update the default reserve ratio to `defaultReserveRatio`\n @param defaultReserveRatio Reserve ratio (in PPM)"},"functionSelector":"cd0ad4a2","id":445,"implemented":false,"kind":"function","modifiers":[],"name":"setDefaultReserveRatio","nameLocation":"418:22:7","nodeType":"FunctionDefinition","parameters":{"id":443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":442,"mutability":"mutable","name":"defaultReserveRatio","nameLocation":"448:19:7","nodeType":"VariableDeclaration","scope":445,"src":"441:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":441,"name":"uint32","nodeType":"ElementaryTypeName","src":"441:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"440:28:7"},"returnParameters":{"id":444,"nodeType":"ParameterList","parameters":[],"src":"477:0:7"},"scope":560,"src":"409:69:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":446,"nodeType":"StructuredDocumentation","src":"484:174:7","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":451,"implemented":false,"kind":"function","modifiers":[],"name":"setMinimumCurationDeposit","nameLocation":"672:25:7","nodeType":"FunctionDefinition","parameters":{"id":449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":448,"mutability":"mutable","name":"minimumCurationDeposit","nameLocation":"706:22:7","nodeType":"VariableDeclaration","scope":451,"src":"698:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":447,"name":"uint256","nodeType":"ElementaryTypeName","src":"698:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"697:32:7"},"returnParameters":{"id":450,"nodeType":"ParameterList","parameters":[],"src":"738:0:7"},"scope":560,"src":"663:76:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":452,"nodeType":"StructuredDocumentation","src":"745:188:7","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":457,"implemented":false,"kind":"function","modifiers":[],"name":"setCurationTaxPercentage","nameLocation":"947:24:7","nodeType":"FunctionDefinition","parameters":{"id":455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":454,"mutability":"mutable","name":"percentage","nameLocation":"979:10:7","nodeType":"VariableDeclaration","scope":457,"src":"972:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":453,"name":"uint32","nodeType":"ElementaryTypeName","src":"972:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"971:19:7"},"returnParameters":{"id":456,"nodeType":"ParameterList","parameters":[],"src":"999:0:7"},"scope":560,"src":"938:62:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":458,"nodeType":"StructuredDocumentation","src":"1006:183:7","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":463,"implemented":false,"kind":"function","modifiers":[],"name":"setCurationTokenMaster","nameLocation":"1203:22:7","nodeType":"FunctionDefinition","parameters":{"id":461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":460,"mutability":"mutable","name":"curationTokenMaster","nameLocation":"1234:19:7","nodeType":"VariableDeclaration","scope":463,"src":"1226:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":459,"name":"address","nodeType":"ElementaryTypeName","src":"1226:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1225:29:7"},"returnParameters":{"id":462,"nodeType":"ParameterList","parameters":[],"src":"1263:0:7"},"scope":560,"src":"1194:70:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":464,"nodeType":"StructuredDocumentation","src":"1293:408:7","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":477,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"1715:4:7","nodeType":"FunctionDefinition","parameters":{"id":471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":466,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"1737:20:7","nodeType":"VariableDeclaration","scope":477,"src":"1729:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":465,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1729:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":468,"mutability":"mutable","name":"tokensIn","nameLocation":"1775:8:7","nodeType":"VariableDeclaration","scope":477,"src":"1767:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":467,"name":"uint256","nodeType":"ElementaryTypeName","src":"1767:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":470,"mutability":"mutable","name":"signalOutMin","nameLocation":"1801:12:7","nodeType":"VariableDeclaration","scope":477,"src":"1793:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":469,"name":"uint256","nodeType":"ElementaryTypeName","src":"1793:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1719:100:7"},"returnParameters":{"id":476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":473,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":477,"src":"1838:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":472,"name":"uint256","nodeType":"ElementaryTypeName","src":"1838:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":475,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":477,"src":"1847:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":474,"name":"uint256","nodeType":"ElementaryTypeName","src":"1847:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1837:18:7"},"scope":560,"src":"1706:150:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":478,"nodeType":"StructuredDocumentation","src":"1862:319:7","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":489,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"2195:4:7","nodeType":"FunctionDefinition","parameters":{"id":485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":480,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"2208:20:7","nodeType":"VariableDeclaration","scope":489,"src":"2200:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":479,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2200:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":482,"mutability":"mutable","name":"signalIn","nameLocation":"2238:8:7","nodeType":"VariableDeclaration","scope":489,"src":"2230:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":481,"name":"uint256","nodeType":"ElementaryTypeName","src":"2230:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":484,"mutability":"mutable","name":"tokensOutMin","nameLocation":"2256:12:7","nodeType":"VariableDeclaration","scope":489,"src":"2248:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":483,"name":"uint256","nodeType":"ElementaryTypeName","src":"2248:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2199:70:7"},"returnParameters":{"id":488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":489,"src":"2288:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":486,"name":"uint256","nodeType":"ElementaryTypeName","src":"2288:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2287:9:7"},"scope":560,"src":"2186:111:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":490,"nodeType":"StructuredDocumentation","src":"2303:264:7","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":497,"implemented":false,"kind":"function","modifiers":[],"name":"collect","nameLocation":"2581:7:7","nodeType":"FunctionDefinition","parameters":{"id":495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":492,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"2597:20:7","nodeType":"VariableDeclaration","scope":497,"src":"2589:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":491,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2589:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":494,"mutability":"mutable","name":"tokens","nameLocation":"2627:6:7","nodeType":"VariableDeclaration","scope":497,"src":"2619:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":493,"name":"uint256","nodeType":"ElementaryTypeName","src":"2619:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2588:46:7"},"returnParameters":{"id":496,"nodeType":"ParameterList","parameters":[],"src":"2643:0:7"},"scope":560,"src":"2572:72:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":498,"nodeType":"StructuredDocumentation","src":"2672:212:7","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":505,"implemented":false,"kind":"function","modifiers":[],"name":"isCurated","nameLocation":"2898:9:7","nodeType":"FunctionDefinition","parameters":{"id":501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":500,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"2916:20:7","nodeType":"VariableDeclaration","scope":505,"src":"2908:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":499,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2908:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2907:30:7"},"returnParameters":{"id":504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":503,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":505,"src":"2961:4:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":502,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2960:6:7"},"scope":560,"src":"2889:78:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":506,"nodeType":"StructuredDocumentation","src":"2973:288:7","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":515,"implemented":false,"kind":"function","modifiers":[],"name":"getCuratorSignal","nameLocation":"3275:16:7","nodeType":"FunctionDefinition","parameters":{"id":511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":508,"mutability":"mutable","name":"curator","nameLocation":"3300:7:7","nodeType":"VariableDeclaration","scope":515,"src":"3292:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":507,"name":"address","nodeType":"ElementaryTypeName","src":"3292:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":510,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"3317:20:7","nodeType":"VariableDeclaration","scope":515,"src":"3309:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":509,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3309:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3291:47:7"},"returnParameters":{"id":514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":513,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":515,"src":"3362:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":512,"name":"uint256","nodeType":"ElementaryTypeName","src":"3362:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3361:9:7"},"scope":560,"src":"3266:105:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":516,"nodeType":"StructuredDocumentation","src":"3377:207:7","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":523,"implemented":false,"kind":"function","modifiers":[],"name":"getCurationPoolSignal","nameLocation":"3598:21:7","nodeType":"FunctionDefinition","parameters":{"id":519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":518,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"3628:20:7","nodeType":"VariableDeclaration","scope":523,"src":"3620:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3620:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3619:30:7"},"returnParameters":{"id":522,"nodeType":"ParameterList","parameters":[{"constant":false,"id":521,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":523,"src":"3673:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":520,"name":"uint256","nodeType":"ElementaryTypeName","src":"3673:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3672:9:7"},"scope":560,"src":"3589:93:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":524,"nodeType":"StructuredDocumentation","src":"3688:209:7","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":531,"implemented":false,"kind":"function","modifiers":[],"name":"getCurationPoolTokens","nameLocation":"3911:21:7","nodeType":"FunctionDefinition","parameters":{"id":527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":526,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"3941:20:7","nodeType":"VariableDeclaration","scope":531,"src":"3933:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":525,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3933:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3932:30:7"},"returnParameters":{"id":530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":529,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":531,"src":"3986:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":528,"name":"uint256","nodeType":"ElementaryTypeName","src":"3986:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3985:9:7"},"scope":560,"src":"3902:93:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":532,"nodeType":"StructuredDocumentation","src":"4001:414:7","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":543,"implemented":false,"kind":"function","modifiers":[],"name":"tokensToSignal","nameLocation":"4429:14:7","nodeType":"FunctionDefinition","parameters":{"id":537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":534,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"4452:20:7","nodeType":"VariableDeclaration","scope":543,"src":"4444:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":533,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4444:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":536,"mutability":"mutable","name":"tokensIn","nameLocation":"4482:8:7","nodeType":"VariableDeclaration","scope":543,"src":"4474:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":535,"name":"uint256","nodeType":"ElementaryTypeName","src":"4474:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4443:48:7"},"returnParameters":{"id":542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":539,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":543,"src":"4515:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":538,"name":"uint256","nodeType":"ElementaryTypeName","src":"4515:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":541,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":543,"src":"4524:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":540,"name":"uint256","nodeType":"ElementaryTypeName","src":"4524:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4514:18:7"},"scope":560,"src":"4420:113:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":544,"nodeType":"StructuredDocumentation","src":"4539:294:7","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":553,"implemented":false,"kind":"function","modifiers":[],"name":"signalToTokens","nameLocation":"4847:14:7","nodeType":"FunctionDefinition","parameters":{"id":549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":546,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"4870:20:7","nodeType":"VariableDeclaration","scope":553,"src":"4862:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":545,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4862:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":548,"mutability":"mutable","name":"signalIn","nameLocation":"4900:8:7","nodeType":"VariableDeclaration","scope":553,"src":"4892:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":547,"name":"uint256","nodeType":"ElementaryTypeName","src":"4892:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4861:48:7"},"returnParameters":{"id":552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":551,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":553,"src":"4933:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":550,"name":"uint256","nodeType":"ElementaryTypeName","src":"4933:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4932:9:7"},"scope":560,"src":"4838:104:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":554,"nodeType":"StructuredDocumentation","src":"4948:199:7","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":559,"implemented":false,"kind":"function","modifiers":[],"name":"curationTaxPercentage","nameLocation":"5161:21:7","nodeType":"FunctionDefinition","parameters":{"id":555,"nodeType":"ParameterList","parameters":[],"src":"5182:2:7"},"returnParameters":{"id":558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":557,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":559,"src":"5208:6:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":556,"name":"uint32","nodeType":"ElementaryTypeName","src":"5208:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"5207:8:7"},"scope":560,"src":"5152:64:7","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":561,"src":"209:5009:7","usedErrors":[],"usedEvents":[]}],"src":"46:5173:7"},"id":7},"contracts/contracts/discovery/IGNS.sol":{"ast":{"absolutePath":"contracts/contracts/discovery/IGNS.sol","exportedSymbols":{"IGNS":[786]},"id":787,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":562,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:8"},{"abstract":false,"baseContracts":[],"canonicalName":"IGNS","contractDependencies":[],"contractKind":"interface","documentation":{"id":563,"nodeType":"StructuredDocumentation","src":"81:120:8","text":" @title Interface for GNS\n @author Edge & Node\n @notice Interface for the Graph Name System (GNS) contract"},"fullyImplemented":false,"id":786,"linearizedBaseContracts":[786],"name":"IGNS","nameLocation":"212:4:8","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IGNS.SubgraphData","documentation":{"id":564,"nodeType":"StructuredDocumentation","src":"242:751:8","text":" @dev The SubgraphData struct holds information about subgraphs\n and their signal; both nSignal (i.e. name signal at the GNS level)\n and vSignal (i.e. version signal at the Curation contract level)\n @param vSignal The token of the subgraph-deployment bonding curve\n @param nSignal The token of the subgraph bonding curve\n @param curatorNSignal Mapping of curator addresses to their name signal amounts\n @param subgraphDeploymentID The deployment ID this subgraph points to\n @param __DEPRECATED_reserveRatio Deprecated reserve ratio field\n @param disabled Whether the subgraph is disabled/deprecated\n @param withdrawableGRT Amount of GRT available for withdrawal after deprecation"},"id":581,"members":[{"constant":false,"id":566,"mutability":"mutable","name":"vSignal","nameLocation":"1036:7:8","nodeType":"VariableDeclaration","scope":581,"src":"1028:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":565,"name":"uint256","nodeType":"ElementaryTypeName","src":"1028:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":568,"mutability":"mutable","name":"nSignal","nameLocation":"1115:7:8","nodeType":"VariableDeclaration","scope":581,"src":"1107:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":567,"name":"uint256","nodeType":"ElementaryTypeName","src":"1107:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":572,"mutability":"mutable","name":"curatorNSignal","nameLocation":"1203:14:8","nodeType":"VariableDeclaration","scope":581,"src":"1175:42:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":571,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":569,"name":"address","nodeType":"ElementaryTypeName","src":"1183:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1175:27:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":570,"name":"uint256","nodeType":"ElementaryTypeName","src":"1194:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":574,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"1235:20:8","nodeType":"VariableDeclaration","scope":581,"src":"1227:28:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":573,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1227:7:8","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":576,"mutability":"mutable","name":"__DEPRECATED_reserveRatio","nameLocation":"1272:25:8","nodeType":"VariableDeclaration","scope":581,"src":"1265:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":575,"name":"uint32","nodeType":"ElementaryTypeName","src":"1265:6:8","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":578,"mutability":"mutable","name":"disabled","nameLocation":"1355:8:8","nodeType":"VariableDeclaration","scope":581,"src":"1350:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":577,"name":"bool","nodeType":"ElementaryTypeName","src":"1350:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":580,"mutability":"mutable","name":"withdrawableGRT","nameLocation":"1381:15:8","nodeType":"VariableDeclaration","scope":581,"src":"1373:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":579,"name":"uint256","nodeType":"ElementaryTypeName","src":"1373:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SubgraphData","nameLocation":"1005:12:8","nodeType":"StructDefinition","scope":786,"src":"998:405:8","visibility":"public"},{"canonicalName":"IGNS.LegacySubgraphKey","documentation":{"id":582,"nodeType":"StructuredDocumentation","src":"1409:282:8","text":" @dev The LegacySubgraphKey struct holds the account and sequence ID\n used to generate subgraph IDs in legacy subgraphs.\n @param account The account that created the legacy subgraph\n @param accountSeqID The sequence ID for the account's subgraphs"},"id":587,"members":[{"constant":false,"id":584,"mutability":"mutable","name":"account","nameLocation":"1739:7:8","nodeType":"VariableDeclaration","scope":587,"src":"1731:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":583,"name":"address","nodeType":"ElementaryTypeName","src":"1731:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":586,"mutability":"mutable","name":"accountSeqID","nameLocation":"1764:12:8","nodeType":"VariableDeclaration","scope":587,"src":"1756:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":585,"name":"uint256","nodeType":"ElementaryTypeName","src":"1756:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"LegacySubgraphKey","nameLocation":"1703:17:8","nodeType":"StructDefinition","scope":786,"src":"1696:87:8","visibility":"public"},{"documentation":{"id":588,"nodeType":"StructuredDocumentation","src":"1817:67:8","text":" @notice Approve curation contract to pull funds."},"functionSelector":"380d0c08","id":591,"implemented":false,"kind":"function","modifiers":[],"name":"approveAll","nameLocation":"1898:10:8","nodeType":"FunctionDefinition","parameters":{"id":589,"nodeType":"ParameterList","parameters":[],"src":"1908:2:8"},"returnParameters":{"id":590,"nodeType":"ParameterList","parameters":[],"src":"1919:0:8"},"scope":786,"src":"1889:31:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":592,"nodeType":"StructuredDocumentation","src":"1926:269:8","text":" @notice Set the owner fee percentage. This is used to prevent a subgraph owner to drain all\n the name curators tokens while upgrading or deprecating and is configurable in parts per million.\n @param ownerTaxPercentage Owner tax percentage"},"functionSelector":"b78edf70","id":597,"implemented":false,"kind":"function","modifiers":[],"name":"setOwnerTaxPercentage","nameLocation":"2209:21:8","nodeType":"FunctionDefinition","parameters":{"id":595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":594,"mutability":"mutable","name":"ownerTaxPercentage","nameLocation":"2238:18:8","nodeType":"VariableDeclaration","scope":597,"src":"2231:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":593,"name":"uint32","nodeType":"ElementaryTypeName","src":"2231:6:8","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2230:27:8"},"returnParameters":{"id":596,"nodeType":"ParameterList","parameters":[],"src":"2266:0:8"},"scope":786,"src":"2200:67:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":598,"nodeType":"StructuredDocumentation","src":"2298:359:8","text":" @notice Allows a graph account to set a default name\n @param graphAccount Account that is setting its name\n @param nameSystem Name system account already has ownership of a name in\n @param nameIdentifier The unique identifier that is used to identify the name in the system\n @param name The name being set as default"},"functionSelector":"cc2d23c7","id":609,"implemented":false,"kind":"function","modifiers":[],"name":"setDefaultName","nameLocation":"2671:14:8","nodeType":"FunctionDefinition","parameters":{"id":607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":600,"mutability":"mutable","name":"graphAccount","nameLocation":"2703:12:8","nodeType":"VariableDeclaration","scope":609,"src":"2695:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":599,"name":"address","nodeType":"ElementaryTypeName","src":"2695:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":602,"mutability":"mutable","name":"nameSystem","nameLocation":"2731:10:8","nodeType":"VariableDeclaration","scope":609,"src":"2725:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":601,"name":"uint8","nodeType":"ElementaryTypeName","src":"2725:5:8","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":604,"mutability":"mutable","name":"nameIdentifier","nameLocation":"2759:14:8","nodeType":"VariableDeclaration","scope":609,"src":"2751:22:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":603,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2751:7:8","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":606,"mutability":"mutable","name":"name","nameLocation":"2799:4:8","nodeType":"VariableDeclaration","scope":609,"src":"2783:20:8","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":605,"name":"string","nodeType":"ElementaryTypeName","src":"2783:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2685:124:8"},"returnParameters":{"id":608,"nodeType":"ParameterList","parameters":[],"src":"2818:0:8"},"scope":786,"src":"2662:157:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":610,"nodeType":"StructuredDocumentation","src":"2825:211:8","text":" @notice Allows a subgraph owner to update the metadata of a subgraph they have published\n @param subgraphID Subgraph ID\n @param subgraphMetadata IPFS hash for the subgraph metadata"},"functionSelector":"d916f277","id":617,"implemented":false,"kind":"function","modifiers":[],"name":"updateSubgraphMetadata","nameLocation":"3050:22:8","nodeType":"FunctionDefinition","parameters":{"id":615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":612,"mutability":"mutable","name":"subgraphID","nameLocation":"3081:10:8","nodeType":"VariableDeclaration","scope":617,"src":"3073:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":611,"name":"uint256","nodeType":"ElementaryTypeName","src":"3073:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":614,"mutability":"mutable","name":"subgraphMetadata","nameLocation":"3101:16:8","nodeType":"VariableDeclaration","scope":617,"src":"3093:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":613,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3093:7:8","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3072:46:8"},"returnParameters":{"id":616,"nodeType":"ParameterList","parameters":[],"src":"3127:0:8"},"scope":786,"src":"3041:87:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":618,"nodeType":"StructuredDocumentation","src":"3134:263:8","text":" @notice Publish a new subgraph.\n @param subgraphDeploymentID Subgraph deployment for the subgraph\n @param versionMetadata IPFS hash for the subgraph version metadata\n @param subgraphMetadata IPFS hash for the subgraph metadata"},"functionSelector":"7ba95862","id":627,"implemented":false,"kind":"function","modifiers":[],"name":"publishNewSubgraph","nameLocation":"3411:18:8","nodeType":"FunctionDefinition","parameters":{"id":625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":620,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"3447:20:8","nodeType":"VariableDeclaration","scope":627,"src":"3439:28:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":619,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3439:7:8","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":622,"mutability":"mutable","name":"versionMetadata","nameLocation":"3485:15:8","nodeType":"VariableDeclaration","scope":627,"src":"3477:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":621,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3477:7:8","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":624,"mutability":"mutable","name":"subgraphMetadata","nameLocation":"3518:16:8","nodeType":"VariableDeclaration","scope":627,"src":"3510:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":623,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3510:7:8","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3429:111:8"},"returnParameters":{"id":626,"nodeType":"ParameterList","parameters":[],"src":"3549:0:8"},"scope":786,"src":"3402:148:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":628,"nodeType":"StructuredDocumentation","src":"3556:261:8","text":" @notice Publish a new version of an existing subgraph.\n @param subgraphID Subgraph ID\n @param subgraphDeploymentID Subgraph deployment ID of the new version\n @param versionMetadata IPFS hash for the subgraph version metadata"},"functionSelector":"e1329732","id":637,"implemented":false,"kind":"function","modifiers":[],"name":"publishNewVersion","nameLocation":"3831:17:8","nodeType":"FunctionDefinition","parameters":{"id":635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":630,"mutability":"mutable","name":"subgraphID","nameLocation":"3857:10:8","nodeType":"VariableDeclaration","scope":637,"src":"3849:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":629,"name":"uint256","nodeType":"ElementaryTypeName","src":"3849:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":632,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"3877:20:8","nodeType":"VariableDeclaration","scope":637,"src":"3869:28:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":631,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3869:7:8","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":634,"mutability":"mutable","name":"versionMetadata","nameLocation":"3907:15:8","nodeType":"VariableDeclaration","scope":637,"src":"3899:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":633,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3899:7:8","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3848:75:8"},"returnParameters":{"id":636,"nodeType":"ParameterList","parameters":[],"src":"3932:0:8"},"scope":786,"src":"3822:111:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":638,"nodeType":"StructuredDocumentation","src":"3939:297:8","text":" @notice Deprecate a subgraph. The bonding curve is destroyed, the vSignal is burned, and the GNS\n contract holds the GRT from burning the vSignal, which all curators can withdraw manually.\n Can only be done by the subgraph owner.\n @param subgraphID Subgraph ID"},"functionSelector":"56ee0a85","id":643,"implemented":false,"kind":"function","modifiers":[],"name":"deprecateSubgraph","nameLocation":"4250:17:8","nodeType":"FunctionDefinition","parameters":{"id":641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":640,"mutability":"mutable","name":"subgraphID","nameLocation":"4276:10:8","nodeType":"VariableDeclaration","scope":643,"src":"4268:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":639,"name":"uint256","nodeType":"ElementaryTypeName","src":"4268:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4267:20:8"},"returnParameters":{"id":642,"nodeType":"ParameterList","parameters":[],"src":"4296:0:8"},"scope":786,"src":"4241:56:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":644,"nodeType":"StructuredDocumentation","src":"4326:263:8","text":" @notice Deposit GRT into a subgraph and mint signal.\n @param subgraphID Subgraph ID\n @param tokensIn The amount of tokens the nameCurator wants to deposit\n @param nSignalOutMin Expected minimum amount of name signal to receive"},"functionSelector":"d8825386","id":653,"implemented":false,"kind":"function","modifiers":[],"name":"mintSignal","nameLocation":"4603:10:8","nodeType":"FunctionDefinition","parameters":{"id":651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":646,"mutability":"mutable","name":"subgraphID","nameLocation":"4622:10:8","nodeType":"VariableDeclaration","scope":653,"src":"4614:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":645,"name":"uint256","nodeType":"ElementaryTypeName","src":"4614:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":648,"mutability":"mutable","name":"tokensIn","nameLocation":"4642:8:8","nodeType":"VariableDeclaration","scope":653,"src":"4634:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":647,"name":"uint256","nodeType":"ElementaryTypeName","src":"4634:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":650,"mutability":"mutable","name":"nSignalOutMin","nameLocation":"4660:13:8","nodeType":"VariableDeclaration","scope":653,"src":"4652:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":649,"name":"uint256","nodeType":"ElementaryTypeName","src":"4652:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4613:61:8"},"returnParameters":{"id":652,"nodeType":"ParameterList","parameters":[],"src":"4683:0:8"},"scope":786,"src":"4594:90:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":654,"nodeType":"StructuredDocumentation","src":"4690:256:8","text":" @notice Burn signal for a subgraph and return the GRT.\n @param subgraphID Subgraph ID\n @param nSignal The amount of nSignal the nameCurator wants to burn\n @param tokensOutMin Expected minimum amount of tokens to receive"},"functionSelector":"7bd1b0bf","id":663,"implemented":false,"kind":"function","modifiers":[],"name":"burnSignal","nameLocation":"4960:10:8","nodeType":"FunctionDefinition","parameters":{"id":661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":656,"mutability":"mutable","name":"subgraphID","nameLocation":"4979:10:8","nodeType":"VariableDeclaration","scope":663,"src":"4971:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":655,"name":"uint256","nodeType":"ElementaryTypeName","src":"4971:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":658,"mutability":"mutable","name":"nSignal","nameLocation":"4999:7:8","nodeType":"VariableDeclaration","scope":663,"src":"4991:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":657,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":660,"mutability":"mutable","name":"tokensOutMin","nameLocation":"5016:12:8","nodeType":"VariableDeclaration","scope":663,"src":"5008:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":659,"name":"uint256","nodeType":"ElementaryTypeName","src":"5008:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4970:59:8"},"returnParameters":{"id":662,"nodeType":"ParameterList","parameters":[],"src":"5038:0:8"},"scope":786,"src":"4951:88:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":664,"nodeType":"StructuredDocumentation","src":"5045:220:8","text":" @notice Move subgraph signal from sender to `recipient`\n @param subgraphID Subgraph ID\n @param recipient Address to send the signal to\n @param amount The amount of nSignal to transfer"},"functionSelector":"63bd3abe","id":673,"implemented":false,"kind":"function","modifiers":[],"name":"transferSignal","nameLocation":"5279:14:8","nodeType":"FunctionDefinition","parameters":{"id":671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":666,"mutability":"mutable","name":"subgraphID","nameLocation":"5302:10:8","nodeType":"VariableDeclaration","scope":673,"src":"5294:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":665,"name":"uint256","nodeType":"ElementaryTypeName","src":"5294:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":668,"mutability":"mutable","name":"recipient","nameLocation":"5322:9:8","nodeType":"VariableDeclaration","scope":673,"src":"5314:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":667,"name":"address","nodeType":"ElementaryTypeName","src":"5314:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":670,"mutability":"mutable","name":"amount","nameLocation":"5341:6:8","nodeType":"VariableDeclaration","scope":673,"src":"5333:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":669,"name":"uint256","nodeType":"ElementaryTypeName","src":"5333:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5293:55:8"},"returnParameters":{"id":672,"nodeType":"ParameterList","parameters":[],"src":"5357:0:8"},"scope":786,"src":"5270:88:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":674,"nodeType":"StructuredDocumentation","src":"5364:253:8","text":" @notice Withdraw tokens from a deprecated subgraph.\n When the subgraph is deprecated, any curator can call this function and\n withdraw the GRT they are entitled for its original deposit\n @param subgraphID Subgraph ID"},"functionSelector":"2e1a7d4d","id":679,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"5631:8:8","nodeType":"FunctionDefinition","parameters":{"id":677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":676,"mutability":"mutable","name":"subgraphID","nameLocation":"5648:10:8","nodeType":"VariableDeclaration","scope":679,"src":"5640:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":675,"name":"uint256","nodeType":"ElementaryTypeName","src":"5640:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5639:20:8"},"returnParameters":{"id":678,"nodeType":"ParameterList","parameters":[],"src":"5668:0:8"},"scope":786,"src":"5622:47:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":680,"nodeType":"StructuredDocumentation","src":"5697:121:8","text":" @notice Return the owner of a subgraph.\n @param tokenID Subgraph ID\n @return Owner address"},"functionSelector":"6352211e","id":687,"implemented":false,"kind":"function","modifiers":[],"name":"ownerOf","nameLocation":"5832:7:8","nodeType":"FunctionDefinition","parameters":{"id":683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":682,"mutability":"mutable","name":"tokenID","nameLocation":"5848:7:8","nodeType":"VariableDeclaration","scope":687,"src":"5840:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":681,"name":"uint256","nodeType":"ElementaryTypeName","src":"5840:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5839:17:8"},"returnParameters":{"id":686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":685,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":687,"src":"5880:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":684,"name":"address","nodeType":"ElementaryTypeName","src":"5880:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5879:9:8"},"scope":786,"src":"5823:66:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":688,"nodeType":"StructuredDocumentation","src":"5895:148:8","text":" @notice Return the total signal on the subgraph.\n @param subgraphID Subgraph ID\n @return Total signal on the subgraph"},"functionSelector":"be8f4920","id":695,"implemented":false,"kind":"function","modifiers":[],"name":"subgraphSignal","nameLocation":"6057:14:8","nodeType":"FunctionDefinition","parameters":{"id":691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":690,"mutability":"mutable","name":"subgraphID","nameLocation":"6080:10:8","nodeType":"VariableDeclaration","scope":695,"src":"6072:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":689,"name":"uint256","nodeType":"ElementaryTypeName","src":"6072:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6071:20:8"},"returnParameters":{"id":694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":695,"src":"6115:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":692,"name":"uint256","nodeType":"ElementaryTypeName","src":"6115:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6114:9:8"},"scope":786,"src":"6048:76:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":696,"nodeType":"StructuredDocumentation","src":"6130:165:8","text":" @notice Return the total tokens on the subgraph at current value.\n @param subgraphID Subgraph ID\n @return Total tokens on the subgraph"},"functionSelector":"4dbecf2f","id":703,"implemented":false,"kind":"function","modifiers":[],"name":"subgraphTokens","nameLocation":"6309:14:8","nodeType":"FunctionDefinition","parameters":{"id":699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":698,"mutability":"mutable","name":"subgraphID","nameLocation":"6332:10:8","nodeType":"VariableDeclaration","scope":703,"src":"6324:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":697,"name":"uint256","nodeType":"ElementaryTypeName","src":"6324:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6323:20:8"},"returnParameters":{"id":702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":701,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":703,"src":"6367:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":700,"name":"uint256","nodeType":"ElementaryTypeName","src":"6367:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6366:9:8"},"scope":786,"src":"6300:76:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":704,"nodeType":"StructuredDocumentation","src":"6382:352:8","text":" @notice Calculate subgraph signal to be returned for an amount of tokens.\n @param subgraphID Subgraph ID\n @param tokensIn Tokens being exchanged for subgraph signal\n @return Amount of subgraph signal that can be bought\n @return Amount of version signal that can be bought\n @return Amount of curation tax"},"functionSelector":"53f615c9","id":717,"implemented":false,"kind":"function","modifiers":[],"name":"tokensToNSignal","nameLocation":"6748:15:8","nodeType":"FunctionDefinition","parameters":{"id":709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":706,"mutability":"mutable","name":"subgraphID","nameLocation":"6772:10:8","nodeType":"VariableDeclaration","scope":717,"src":"6764:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":705,"name":"uint256","nodeType":"ElementaryTypeName","src":"6764:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":708,"mutability":"mutable","name":"tokensIn","nameLocation":"6792:8:8","nodeType":"VariableDeclaration","scope":717,"src":"6784:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":707,"name":"uint256","nodeType":"ElementaryTypeName","src":"6784:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6763:38:8"},"returnParameters":{"id":716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":711,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":717,"src":"6825:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":710,"name":"uint256","nodeType":"ElementaryTypeName","src":"6825:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":713,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":717,"src":"6834:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":712,"name":"uint256","nodeType":"ElementaryTypeName","src":"6834:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":715,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":717,"src":"6843:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":714,"name":"uint256","nodeType":"ElementaryTypeName","src":"6843:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6824:27:8"},"scope":786,"src":"6739:113:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":718,"nodeType":"StructuredDocumentation","src":"6858:313:8","text":" @notice Calculate tokens returned for an amount of subgraph signal.\n @param subgraphID Subgraph ID\n @param nSignalIn Subgraph signal being exchanged for tokens\n @return Amount of tokens returned for an amount of subgraph signal\n @return Amount of version signal returned"},"functionSelector":"b43f6a02","id":729,"implemented":false,"kind":"function","modifiers":[],"name":"nSignalToTokens","nameLocation":"7185:15:8","nodeType":"FunctionDefinition","parameters":{"id":723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":720,"mutability":"mutable","name":"subgraphID","nameLocation":"7209:10:8","nodeType":"VariableDeclaration","scope":729,"src":"7201:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":719,"name":"uint256","nodeType":"ElementaryTypeName","src":"7201:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":722,"mutability":"mutable","name":"nSignalIn","nameLocation":"7229:9:8","nodeType":"VariableDeclaration","scope":729,"src":"7221:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":721,"name":"uint256","nodeType":"ElementaryTypeName","src":"7221:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7200:39:8"},"returnParameters":{"id":728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":725,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":729,"src":"7263:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":724,"name":"uint256","nodeType":"ElementaryTypeName","src":"7263:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":727,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":729,"src":"7272:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":726,"name":"uint256","nodeType":"ElementaryTypeName","src":"7272:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7262:18:8"},"scope":786,"src":"7176:105:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":730,"nodeType":"StructuredDocumentation","src":"7287:302:8","text":" @notice Calculate subgraph signal to be returned for an amount of subgraph deployment signal.\n @param subgraphID Subgraph ID\n @param vSignalIn Amount of subgraph deployment signal to exchange for subgraph signal\n @return Amount of subgraph signal that can be bought"},"functionSelector":"a49a15f1","id":739,"implemented":false,"kind":"function","modifiers":[],"name":"vSignalToNSignal","nameLocation":"7603:16:8","nodeType":"FunctionDefinition","parameters":{"id":735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":732,"mutability":"mutable","name":"subgraphID","nameLocation":"7628:10:8","nodeType":"VariableDeclaration","scope":739,"src":"7620:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":731,"name":"uint256","nodeType":"ElementaryTypeName","src":"7620:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":734,"mutability":"mutable","name":"vSignalIn","nameLocation":"7648:9:8","nodeType":"VariableDeclaration","scope":739,"src":"7640:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":733,"name":"uint256","nodeType":"ElementaryTypeName","src":"7640:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7619:39:8"},"returnParameters":{"id":738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":739,"src":"7682:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":736,"name":"uint256","nodeType":"ElementaryTypeName","src":"7682:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7681:9:8"},"scope":786,"src":"7594:97:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":740,"nodeType":"StructuredDocumentation","src":"7697:309:8","text":" @notice Calculate subgraph deployment signal to be returned for an amount of subgraph signal.\n @param subgraphID Subgraph ID\n @param nSignalIn Subgraph signal being exchanged for subgraph deployment signal\n @return Amount of subgraph deployment signal that can be returned"},"functionSelector":"d495f9a7","id":749,"implemented":false,"kind":"function","modifiers":[],"name":"nSignalToVSignal","nameLocation":"8020:16:8","nodeType":"FunctionDefinition","parameters":{"id":745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":742,"mutability":"mutable","name":"subgraphID","nameLocation":"8045:10:8","nodeType":"VariableDeclaration","scope":749,"src":"8037:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":741,"name":"uint256","nodeType":"ElementaryTypeName","src":"8037:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":744,"mutability":"mutable","name":"nSignalIn","nameLocation":"8065:9:8","nodeType":"VariableDeclaration","scope":749,"src":"8057:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":743,"name":"uint256","nodeType":"ElementaryTypeName","src":"8057:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8036:39:8"},"returnParameters":{"id":748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":747,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":749,"src":"8099:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":746,"name":"uint256","nodeType":"ElementaryTypeName","src":"8099:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8098:9:8"},"scope":786,"src":"8011:97:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":750,"nodeType":"StructuredDocumentation","src":"8114:210:8","text":" @notice Get the amount of subgraph signal a curator has.\n @param subgraphID Subgraph ID\n @param curator Curator address\n @return Amount of subgraph signal owned by a curator"},"functionSelector":"186722fa","id":759,"implemented":false,"kind":"function","modifiers":[],"name":"getCuratorSignal","nameLocation":"8338:16:8","nodeType":"FunctionDefinition","parameters":{"id":755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":752,"mutability":"mutable","name":"subgraphID","nameLocation":"8363:10:8","nodeType":"VariableDeclaration","scope":759,"src":"8355:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":751,"name":"uint256","nodeType":"ElementaryTypeName","src":"8355:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":754,"mutability":"mutable","name":"curator","nameLocation":"8383:7:8","nodeType":"VariableDeclaration","scope":759,"src":"8375:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":753,"name":"address","nodeType":"ElementaryTypeName","src":"8375:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8354:37:8"},"returnParameters":{"id":758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":759,"src":"8415:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":756,"name":"uint256","nodeType":"ElementaryTypeName","src":"8415:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8414:9:8"},"scope":786,"src":"8329:95:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":760,"nodeType":"StructuredDocumentation","src":"8430:165:8","text":" @notice Return whether a subgraph is published.\n @param subgraphID Subgraph ID\n @return Return true if subgraph is currently published"},"functionSelector":"7b156fb5","id":767,"implemented":false,"kind":"function","modifiers":[],"name":"isPublished","nameLocation":"8609:11:8","nodeType":"FunctionDefinition","parameters":{"id":763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":762,"mutability":"mutable","name":"subgraphID","nameLocation":"8629:10:8","nodeType":"VariableDeclaration","scope":767,"src":"8621:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":761,"name":"uint256","nodeType":"ElementaryTypeName","src":"8621:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8620:20:8"},"returnParameters":{"id":766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":767,"src":"8664:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":764,"name":"bool","nodeType":"ElementaryTypeName","src":"8664:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8663:6:8"},"scope":786,"src":"8600:70:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":768,"nodeType":"StructuredDocumentation","src":"8676:202:8","text":" @notice Return whether a subgraph is a legacy subgraph (created before subgraph NFTs).\n @param subgraphID Subgraph ID\n @return Return true if subgraph is a legacy subgraph"},"functionSelector":"d797f4bb","id":775,"implemented":false,"kind":"function","modifiers":[],"name":"isLegacySubgraph","nameLocation":"8892:16:8","nodeType":"FunctionDefinition","parameters":{"id":771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":770,"mutability":"mutable","name":"subgraphID","nameLocation":"8917:10:8","nodeType":"VariableDeclaration","scope":775,"src":"8909:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":769,"name":"uint256","nodeType":"ElementaryTypeName","src":"8909:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8908:20:8"},"returnParameters":{"id":774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":773,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":775,"src":"8952:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":772,"name":"bool","nodeType":"ElementaryTypeName","src":"8952:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8951:6:8"},"scope":786,"src":"8883:75:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":776,"nodeType":"StructuredDocumentation","src":"8964:297:8","text":" @notice Returns account and sequence ID for a legacy subgraph (created before subgraph NFTs).\n @param subgraphID Subgraph ID\n @return account Account that created the subgraph (or 0 if it's not a legacy subgraph)\n @return seqID Sequence number for the subgraph"},"functionSelector":"14a76fdb","id":785,"implemented":false,"kind":"function","modifiers":[],"name":"getLegacySubgraphKey","nameLocation":"9275:20:8","nodeType":"FunctionDefinition","parameters":{"id":779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":778,"mutability":"mutable","name":"subgraphID","nameLocation":"9304:10:8","nodeType":"VariableDeclaration","scope":785,"src":"9296:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":777,"name":"uint256","nodeType":"ElementaryTypeName","src":"9296:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9295:20:8"},"returnParameters":{"id":784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":781,"mutability":"mutable","name":"account","nameLocation":"9347:7:8","nodeType":"VariableDeclaration","scope":785,"src":"9339:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":780,"name":"address","nodeType":"ElementaryTypeName","src":"9339:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":783,"mutability":"mutable","name":"seqID","nameLocation":"9364:5:8","nodeType":"VariableDeclaration","scope":785,"src":"9356:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":782,"name":"uint256","nodeType":"ElementaryTypeName","src":"9356:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9338:32:8"},"scope":786,"src":"9266:105:8","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":787,"src":"202:9171:8","usedErrors":[],"usedEvents":[]}],"src":"46:9328:8"},"id":8},"contracts/contracts/discovery/IServiceRegistry.sol":{"ast":{"absolutePath":"contracts/contracts/discovery/IServiceRegistry.sol","exportedSymbols":{"IServiceRegistry":[832]},"id":833,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":788,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:9"},{"abstract":false,"baseContracts":[],"canonicalName":"IServiceRegistry","contractDependencies":[],"contractKind":"interface","documentation":{"id":789,"nodeType":"StructuredDocumentation","src":"81:163:9","text":" @title Service Registry Interface\n @author Edge & Node\n @notice Interface for the Service Registry contract that manages indexer service information"},"fullyImplemented":false,"id":832,"linearizedBaseContracts":[832],"name":"IServiceRegistry","nameLocation":"255:16:9","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IServiceRegistry.IndexerService","documentation":{"id":790,"nodeType":"StructuredDocumentation","src":"278:158:9","text":" @dev Indexer service information\n @param url URL of the indexer service\n @param geohash Geohash of the indexer service location"},"id":795,"members":[{"constant":false,"id":792,"mutability":"mutable","name":"url","nameLocation":"480:3:9","nodeType":"VariableDeclaration","scope":795,"src":"473:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":791,"name":"string","nodeType":"ElementaryTypeName","src":"473:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":794,"mutability":"mutable","name":"geohash","nameLocation":"500:7:9","nodeType":"VariableDeclaration","scope":795,"src":"493:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":793,"name":"string","nodeType":"ElementaryTypeName","src":"493:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"IndexerService","nameLocation":"448:14:9","nodeType":"StructDefinition","scope":832,"src":"441:73:9","visibility":"public"},{"documentation":{"id":796,"nodeType":"StructuredDocumentation","src":"520:161:9","text":" @notice Register an indexer service\n @param url URL of the indexer service\n @param geohash Geohash of the indexer service location"},"functionSelector":"3ffbd47f","id":803,"implemented":false,"kind":"function","modifiers":[],"name":"register","nameLocation":"695:8:9","nodeType":"FunctionDefinition","parameters":{"id":801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":798,"mutability":"mutable","name":"url","nameLocation":"720:3:9","nodeType":"VariableDeclaration","scope":803,"src":"704:19:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":797,"name":"string","nodeType":"ElementaryTypeName","src":"704:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":800,"mutability":"mutable","name":"geohash","nameLocation":"741:7:9","nodeType":"VariableDeclaration","scope":803,"src":"725:23:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":799,"name":"string","nodeType":"ElementaryTypeName","src":"725:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"703:46:9"},"returnParameters":{"id":802,"nodeType":"ParameterList","parameters":[],"src":"758:0:9"},"scope":832,"src":"686:73:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":804,"nodeType":"StructuredDocumentation","src":"765:206:9","text":" @notice Register an indexer service\n @param indexer Address of the indexer\n @param url URL of the indexer service\n @param geohash Geohash of the indexer service location"},"functionSelector":"cc02d54e","id":813,"implemented":false,"kind":"function","modifiers":[],"name":"registerFor","nameLocation":"985:11:9","nodeType":"FunctionDefinition","parameters":{"id":811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":806,"mutability":"mutable","name":"indexer","nameLocation":"1005:7:9","nodeType":"VariableDeclaration","scope":813,"src":"997:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":805,"name":"address","nodeType":"ElementaryTypeName","src":"997:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":808,"mutability":"mutable","name":"url","nameLocation":"1030:3:9","nodeType":"VariableDeclaration","scope":813,"src":"1014:19:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":807,"name":"string","nodeType":"ElementaryTypeName","src":"1014:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":810,"mutability":"mutable","name":"geohash","nameLocation":"1051:7:9","nodeType":"VariableDeclaration","scope":813,"src":"1035:23:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":809,"name":"string","nodeType":"ElementaryTypeName","src":"1035:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"996:63:9"},"returnParameters":{"id":812,"nodeType":"ParameterList","parameters":[],"src":"1068:0:9"},"scope":832,"src":"976:93:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":814,"nodeType":"StructuredDocumentation","src":"1075:56:9","text":" @notice Unregister an indexer service"},"functionSelector":"e79a198f","id":817,"implemented":false,"kind":"function","modifiers":[],"name":"unregister","nameLocation":"1145:10:9","nodeType":"FunctionDefinition","parameters":{"id":815,"nodeType":"ParameterList","parameters":[],"src":"1155:2:9"},"returnParameters":{"id":816,"nodeType":"ParameterList","parameters":[],"src":"1166:0:9"},"scope":832,"src":"1136:31:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":818,"nodeType":"StructuredDocumentation","src":"1173:101:9","text":" @notice Unregister an indexer service\n @param indexer Address of the indexer"},"functionSelector":"4d2e54a8","id":823,"implemented":false,"kind":"function","modifiers":[],"name":"unregisterFor","nameLocation":"1288:13:9","nodeType":"FunctionDefinition","parameters":{"id":821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":820,"mutability":"mutable","name":"indexer","nameLocation":"1310:7:9","nodeType":"VariableDeclaration","scope":823,"src":"1302:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":819,"name":"address","nodeType":"ElementaryTypeName","src":"1302:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1301:17:9"},"returnParameters":{"id":822,"nodeType":"ParameterList","parameters":[],"src":"1327:0:9"},"scope":832,"src":"1279:49:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":824,"nodeType":"StructuredDocumentation","src":"1334:181:9","text":" @notice Return the registration status of an indexer service\n @param indexer Address of the indexer\n @return True if the indexer service is registered"},"functionSelector":"c3c5a547","id":831,"implemented":false,"kind":"function","modifiers":[],"name":"isRegistered","nameLocation":"1529:12:9","nodeType":"FunctionDefinition","parameters":{"id":827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":826,"mutability":"mutable","name":"indexer","nameLocation":"1550:7:9","nodeType":"VariableDeclaration","scope":831,"src":"1542:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":825,"name":"address","nodeType":"ElementaryTypeName","src":"1542:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1541:17:9"},"returnParameters":{"id":830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":831,"src":"1582:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":828,"name":"bool","nodeType":"ElementaryTypeName","src":"1582:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1581:6:9"},"scope":832,"src":"1520:68:9","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":833,"src":"245:1345:9","usedErrors":[],"usedEvents":[]}],"src":"46:1545:9"},"id":9},"contracts/contracts/discovery/ISubgraphNFTDescriptor.sol":{"ast":{"absolutePath":"contracts/contracts/discovery/ISubgraphNFTDescriptor.sol","exportedSymbols":{"ISubgraphNFTDescriptor":[850]},"id":851,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":834,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:10"},{"abstract":false,"baseContracts":[],"canonicalName":"ISubgraphNFTDescriptor","contractDependencies":[],"contractKind":"interface","documentation":{"id":835,"nodeType":"StructuredDocumentation","src":"81:142:10","text":" @title Describes subgraph NFT tokens via URI\n @author Edge & Node\n @notice Interface for describing subgraph NFT tokens via URI"},"fullyImplemented":false,"id":850,"linearizedBaseContracts":[850],"name":"ISubgraphNFTDescriptor","nameLocation":"234:22:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":836,"nodeType":"StructuredDocumentation","src":"263:525:10","text":"@notice Produces the URI describing a particular token ID for a Subgraph\n @dev Note this URI may be data: URI with the JSON contents directly inlined\n @param minter Address of the allowed minter\n @param tokenId The ID of the subgraph NFT for which to produce a description, which may not be valid\n @param baseURI The base URI that could be prefixed to the final URI\n @param subgraphMetadata Subgraph metadata set for the subgraph\n @return The URI of the ERC721-compliant metadata"},"functionSelector":"bacc1fc5","id":849,"implemented":false,"kind":"function","modifiers":[],"name":"tokenURI","nameLocation":"802:8:10","nodeType":"FunctionDefinition","parameters":{"id":845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":838,"mutability":"mutable","name":"minter","nameLocation":"828:6:10","nodeType":"VariableDeclaration","scope":849,"src":"820:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":837,"name":"address","nodeType":"ElementaryTypeName","src":"820:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":840,"mutability":"mutable","name":"tokenId","nameLocation":"852:7:10","nodeType":"VariableDeclaration","scope":849,"src":"844:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":839,"name":"uint256","nodeType":"ElementaryTypeName","src":"844:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":842,"mutability":"mutable","name":"baseURI","nameLocation":"885:7:10","nodeType":"VariableDeclaration","scope":849,"src":"869:23:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":841,"name":"string","nodeType":"ElementaryTypeName","src":"869:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":844,"mutability":"mutable","name":"subgraphMetadata","nameLocation":"910:16:10","nodeType":"VariableDeclaration","scope":849,"src":"902:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":843,"name":"bytes32","nodeType":"ElementaryTypeName","src":"902:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"810:122:10"},"returnParameters":{"id":848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":847,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":849,"src":"956:13:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":846,"name":"string","nodeType":"ElementaryTypeName","src":"956:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"955:15:10"},"scope":850,"src":"793:178:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":851,"src":"224:749:10","usedErrors":[],"usedEvents":[]}],"src":"46:928:10"},"id":10},"contracts/contracts/discovery/erc1056/IEthereumDIDRegistry.sol":{"ast":{"absolutePath":"contracts/contracts/discovery/erc1056/IEthereumDIDRegistry.sol","exportedSymbols":{"IEthereumDIDRegistry":[874]},"id":875,"license":"Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":852,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"40:33:11"},{"abstract":false,"baseContracts":[],"canonicalName":"IEthereumDIDRegistry","contractDependencies":[],"contractKind":"interface","documentation":{"id":853,"nodeType":"StructuredDocumentation","src":"75:132:11","text":" @title Ethereum DID Registry Interface\n @author Edge & Node\n @notice Interface for the Ethereum DID Registry contract"},"fullyImplemented":false,"id":874,"linearizedBaseContracts":[874],"name":"IEthereumDIDRegistry","nameLocation":"218:20:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":854,"nodeType":"StructuredDocumentation","src":"245:148:11","text":" @notice Get the owner of an identity\n @param identity The identity address\n @return The address of the identity owner"},"functionSelector":"8733d4e8","id":861,"implemented":false,"kind":"function","modifiers":[],"name":"identityOwner","nameLocation":"407:13:11","nodeType":"FunctionDefinition","parameters":{"id":857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":856,"mutability":"mutable","name":"identity","nameLocation":"429:8:11","nodeType":"VariableDeclaration","scope":861,"src":"421:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":855,"name":"address","nodeType":"ElementaryTypeName","src":"421:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"420:18:11"},"returnParameters":{"id":860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":861,"src":"462:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":858,"name":"address","nodeType":"ElementaryTypeName","src":"462:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"461:9:11"},"scope":874,"src":"398:73:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":862,"nodeType":"StructuredDocumentation","src":"477:235:11","text":" @notice Set an attribute for an identity\n @param identity The identity address\n @param name The attribute name\n @param value The attribute value\n @param validity The validity period in seconds"},"functionSelector":"7ad4b0a4","id":873,"implemented":false,"kind":"function","modifiers":[],"name":"setAttribute","nameLocation":"726:12:11","nodeType":"FunctionDefinition","parameters":{"id":871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":864,"mutability":"mutable","name":"identity","nameLocation":"747:8:11","nodeType":"VariableDeclaration","scope":873,"src":"739:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":863,"name":"address","nodeType":"ElementaryTypeName","src":"739:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":866,"mutability":"mutable","name":"name","nameLocation":"765:4:11","nodeType":"VariableDeclaration","scope":873,"src":"757:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":865,"name":"bytes32","nodeType":"ElementaryTypeName","src":"757:7:11","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":868,"mutability":"mutable","name":"value","nameLocation":"786:5:11","nodeType":"VariableDeclaration","scope":873,"src":"771:20:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":867,"name":"bytes","nodeType":"ElementaryTypeName","src":"771:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":870,"mutability":"mutable","name":"validity","nameLocation":"801:8:11","nodeType":"VariableDeclaration","scope":873,"src":"793:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":869,"name":"uint256","nodeType":"ElementaryTypeName","src":"793:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"738:72:11"},"returnParameters":{"id":872,"nodeType":"ParameterList","parameters":[],"src":"819:0:11"},"scope":874,"src":"717:103:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":875,"src":"208:614:11","usedErrors":[],"usedEvents":[]}],"src":"40:783:11"},"id":11},"contracts/contracts/disputes/IDisputeManager.sol":{"ast":{"absolutePath":"contracts/contracts/disputes/IDisputeManager.sol","exportedSymbols":{"IDisputeManager":[1043]},"id":1044,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":876,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:12"},{"id":877,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"80:19:12"},{"abstract":false,"baseContracts":[],"canonicalName":"IDisputeManager","contractDependencies":[],"contractKind":"interface","documentation":{"id":878,"nodeType":"StructuredDocumentation","src":"101:161:12","text":" @title Dispute Manager Interface\n @author Edge & Node\n @notice Interface for the Dispute Manager contract that handles indexing and query disputes"},"fullyImplemented":false,"id":1043,"linearizedBaseContracts":[1043],"name":"IDisputeManager","nameLocation":"273:15:12","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IDisputeManager.DisputeType","documentation":{"id":879,"nodeType":"StructuredDocumentation","src":"317:61:12","text":" @dev Types of disputes that can be created"},"id":883,"members":[{"id":880,"name":"Null","nameLocation":"410:4:12","nodeType":"EnumValue","src":"410:4:12"},{"id":881,"name":"IndexingDispute","nameLocation":"424:15:12","nodeType":"EnumValue","src":"424:15:12"},{"id":882,"name":"QueryDispute","nameLocation":"449:12:12","nodeType":"EnumValue","src":"449:12:12"}],"name":"DisputeType","nameLocation":"388:11:12","nodeType":"EnumDefinition","src":"383:84:12"},{"canonicalName":"IDisputeManager.DisputeStatus","documentation":{"id":884,"nodeType":"StructuredDocumentation","src":"473:43:12","text":" @dev Status of a dispute"},"id":890,"members":[{"id":885,"name":"Null","nameLocation":"550:4:12","nodeType":"EnumValue","src":"550:4:12"},{"id":886,"name":"Accepted","nameLocation":"564:8:12","nodeType":"EnumValue","src":"564:8:12"},{"id":887,"name":"Rejected","nameLocation":"582:8:12","nodeType":"EnumValue","src":"582:8:12"},{"id":888,"name":"Drawn","nameLocation":"600:5:12","nodeType":"EnumValue","src":"600:5:12"},{"id":889,"name":"Pending","nameLocation":"615:7:12","nodeType":"EnumValue","src":"615:7:12"}],"name":"DisputeStatus","nameLocation":"526:13:12","nodeType":"EnumDefinition","src":"521:107:12"},{"canonicalName":"IDisputeManager.Dispute","documentation":{"id":891,"nodeType":"StructuredDocumentation","src":"634:481:12","text":" @dev Disputes contain info necessary for the Arbitrator to verify and resolve\n @param indexer Address of the indexer being disputed\n @param fisherman Address of the challenger creating the dispute\n @param deposit Amount of tokens staked as deposit\n @param relatedDisputeID ID of related dispute (for conflicting attestations)\n @param disputeType Type of dispute (Query or Indexing)\n @param status Current status of the dispute"},"id":906,"members":[{"constant":false,"id":893,"mutability":"mutable","name":"indexer","nameLocation":"1153:7:12","nodeType":"VariableDeclaration","scope":906,"src":"1145:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":892,"name":"address","nodeType":"ElementaryTypeName","src":"1145:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":895,"mutability":"mutable","name":"fisherman","nameLocation":"1178:9:12","nodeType":"VariableDeclaration","scope":906,"src":"1170:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":894,"name":"address","nodeType":"ElementaryTypeName","src":"1170:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":897,"mutability":"mutable","name":"deposit","nameLocation":"1205:7:12","nodeType":"VariableDeclaration","scope":906,"src":"1197:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":896,"name":"uint256","nodeType":"ElementaryTypeName","src":"1197:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":899,"mutability":"mutable","name":"relatedDisputeID","nameLocation":"1230:16:12","nodeType":"VariableDeclaration","scope":906,"src":"1222:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":898,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1222:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":902,"mutability":"mutable","name":"disputeType","nameLocation":"1268:11:12","nodeType":"VariableDeclaration","scope":906,"src":"1256:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DisputeType_$883","typeString":"enum IDisputeManager.DisputeType"},"typeName":{"id":901,"nodeType":"UserDefinedTypeName","pathNode":{"id":900,"name":"DisputeType","nameLocations":["1256:11:12"],"nodeType":"IdentifierPath","referencedDeclaration":883,"src":"1256:11:12"},"referencedDeclaration":883,"src":"1256:11:12","typeDescriptions":{"typeIdentifier":"t_enum$_DisputeType_$883","typeString":"enum IDisputeManager.DisputeType"}},"visibility":"internal"},{"constant":false,"id":905,"mutability":"mutable","name":"status","nameLocation":"1303:6:12","nodeType":"VariableDeclaration","scope":906,"src":"1289:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DisputeStatus_$890","typeString":"enum IDisputeManager.DisputeStatus"},"typeName":{"id":904,"nodeType":"UserDefinedTypeName","pathNode":{"id":903,"name":"DisputeStatus","nameLocations":["1289:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":890,"src":"1289:13:12"},"referencedDeclaration":890,"src":"1289:13:12","typeDescriptions":{"typeIdentifier":"t_enum$_DisputeStatus_$890","typeString":"enum IDisputeManager.DisputeStatus"}},"visibility":"internal"}],"name":"Dispute","nameLocation":"1127:7:12","nodeType":"StructDefinition","scope":1043,"src":"1120:196:12","visibility":"public"},{"canonicalName":"IDisputeManager.Receipt","documentation":{"id":907,"nodeType":"StructuredDocumentation","src":"1348:249:12","text":" @dev Receipt content sent from indexer in response to request\n @param requestCID Content ID of the request\n @param responseCID Content ID of the response\n @param subgraphDeploymentID ID of the subgraph deployment"},"id":914,"members":[{"constant":false,"id":909,"mutability":"mutable","name":"requestCID","nameLocation":"1635:10:12","nodeType":"VariableDeclaration","scope":914,"src":"1627:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":908,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1627:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":911,"mutability":"mutable","name":"responseCID","nameLocation":"1663:11:12","nodeType":"VariableDeclaration","scope":914,"src":"1655:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":910,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1655:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":913,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"1692:20:12","nodeType":"VariableDeclaration","scope":914,"src":"1684:28:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":912,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1684:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Receipt","nameLocation":"1609:7:12","nodeType":"StructDefinition","scope":1043,"src":"1602:117:12","visibility":"public"},{"canonicalName":"IDisputeManager.Attestation","documentation":{"id":915,"nodeType":"StructuredDocumentation","src":"1725:382:12","text":" @dev Attestation sent from indexer in response to a request\n @param requestCID Content ID of the request\n @param responseCID Content ID of the response\n @param subgraphDeploymentID ID of the subgraph deployment\n @param r R component of the signature\n @param s S component of the signature\n @param v Recovery ID of the signature"},"id":928,"members":[{"constant":false,"id":917,"mutability":"mutable","name":"requestCID","nameLocation":"2149:10:12","nodeType":"VariableDeclaration","scope":928,"src":"2141:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":916,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2141:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":919,"mutability":"mutable","name":"responseCID","nameLocation":"2177:11:12","nodeType":"VariableDeclaration","scope":928,"src":"2169:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":918,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2169:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":921,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"2206:20:12","nodeType":"VariableDeclaration","scope":928,"src":"2198:28:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":920,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2198:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":923,"mutability":"mutable","name":"r","nameLocation":"2244:1:12","nodeType":"VariableDeclaration","scope":928,"src":"2236:9:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":922,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2236:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":925,"mutability":"mutable","name":"s","nameLocation":"2263:1:12","nodeType":"VariableDeclaration","scope":928,"src":"2255:9:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":924,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2255:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":927,"mutability":"mutable","name":"v","nameLocation":"2280:1:12","nodeType":"VariableDeclaration","scope":928,"src":"2274:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":926,"name":"uint8","nodeType":"ElementaryTypeName","src":"2274:5:12","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"Attestation","nameLocation":"2119:11:12","nodeType":"StructDefinition","scope":1043,"src":"2112:176:12","visibility":"public"},{"documentation":{"id":929,"nodeType":"StructuredDocumentation","src":"2322:178:12","text":" @dev Set the arbitrator address.\n @notice Update the arbitrator to `arbitrator`\n @param arbitrator The address of the arbitration contract or party"},"functionSelector":"b0eefabe","id":934,"implemented":false,"kind":"function","modifiers":[],"name":"setArbitrator","nameLocation":"2514:13:12","nodeType":"FunctionDefinition","parameters":{"id":932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":931,"mutability":"mutable","name":"arbitrator","nameLocation":"2536:10:12","nodeType":"VariableDeclaration","scope":934,"src":"2528:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":930,"name":"address","nodeType":"ElementaryTypeName","src":"2528:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2527:20:12"},"returnParameters":{"id":933,"nodeType":"ParameterList","parameters":[],"src":"2556:0:12"},"scope":1043,"src":"2505:52:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":935,"nodeType":"StructuredDocumentation","src":"2563:217:12","text":" @dev Set the minimum deposit required to create a dispute.\n @notice Update the minimum deposit to `minimumDeposit` Graph Tokens\n @param minimumDeposit The minimum deposit in Graph Tokens"},"functionSelector":"e78ec42e","id":940,"implemented":false,"kind":"function","modifiers":[],"name":"setMinimumDeposit","nameLocation":"2794:17:12","nodeType":"FunctionDefinition","parameters":{"id":938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":937,"mutability":"mutable","name":"minimumDeposit","nameLocation":"2820:14:12","nodeType":"VariableDeclaration","scope":940,"src":"2812:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":936,"name":"uint256","nodeType":"ElementaryTypeName","src":"2812:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2811:24:12"},"returnParameters":{"id":939,"nodeType":"ParameterList","parameters":[],"src":"2844:0:12"},"scope":1043,"src":"2785:60:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":941,"nodeType":"StructuredDocumentation","src":"2851:217:12","text":" @dev Set the percent reward that the fisherman gets when slashing occurs.\n @notice Update the reward percentage to `percentage`\n @param percentage Reward as a percentage of indexer stake"},"functionSelector":"991a8355","id":946,"implemented":false,"kind":"function","modifiers":[],"name":"setFishermanRewardPercentage","nameLocation":"3082:28:12","nodeType":"FunctionDefinition","parameters":{"id":944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":943,"mutability":"mutable","name":"percentage","nameLocation":"3118:10:12","nodeType":"VariableDeclaration","scope":946,"src":"3111:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":942,"name":"uint32","nodeType":"ElementaryTypeName","src":"3111:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"3110:19:12"},"returnParameters":{"id":945,"nodeType":"ParameterList","parameters":[],"src":"3138:0:12"},"scope":1043,"src":"3073:66:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":947,"nodeType":"StructuredDocumentation","src":"3145:210:12","text":" @notice Set the percentage used for slashing indexers.\n @param qryPercentage Percentage slashing for query disputes\n @param idxPercentage Percentage slashing for indexing disputes"},"functionSelector":"8bbb33b4","id":954,"implemented":false,"kind":"function","modifiers":[],"name":"setSlashingPercentage","nameLocation":"3369:21:12","nodeType":"FunctionDefinition","parameters":{"id":952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":949,"mutability":"mutable","name":"qryPercentage","nameLocation":"3398:13:12","nodeType":"VariableDeclaration","scope":954,"src":"3391:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":948,"name":"uint32","nodeType":"ElementaryTypeName","src":"3391:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":951,"mutability":"mutable","name":"idxPercentage","nameLocation":"3420:13:12","nodeType":"VariableDeclaration","scope":954,"src":"3413:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":950,"name":"uint32","nodeType":"ElementaryTypeName","src":"3413:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"3390:44:12"},"returnParameters":{"id":953,"nodeType":"ParameterList","parameters":[],"src":"3443:0:12"},"scope":1043,"src":"3360:84:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":955,"nodeType":"StructuredDocumentation","src":"3472:147:12","text":" @notice Check if a dispute has been created\n @param disputeID Dispute identifier\n @return True if the dispute exists"},"functionSelector":"be41f384","id":962,"implemented":false,"kind":"function","modifiers":[],"name":"isDisputeCreated","nameLocation":"3633:16:12","nodeType":"FunctionDefinition","parameters":{"id":958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":957,"mutability":"mutable","name":"disputeID","nameLocation":"3658:9:12","nodeType":"VariableDeclaration","scope":962,"src":"3650:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":956,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3650:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3649:19:12"},"returnParameters":{"id":961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":960,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":962,"src":"3692:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":959,"name":"bool","nodeType":"ElementaryTypeName","src":"3692:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3691:6:12"},"scope":1043,"src":"3624:74:12","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":963,"nodeType":"StructuredDocumentation","src":"3704:166:12","text":" @notice Encode a receipt into a hash for EIP-712 signature verification\n @param receipt The receipt to encode\n @return The encoded hash"},"functionSelector":"460967df","id":971,"implemented":false,"kind":"function","modifiers":[],"name":"encodeHashReceipt","nameLocation":"3884:17:12","nodeType":"FunctionDefinition","parameters":{"id":967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":966,"mutability":"mutable","name":"receipt","nameLocation":"3917:7:12","nodeType":"VariableDeclaration","scope":971,"src":"3902:22:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$914_memory_ptr","typeString":"struct IDisputeManager.Receipt"},"typeName":{"id":965,"nodeType":"UserDefinedTypeName","pathNode":{"id":964,"name":"Receipt","nameLocations":["3902:7:12"],"nodeType":"IdentifierPath","referencedDeclaration":914,"src":"3902:7:12"},"referencedDeclaration":914,"src":"3902:7:12","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$914_storage_ptr","typeString":"struct IDisputeManager.Receipt"}},"visibility":"internal"}],"src":"3901:24:12"},"returnParameters":{"id":970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":969,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":971,"src":"3949:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":968,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3949:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3948:9:12"},"scope":1043,"src":"3875:83:12","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":972,"nodeType":"StructuredDocumentation","src":"3964:211:12","text":" @notice Check if two attestations are conflicting\n @param attestation1 First attestation\n @param attestation2 Second attestation\n @return True if attestations are conflicting"},"functionSelector":"d36fc9d4","id":983,"implemented":false,"kind":"function","modifiers":[],"name":"areConflictingAttestations","nameLocation":"4189:26:12","nodeType":"FunctionDefinition","parameters":{"id":979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":975,"mutability":"mutable","name":"attestation1","nameLocation":"4244:12:12","nodeType":"VariableDeclaration","scope":983,"src":"4225:31:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Attestation_$928_memory_ptr","typeString":"struct IDisputeManager.Attestation"},"typeName":{"id":974,"nodeType":"UserDefinedTypeName","pathNode":{"id":973,"name":"Attestation","nameLocations":["4225:11:12"],"nodeType":"IdentifierPath","referencedDeclaration":928,"src":"4225:11:12"},"referencedDeclaration":928,"src":"4225:11:12","typeDescriptions":{"typeIdentifier":"t_struct$_Attestation_$928_storage_ptr","typeString":"struct IDisputeManager.Attestation"}},"visibility":"internal"},{"constant":false,"id":978,"mutability":"mutable","name":"attestation2","nameLocation":"4285:12:12","nodeType":"VariableDeclaration","scope":983,"src":"4266:31:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Attestation_$928_memory_ptr","typeString":"struct IDisputeManager.Attestation"},"typeName":{"id":977,"nodeType":"UserDefinedTypeName","pathNode":{"id":976,"name":"Attestation","nameLocations":["4266:11:12"],"nodeType":"IdentifierPath","referencedDeclaration":928,"src":"4266:11:12"},"referencedDeclaration":928,"src":"4266:11:12","typeDescriptions":{"typeIdentifier":"t_struct$_Attestation_$928_storage_ptr","typeString":"struct IDisputeManager.Attestation"}},"visibility":"internal"}],"src":"4215:88:12"},"returnParameters":{"id":982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":983,"src":"4327:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":980,"name":"bool","nodeType":"ElementaryTypeName","src":"4327:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4326:6:12"},"scope":1043,"src":"4180:153:12","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":984,"nodeType":"StructuredDocumentation","src":"4339:171:12","text":" @notice Get the indexer address from an attestation\n @param attestation The attestation to extract indexer from\n @return The indexer address"},"functionSelector":"c9747f51","id":992,"implemented":false,"kind":"function","modifiers":[],"name":"getAttestationIndexer","nameLocation":"4524:21:12","nodeType":"FunctionDefinition","parameters":{"id":988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":987,"mutability":"mutable","name":"attestation","nameLocation":"4565:11:12","nodeType":"VariableDeclaration","scope":992,"src":"4546:30:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Attestation_$928_memory_ptr","typeString":"struct IDisputeManager.Attestation"},"typeName":{"id":986,"nodeType":"UserDefinedTypeName","pathNode":{"id":985,"name":"Attestation","nameLocations":["4546:11:12"],"nodeType":"IdentifierPath","referencedDeclaration":928,"src":"4546:11:12"},"referencedDeclaration":928,"src":"4546:11:12","typeDescriptions":{"typeIdentifier":"t_struct$_Attestation_$928_storage_ptr","typeString":"struct IDisputeManager.Attestation"}},"visibility":"internal"}],"src":"4545:32:12"},"returnParameters":{"id":991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":990,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":992,"src":"4601:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":989,"name":"address","nodeType":"ElementaryTypeName","src":"4601:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4600:9:12"},"scope":1043,"src":"4515:95:12","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":993,"nodeType":"StructuredDocumentation","src":"4638:361:12","text":" @notice Create a query dispute for the arbitrator to resolve.\n This function is called by a fisherman that will need to `deposit` at\n least `minimumDeposit` GRT tokens.\n @param attestationData Attestation bytes submitted by the fisherman\n @param deposit Amount of tokens staked as deposit\n @return The dispute ID"},"functionSelector":"131610b1","id":1002,"implemented":false,"kind":"function","modifiers":[],"name":"createQueryDispute","nameLocation":"5013:18:12","nodeType":"FunctionDefinition","parameters":{"id":998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":995,"mutability":"mutable","name":"attestationData","nameLocation":"5047:15:12","nodeType":"VariableDeclaration","scope":1002,"src":"5032:30:12","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":994,"name":"bytes","nodeType":"ElementaryTypeName","src":"5032:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":997,"mutability":"mutable","name":"deposit","nameLocation":"5072:7:12","nodeType":"VariableDeclaration","scope":1002,"src":"5064:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":996,"name":"uint256","nodeType":"ElementaryTypeName","src":"5064:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5031:49:12"},"returnParameters":{"id":1001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1000,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1002,"src":"5099:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":999,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5099:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5098:9:12"},"scope":1043,"src":"5004:104:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1003,"nodeType":"StructuredDocumentation","src":"5114:705:12","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 submitter 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 First dispute ID\n @return Second dispute ID"},"functionSelector":"c894222e","id":1014,"implemented":false,"kind":"function","modifiers":[],"name":"createQueryDisputeConflict","nameLocation":"5833:26:12","nodeType":"FunctionDefinition","parameters":{"id":1008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1005,"mutability":"mutable","name":"attestationData1","nameLocation":"5884:16:12","nodeType":"VariableDeclaration","scope":1014,"src":"5869:31:12","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1004,"name":"bytes","nodeType":"ElementaryTypeName","src":"5869:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1007,"mutability":"mutable","name":"attestationData2","nameLocation":"5925:16:12","nodeType":"VariableDeclaration","scope":1014,"src":"5910:31:12","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1006,"name":"bytes","nodeType":"ElementaryTypeName","src":"5910:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5859:88:12"},"returnParameters":{"id":1013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1010,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1014,"src":"5966:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1009,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5966:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1014,"src":"5975:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1011,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5975:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5965:18:12"},"scope":1043,"src":"5824:160:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1015,"nodeType":"StructuredDocumentation","src":"5990:192:12","text":" @notice Create an indexing dispute\n @param allocationID Allocation ID being disputed\n @param deposit Deposit amount for the dispute\n @return The dispute ID"},"functionSelector":"c8792217","id":1024,"implemented":false,"kind":"function","modifiers":[],"name":"createIndexingDispute","nameLocation":"6196:21:12","nodeType":"FunctionDefinition","parameters":{"id":1020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1017,"mutability":"mutable","name":"allocationID","nameLocation":"6226:12:12","nodeType":"VariableDeclaration","scope":1024,"src":"6218:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1016,"name":"address","nodeType":"ElementaryTypeName","src":"6218:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1019,"mutability":"mutable","name":"deposit","nameLocation":"6248:7:12","nodeType":"VariableDeclaration","scope":1024,"src":"6240:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1018,"name":"uint256","nodeType":"ElementaryTypeName","src":"6240:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6217:39:12"},"returnParameters":{"id":1023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1022,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1024,"src":"6275:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1021,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6275:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6274:9:12"},"scope":1043,"src":"6187:97:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1025,"nodeType":"StructuredDocumentation","src":"6290:113:12","text":" @notice Accept a dispute (arbitrator only)\n @param disputeID ID of the dispute to accept"},"functionSelector":"11b42611","id":1030,"implemented":false,"kind":"function","modifiers":[],"name":"acceptDispute","nameLocation":"6417:13:12","nodeType":"FunctionDefinition","parameters":{"id":1028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1027,"mutability":"mutable","name":"disputeID","nameLocation":"6439:9:12","nodeType":"VariableDeclaration","scope":1030,"src":"6431:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1026,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6431:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6430:19:12"},"returnParameters":{"id":1029,"nodeType":"ParameterList","parameters":[],"src":"6458:0:12"},"scope":1043,"src":"6408:51:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1031,"nodeType":"StructuredDocumentation","src":"6465:113:12","text":" @notice Reject a dispute (arbitrator only)\n @param disputeID ID of the dispute to reject"},"functionSelector":"36167e03","id":1036,"implemented":false,"kind":"function","modifiers":[],"name":"rejectDispute","nameLocation":"6592:13:12","nodeType":"FunctionDefinition","parameters":{"id":1034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1033,"mutability":"mutable","name":"disputeID","nameLocation":"6614:9:12","nodeType":"VariableDeclaration","scope":1036,"src":"6606:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1032,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6606:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6605:19:12"},"returnParameters":{"id":1035,"nodeType":"ParameterList","parameters":[],"src":"6633:0:12"},"scope":1043,"src":"6583:51:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1037,"nodeType":"StructuredDocumentation","src":"6640:109:12","text":" @notice Draw a dispute (arbitrator only)\n @param disputeID ID of the dispute to draw"},"functionSelector":"9334ea52","id":1042,"implemented":false,"kind":"function","modifiers":[],"name":"drawDispute","nameLocation":"6763:11:12","nodeType":"FunctionDefinition","parameters":{"id":1040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1039,"mutability":"mutable","name":"disputeID","nameLocation":"6783:9:12","nodeType":"VariableDeclaration","scope":1042,"src":"6775:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1038,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6775:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6774:19:12"},"returnParameters":{"id":1041,"nodeType":"ParameterList","parameters":[],"src":"6802:0:12"},"scope":1043,"src":"6754:49:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1044,"src":"263:6542:12","usedErrors":[],"usedEvents":[]}],"src":"46:6760:12"},"id":12},"contracts/contracts/epochs/IEpochManager.sol":{"ast":{"absolutePath":"contracts/contracts/epochs/IEpochManager.sol","exportedSymbols":{"IEpochManager":[1109]},"id":1110,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1045,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:13"},{"abstract":false,"baseContracts":[],"canonicalName":"IEpochManager","contractDependencies":[],"contractKind":"interface","documentation":{"id":1046,"nodeType":"StructuredDocumentation","src":"81:145:13","text":" @title Epoch Manager Interface\n @author Edge & Node\n @notice Interface for the Epoch Manager contract that handles protocol epochs"},"fullyImplemented":false,"id":1109,"linearizedBaseContracts":[1109],"name":"IEpochManager","nameLocation":"237:13:13","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1047,"nodeType":"StructuredDocumentation","src":"285:116:13","text":" @notice Set epoch length to `epochLength` blocks\n @param epochLength Epoch length in blocks"},"functionSelector":"54eea796","id":1052,"implemented":false,"kind":"function","modifiers":[],"name":"setEpochLength","nameLocation":"415:14:13","nodeType":"FunctionDefinition","parameters":{"id":1050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1049,"mutability":"mutable","name":"epochLength","nameLocation":"438:11:13","nodeType":"VariableDeclaration","scope":1052,"src":"430:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1048,"name":"uint256","nodeType":"ElementaryTypeName","src":"430:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"429:21:13"},"returnParameters":{"id":1051,"nodeType":"ParameterList","parameters":[],"src":"459:0:13"},"scope":1109,"src":"406:54:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1053,"nodeType":"StructuredDocumentation","src":"484:148:13","text":" @dev Run a new epoch, should be called once at the start of any epoch.\n @notice Perform state changes for the current epoch"},"functionSelector":"c46e58eb","id":1056,"implemented":false,"kind":"function","modifiers":[],"name":"runEpoch","nameLocation":"646:8:13","nodeType":"FunctionDefinition","parameters":{"id":1054,"nodeType":"ParameterList","parameters":[],"src":"654:2:13"},"returnParameters":{"id":1055,"nodeType":"ParameterList","parameters":[],"src":"665:0:13"},"scope":1109,"src":"637:29:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1057,"nodeType":"StructuredDocumentation","src":"694:133:13","text":" @notice Check if the current epoch has been run\n @return True if current epoch has been run, false otherwise"},"functionSelector":"1ce05d38","id":1062,"implemented":false,"kind":"function","modifiers":[],"name":"isCurrentEpochRun","nameLocation":"841:17:13","nodeType":"FunctionDefinition","parameters":{"id":1058,"nodeType":"ParameterList","parameters":[],"src":"858:2:13"},"returnParameters":{"id":1061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1060,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1062,"src":"884:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1059,"name":"bool","nodeType":"ElementaryTypeName","src":"884:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"883:6:13"},"scope":1109,"src":"832:58:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1063,"nodeType":"StructuredDocumentation","src":"896:91:13","text":" @notice Get the current block number\n @return Current block number"},"functionSelector":"8ae63d6d","id":1068,"implemented":false,"kind":"function","modifiers":[],"name":"blockNum","nameLocation":"1001:8:13","nodeType":"FunctionDefinition","parameters":{"id":1064,"nodeType":"ParameterList","parameters":[],"src":"1009:2:13"},"returnParameters":{"id":1067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1068,"src":"1035:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1065,"name":"uint256","nodeType":"ElementaryTypeName","src":"1035:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1034:9:13"},"scope":1109,"src":"992:52:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1069,"nodeType":"StructuredDocumentation","src":"1050:140:13","text":" @notice Get the hash of a specific block\n @param blockNumber Block number to get hash for\n @return Block hash"},"functionSelector":"85df51fd","id":1076,"implemented":false,"kind":"function","modifiers":[],"name":"blockHash","nameLocation":"1204:9:13","nodeType":"FunctionDefinition","parameters":{"id":1072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1071,"mutability":"mutable","name":"blockNumber","nameLocation":"1222:11:13","nodeType":"VariableDeclaration","scope":1076,"src":"1214:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1070,"name":"uint256","nodeType":"ElementaryTypeName","src":"1214:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1213:21:13"},"returnParameters":{"id":1075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1074,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1076,"src":"1258:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1073,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1258:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1257:9:13"},"scope":1109,"src":"1195:72:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1077,"nodeType":"StructuredDocumentation","src":"1273:91:13","text":" @notice Get the current epoch number\n @return Current epoch number"},"functionSelector":"76671808","id":1082,"implemented":false,"kind":"function","modifiers":[],"name":"currentEpoch","nameLocation":"1378:12:13","nodeType":"FunctionDefinition","parameters":{"id":1078,"nodeType":"ParameterList","parameters":[],"src":"1390:2:13"},"returnParameters":{"id":1081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1080,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1082,"src":"1416:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1079,"name":"uint256","nodeType":"ElementaryTypeName","src":"1416:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1415:9:13"},"scope":1109,"src":"1369:56:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1083,"nodeType":"StructuredDocumentation","src":"1431:129:13","text":" @notice Get the block number when the current epoch started\n @return Block number of current epoch start"},"functionSelector":"ab93122c","id":1088,"implemented":false,"kind":"function","modifiers":[],"name":"currentEpochBlock","nameLocation":"1574:17:13","nodeType":"FunctionDefinition","parameters":{"id":1084,"nodeType":"ParameterList","parameters":[],"src":"1591:2:13"},"returnParameters":{"id":1087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1086,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1088,"src":"1617:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1085,"name":"uint256","nodeType":"ElementaryTypeName","src":"1617:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1616:9:13"},"scope":1109,"src":"1565:61:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1089,"nodeType":"StructuredDocumentation","src":"1632:141:13","text":" @notice Get the number of blocks since the current epoch started\n @return Number of blocks since current epoch start"},"functionSelector":"d0cfa46e","id":1094,"implemented":false,"kind":"function","modifiers":[],"name":"currentEpochBlockSinceStart","nameLocation":"1787:27:13","nodeType":"FunctionDefinition","parameters":{"id":1090,"nodeType":"ParameterList","parameters":[],"src":"1814:2:13"},"returnParameters":{"id":1093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1092,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1094,"src":"1840:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1091,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:9:13"},"scope":1109,"src":"1778:71:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1095,"nodeType":"StructuredDocumentation","src":"1855:169:13","text":" @notice Get the number of epochs since a given epoch\n @param epoch Epoch to calculate from\n @return Number of epochs since the given epoch"},"functionSelector":"1b28126d","id":1102,"implemented":false,"kind":"function","modifiers":[],"name":"epochsSince","nameLocation":"2038:11:13","nodeType":"FunctionDefinition","parameters":{"id":1098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1097,"mutability":"mutable","name":"epoch","nameLocation":"2058:5:13","nodeType":"VariableDeclaration","scope":1102,"src":"2050:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1096,"name":"uint256","nodeType":"ElementaryTypeName","src":"2050:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2049:15:13"},"returnParameters":{"id":1101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1100,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1102,"src":"2088:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1099,"name":"uint256","nodeType":"ElementaryTypeName","src":"2088:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2087:9:13"},"scope":1109,"src":"2029:68:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1103,"nodeType":"StructuredDocumentation","src":"2103:136:13","text":" @notice Get the number of epochs since the last epoch length update\n @return Number of epochs since last update"},"functionSelector":"19c3b82d","id":1108,"implemented":false,"kind":"function","modifiers":[],"name":"epochsSinceUpdate","nameLocation":"2253:17:13","nodeType":"FunctionDefinition","parameters":{"id":1104,"nodeType":"ParameterList","parameters":[],"src":"2270:2:13"},"returnParameters":{"id":1107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1108,"src":"2296:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1105,"name":"uint256","nodeType":"ElementaryTypeName","src":"2296:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2295:9:13"},"scope":1109,"src":"2244:61:13","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1110,"src":"227:2080:13","usedErrors":[],"usedEvents":[]}],"src":"46:2262:13"},"id":13},"contracts/contracts/gateway/ICallhookReceiver.sol":{"ast":{"absolutePath":"contracts/contracts/gateway/ICallhookReceiver.sol","exportedSymbols":{"ICallhookReceiver":[1123]},"id":1124,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1111,"literals":["solidity","^","0.7",".3","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"423:33:14"},{"abstract":false,"baseContracts":[],"canonicalName":"ICallhookReceiver","contractDependencies":[],"contractKind":"interface","documentation":{"id":1112,"nodeType":"StructuredDocumentation","src":"458:157:14","text":" @title Callhook Receiver Interface\n @author Edge & Node\n @notice Interface for contracts that can receive tokens with callhook from the bridge"},"fullyImplemented":false,"id":1123,"linearizedBaseContracts":[1123],"name":"ICallhookReceiver","nameLocation":"626:17:14","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1113,"nodeType":"StructuredDocumentation","src":"650:216:14","text":" @notice Receive tokens with a callhook from the bridge\n @param from Token sender in L1\n @param amount Amount of tokens that were transferred\n @param data ABI-encoded callhook data"},"functionSelector":"a4c0ed36","id":1122,"implemented":false,"kind":"function","modifiers":[],"name":"onTokenTransfer","nameLocation":"880:15:14","nodeType":"FunctionDefinition","parameters":{"id":1120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1115,"mutability":"mutable","name":"from","nameLocation":"904:4:14","nodeType":"VariableDeclaration","scope":1122,"src":"896:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1114,"name":"address","nodeType":"ElementaryTypeName","src":"896:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1117,"mutability":"mutable","name":"amount","nameLocation":"918:6:14","nodeType":"VariableDeclaration","scope":1122,"src":"910:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1116,"name":"uint256","nodeType":"ElementaryTypeName","src":"910:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1119,"mutability":"mutable","name":"data","nameLocation":"941:4:14","nodeType":"VariableDeclaration","scope":1122,"src":"926:19:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1118,"name":"bytes","nodeType":"ElementaryTypeName","src":"926:5:14","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"895:51:14"},"returnParameters":{"id":1121,"nodeType":"ParameterList","parameters":[],"src":"955:0:14"},"scope":1123,"src":"871:85:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1124,"src":"616:342:14","usedErrors":[],"usedEvents":[]}],"src":"423:536:14"},"id":14},"contracts/contracts/governance/IController.sol":{"ast":{"absolutePath":"contracts/contracts/governance/IController.sol","exportedSymbols":{"IController":[1193]},"id":1194,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1125,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:15"},{"abstract":false,"baseContracts":[],"canonicalName":"IController","contractDependencies":[],"contractKind":"interface","documentation":{"id":1126,"nodeType":"StructuredDocumentation","src":"81:165:15","text":" @title Controller Interface\n @author Edge & Node\n @notice Interface for the Controller contract that manages protocol governance and contract registry"},"fullyImplemented":false,"id":1193,"linearizedBaseContracts":[1193],"name":"IController","nameLocation":"257:11:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1127,"nodeType":"StructuredDocumentation","src":"275:90:15","text":" @notice Return the governor address\n @return The governor address"},"functionSelector":"4fc07d75","id":1132,"implemented":false,"kind":"function","modifiers":[],"name":"getGovernor","nameLocation":"379:11:15","nodeType":"FunctionDefinition","parameters":{"id":1128,"nodeType":"ParameterList","parameters":[],"src":"390:2:15"},"returnParameters":{"id":1131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1130,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1132,"src":"416:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1129,"name":"address","nodeType":"ElementaryTypeName","src":"416:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"415:9:15"},"scope":1193,"src":"370:55:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1133,"nodeType":"StructuredDocumentation","src":"454:176:15","text":" @notice Register contract id and mapped address\n @param id Contract id (keccak256 hash of contract name)\n @param contractAddress Contract address"},"functionSelector":"e0e99292","id":1140,"implemented":false,"kind":"function","modifiers":[],"name":"setContractProxy","nameLocation":"644:16:15","nodeType":"FunctionDefinition","parameters":{"id":1138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1135,"mutability":"mutable","name":"id","nameLocation":"669:2:15","nodeType":"VariableDeclaration","scope":1140,"src":"661:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1134,"name":"bytes32","nodeType":"ElementaryTypeName","src":"661:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1137,"mutability":"mutable","name":"contractAddress","nameLocation":"681:15:15","nodeType":"VariableDeclaration","scope":1140,"src":"673:23:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1136,"name":"address","nodeType":"ElementaryTypeName","src":"673:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"660:37:15"},"returnParameters":{"id":1139,"nodeType":"ParameterList","parameters":[],"src":"706:0:15"},"scope":1193,"src":"635:72:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1141,"nodeType":"StructuredDocumentation","src":"713:119:15","text":" @notice Unregister a contract address\n @param id Contract id (keccak256 hash of contract name)"},"functionSelector":"9181df9c","id":1146,"implemented":false,"kind":"function","modifiers":[],"name":"unsetContractProxy","nameLocation":"846:18:15","nodeType":"FunctionDefinition","parameters":{"id":1144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1143,"mutability":"mutable","name":"id","nameLocation":"873:2:15","nodeType":"VariableDeclaration","scope":1146,"src":"865:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1142,"name":"bytes32","nodeType":"ElementaryTypeName","src":"865:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"864:12:15"},"returnParameters":{"id":1145,"nodeType":"ParameterList","parameters":[],"src":"885:0:15"},"scope":1193,"src":"837:49:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1147,"nodeType":"StructuredDocumentation","src":"892:162:15","text":" @notice Update contract's controller\n @param id Contract id (keccak256 hash of contract name)\n @param controller Controller address"},"functionSelector":"eb5dd94f","id":1154,"implemented":false,"kind":"function","modifiers":[],"name":"updateController","nameLocation":"1068:16:15","nodeType":"FunctionDefinition","parameters":{"id":1152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1149,"mutability":"mutable","name":"id","nameLocation":"1093:2:15","nodeType":"VariableDeclaration","scope":1154,"src":"1085:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1148,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1085:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1151,"mutability":"mutable","name":"controller","nameLocation":"1105:10:15","nodeType":"VariableDeclaration","scope":1154,"src":"1097:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1150,"name":"address","nodeType":"ElementaryTypeName","src":"1097:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1084:32:15"},"returnParameters":{"id":1153,"nodeType":"ParameterList","parameters":[],"src":"1125:0:15"},"scope":1193,"src":"1059:67:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1155,"nodeType":"StructuredDocumentation","src":"1132:157:15","text":" @notice Get contract proxy address by its id\n @param id Contract id\n @return Address of the proxy contract for the provided id"},"functionSelector":"f7641a5e","id":1162,"implemented":false,"kind":"function","modifiers":[],"name":"getContractProxy","nameLocation":"1303:16:15","nodeType":"FunctionDefinition","parameters":{"id":1158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1157,"mutability":"mutable","name":"id","nameLocation":"1328:2:15","nodeType":"VariableDeclaration","scope":1162,"src":"1320:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1156,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1320:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1319:12:15"},"returnParameters":{"id":1161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1160,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1162,"src":"1355:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1159,"name":"address","nodeType":"ElementaryTypeName","src":"1355:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1354:9:15"},"scope":1193,"src":"1294:70:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1163,"nodeType":"StructuredDocumentation","src":"1392:237:15","text":" @notice Change the partial paused state of the contract\n Partial pause is intended as a partial pause of the protocol\n @param partialPause True if the contracts should be (partially) paused, false otherwise"},"functionSelector":"56371bd8","id":1168,"implemented":false,"kind":"function","modifiers":[],"name":"setPartialPaused","nameLocation":"1643:16:15","nodeType":"FunctionDefinition","parameters":{"id":1166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1165,"mutability":"mutable","name":"partialPause","nameLocation":"1665:12:15","nodeType":"VariableDeclaration","scope":1168,"src":"1660:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1164,"name":"bool","nodeType":"ElementaryTypeName","src":"1660:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1659:19:15"},"returnParameters":{"id":1167,"nodeType":"ParameterList","parameters":[],"src":"1687:0:15"},"scope":1193,"src":"1634:54:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1169,"nodeType":"StructuredDocumentation","src":"1694:187:15","text":" @notice Change the paused state of the contract\n Full pause most of protocol functions\n @param pause True if the contracts should be paused, false otherwise"},"functionSelector":"16c38b3c","id":1174,"implemented":false,"kind":"function","modifiers":[],"name":"setPaused","nameLocation":"1895:9:15","nodeType":"FunctionDefinition","parameters":{"id":1172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1171,"mutability":"mutable","name":"pause","nameLocation":"1910:5:15","nodeType":"VariableDeclaration","scope":1174,"src":"1905:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1170,"name":"bool","nodeType":"ElementaryTypeName","src":"1905:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1904:12:15"},"returnParameters":{"id":1173,"nodeType":"ParameterList","parameters":[],"src":"1925:0:15"},"scope":1193,"src":"1886:40:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1175,"nodeType":"StructuredDocumentation","src":"1932:121:15","text":" @notice Change the Pause Guardian\n @param newPauseGuardian The address of the new Pause Guardian"},"functionSelector":"48bde20c","id":1180,"implemented":false,"kind":"function","modifiers":[],"name":"setPauseGuardian","nameLocation":"2067:16:15","nodeType":"FunctionDefinition","parameters":{"id":1178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1177,"mutability":"mutable","name":"newPauseGuardian","nameLocation":"2092:16:15","nodeType":"VariableDeclaration","scope":1180,"src":"2084:24:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1176,"name":"address","nodeType":"ElementaryTypeName","src":"2084:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2083:26:15"},"returnParameters":{"id":1179,"nodeType":"ParameterList","parameters":[],"src":"2118:0:15"},"scope":1193,"src":"2058:61:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1181,"nodeType":"StructuredDocumentation","src":"2125:110:15","text":" @notice Return whether the protocol is paused\n @return True if the protocol is paused"},"functionSelector":"5c975abb","id":1186,"implemented":false,"kind":"function","modifiers":[],"name":"paused","nameLocation":"2249:6:15","nodeType":"FunctionDefinition","parameters":{"id":1182,"nodeType":"ParameterList","parameters":[],"src":"2255:2:15"},"returnParameters":{"id":1185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1184,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1186,"src":"2281:4:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1183,"name":"bool","nodeType":"ElementaryTypeName","src":"2281:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2280:6:15"},"scope":1193,"src":"2240:47:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1187,"nodeType":"StructuredDocumentation","src":"2293:130:15","text":" @notice Return whether the protocol is partially paused\n @return True if the protocol is partially paused"},"functionSelector":"2e292fc7","id":1192,"implemented":false,"kind":"function","modifiers":[],"name":"partialPaused","nameLocation":"2437:13:15","nodeType":"FunctionDefinition","parameters":{"id":1188,"nodeType":"ParameterList","parameters":[],"src":"2450:2:15"},"returnParameters":{"id":1191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1190,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1192,"src":"2476:4:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1189,"name":"bool","nodeType":"ElementaryTypeName","src":"2476:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2475:6:15"},"scope":1193,"src":"2428:54:15","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1194,"src":"247:2237:15","usedErrors":[],"usedEvents":[]}],"src":"46:2439:15"},"id":15},"contracts/contracts/governance/IGoverned.sol":{"ast":{"absolutePath":"contracts/contracts/governance/IGoverned.sol","exportedSymbols":{"IGoverned":[1233]},"id":1234,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1195,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:16"},{"abstract":false,"baseContracts":[],"canonicalName":"IGoverned","contractDependencies":[],"contractKind":"interface","documentation":{"id":1196,"nodeType":"StructuredDocumentation","src":"80:94:16","text":" @title IGoverned\n @author Edge & Node\n @notice Interface for governed contracts"},"fullyImplemented":false,"id":1233,"linearizedBaseContracts":[1233],"name":"IGoverned","nameLocation":"185:9:16","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1197,"nodeType":"StructuredDocumentation","src":"229:110:16","text":" @notice Get the current governor address\n @return The address of the current governor"},"functionSelector":"0c340a24","id":1202,"implemented":false,"kind":"function","modifiers":[],"name":"governor","nameLocation":"353:8:16","nodeType":"FunctionDefinition","parameters":{"id":1198,"nodeType":"ParameterList","parameters":[],"src":"361:2:16"},"returnParameters":{"id":1201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1200,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1202,"src":"387:7:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1199,"name":"address","nodeType":"ElementaryTypeName","src":"387:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"386:9:16"},"scope":1233,"src":"344:52:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1203,"nodeType":"StructuredDocumentation","src":"402:110:16","text":" @notice Get the pending governor address\n @return The address of the pending governor"},"functionSelector":"e3056a34","id":1208,"implemented":false,"kind":"function","modifiers":[],"name":"pendingGovernor","nameLocation":"526:15:16","nodeType":"FunctionDefinition","parameters":{"id":1204,"nodeType":"ParameterList","parameters":[],"src":"541:2:16"},"returnParameters":{"id":1207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1206,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1208,"src":"567:7:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1205,"name":"address","nodeType":"ElementaryTypeName","src":"567:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"566:9:16"},"scope":1233,"src":"517:59:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1209,"nodeType":"StructuredDocumentation","src":"615:122:16","text":" @notice Admin function to begin change of governor.\n @param newGovernor Address of new `governor`"},"functionSelector":"f2fde38b","id":1214,"implemented":false,"kind":"function","modifiers":[],"name":"transferOwnership","nameLocation":"751:17:16","nodeType":"FunctionDefinition","parameters":{"id":1212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1211,"mutability":"mutable","name":"newGovernor","nameLocation":"777:11:16","nodeType":"VariableDeclaration","scope":1214,"src":"769:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1210,"name":"address","nodeType":"ElementaryTypeName","src":"769:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"768:21:16"},"returnParameters":{"id":1213,"nodeType":"ParameterList","parameters":[],"src":"798:0:16"},"scope":1233,"src":"742:57:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1215,"nodeType":"StructuredDocumentation","src":"805:98:16","text":" @notice Admin function for pending governor to accept role and update governor."},"functionSelector":"79ba5097","id":1218,"implemented":false,"kind":"function","modifiers":[],"name":"acceptOwnership","nameLocation":"917:15:16","nodeType":"FunctionDefinition","parameters":{"id":1216,"nodeType":"ParameterList","parameters":[],"src":"932:2:16"},"returnParameters":{"id":1217,"nodeType":"ParameterList","parameters":[],"src":"943:0:16"},"scope":1233,"src":"908:36:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"documentation":{"id":1219,"nodeType":"StructuredDocumentation","src":"971:181:16","text":" @notice Emitted when a new pending governor is set\n @param from The address of the current governor\n @param to The address of the new pending governor"},"eventSelector":"76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","id":1225,"name":"NewPendingOwnership","nameLocation":"1163:19:16","nodeType":"EventDefinition","parameters":{"id":1224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1221,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1199:4:16","nodeType":"VariableDeclaration","scope":1225,"src":"1183:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1220,"name":"address","nodeType":"ElementaryTypeName","src":"1183:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1223,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"1221:2:16","nodeType":"VariableDeclaration","scope":1225,"src":"1205:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1222,"name":"address","nodeType":"ElementaryTypeName","src":"1205:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1182:42:16"},"src":"1157:68:16"},{"anonymous":false,"documentation":{"id":1226,"nodeType":"StructuredDocumentation","src":"1231:188:16","text":" @notice Emitted when governance is transferred to a new governor\n @param from The address of the previous governor\n @param to The address of the new governor"},"eventSelector":"0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f","id":1232,"name":"NewOwnership","nameLocation":"1430:12:16","nodeType":"EventDefinition","parameters":{"id":1231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1228,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1459:4:16","nodeType":"VariableDeclaration","scope":1232,"src":"1443:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1227,"name":"address","nodeType":"ElementaryTypeName","src":"1443:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1230,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"1481:2:16","nodeType":"VariableDeclaration","scope":1232,"src":"1465:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1229,"name":"address","nodeType":"ElementaryTypeName","src":"1465:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1442:42:16"},"src":"1424:61:16"}],"scope":1234,"src":"175:1312:16","usedErrors":[],"usedEvents":[1225,1232]}],"src":"45:1443:16"},"id":16},"contracts/contracts/governance/IManaged.sol":{"ast":{"absolutePath":"contracts/contracts/governance/IManaged.sol","exportedSymbols":{"IController":[1193],"IManaged":[1256]},"id":1257,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1235,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:17"},{"absolutePath":"contracts/contracts/governance/IController.sol","file":"./IController.sol","id":1237,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1257,"sourceUnit":1194,"src":"81:48:17","symbolAliases":[{"foreign":{"id":1236,"name":"IController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1193,"src":"90:11:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IManaged","contractDependencies":[],"contractKind":"interface","documentation":{"id":1238,"nodeType":"StructuredDocumentation","src":"131:130:17","text":" @title Managed Interface\n @author Edge & Node\n @notice Interface for contracts that can be managed by a controller."},"fullyImplemented":false,"id":1256,"linearizedBaseContracts":[1256],"name":"IManaged","nameLocation":"272:8:17","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1239,"nodeType":"StructuredDocumentation","src":"287:195:17","text":" @notice Set the controller that manages this contract\n @dev Only the current controller can set a new controller\n @param newController Address of the new controller"},"functionSelector":"92eefe9b","id":1244,"implemented":false,"kind":"function","modifiers":[],"name":"setController","nameLocation":"496:13:17","nodeType":"FunctionDefinition","parameters":{"id":1242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1241,"mutability":"mutable","name":"newController","nameLocation":"518:13:17","nodeType":"VariableDeclaration","scope":1244,"src":"510:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1240,"name":"address","nodeType":"ElementaryTypeName","src":"510:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"509:23:17"},"returnParameters":{"id":1243,"nodeType":"ParameterList","parameters":[],"src":"541:0:17"},"scope":1256,"src":"487:55:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1245,"nodeType":"StructuredDocumentation","src":"548:317:17","text":" @notice Sync protocol contract addresses from the Controller registry\n @dev This function will cache all the contracts using the latest addresses.\n Anyone can call the function whenever a Proxy contract change in the\n controller to ensure the protocol is using the latest version."},"functionSelector":"d6866ea5","id":1248,"implemented":false,"kind":"function","modifiers":[],"name":"syncAllContracts","nameLocation":"879:16:17","nodeType":"FunctionDefinition","parameters":{"id":1246,"nodeType":"ParameterList","parameters":[],"src":"895:2:17"},"returnParameters":{"id":1247,"nodeType":"ParameterList","parameters":[],"src":"906:0:17"},"scope":1256,"src":"870:37:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1249,"nodeType":"StructuredDocumentation","src":"913:130:17","text":" @notice Get the Controller that manages this contract\n @return The Controller as an IController interface"},"functionSelector":"f77c4791","id":1255,"implemented":false,"kind":"function","modifiers":[],"name":"controller","nameLocation":"1057:10:17","nodeType":"FunctionDefinition","parameters":{"id":1250,"nodeType":"ParameterList","parameters":[],"src":"1067:2:17"},"returnParameters":{"id":1254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1253,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1255,"src":"1093:11:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IController_$1193","typeString":"contract IController"},"typeName":{"id":1252,"nodeType":"UserDefinedTypeName","pathNode":{"id":1251,"name":"IController","nameLocations":["1093:11:17"],"nodeType":"IdentifierPath","referencedDeclaration":1193,"src":"1093:11:17"},"referencedDeclaration":1193,"src":"1093:11:17","typeDescriptions":{"typeIdentifier":"t_contract$_IController_$1193","typeString":"contract IController"}},"visibility":"internal"}],"src":"1092:13:17"},"scope":1256,"src":"1048:58:17","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1257,"src":"262:846:17","usedErrors":[],"usedEvents":[]}],"src":"46:1063:17"},"id":17},"contracts/contracts/l2/curation/IL2Curation.sol":{"ast":{"absolutePath":"contracts/contracts/l2/curation/IL2Curation.sol","exportedSymbols":{"IL2Curation":[1296]},"id":1297,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1258,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:18"},{"abstract":false,"baseContracts":[],"canonicalName":"IL2Curation","contractDependencies":[],"contractKind":"interface","documentation":{"id":1259,"nodeType":"StructuredDocumentation","src":"81:162:18","text":" @title Interface of the L2 Curation contract.\n @author Edge & Node\n @notice Interface for the L2 Curation contract that handles curation on Layer 2"},"fullyImplemented":false,"id":1296,"linearizedBaseContracts":[1296],"name":"IL2Curation","nameLocation":"254:11:18","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1260,"nodeType":"StructuredDocumentation","src":"272:130:18","text":" @notice Set the subgraph service address.\n @param subgraphService Address of the SubgraphService contract"},"functionSelector":"93a90a1e","id":1265,"implemented":false,"kind":"function","modifiers":[],"name":"setSubgraphService","nameLocation":"416:18:18","nodeType":"FunctionDefinition","parameters":{"id":1263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1262,"mutability":"mutable","name":"subgraphService","nameLocation":"443:15:18","nodeType":"VariableDeclaration","scope":1265,"src":"435:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1261,"name":"address","nodeType":"ElementaryTypeName","src":"435:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"434:25:18"},"returnParameters":{"id":1264,"nodeType":"ParameterList","parameters":[],"src":"468:0:18"},"scope":1296,"src":"407:62:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1266,"nodeType":"StructuredDocumentation","src":"475:422:18","text":" @notice Deposit Graph Tokens in exchange for signal of a SubgraphDeployment curation pool.\n @dev This function charges no tax and can only be called by GNS in specific scenarios (for now\n only during an L1-L2 transfer).\n @param subgraphDeploymentID Subgraph deployment pool from where to mint signal\n @param tokensIn Amount of Graph Tokens to deposit\n @return Signal minted"},"functionSelector":"3718896d","id":1275,"implemented":false,"kind":"function","modifiers":[],"name":"mintTaxFree","nameLocation":"911:11:18","nodeType":"FunctionDefinition","parameters":{"id":1271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1268,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"931:20:18","nodeType":"VariableDeclaration","scope":1275,"src":"923:28:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1267,"name":"bytes32","nodeType":"ElementaryTypeName","src":"923:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1270,"mutability":"mutable","name":"tokensIn","nameLocation":"961:8:18","nodeType":"VariableDeclaration","scope":1275,"src":"953:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1269,"name":"uint256","nodeType":"ElementaryTypeName","src":"953:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"922:48:18"},"returnParameters":{"id":1274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1273,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1275,"src":"989:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1272,"name":"uint256","nodeType":"ElementaryTypeName","src":"989:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"988:9:18"},"scope":1296,"src":"902:96:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1276,"nodeType":"StructuredDocumentation","src":"1004:339:18","text":" @notice Calculate amount of signal that can be bought with tokens in a curation pool,\n without accounting for curation tax.\n @param subgraphDeploymentID Subgraph deployment for which to mint signal\n @param tokensIn Amount of tokens used to mint signal\n @return Amount of signal that can be bought"},"functionSelector":"7a2a45b8","id":1285,"implemented":false,"kind":"function","modifiers":[],"name":"tokensToSignalNoTax","nameLocation":"1357:19:18","nodeType":"FunctionDefinition","parameters":{"id":1281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1278,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"1385:20:18","nodeType":"VariableDeclaration","scope":1285,"src":"1377:28:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1277,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1377:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1280,"mutability":"mutable","name":"tokensIn","nameLocation":"1415:8:18","nodeType":"VariableDeclaration","scope":1285,"src":"1407:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1279,"name":"uint256","nodeType":"ElementaryTypeName","src":"1407:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1376:48:18"},"returnParameters":{"id":1284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1283,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1285,"src":"1448:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1282,"name":"uint256","nodeType":"ElementaryTypeName","src":"1448:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1447:9:18"},"scope":1296,"src":"1348:109:18","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1286,"nodeType":"StructuredDocumentation","src":"1463:478:18","text":" @notice Calculate the amount of tokens that would be recovered if minting signal with\n the input tokens and then burning it. This can be used to compute rounding error.\n This function does not account for curation tax.\n @param subgraphDeploymentID Subgraph deployment for which to mint signal\n @param tokensIn Amount of tokens used to mint signal\n @return Amount of tokens that would be recovered after minting and burning signal"},"functionSelector":"69db11a1","id":1295,"implemented":false,"kind":"function","modifiers":[],"name":"tokensToSignalToTokensNoTax","nameLocation":"1955:27:18","nodeType":"FunctionDefinition","parameters":{"id":1291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1288,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"2000:20:18","nodeType":"VariableDeclaration","scope":1295,"src":"1992:28:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1287,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1992:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1290,"mutability":"mutable","name":"tokensIn","nameLocation":"2038:8:18","nodeType":"VariableDeclaration","scope":1295,"src":"2030:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1289,"name":"uint256","nodeType":"ElementaryTypeName","src":"2030:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1982:70:18"},"returnParameters":{"id":1294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1293,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1295,"src":"2076:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1292,"name":"uint256","nodeType":"ElementaryTypeName","src":"2076:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2075:9:18"},"scope":1296,"src":"1946:139:18","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1297,"src":"244:1843:18","usedErrors":[],"usedEvents":[]}],"src":"46:2042:18"},"id":18},"contracts/contracts/l2/discovery/IL2GNS.sol":{"ast":{"absolutePath":"contracts/contracts/l2/discovery/IL2GNS.sol","exportedSymbols":{"ICallhookReceiver":[1123],"IL2GNS":[1348]},"id":1349,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1298,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:19"},{"absolutePath":"contracts/contracts/gateway/ICallhookReceiver.sol","file":"../../gateway/ICallhookReceiver.sol","id":1300,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1349,"sourceUnit":1124,"src":"81:72:19","symbolAliases":[{"foreign":{"id":1299,"name":"ICallhookReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1123,"src":"90:17:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1302,"name":"ICallhookReceiver","nameLocations":["315:17:19"],"nodeType":"IdentifierPath","referencedDeclaration":1123,"src":"315:17:19"},"id":1303,"nodeType":"InheritanceSpecifier","src":"315:17:19"}],"canonicalName":"IL2GNS","contractDependencies":[],"contractKind":"interface","documentation":{"id":1301,"nodeType":"StructuredDocumentation","src":"155:139:19","text":" @title Interface for the L2GNS contract.\n @author Edge & Node\n @notice Interface for the L2 Graph Name System (GNS) contract"},"fullyImplemented":false,"id":1348,"linearizedBaseContracts":[1348,1123],"name":"IL2GNS","nameLocation":"305:6:19","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IL2GNS.L1MessageCodes","documentation":{"id":1304,"nodeType":"StructuredDocumentation","src":"339:226:19","text":" @dev Message codes for L1 to L2 communication\n @param RECEIVE_SUBGRAPH_CODE Code for receiving subgraph transfers\n @param RECEIVE_CURATOR_BALANCE_CODE Code for receiving curator balance transfers"},"id":1307,"members":[{"id":1305,"name":"RECEIVE_SUBGRAPH_CODE","nameLocation":"600:21:19","nodeType":"EnumValue","src":"600:21:19"},{"id":1306,"name":"RECEIVE_CURATOR_BALANCE_CODE","nameLocation":"631:28:19","nodeType":"EnumValue","src":"631:28:19"}],"name":"L1MessageCodes","nameLocation":"575:14:19","nodeType":"EnumDefinition","src":"570:95:19"},{"canonicalName":"IL2GNS.SubgraphL2TransferData","documentation":{"id":1308,"nodeType":"StructuredDocumentation","src":"671:439:19","text":" @dev The SubgraphL2TransferData struct holds information\n about a subgraph related to its transfer from L1 to L2.\n @param tokens GRT that will be sent to L2 to mint signal\n @param curatorBalanceClaimed True for curators whose balance has been claimed in L2\n @param l2Done Transfer finished on L2 side\n @param subgraphReceivedOnL2BlockNumber Block number when the subgraph was received on L2"},"id":1319,"members":[{"constant":false,"id":1310,"mutability":"mutable","name":"tokens","nameLocation":"1163:6:19","nodeType":"VariableDeclaration","scope":1319,"src":"1155:14:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1309,"name":"uint256","nodeType":"ElementaryTypeName","src":"1155:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1314,"mutability":"mutable","name":"curatorBalanceClaimed","nameLocation":"1250:21:19","nodeType":"VariableDeclaration","scope":1319,"src":"1225:46:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":1313,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":1311,"name":"address","nodeType":"ElementaryTypeName","src":"1233:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1225:24:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1312,"name":"bool","nodeType":"ElementaryTypeName","src":"1244:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":1316,"mutability":"mutable","name":"l2Done","nameLocation":"1344:6:19","nodeType":"VariableDeclaration","scope":1319,"src":"1339:11:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1315,"name":"bool","nodeType":"ElementaryTypeName","src":"1339:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1318,"mutability":"mutable","name":"subgraphReceivedOnL2BlockNumber","nameLocation":"1400:31:19","nodeType":"VariableDeclaration","scope":1319,"src":"1392:39:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1317,"name":"uint256","nodeType":"ElementaryTypeName","src":"1392:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SubgraphL2TransferData","nameLocation":"1122:22:19","nodeType":"StructDefinition","scope":1348,"src":"1115:376:19","visibility":"public"},{"documentation":{"id":1320,"nodeType":"StructuredDocumentation","src":"1497:482:19","text":" @notice Finish a subgraph transfer from L1.\n The subgraph must have been previously sent through the bridge\n using the sendSubgraphToL2 function on L1GNS.\n @param l2SubgraphID Subgraph ID in L2 (aliased from the L1 subgraph ID)\n @param subgraphDeploymentID Latest subgraph deployment to assign to the subgraph\n @param subgraphMetadata IPFS hash of the subgraph metadata\n @param versionMetadata IPFS hash of the version metadata"},"functionSelector":"d1a80612","id":1331,"implemented":false,"kind":"function","modifiers":[],"name":"finishSubgraphTransferFromL1","nameLocation":"1993:28:19","nodeType":"FunctionDefinition","parameters":{"id":1329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1322,"mutability":"mutable","name":"l2SubgraphID","nameLocation":"2039:12:19","nodeType":"VariableDeclaration","scope":1331,"src":"2031:20:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1321,"name":"uint256","nodeType":"ElementaryTypeName","src":"2031:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1324,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"2069:20:19","nodeType":"VariableDeclaration","scope":1331,"src":"2061:28:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1323,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2061:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1326,"mutability":"mutable","name":"subgraphMetadata","nameLocation":"2107:16:19","nodeType":"VariableDeclaration","scope":1331,"src":"2099:24:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1325,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2099:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1328,"mutability":"mutable","name":"versionMetadata","nameLocation":"2141:15:19","nodeType":"VariableDeclaration","scope":1331,"src":"2133:23:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1327,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2133:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2021:141:19"},"returnParameters":{"id":1330,"nodeType":"ParameterList","parameters":[],"src":"2171:0:19"},"scope":1348,"src":"1984:188:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1332,"nodeType":"StructuredDocumentation","src":"2178:166:19","text":" @notice Return the aliased L2 subgraph ID from a transferred L1 subgraph ID\n @param l1SubgraphID L1 subgraph ID\n @return L2 subgraph ID"},"functionSelector":"ea0f2eba","id":1339,"implemented":false,"kind":"function","modifiers":[],"name":"getAliasedL2SubgraphID","nameLocation":"2358:22:19","nodeType":"FunctionDefinition","parameters":{"id":1335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1334,"mutability":"mutable","name":"l1SubgraphID","nameLocation":"2389:12:19","nodeType":"VariableDeclaration","scope":1339,"src":"2381:20:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1333,"name":"uint256","nodeType":"ElementaryTypeName","src":"2381:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2380:22:19"},"returnParameters":{"id":1338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1337,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1339,"src":"2426:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1336,"name":"uint256","nodeType":"ElementaryTypeName","src":"2426:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2425:9:19"},"scope":1348,"src":"2349:86:19","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":1340,"nodeType":"StructuredDocumentation","src":"2441:167:19","text":" @notice Return the unaliased L1 subgraph ID from a transferred L2 subgraph ID\n @param l2SubgraphID L2 subgraph ID\n @return L1subgraph ID"},"functionSelector":"9c6c022b","id":1347,"implemented":false,"kind":"function","modifiers":[],"name":"getUnaliasedL1SubgraphID","nameLocation":"2622:24:19","nodeType":"FunctionDefinition","parameters":{"id":1343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1342,"mutability":"mutable","name":"l2SubgraphID","nameLocation":"2655:12:19","nodeType":"VariableDeclaration","scope":1347,"src":"2647:20:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1341,"name":"uint256","nodeType":"ElementaryTypeName","src":"2647:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2646:22:19"},"returnParameters":{"id":1346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1345,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1347,"src":"2692:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1344,"name":"uint256","nodeType":"ElementaryTypeName","src":"2692:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2691:9:19"},"scope":1348,"src":"2613:88:19","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":1349,"src":"295:2408:19","usedErrors":[],"usedEvents":[]}],"src":"46:2658:19"},"id":19},"contracts/contracts/l2/gateway/IL2GraphTokenGateway.sol":{"ast":{"absolutePath":"contracts/contracts/l2/gateway/IL2GraphTokenGateway.sol","exportedSymbols":{"IL2GraphTokenGateway":[1493]},"id":1494,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1350,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:20"},{"id":1351,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"79:19:20"},{"abstract":false,"baseContracts":[],"canonicalName":"IL2GraphTokenGateway","contractDependencies":[],"contractKind":"interface","documentation":{"id":1352,"nodeType":"StructuredDocumentation","src":"203:156:20","text":" @title IL2GraphTokenGateway\n @author Edge & Node\n @notice Interface for the L2 Graph Token Gateway contract that handles token bridging on L2"},"fullyImplemented":false,"id":1493,"linearizedBaseContracts":[1493],"name":"IL2GraphTokenGateway","nameLocation":"370:20:20","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IL2GraphTokenGateway.OutboundCalldata","id":1357,"members":[{"constant":false,"id":1354,"mutability":"mutable","name":"from","nameLocation":"454:4:20","nodeType":"VariableDeclaration","scope":1357,"src":"446:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1353,"name":"address","nodeType":"ElementaryTypeName","src":"446:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1356,"mutability":"mutable","name":"extraData","nameLocation":"474:9:20","nodeType":"VariableDeclaration","scope":1357,"src":"468:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1355,"name":"bytes","nodeType":"ElementaryTypeName","src":"468:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"OutboundCalldata","nameLocation":"419:16:20","nodeType":"StructDefinition","scope":1493,"src":"412:78:20","visibility":"public"},{"anonymous":false,"documentation":{"id":1358,"nodeType":"StructuredDocumentation","src":"510:260:20","text":" @notice Emitted when a deposit from L1 is finalized on L2\n @param l1Token The L1 token address\n @param from The sender address on L1\n @param to The recipient address on L2\n @param amount The amount of tokens deposited"},"eventSelector":"c7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2","id":1368,"name":"DepositFinalized","nameLocation":"781:16:20","nodeType":"EventDefinition","parameters":{"id":1367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1360,"indexed":true,"mutability":"mutable","name":"l1Token","nameLocation":"814:7:20","nodeType":"VariableDeclaration","scope":1368,"src":"798:23:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1359,"name":"address","nodeType":"ElementaryTypeName","src":"798:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1362,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"839:4:20","nodeType":"VariableDeclaration","scope":1368,"src":"823:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1361,"name":"address","nodeType":"ElementaryTypeName","src":"823:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1364,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"861:2:20","nodeType":"VariableDeclaration","scope":1368,"src":"845:18:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1363,"name":"address","nodeType":"ElementaryTypeName","src":"845:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1366,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"873:6:20","nodeType":"VariableDeclaration","scope":1368,"src":"865:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1365,"name":"uint256","nodeType":"ElementaryTypeName","src":"865:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"797:83:20"},"src":"775:106:20"},{"anonymous":false,"documentation":{"id":1369,"nodeType":"StructuredDocumentation","src":"887:348:20","text":" @notice Emitted when a withdrawal from L2 to L1 is initiated\n @param l1Token The L1 token address\n @param from The sender address on L2\n @param to The recipient address on L1\n @param l2ToL1Id The L2 to L1 message ID\n @param exitNum The exit number\n @param amount The amount of tokens withdrawn"},"eventSelector":"3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d73","id":1383,"name":"WithdrawalInitiated","nameLocation":"1246:19:20","nodeType":"EventDefinition","parameters":{"id":1382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1371,"indexed":false,"mutability":"mutable","name":"l1Token","nameLocation":"1283:7:20","nodeType":"VariableDeclaration","scope":1383,"src":"1275:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1370,"name":"address","nodeType":"ElementaryTypeName","src":"1275:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1373,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1316:4:20","nodeType":"VariableDeclaration","scope":1383,"src":"1300:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1372,"name":"address","nodeType":"ElementaryTypeName","src":"1300:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1375,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"1346:2:20","nodeType":"VariableDeclaration","scope":1383,"src":"1330:18:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1374,"name":"address","nodeType":"ElementaryTypeName","src":"1330:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1377,"indexed":true,"mutability":"mutable","name":"l2ToL1Id","nameLocation":"1374:8:20","nodeType":"VariableDeclaration","scope":1383,"src":"1358:24:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1376,"name":"uint256","nodeType":"ElementaryTypeName","src":"1358:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1379,"indexed":false,"mutability":"mutable","name":"exitNum","nameLocation":"1400:7:20","nodeType":"VariableDeclaration","scope":1383,"src":"1392:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1378,"name":"uint256","nodeType":"ElementaryTypeName","src":"1392:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1381,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1425:6:20","nodeType":"VariableDeclaration","scope":1383,"src":"1417:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1380,"name":"uint256","nodeType":"ElementaryTypeName","src":"1417:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1265:172:20"},"src":"1240:198:20"},{"anonymous":false,"documentation":{"id":1384,"nodeType":"StructuredDocumentation","src":"1444:117:20","text":" @notice Emitted when the L2 router address is set\n @param l2Router The new L2 router address"},"eventSelector":"43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d3438","id":1388,"name":"L2RouterSet","nameLocation":"1572:11:20","nodeType":"EventDefinition","parameters":{"id":1387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1386,"indexed":false,"mutability":"mutable","name":"l2Router","nameLocation":"1592:8:20","nodeType":"VariableDeclaration","scope":1388,"src":"1584:16:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1385,"name":"address","nodeType":"ElementaryTypeName","src":"1584:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1583:18:20"},"src":"1566:36:20"},{"anonymous":false,"documentation":{"id":1389,"nodeType":"StructuredDocumentation","src":"1608:112:20","text":" @notice Emitted when the L1 token address is set\n @param l1GRT The L1 GRT token address"},"eventSelector":"0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f9","id":1393,"name":"L1TokenAddressSet","nameLocation":"1731:17:20","nodeType":"EventDefinition","parameters":{"id":1392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1391,"indexed":false,"mutability":"mutable","name":"l1GRT","nameLocation":"1757:5:20","nodeType":"VariableDeclaration","scope":1393,"src":"1749:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1390,"name":"address","nodeType":"ElementaryTypeName","src":"1749:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1748:15:20"},"src":"1725:39:20"},{"anonymous":false,"documentation":{"id":1394,"nodeType":"StructuredDocumentation","src":"1770:136:20","text":" @notice Emitted when the L1 counterpart address is set\n @param l1Counterpart The L1 counterpart gateway address"},"eventSelector":"60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a615","id":1398,"name":"L1CounterpartAddressSet","nameLocation":"1917:23:20","nodeType":"EventDefinition","parameters":{"id":1397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1396,"indexed":false,"mutability":"mutable","name":"l1Counterpart","nameLocation":"1949:13:20","nodeType":"VariableDeclaration","scope":1398,"src":"1941:21:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1395,"name":"address","nodeType":"ElementaryTypeName","src":"1941:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1940:23:20"},"src":"1911:53:20"},{"documentation":{"id":1399,"nodeType":"StructuredDocumentation","src":"1987:115:20","text":" @notice Initialize the gateway contract\n @param controller The controller contract address"},"functionSelector":"c4d66de8","id":1404,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"2116:10:20","nodeType":"FunctionDefinition","parameters":{"id":1402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1401,"mutability":"mutable","name":"controller","nameLocation":"2135:10:20","nodeType":"VariableDeclaration","scope":1404,"src":"2127:18:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1400,"name":"address","nodeType":"ElementaryTypeName","src":"2127:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2126:20:20"},"returnParameters":{"id":1403,"nodeType":"ParameterList","parameters":[],"src":"2155:0:20"},"scope":1493,"src":"2107:49:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1405,"nodeType":"StructuredDocumentation","src":"2162:106:20","text":" @notice Set the L2 router address\n @param l2Router The L2 router contract address"},"functionSelector":"0252fec1","id":1410,"implemented":false,"kind":"function","modifiers":[],"name":"setL2Router","nameLocation":"2282:11:20","nodeType":"FunctionDefinition","parameters":{"id":1408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1407,"mutability":"mutable","name":"l2Router","nameLocation":"2302:8:20","nodeType":"VariableDeclaration","scope":1410,"src":"2294:16:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1406,"name":"address","nodeType":"ElementaryTypeName","src":"2294:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2293:18:20"},"returnParameters":{"id":1409,"nodeType":"ParameterList","parameters":[],"src":"2320:0:20"},"scope":1493,"src":"2273:48:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1411,"nodeType":"StructuredDocumentation","src":"2327:105:20","text":" @notice Set the L1 token address\n @param l1GRT The L1 GRT token contract address"},"functionSelector":"69bc8cd4","id":1416,"implemented":false,"kind":"function","modifiers":[],"name":"setL1TokenAddress","nameLocation":"2446:17:20","nodeType":"FunctionDefinition","parameters":{"id":1414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1413,"mutability":"mutable","name":"l1GRT","nameLocation":"2472:5:20","nodeType":"VariableDeclaration","scope":1416,"src":"2464:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1412,"name":"address","nodeType":"ElementaryTypeName","src":"2464:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2463:15:20"},"returnParameters":{"id":1415,"nodeType":"ParameterList","parameters":[],"src":"2487:0:20"},"scope":1493,"src":"2437:51:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1417,"nodeType":"StructuredDocumentation","src":"2494:137:20","text":" @notice Set the L1 counterpart gateway address\n @param l1Counterpart The L1 counterpart gateway contract address"},"functionSelector":"d685c0b2","id":1422,"implemented":false,"kind":"function","modifiers":[],"name":"setL1CounterpartAddress","nameLocation":"2645:23:20","nodeType":"FunctionDefinition","parameters":{"id":1420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1419,"mutability":"mutable","name":"l1Counterpart","nameLocation":"2677:13:20","nodeType":"VariableDeclaration","scope":1422,"src":"2669:21:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1418,"name":"address","nodeType":"ElementaryTypeName","src":"2669:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2668:23:20"},"returnParameters":{"id":1421,"nodeType":"ParameterList","parameters":[],"src":"2700:0:20"},"scope":1493,"src":"2636:65:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1423,"nodeType":"StructuredDocumentation","src":"2707:300:20","text":" @notice Transfer tokens from L2 to L1\n @param l1Token The L1 token address\n @param to The recipient address on L1\n @param amount The amount of tokens to transfer\n @param data Additional data for the transfer\n @return The encoded outbound transfer data"},"functionSelector":"7b3a3c8b","id":1436,"implemented":false,"kind":"function","modifiers":[],"name":"outboundTransfer","nameLocation":"3021:16:20","nodeType":"FunctionDefinition","parameters":{"id":1432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1425,"mutability":"mutable","name":"l1Token","nameLocation":"3055:7:20","nodeType":"VariableDeclaration","scope":1436,"src":"3047:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1424,"name":"address","nodeType":"ElementaryTypeName","src":"3047:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1427,"mutability":"mutable","name":"to","nameLocation":"3080:2:20","nodeType":"VariableDeclaration","scope":1436,"src":"3072:10:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1426,"name":"address","nodeType":"ElementaryTypeName","src":"3072:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1429,"mutability":"mutable","name":"amount","nameLocation":"3100:6:20","nodeType":"VariableDeclaration","scope":1436,"src":"3092:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1428,"name":"uint256","nodeType":"ElementaryTypeName","src":"3092:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1431,"mutability":"mutable","name":"data","nameLocation":"3131:4:20","nodeType":"VariableDeclaration","scope":1436,"src":"3116:19:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1430,"name":"bytes","nodeType":"ElementaryTypeName","src":"3116:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3037:104:20"},"returnParameters":{"id":1435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1434,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1436,"src":"3160:12:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1433,"name":"bytes","nodeType":"ElementaryTypeName","src":"3160:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3159:14:20"},"scope":1493,"src":"3012:162:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1437,"nodeType":"StructuredDocumentation","src":"3180:307:20","text":" @notice Finalize an inbound transfer from L1 to L2\n @param l1Token The L1 token address\n @param from The sender address on L1\n @param to The recipient address on L2\n @param amount The amount of tokens to transfer\n @param data Additional data for the transfer"},"functionSelector":"2e567b36","id":1450,"implemented":false,"kind":"function","modifiers":[],"name":"finalizeInboundTransfer","nameLocation":"3501:23:20","nodeType":"FunctionDefinition","parameters":{"id":1448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1439,"mutability":"mutable","name":"l1Token","nameLocation":"3542:7:20","nodeType":"VariableDeclaration","scope":1450,"src":"3534:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1438,"name":"address","nodeType":"ElementaryTypeName","src":"3534:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1441,"mutability":"mutable","name":"from","nameLocation":"3567:4:20","nodeType":"VariableDeclaration","scope":1450,"src":"3559:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1440,"name":"address","nodeType":"ElementaryTypeName","src":"3559:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1443,"mutability":"mutable","name":"to","nameLocation":"3589:2:20","nodeType":"VariableDeclaration","scope":1450,"src":"3581:10:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1442,"name":"address","nodeType":"ElementaryTypeName","src":"3581:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1445,"mutability":"mutable","name":"amount","nameLocation":"3609:6:20","nodeType":"VariableDeclaration","scope":1450,"src":"3601:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1444,"name":"uint256","nodeType":"ElementaryTypeName","src":"3601:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1447,"mutability":"mutable","name":"data","nameLocation":"3640:4:20","nodeType":"VariableDeclaration","scope":1450,"src":"3625:19:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1446,"name":"bytes","nodeType":"ElementaryTypeName","src":"3625:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3524:126:20"},"returnParameters":{"id":1449,"nodeType":"ParameterList","parameters":[],"src":"3667:0:20"},"scope":1493,"src":"3492:176:20","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1451,"nodeType":"StructuredDocumentation","src":"3674:458:20","text":" @notice Transfer tokens from L2 to L1 (overloaded version with unused parameters)\n @param l1Token The L1 token address\n @param to The recipient address on L1\n @param amount The amount of tokens to transfer\n @param unused1 Unused parameter for compatibility\n @param unused2 Unused parameter for compatibility\n @param data Additional data for the transfer\n @return The encoded outbound transfer data"},"functionSelector":"d2ce7d65","id":1468,"implemented":false,"kind":"function","modifiers":[],"name":"outboundTransfer","nameLocation":"4146:16:20","nodeType":"FunctionDefinition","parameters":{"id":1464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1453,"mutability":"mutable","name":"l1Token","nameLocation":"4180:7:20","nodeType":"VariableDeclaration","scope":1468,"src":"4172:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1452,"name":"address","nodeType":"ElementaryTypeName","src":"4172:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1455,"mutability":"mutable","name":"to","nameLocation":"4205:2:20","nodeType":"VariableDeclaration","scope":1468,"src":"4197:10:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1454,"name":"address","nodeType":"ElementaryTypeName","src":"4197:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1457,"mutability":"mutable","name":"amount","nameLocation":"4225:6:20","nodeType":"VariableDeclaration","scope":1468,"src":"4217:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1456,"name":"uint256","nodeType":"ElementaryTypeName","src":"4217:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1459,"mutability":"mutable","name":"unused1","nameLocation":"4249:7:20","nodeType":"VariableDeclaration","scope":1468,"src":"4241:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1458,"name":"uint256","nodeType":"ElementaryTypeName","src":"4241:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1461,"mutability":"mutable","name":"unused2","nameLocation":"4274:7:20","nodeType":"VariableDeclaration","scope":1468,"src":"4266:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1460,"name":"uint256","nodeType":"ElementaryTypeName","src":"4266:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1463,"mutability":"mutable","name":"data","nameLocation":"4306:4:20","nodeType":"VariableDeclaration","scope":1468,"src":"4291:19:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1462,"name":"bytes","nodeType":"ElementaryTypeName","src":"4291:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4162:154:20"},"returnParameters":{"id":1467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1468,"src":"4343:12:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1465,"name":"bytes","nodeType":"ElementaryTypeName","src":"4343:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4342:14:20"},"scope":1493,"src":"4137:220:20","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1469,"nodeType":"StructuredDocumentation","src":"4363:171:20","text":" @notice Calculate the L2 token address for a given L1 token\n @param l1ERC20 The L1 token address\n @return The corresponding L2 token address"},"functionSelector":"a7e28d48","id":1476,"implemented":false,"kind":"function","modifiers":[],"name":"calculateL2TokenAddress","nameLocation":"4548:23:20","nodeType":"FunctionDefinition","parameters":{"id":1472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1471,"mutability":"mutable","name":"l1ERC20","nameLocation":"4580:7:20","nodeType":"VariableDeclaration","scope":1476,"src":"4572:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1470,"name":"address","nodeType":"ElementaryTypeName","src":"4572:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4571:17:20"},"returnParameters":{"id":1475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1474,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1476,"src":"4612:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1473,"name":"address","nodeType":"ElementaryTypeName","src":"4612:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4611:9:20"},"scope":1493,"src":"4539:82:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1477,"nodeType":"StructuredDocumentation","src":"4627:313:20","text":" @notice Get the encoded calldata for an outbound transfer\n @param token The token address\n @param from The sender address\n @param to The recipient address\n @param amount The amount of tokens\n @param data Additional transfer data\n @return The encoded calldata"},"functionSelector":"a0c76a96","id":1492,"implemented":false,"kind":"function","modifiers":[],"name":"getOutboundCalldata","nameLocation":"4954:19:20","nodeType":"FunctionDefinition","parameters":{"id":1488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1479,"mutability":"mutable","name":"token","nameLocation":"4991:5:20","nodeType":"VariableDeclaration","scope":1492,"src":"4983:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1478,"name":"address","nodeType":"ElementaryTypeName","src":"4983:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1481,"mutability":"mutable","name":"from","nameLocation":"5014:4:20","nodeType":"VariableDeclaration","scope":1492,"src":"5006:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1480,"name":"address","nodeType":"ElementaryTypeName","src":"5006:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1483,"mutability":"mutable","name":"to","nameLocation":"5036:2:20","nodeType":"VariableDeclaration","scope":1492,"src":"5028:10:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1482,"name":"address","nodeType":"ElementaryTypeName","src":"5028:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1485,"mutability":"mutable","name":"amount","nameLocation":"5056:6:20","nodeType":"VariableDeclaration","scope":1492,"src":"5048:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1484,"name":"uint256","nodeType":"ElementaryTypeName","src":"5048:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1487,"mutability":"mutable","name":"data","nameLocation":"5085:4:20","nodeType":"VariableDeclaration","scope":1492,"src":"5072:17:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1486,"name":"bytes","nodeType":"ElementaryTypeName","src":"5072:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4973:122:20"},"returnParameters":{"id":1491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1492,"src":"5119:12:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1489,"name":"bytes","nodeType":"ElementaryTypeName","src":"5119:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5118:14:20"},"scope":1493,"src":"4945:188:20","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":1494,"src":"360:4775:20","usedErrors":[],"usedEvents":[1368,1383,1388,1393,1398]}],"src":"45:5091:20"},"id":20},"contracts/contracts/l2/staking/IL2Staking.sol":{"ast":{"absolutePath":"contracts/contracts/l2/staking/IL2Staking.sol","exportedSymbols":{"IL2Staking":[1510],"IL2StakingBase":[1527],"IL2StakingTypes":[1545],"IStaking":[1882]},"id":1511,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1495,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:21"},{"id":1496,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"80:19:21"},{"absolutePath":"contracts/contracts/staking/IStaking.sol","file":"../../staking/IStaking.sol","id":1498,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1511,"sourceUnit":1883,"src":"101:54:21","symbolAliases":[{"foreign":{"id":1497,"name":"IStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1882,"src":"110:8:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/l2/staking/IL2StakingBase.sol","file":"./IL2StakingBase.sol","id":1500,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1511,"sourceUnit":1528,"src":"156:54:21","symbolAliases":[{"foreign":{"id":1499,"name":"IL2StakingBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1527,"src":"165:14:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/l2/staking/IL2StakingTypes.sol","file":"./IL2StakingTypes.sol","id":1502,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1511,"sourceUnit":1546,"src":"211:56:21","symbolAliases":[{"foreign":{"id":1501,"name":"IL2StakingTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1545,"src":"220:15:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1504,"name":"IStaking","nameLocations":["922:8:21"],"nodeType":"IdentifierPath","referencedDeclaration":1882,"src":"922:8:21"},"id":1505,"nodeType":"InheritanceSpecifier","src":"922:8:21"},{"baseName":{"id":1506,"name":"IL2StakingBase","nameLocations":["932:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":1527,"src":"932:14:21"},"id":1507,"nodeType":"InheritanceSpecifier","src":"932:14:21"},{"baseName":{"id":1508,"name":"IL2StakingTypes","nameLocations":["948:15:21"],"nodeType":"IdentifierPath","referencedDeclaration":1545,"src":"948:15:21"},"id":1509,"nodeType":"InheritanceSpecifier","src":"948:15:21"}],"canonicalName":"IL2Staking","contractDependencies":[],"contractKind":"interface","documentation":{"id":1503,"nodeType":"StructuredDocumentation","src":"269:628:21","text":" @title Interface for the L2 Staking contract\n @author Edge & Node\n @notice This is the interface that should be used when interacting with the L2 Staking contract.\n It extends the IStaking interface with the functions that are specific to L2, adding the callhook receiver\n to receive transferred stake and delegation from L1.\n @dev Note that L2Staking doesn't actually inherit this interface. This is because of\n the custom setup of the Staking contract where part of the functionality is implemented\n in a separate contract (StakingExtension) to which calls are delegated through the fallback function."},"fullyImplemented":false,"id":1510,"linearizedBaseContracts":[1510,1545,1527,1123,1882,1256,436,2647,2277,2338],"name":"IL2Staking","nameLocation":"908:10:21","nodeType":"ContractDefinition","nodes":[],"scope":1511,"src":"898:68:21","usedErrors":[],"usedEvents":[1526,1897,1906,1913,1928,1947,1972,1983,1992,1999,2004,2373,2386,2395,2406,2415]}],"src":"46:921:21"},"id":21},"contracts/contracts/l2/staking/IL2StakingBase.sol":{"ast":{"absolutePath":"contracts/contracts/l2/staking/IL2StakingBase.sol","exportedSymbols":{"ICallhookReceiver":[1123],"IL2StakingBase":[1527]},"id":1528,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1512,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:22"},{"absolutePath":"contracts/contracts/gateway/ICallhookReceiver.sol","file":"../../gateway/ICallhookReceiver.sol","id":1514,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1528,"sourceUnit":1124,"src":"184:72:22","symbolAliases":[{"foreign":{"id":1513,"name":"ICallhookReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1123,"src":"193:17:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1516,"name":"ICallhookReceiver","nameLocations":["574:17:22"],"nodeType":"IdentifierPath","referencedDeclaration":1123,"src":"574:17:22"},"id":1517,"nodeType":"InheritanceSpecifier","src":"574:17:22"}],"canonicalName":"IL2StakingBase","contractDependencies":[],"contractKind":"interface","documentation":{"id":1515,"nodeType":"StructuredDocumentation","src":"258:287:22","text":" @title Base interface for the L2Staking contract.\n @author Edge & Node\n @notice This interface is used to define the callhook receiver interface that is implemented by L2Staking.\n @dev Note it includes only the L2-specific functionality, not the full IStaking interface."},"fullyImplemented":false,"id":1527,"linearizedBaseContracts":[1527,1123],"name":"IL2StakingBase","nameLocation":"556:14:22","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1518,"nodeType":"StructuredDocumentation","src":"598:234:22","text":" @notice Emitted when transferred delegation is returned to a delegator\n @param indexer Address of the indexer\n @param delegator Address of the delegator\n @param amount Amount of delegation returned"},"eventSelector":"0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de","id":1526,"name":"TransferredDelegationReturnedToDelegator","nameLocation":"843:40:22","nodeType":"EventDefinition","parameters":{"id":1525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1520,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"900:7:22","nodeType":"VariableDeclaration","scope":1526,"src":"884:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1519,"name":"address","nodeType":"ElementaryTypeName","src":"884:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1522,"indexed":true,"mutability":"mutable","name":"delegator","nameLocation":"925:9:22","nodeType":"VariableDeclaration","scope":1526,"src":"909:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1521,"name":"address","nodeType":"ElementaryTypeName","src":"909:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1524,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"944:6:22","nodeType":"VariableDeclaration","scope":1526,"src":"936:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1523,"name":"uint256","nodeType":"ElementaryTypeName","src":"936:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"883:68:22"},"src":"837:115:22"}],"scope":1528,"src":"546:408:22","usedErrors":[],"usedEvents":[1526]}],"src":"46:909:22"},"id":22},"contracts/contracts/l2/staking/IL2StakingTypes.sol":{"ast":{"absolutePath":"contracts/contracts/l2/staking/IL2StakingTypes.sol","exportedSymbols":{"IL2StakingTypes":[1545]},"id":1546,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1529,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:23"},{"abstract":false,"baseContracts":[],"canonicalName":"IL2StakingTypes","contractDependencies":[],"contractKind":"interface","documentation":{"id":1530,"nodeType":"StructuredDocumentation","src":"81:131:23","text":" @title IL2StakingTypes\n @author Edge & Node\n @notice Interface defining types and enums used by L2 staking contracts"},"fullyImplemented":true,"id":1545,"linearizedBaseContracts":[1545],"name":"IL2StakingTypes","nameLocation":"223:15:23","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IL2StakingTypes.L1MessageCodes","documentation":{"id":1531,"nodeType":"StructuredDocumentation","src":"245:55:23","text":"@dev Message codes for the L1 -> L2 bridge callhook"},"id":1534,"members":[{"id":1532,"name":"RECEIVE_INDEXER_STAKE_CODE","nameLocation":"335:26:23","nodeType":"EnumValue","src":"335:26:23"},{"id":1533,"name":"RECEIVE_DELEGATION_CODE","nameLocation":"371:23:23","nodeType":"EnumValue","src":"371:23:23"}],"name":"L1MessageCodes","nameLocation":"310:14:23","nodeType":"EnumDefinition","src":"305:95:23"},{"canonicalName":"IL2StakingTypes.ReceiveIndexerStakeData","documentation":{"id":1535,"nodeType":"StructuredDocumentation","src":"406:79:23","text":"@dev Encoded message struct when receiving indexer stake through the bridge"},"id":1538,"members":[{"constant":false,"id":1537,"mutability":"mutable","name":"indexer","nameLocation":"539:7:23","nodeType":"VariableDeclaration","scope":1538,"src":"531:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1536,"name":"address","nodeType":"ElementaryTypeName","src":"531:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"ReceiveIndexerStakeData","nameLocation":"497:23:23","nodeType":"StructDefinition","scope":1545,"src":"490:63:23","visibility":"public"},{"canonicalName":"IL2StakingTypes.ReceiveDelegationData","documentation":{"id":1539,"nodeType":"StructuredDocumentation","src":"559:76:23","text":"@dev Encoded message struct when receiving delegation through the bridge"},"id":1544,"members":[{"constant":false,"id":1541,"mutability":"mutable","name":"indexer","nameLocation":"687:7:23","nodeType":"VariableDeclaration","scope":1544,"src":"679:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1540,"name":"address","nodeType":"ElementaryTypeName","src":"679:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1543,"mutability":"mutable","name":"delegator","nameLocation":"712:9:23","nodeType":"VariableDeclaration","scope":1544,"src":"704:17:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1542,"name":"address","nodeType":"ElementaryTypeName","src":"704:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"ReceiveDelegationData","nameLocation":"647:21:23","nodeType":"StructDefinition","scope":1545,"src":"640:88:23","visibility":"public"}],"scope":1546,"src":"213:517:23","usedErrors":[],"usedEvents":[]}],"src":"46:685:23"},"id":23},"contracts/contracts/rewards/ILegacyRewardsManager.sol":{"ast":{"absolutePath":"contracts/contracts/rewards/ILegacyRewardsManager.sol","exportedSymbols":{"ILegacyRewardsManager":[1557]},"id":1558,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1547,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:24"},{"abstract":false,"baseContracts":[],"canonicalName":"ILegacyRewardsManager","contractDependencies":[],"contractKind":"interface","documentation":{"id":1548,"nodeType":"StructuredDocumentation","src":"81:123:24","text":" @title ILegacyRewardsManager\n @author Edge & Node\n @notice Interface for the legacy rewards manager contract"},"fullyImplemented":false,"id":1557,"linearizedBaseContracts":[1557],"name":"ILegacyRewardsManager","nameLocation":"215:21:24","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1549,"nodeType":"StructuredDocumentation","src":"243:179:24","text":" @notice Get the accumulated rewards for a given allocation\n @param allocationID The allocation identifier\n @return The amount of accumulated rewards"},"functionSelector":"79ee54f7","id":1556,"implemented":false,"kind":"function","modifiers":[],"name":"getRewards","nameLocation":"436:10:24","nodeType":"FunctionDefinition","parameters":{"id":1552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1551,"mutability":"mutable","name":"allocationID","nameLocation":"455:12:24","nodeType":"VariableDeclaration","scope":1556,"src":"447:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1550,"name":"address","nodeType":"ElementaryTypeName","src":"447:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"446:22:24"},"returnParameters":{"id":1555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1554,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1556,"src":"492:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1553,"name":"uint256","nodeType":"ElementaryTypeName","src":"492:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"491:9:24"},"scope":1557,"src":"427:74:24","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1558,"src":"205:298:24","usedErrors":[],"usedEvents":[]}],"src":"46:458:24"},"id":24},"contracts/contracts/rewards/IRewardsIssuer.sol":{"ast":{"absolutePath":"contracts/contracts/rewards/IRewardsIssuer.sol","exportedSymbols":{"IRewardsIssuer":[1587]},"id":1588,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1559,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:25"},{"abstract":false,"baseContracts":[],"canonicalName":"IRewardsIssuer","contractDependencies":[],"contractKind":"interface","documentation":{"id":1560,"nodeType":"StructuredDocumentation","src":"81:144:25","text":" @title Rewards Issuer Interface\n @author Edge & Node\n @notice Interface for contracts that issue rewards based on allocation data"},"fullyImplemented":false,"id":1587,"linearizedBaseContracts":[1587],"name":"IRewardsIssuer","nameLocation":"236:14:25","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1561,"nodeType":"StructuredDocumentation","src":"257:544:25","text":" @notice Get allocation data to calculate rewards issuance\n @param allocationId The allocation Id\n @return isActive Whether the allocation is active or not\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":1578,"implemented":false,"kind":"function","modifiers":[],"name":"getAllocationData","nameLocation":"815:17:25","nodeType":"FunctionDefinition","parameters":{"id":1564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1563,"mutability":"mutable","name":"allocationId","nameLocation":"850:12:25","nodeType":"VariableDeclaration","scope":1578,"src":"842:20:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1562,"name":"address","nodeType":"ElementaryTypeName","src":"842:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"832:36:25"},"returnParameters":{"id":1577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1566,"mutability":"mutable","name":"isActive","nameLocation":"934:8:25","nodeType":"VariableDeclaration","scope":1578,"src":"929:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1565,"name":"bool","nodeType":"ElementaryTypeName","src":"929:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1568,"mutability":"mutable","name":"indexer","nameLocation":"964:7:25","nodeType":"VariableDeclaration","scope":1578,"src":"956:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1567,"name":"address","nodeType":"ElementaryTypeName","src":"956:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1570,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"993:20:25","nodeType":"VariableDeclaration","scope":1578,"src":"985:28:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1569,"name":"bytes32","nodeType":"ElementaryTypeName","src":"985:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1572,"mutability":"mutable","name":"tokens","nameLocation":"1035:6:25","nodeType":"VariableDeclaration","scope":1578,"src":"1027:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1571,"name":"uint256","nodeType":"ElementaryTypeName","src":"1027:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1574,"mutability":"mutable","name":"accRewardsPerAllocatedToken","nameLocation":"1063:27:25","nodeType":"VariableDeclaration","scope":1578,"src":"1055:35:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1573,"name":"uint256","nodeType":"ElementaryTypeName","src":"1055:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1576,"mutability":"mutable","name":"accRewardsPending","nameLocation":"1112:17:25","nodeType":"VariableDeclaration","scope":1578,"src":"1104:25:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1575,"name":"uint256","nodeType":"ElementaryTypeName","src":"1104:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"915:224:25"},"scope":1587,"src":"806:334:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1579,"nodeType":"StructuredDocumentation","src":"1146:199:25","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":1586,"implemented":false,"kind":"function","modifiers":[],"name":"getSubgraphAllocatedTokens","nameLocation":"1359:26:25","nodeType":"FunctionDefinition","parameters":{"id":1582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1581,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"1394:20:25","nodeType":"VariableDeclaration","scope":1586,"src":"1386:28:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1580,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1386:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1385:30:25"},"returnParameters":{"id":1585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1584,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1586,"src":"1439:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1583,"name":"uint256","nodeType":"ElementaryTypeName","src":"1439:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1438:9:25"},"scope":1587,"src":"1350:98:25","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1588,"src":"226:1224:25","usedErrors":[],"usedEvents":[]}],"src":"46:1405:25"},"id":25},"contracts/contracts/rewards/IRewardsManager.sol":{"ast":{"absolutePath":"contracts/contracts/rewards/IRewardsManager.sol","exportedSymbols":{"IRewardsManager":[1721]},"id":1722,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1589,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:26"},{"abstract":false,"baseContracts":[],"canonicalName":"IRewardsManager","contractDependencies":[],"contractKind":"interface","documentation":{"id":1590,"nodeType":"StructuredDocumentation","src":"81:142:26","text":" @title IRewardsManager\n @author Edge & Node\n @notice Interface for the RewardsManager contract that handles reward distribution"},"fullyImplemented":false,"id":1721,"linearizedBaseContracts":[1721],"name":"IRewardsManager","nameLocation":"234:15:26","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IRewardsManager.Subgraph","documentation":{"id":1591,"nodeType":"StructuredDocumentation","src":"256:440:26","text":" @dev Stores accumulated rewards and snapshots related to a particular SubgraphDeployment\n @param accRewardsForSubgraph Accumulated rewards for the subgraph\n @param accRewardsForSubgraphSnapshot Snapshot of accumulated rewards for the subgraph\n @param accRewardsPerSignalSnapshot Snapshot of accumulated rewards per signal\n @param accRewardsPerAllocatedToken Accumulated rewards per allocated token"},"id":1600,"members":[{"constant":false,"id":1593,"mutability":"mutable","name":"accRewardsForSubgraph","nameLocation":"735:21:26","nodeType":"VariableDeclaration","scope":1600,"src":"727:29:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1592,"name":"uint256","nodeType":"ElementaryTypeName","src":"727:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1595,"mutability":"mutable","name":"accRewardsForSubgraphSnapshot","nameLocation":"774:29:26","nodeType":"VariableDeclaration","scope":1600,"src":"766:37:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1594,"name":"uint256","nodeType":"ElementaryTypeName","src":"766:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1597,"mutability":"mutable","name":"accRewardsPerSignalSnapshot","nameLocation":"821:27:26","nodeType":"VariableDeclaration","scope":1600,"src":"813:35:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1596,"name":"uint256","nodeType":"ElementaryTypeName","src":"813:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1599,"mutability":"mutable","name":"accRewardsPerAllocatedToken","nameLocation":"866:27:26","nodeType":"VariableDeclaration","scope":1600,"src":"858:35:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1598,"name":"uint256","nodeType":"ElementaryTypeName","src":"858:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Subgraph","nameLocation":"708:8:26","nodeType":"StructDefinition","scope":1721,"src":"701:199:26","visibility":"public"},{"documentation":{"id":1601,"nodeType":"StructuredDocumentation","src":"927:149:26","text":" @notice Set the issuance per block for rewards distribution\n @param issuancePerBlock The amount of tokens to issue per block"},"functionSelector":"1156bdc1","id":1606,"implemented":false,"kind":"function","modifiers":[],"name":"setIssuancePerBlock","nameLocation":"1090:19:26","nodeType":"FunctionDefinition","parameters":{"id":1604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1603,"mutability":"mutable","name":"issuancePerBlock","nameLocation":"1118:16:26","nodeType":"VariableDeclaration","scope":1606,"src":"1110:24:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1602,"name":"uint256","nodeType":"ElementaryTypeName","src":"1110:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1109:26:26"},"returnParameters":{"id":1605,"nodeType":"ParameterList","parameters":[],"src":"1144:0:26"},"scope":1721,"src":"1081:64:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1607,"nodeType":"StructuredDocumentation","src":"1151:238:26","text":" @notice Sets the minimum signaled tokens on a subgraph to start accruing rewards\n @dev Can be set to zero which means that this feature is not being used\n @param minimumSubgraphSignal Minimum signaled tokens"},"functionSelector":"4bbfc1c5","id":1612,"implemented":false,"kind":"function","modifiers":[],"name":"setMinimumSubgraphSignal","nameLocation":"1403:24:26","nodeType":"FunctionDefinition","parameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1609,"mutability":"mutable","name":"minimumSubgraphSignal","nameLocation":"1436:21:26","nodeType":"VariableDeclaration","scope":1612,"src":"1428:29:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1608,"name":"uint256","nodeType":"ElementaryTypeName","src":"1428:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:31:26"},"returnParameters":{"id":1611,"nodeType":"ParameterList","parameters":[],"src":"1467:0:26"},"scope":1721,"src":"1394:74:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1613,"nodeType":"StructuredDocumentation","src":"1474:130:26","text":" @notice Set the subgraph service address\n @param subgraphService Address of the subgraph service contract"},"functionSelector":"93a90a1e","id":1618,"implemented":false,"kind":"function","modifiers":[],"name":"setSubgraphService","nameLocation":"1618:18:26","nodeType":"FunctionDefinition","parameters":{"id":1616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1615,"mutability":"mutable","name":"subgraphService","nameLocation":"1645:15:26","nodeType":"VariableDeclaration","scope":1618,"src":"1637:23:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1614,"name":"address","nodeType":"ElementaryTypeName","src":"1637:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1636:25:26"},"returnParameters":{"id":1617,"nodeType":"ParameterList","parameters":[],"src":"1670:0:26"},"scope":1721,"src":"1609:62:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1619,"nodeType":"StructuredDocumentation","src":"1700:160:26","text":" @notice Set the subgraph availability oracle address\n @param subgraphAvailabilityOracle The address of the subgraph availability oracle"},"functionSelector":"0903c094","id":1624,"implemented":false,"kind":"function","modifiers":[],"name":"setSubgraphAvailabilityOracle","nameLocation":"1874:29:26","nodeType":"FunctionDefinition","parameters":{"id":1622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1621,"mutability":"mutable","name":"subgraphAvailabilityOracle","nameLocation":"1912:26:26","nodeType":"VariableDeclaration","scope":1624,"src":"1904:34:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1620,"name":"address","nodeType":"ElementaryTypeName","src":"1904:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1903:36:26"},"returnParameters":{"id":1623,"nodeType":"ParameterList","parameters":[],"src":"1948:0:26"},"scope":1721,"src":"1865:84:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1625,"nodeType":"StructuredDocumentation","src":"1955:184:26","text":" @notice Set the denied status for a subgraph deployment\n @param subgraphDeploymentID The subgraph deployment ID\n @param deny True to deny, false to allow"},"functionSelector":"1324a506","id":1632,"implemented":false,"kind":"function","modifiers":[],"name":"setDenied","nameLocation":"2153:9:26","nodeType":"FunctionDefinition","parameters":{"id":1630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1627,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"2171:20:26","nodeType":"VariableDeclaration","scope":1632,"src":"2163:28:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1626,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2163:7:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1629,"mutability":"mutable","name":"deny","nameLocation":"2198:4:26","nodeType":"VariableDeclaration","scope":1632,"src":"2193:9:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1628,"name":"bool","nodeType":"ElementaryTypeName","src":"2193:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2162:41:26"},"returnParameters":{"id":1631,"nodeType":"ParameterList","parameters":[],"src":"2212:0:26"},"scope":1721,"src":"2144:69:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1633,"nodeType":"StructuredDocumentation","src":"2219:201:26","text":" @notice Check if a subgraph deployment is denied\n @param subgraphDeploymentID The subgraph deployment ID to check\n @return True if the subgraph is denied, false otherwise"},"functionSelector":"e820e284","id":1640,"implemented":false,"kind":"function","modifiers":[],"name":"isDenied","nameLocation":"2434:8:26","nodeType":"FunctionDefinition","parameters":{"id":1636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1635,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"2451:20:26","nodeType":"VariableDeclaration","scope":1640,"src":"2443:28:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1634,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2443:7:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2442:30:26"},"returnParameters":{"id":1639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1638,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1640,"src":"2496:4:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1637,"name":"bool","nodeType":"ElementaryTypeName","src":"2496:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2495:6:26"},"scope":1721,"src":"2425:77:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1641,"nodeType":"StructuredDocumentation","src":"2530:151:26","text":" @notice Gets the issuance of rewards per signal since last updated\n @return newly accrued rewards per signal since last update"},"functionSelector":"e284f848","id":1646,"implemented":false,"kind":"function","modifiers":[],"name":"getNewRewardsPerSignal","nameLocation":"2695:22:26","nodeType":"FunctionDefinition","parameters":{"id":1642,"nodeType":"ParameterList","parameters":[],"src":"2717:2:26"},"returnParameters":{"id":1645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1644,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1646,"src":"2743:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1643,"name":"uint256","nodeType":"ElementaryTypeName","src":"2743:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2742:9:26"},"scope":1721,"src":"2686:66:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1647,"nodeType":"StructuredDocumentation","src":"2758:132:26","text":" @notice Gets the currently accumulated rewards per signal\n @return Currently accumulated rewards per signal"},"functionSelector":"a8cc0ee2","id":1652,"implemented":false,"kind":"function","modifiers":[],"name":"getAccRewardsPerSignal","nameLocation":"2904:22:26","nodeType":"FunctionDefinition","parameters":{"id":1648,"nodeType":"ParameterList","parameters":[],"src":"2926:2:26"},"returnParameters":{"id":1651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1650,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1652,"src":"2952:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1649,"name":"uint256","nodeType":"ElementaryTypeName","src":"2952:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2951:9:26"},"scope":1721,"src":"2895:66:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1653,"nodeType":"StructuredDocumentation","src":"2967:196:26","text":" @notice Get the accumulated rewards for a specific subgraph\n @param subgraphDeploymentID The subgraph deployment ID\n @return The accumulated rewards for the subgraph"},"functionSelector":"5c6cbd59","id":1660,"implemented":false,"kind":"function","modifiers":[],"name":"getAccRewardsForSubgraph","nameLocation":"3177:24:26","nodeType":"FunctionDefinition","parameters":{"id":1656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1655,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"3210:20:26","nodeType":"VariableDeclaration","scope":1660,"src":"3202:28:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1654,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3202:7:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3201:30:26"},"returnParameters":{"id":1659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1658,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1660,"src":"3255:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1657,"name":"uint256","nodeType":"ElementaryTypeName","src":"3255:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3254:9:26"},"scope":1721,"src":"3168:96:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1661,"nodeType":"StructuredDocumentation","src":"3270:267:26","text":" @notice Gets the accumulated rewards per allocated token for the subgraph\n @param subgraphDeploymentID Subgraph deployment\n @return Accumulated rewards per allocated token for the subgraph\n @return Accumulated rewards for subgraph"},"functionSelector":"702a280e","id":1670,"implemented":false,"kind":"function","modifiers":[],"name":"getAccRewardsPerAllocatedToken","nameLocation":"3551:30:26","nodeType":"FunctionDefinition","parameters":{"id":1664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1663,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"3590:20:26","nodeType":"VariableDeclaration","scope":1670,"src":"3582:28:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1662,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3582:7:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3581:30:26"},"returnParameters":{"id":1669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1666,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1670,"src":"3635:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1665,"name":"uint256","nodeType":"ElementaryTypeName","src":"3635:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1670,"src":"3644:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1667,"name":"uint256","nodeType":"ElementaryTypeName","src":"3644:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3634:18:26"},"scope":1721,"src":"3542:111:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1671,"nodeType":"StructuredDocumentation","src":"3659:227:26","text":" @notice Calculate current rewards for a given allocation on demand\n @param rewardsIssuer The rewards issuer contract\n @param allocationID Allocation\n @return Rewards amount for an allocation"},"functionSelector":"779bcb9b","id":1680,"implemented":false,"kind":"function","modifiers":[],"name":"getRewards","nameLocation":"3900:10:26","nodeType":"FunctionDefinition","parameters":{"id":1676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1673,"mutability":"mutable","name":"rewardsIssuer","nameLocation":"3919:13:26","nodeType":"VariableDeclaration","scope":1680,"src":"3911:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1672,"name":"address","nodeType":"ElementaryTypeName","src":"3911:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1675,"mutability":"mutable","name":"allocationID","nameLocation":"3942:12:26","nodeType":"VariableDeclaration","scope":1680,"src":"3934:20:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1674,"name":"address","nodeType":"ElementaryTypeName","src":"3934:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3910:45:26"},"returnParameters":{"id":1679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1680,"src":"3979:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1677,"name":"uint256","nodeType":"ElementaryTypeName","src":"3979:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3978:9:26"},"scope":1721,"src":"3891:97:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1681,"nodeType":"StructuredDocumentation","src":"3994:287:26","text":" @notice Calculate rewards based on tokens and accumulated rewards per allocated token\n @param tokens The number of tokens allocated\n @param accRewardsPerAllocatedToken The accumulated rewards per allocated token\n @return The calculated rewards amount"},"functionSelector":"c8a5f81e","id":1690,"implemented":false,"kind":"function","modifiers":[],"name":"calcRewards","nameLocation":"4295:11:26","nodeType":"FunctionDefinition","parameters":{"id":1686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1683,"mutability":"mutable","name":"tokens","nameLocation":"4315:6:26","nodeType":"VariableDeclaration","scope":1690,"src":"4307:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1682,"name":"uint256","nodeType":"ElementaryTypeName","src":"4307:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1685,"mutability":"mutable","name":"accRewardsPerAllocatedToken","nameLocation":"4331:27:26","nodeType":"VariableDeclaration","scope":1690,"src":"4323:35:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1684,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4306:53:26"},"returnParameters":{"id":1689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1688,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1690,"src":"4383:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1687,"name":"uint256","nodeType":"ElementaryTypeName","src":"4383:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4382:9:26"},"scope":1721,"src":"4286:106:26","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":1691,"nodeType":"StructuredDocumentation","src":"4420:297:26","text":" @notice Updates the accumulated rewards per signal and save checkpoint block number\n @dev Must be called before `issuancePerBlock` or `total signalled GRT` changes.\n Called from the Curation contract on mint() and burn()\n @return Accumulated rewards per signal"},"functionSelector":"c7d1117d","id":1696,"implemented":false,"kind":"function","modifiers":[],"name":"updateAccRewardsPerSignal","nameLocation":"4731:25:26","nodeType":"FunctionDefinition","parameters":{"id":1692,"nodeType":"ParameterList","parameters":[],"src":"4756:2:26"},"returnParameters":{"id":1695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1696,"src":"4777:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1693,"name":"uint256","nodeType":"ElementaryTypeName","src":"4777:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4776:9:26"},"scope":1721,"src":"4722:64:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1697,"nodeType":"StructuredDocumentation","src":"4792:330:26","text":" @notice Pull rewards from the contract for a particular allocation\n @dev This function can only be called by the Staking contract.\n This function will mint the necessary tokens to reward based on the inflation calculation.\n @param allocationID Allocation\n @return Assigned rewards amount"},"functionSelector":"db750926","id":1704,"implemented":false,"kind":"function","modifiers":[],"name":"takeRewards","nameLocation":"5136:11:26","nodeType":"FunctionDefinition","parameters":{"id":1700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1699,"mutability":"mutable","name":"allocationID","nameLocation":"5156:12:26","nodeType":"VariableDeclaration","scope":1704,"src":"5148:20:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1698,"name":"address","nodeType":"ElementaryTypeName","src":"5148:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5147:22:26"},"returnParameters":{"id":1703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1702,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1704,"src":"5188:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1701,"name":"uint256","nodeType":"ElementaryTypeName","src":"5188:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5187:9:26"},"scope":1721,"src":"5127:70:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1705,"nodeType":"StructuredDocumentation","src":"5223:314:26","text":" @notice Triggers an update of rewards for a subgraph\n @dev Must be called before `signalled GRT` on a subgraph changes.\n Hook called from the Curation contract on mint() and burn()\n @param subgraphDeploymentID Subgraph deployment\n @return Accumulated rewards for subgraph"},"functionSelector":"1d1c2fec","id":1712,"implemented":false,"kind":"function","modifiers":[],"name":"onSubgraphSignalUpdate","nameLocation":"5551:22:26","nodeType":"FunctionDefinition","parameters":{"id":1708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1707,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"5582:20:26","nodeType":"VariableDeclaration","scope":1712,"src":"5574:28:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1706,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5574:7:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5573:30:26"},"returnParameters":{"id":1711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1710,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1712,"src":"5622:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1709,"name":"uint256","nodeType":"ElementaryTypeName","src":"5622:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5621:9:26"},"scope":1721,"src":"5542:89:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1713,"nodeType":"StructuredDocumentation","src":"5637:335:26","text":" @notice Triggers an update of rewards for a subgraph\n @dev Must be called before allocation on a subgraph changes.\n Hook called from the Staking contract on allocate() and close()\n @param subgraphDeploymentID Subgraph deployment\n @return Accumulated rewards per allocated token for a subgraph"},"functionSelector":"eeac3e0e","id":1720,"implemented":false,"kind":"function","modifiers":[],"name":"onSubgraphAllocationUpdate","nameLocation":"5986:26:26","nodeType":"FunctionDefinition","parameters":{"id":1716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1715,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"6021:20:26","nodeType":"VariableDeclaration","scope":1720,"src":"6013:28:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1714,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6013:7:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6012:30:26"},"returnParameters":{"id":1719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1718,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1720,"src":"6061:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1717,"name":"uint256","nodeType":"ElementaryTypeName","src":"6061:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6060:9:26"},"scope":1721,"src":"5977:93:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1722,"src":"224:5848:26","usedErrors":[],"usedEvents":[]}],"src":"46:6027:26"},"id":26},"contracts/contracts/staking/IL1GraphTokenLockTransferTool.sol":{"ast":{"absolutePath":"contracts/contracts/staking/IL1GraphTokenLockTransferTool.sol","exportedSymbols":{"IL1GraphTokenLockTransferTool":[1742]},"id":1743,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1723,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:27"},{"id":1724,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"80:19:27"},{"abstract":false,"baseContracts":[],"canonicalName":"IL1GraphTokenLockTransferTool","contractDependencies":[],"contractKind":"interface","documentation":{"id":1725,"nodeType":"StructuredDocumentation","src":"101:539:27","text":" @title Interface for the L1GraphTokenLockTransferTool contract\n @author Edge & Node\n @notice This interface defines the function to get the L2 wallet address for a given L1 token lock wallet.\n The Transfer Tool contract is implemented in the token-distribution repo: https://github.com/graphprotocol/token-distribution/pull/64\n and is only included here to provide support in L1Staking for the transfer of stake and delegation\n owned by token lock contracts. See GIP-0046 for details: https://forum.thegraph.com/t/4023"},"fullyImplemented":false,"id":1742,"linearizedBaseContracts":[1742],"name":"IL1GraphTokenLockTransferTool","nameLocation":"651:29:27","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1726,"nodeType":"StructuredDocumentation","src":"687:292:27","text":" @notice Pulls ETH from an L1 wallet's account to use for L2 ticket gas.\n @dev This function is only callable by the staking contract.\n @param l1Wallet Address of the L1 token lock wallet\n @param amount Amount of ETH to pull from the transfer tool contract"},"functionSelector":"8f8295f7","id":1733,"implemented":false,"kind":"function","modifiers":[],"name":"pullETH","nameLocation":"993:7:27","nodeType":"FunctionDefinition","parameters":{"id":1731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1728,"mutability":"mutable","name":"l1Wallet","nameLocation":"1009:8:27","nodeType":"VariableDeclaration","scope":1733,"src":"1001:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1727,"name":"address","nodeType":"ElementaryTypeName","src":"1001:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1730,"mutability":"mutable","name":"amount","nameLocation":"1027:6:27","nodeType":"VariableDeclaration","scope":1733,"src":"1019:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1729,"name":"uint256","nodeType":"ElementaryTypeName","src":"1019:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1000:34:27"},"returnParameters":{"id":1732,"nodeType":"ParameterList","parameters":[],"src":"1043:0:27"},"scope":1742,"src":"984:60:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1734,"nodeType":"StructuredDocumentation","src":"1050:486:27","text":" @notice Get the L2 token lock wallet address for a given L1 token lock wallet\n @dev In the actual L1GraphTokenLockTransferTool contract, this is simply the default getter for a public mapping variable.\n @param l1Wallet Address of the L1 token lock wallet\n @return Address of the L2 token lock wallet if the wallet has an L2 counterpart, or address zero if\n the wallet doesn't have an L2 counterpart (or is not known to be a token lock wallet)."},"functionSelector":"e7db8309","id":1741,"implemented":false,"kind":"function","modifiers":[],"name":"l2WalletAddress","nameLocation":"1550:15:27","nodeType":"FunctionDefinition","parameters":{"id":1737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1736,"mutability":"mutable","name":"l1Wallet","nameLocation":"1574:8:27","nodeType":"VariableDeclaration","scope":1741,"src":"1566:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1735,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1565:18:27"},"returnParameters":{"id":1740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1739,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1741,"src":"1607:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1738,"name":"address","nodeType":"ElementaryTypeName","src":"1607:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1606:9:27"},"scope":1742,"src":"1541:75:27","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1743,"src":"641:977:27","usedErrors":[],"usedEvents":[]}],"src":"46:1573:27"},"id":27},"contracts/contracts/staking/IL1Staking.sol":{"ast":{"absolutePath":"contracts/contracts/staking/IL1Staking.sol","exportedSymbols":{"IL1Staking":[1755],"IL1StakingBase":[1861],"IStaking":[1882]},"id":1756,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1744,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:28"},{"id":1745,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"80:19:28"},{"absolutePath":"contracts/contracts/staking/IStaking.sol","file":"./IStaking.sol","id":1747,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1756,"sourceUnit":1883,"src":"101:42:28","symbolAliases":[{"foreign":{"id":1746,"name":"IStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1882,"src":"110:8:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/staking/IL1StakingBase.sol","file":"./IL1StakingBase.sol","id":1749,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1756,"sourceUnit":1862,"src":"144:54:28","symbolAliases":[{"foreign":{"id":1748,"name":"IL1StakingBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1861,"src":"153:14:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1751,"name":"IStaking","nameLocations":["833:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":1882,"src":"833:8:28"},"id":1752,"nodeType":"InheritanceSpecifier","src":"833:8:28"},{"baseName":{"id":1753,"name":"IL1StakingBase","nameLocations":["843:14:28"],"nodeType":"IdentifierPath","referencedDeclaration":1861,"src":"843:14:28"},"id":1754,"nodeType":"InheritanceSpecifier","src":"843:14:28"}],"canonicalName":"IL1Staking","contractDependencies":[],"contractKind":"interface","documentation":{"id":1750,"nodeType":"StructuredDocumentation","src":"200:608:28","text":" @title Interface for the L1 Staking contract\n @author Edge & Node\n @notice This is the interface that should be used when interacting with the L1 Staking contract.\n It extends the IStaking interface with the functions that are specific to L1, adding the transfer tools\n to send stake and delegation to L2.\n @dev Note that L1Staking doesn't actually inherit this interface. This is because of\n the custom setup of the Staking contract where part of the functionality is implemented\n in a separate contract (StakingExtension) to which calls are delegated through the fallback function."},"fullyImplemented":false,"id":1755,"linearizedBaseContracts":[1755,1861,1882,1256,436,2647,2277,2338],"name":"IL1Staking","nameLocation":"819:10:28","nodeType":"ContractDefinition","nodes":[],"scope":1756,"src":"809:51:28","usedErrors":[],"usedEvents":[1770,1783,1788,1795,1897,1906,1913,1928,1947,1972,1983,1992,1999,2004,2373,2386,2395,2406,2415]}],"src":"46:815:28"},"id":28},"contracts/contracts/staking/IL1StakingBase.sol":{"ast":{"absolutePath":"contracts/contracts/staking/IL1StakingBase.sol","exportedSymbols":{"IL1GraphTokenLockTransferTool":[1742],"IL1StakingBase":[1861]},"id":1862,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1757,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:29"},{"id":1758,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"80:19:29"},{"absolutePath":"contracts/contracts/staking/IL1GraphTokenLockTransferTool.sol","file":"./IL1GraphTokenLockTransferTool.sol","id":1760,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1862,"sourceUnit":1743,"src":"204:84:29","symbolAliases":[{"foreign":{"id":1759,"name":"IL1GraphTokenLockTransferTool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1742,"src":"213:29:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IL1StakingBase","contractDependencies":[],"contractKind":"interface","documentation":{"id":1761,"nodeType":"StructuredDocumentation","src":"290:275:29","text":" @title Base interface for the L1Staking contract.\n @author Edge & Node\n @notice This interface is used to define the transfer tools that are implemented in L1Staking.\n @dev Note it includes only the L1-specific functionality, not the full IStaking interface."},"fullyImplemented":false,"id":1861,"linearizedBaseContracts":[1861],"name":"IL1StakingBase","nameLocation":"576:14:29","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1762,"nodeType":"StructuredDocumentation","src":"597:332:29","text":" @notice Emitted when an indexer transfers their stake to L2.\n This can happen several times as indexers can transfer partial stake.\n @param indexer Address of the indexer on L1\n @param l2Indexer Address of the indexer on L2\n @param transferredStakeTokens Amount of stake tokens transferred"},"eventSelector":"869be114c2c3725ff5a2c6ea9ce2d37bf0d5a33c50fcc4905dc11d6958cd122c","id":1770,"name":"IndexerStakeTransferredToL2","nameLocation":"940:27:29","nodeType":"EventDefinition","parameters":{"id":1769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1764,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"993:7:29","nodeType":"VariableDeclaration","scope":1770,"src":"977:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1763,"name":"address","nodeType":"ElementaryTypeName","src":"977:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1766,"indexed":true,"mutability":"mutable","name":"l2Indexer","nameLocation":"1026:9:29","nodeType":"VariableDeclaration","scope":1770,"src":"1010:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1765,"name":"address","nodeType":"ElementaryTypeName","src":"1010:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1768,"indexed":false,"mutability":"mutable","name":"transferredStakeTokens","nameLocation":"1053:22:29","nodeType":"VariableDeclaration","scope":1770,"src":"1045:30:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1767,"name":"uint256","nodeType":"ElementaryTypeName","src":"1045:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"967:114:29"},"src":"934:148:29"},{"anonymous":false,"documentation":{"id":1771,"nodeType":"StructuredDocumentation","src":"1088:382:29","text":" @notice Emitted when a delegator transfers their delegation to L2\n @param delegator Address of the delegator on L1\n @param l2Delegator Address of the delegator on L2\n @param indexer Address of the indexer on L1\n @param l2Indexer Address of the indexer on L2\n @param transferredDelegationTokens Amount of delegation tokens transferred"},"eventSelector":"231e5cfeff7759a468241d939ab04a60d603b17e359057abbb8f52afc3e4986b","id":1783,"name":"DelegationTransferredToL2","nameLocation":"1481:25:29","nodeType":"EventDefinition","parameters":{"id":1782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1773,"indexed":true,"mutability":"mutable","name":"delegator","nameLocation":"1532:9:29","nodeType":"VariableDeclaration","scope":1783,"src":"1516:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1772,"name":"address","nodeType":"ElementaryTypeName","src":"1516:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1775,"indexed":true,"mutability":"mutable","name":"l2Delegator","nameLocation":"1567:11:29","nodeType":"VariableDeclaration","scope":1783,"src":"1551:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1774,"name":"address","nodeType":"ElementaryTypeName","src":"1551:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1777,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"1604:7:29","nodeType":"VariableDeclaration","scope":1783,"src":"1588:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1776,"name":"address","nodeType":"ElementaryTypeName","src":"1588:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1779,"indexed":false,"mutability":"mutable","name":"l2Indexer","nameLocation":"1629:9:29","nodeType":"VariableDeclaration","scope":1783,"src":"1621:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1778,"name":"address","nodeType":"ElementaryTypeName","src":"1621:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1781,"indexed":false,"mutability":"mutable","name":"transferredDelegationTokens","nameLocation":"1656:27:29","nodeType":"VariableDeclaration","scope":1783,"src":"1648:35:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1780,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1506:183:29"},"src":"1475:215:29"},{"anonymous":false,"documentation":{"id":1784,"nodeType":"StructuredDocumentation","src":"1696:175:29","text":" @notice Emitted when the L1GraphTokenLockTransferTool is set\n @param l1GraphTokenLockTransferTool Address of the L1GraphTokenLockTransferTool contract"},"eventSelector":"1df10d75b292a047367affe08d5cfc6e4e56bb9dd9b648e9525dffe9fbd89f0b","id":1788,"name":"L1GraphTokenLockTransferToolSet","nameLocation":"1882:31:29","nodeType":"EventDefinition","parameters":{"id":1787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1786,"indexed":false,"mutability":"mutable","name":"l1GraphTokenLockTransferTool","nameLocation":"1922:28:29","nodeType":"VariableDeclaration","scope":1788,"src":"1914:36:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1785,"name":"address","nodeType":"ElementaryTypeName","src":"1914:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1913:38:29"},"src":"1876:76:29"},{"anonymous":false,"documentation":{"id":1789,"nodeType":"StructuredDocumentation","src":"1958:268:29","text":" @notice Emitted when a delegator unlocks their tokens ahead of time because the indexer has transferred to L2\n @param indexer Address of the indexer that transferred to L2\n @param delegator Address of the delegator unlocking their tokens"},"eventSelector":"9479d3ae78a3aabec806926645c4e8b7bfb79518adc929618d0f080c91f68308","id":1795,"name":"StakeDelegatedUnlockedDueToL2Transfer","nameLocation":"2237:37:29","nodeType":"EventDefinition","parameters":{"id":1794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1791,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"2291:7:29","nodeType":"VariableDeclaration","scope":1795,"src":"2275:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1790,"name":"address","nodeType":"ElementaryTypeName","src":"2275:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1793,"indexed":true,"mutability":"mutable","name":"delegator","nameLocation":"2316:9:29","nodeType":"VariableDeclaration","scope":1795,"src":"2300:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1792,"name":"address","nodeType":"ElementaryTypeName","src":"2300:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2274:52:29"},"src":"2231:96:29"},{"documentation":{"id":1796,"nodeType":"StructuredDocumentation","src":"2333:238:29","text":" @notice Set the L1GraphTokenLockTransferTool contract address\n @dev This function can only be called by the governor.\n @param l1GraphTokenLockTransferTool Address of the L1GraphTokenLockTransferTool contract"},"functionSelector":"f0c2d66c","id":1802,"implemented":false,"kind":"function","modifiers":[],"name":"setL1GraphTokenLockTransferTool","nameLocation":"2585:31:29","nodeType":"FunctionDefinition","parameters":{"id":1800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1799,"mutability":"mutable","name":"l1GraphTokenLockTransferTool","nameLocation":"2647:28:29","nodeType":"VariableDeclaration","scope":1802,"src":"2617:58:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IL1GraphTokenLockTransferTool_$1742","typeString":"contract IL1GraphTokenLockTransferTool"},"typeName":{"id":1798,"nodeType":"UserDefinedTypeName","pathNode":{"id":1797,"name":"IL1GraphTokenLockTransferTool","nameLocations":["2617:29:29"],"nodeType":"IdentifierPath","referencedDeclaration":1742,"src":"2617:29:29"},"referencedDeclaration":1742,"src":"2617:29:29","typeDescriptions":{"typeIdentifier":"t_contract$_IL1GraphTokenLockTransferTool_$1742","typeString":"contract IL1GraphTokenLockTransferTool"}},"visibility":"internal"}],"src":"2616:60:29"},"returnParameters":{"id":1801,"nodeType":"ParameterList","parameters":[],"src":"2685:0:29"},"scope":1861,"src":"2576:110:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1803,"nodeType":"StructuredDocumentation","src":"2692:1125:29","text":" @notice Send an indexer's stake to L2.\n @dev This function can only be called by the indexer (not an operator).\n It will validate that the remaining stake is sufficient to cover all the allocated\n stake, so the indexer might have to close some allocations before transferring.\n It will also check that the indexer's stake is not locked for withdrawal.\n Since the indexer address might be an L1-only contract, the function takes a beneficiary\n address that will be the indexer's address in L2.\n The caller must provide an amount of ETH to use for the L2 retryable ticket, that\n must be at least `maxSubmissionCost + gasPriceBid * maxGas`.\n @param l2Beneficiary Address of the indexer in L2. If the indexer has previously transferred stake, this must match the previously-used value.\n @param amount Amount of stake GRT to transfer to L2\n @param maxGas Max gas to use for the L2 retryable ticket\n @param gasPriceBid Gas price bid for the L2 retryable ticket\n @param maxSubmissionCost Max submission cost for the L2 retryable ticket"},"functionSelector":"cbf0fdfe","id":1816,"implemented":false,"kind":"function","modifiers":[],"name":"transferStakeToL2","nameLocation":"3831:17:29","nodeType":"FunctionDefinition","parameters":{"id":1814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1805,"mutability":"mutable","name":"l2Beneficiary","nameLocation":"3866:13:29","nodeType":"VariableDeclaration","scope":1816,"src":"3858:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1804,"name":"address","nodeType":"ElementaryTypeName","src":"3858:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1807,"mutability":"mutable","name":"amount","nameLocation":"3897:6:29","nodeType":"VariableDeclaration","scope":1816,"src":"3889:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1806,"name":"uint256","nodeType":"ElementaryTypeName","src":"3889:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1809,"mutability":"mutable","name":"maxGas","nameLocation":"3921:6:29","nodeType":"VariableDeclaration","scope":1816,"src":"3913:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1808,"name":"uint256","nodeType":"ElementaryTypeName","src":"3913:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1811,"mutability":"mutable","name":"gasPriceBid","nameLocation":"3945:11:29","nodeType":"VariableDeclaration","scope":1816,"src":"3937:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1810,"name":"uint256","nodeType":"ElementaryTypeName","src":"3937:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1813,"mutability":"mutable","name":"maxSubmissionCost","nameLocation":"3974:17:29","nodeType":"VariableDeclaration","scope":1816,"src":"3966:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1812,"name":"uint256","nodeType":"ElementaryTypeName","src":"3966:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3848:149:29"},"returnParameters":{"id":1815,"nodeType":"ParameterList","parameters":[],"src":"4014:0:29"},"scope":1861,"src":"3822:193:29","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1817,"nodeType":"StructuredDocumentation","src":"4021:1280:29","text":" @notice Send an indexer's stake to L2, from a GraphTokenLockWallet vesting contract.\n @dev This function can only be called by the indexer (not an operator).\n It will validate that the remaining stake is sufficient to cover all the allocated\n stake, so the indexer might have to close some allocations before transferring.\n It will also check that the indexer's stake is not locked for withdrawal.\n The L2 beneficiary for the stake will be determined by calling the L1GraphTokenLockTransferTool contract,\n so the caller must have previously transferred tokens through that first\n (see GIP-0046 for details: https://forum.thegraph.com/t/4023).\n The ETH for the L2 gas will be pulled from the L1GraphTokenLockTransferTool, so the owner of\n the GraphTokenLockWallet must have previously deposited at least `maxSubmissionCost + gasPriceBid * maxGas`\n ETH into the L1GraphTokenLockTransferTool contract (using its depositETH function).\n @param amount Amount of stake GRT to transfer to L2\n @param maxGas Max gas to use for the L2 retryable ticket\n @param gasPriceBid Gas price bid for the L2 retryable ticket\n @param maxSubmissionCost Max submission cost for the L2 retryable ticket"},"functionSelector":"42f543ae","id":1828,"implemented":false,"kind":"function","modifiers":[],"name":"transferLockedStakeToL2","nameLocation":"5315:23:29","nodeType":"FunctionDefinition","parameters":{"id":1826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1819,"mutability":"mutable","name":"amount","nameLocation":"5356:6:29","nodeType":"VariableDeclaration","scope":1828,"src":"5348:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1818,"name":"uint256","nodeType":"ElementaryTypeName","src":"5348:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1821,"mutability":"mutable","name":"maxGas","nameLocation":"5380:6:29","nodeType":"VariableDeclaration","scope":1828,"src":"5372:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1820,"name":"uint256","nodeType":"ElementaryTypeName","src":"5372:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1823,"mutability":"mutable","name":"gasPriceBid","nameLocation":"5404:11:29","nodeType":"VariableDeclaration","scope":1828,"src":"5396:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1822,"name":"uint256","nodeType":"ElementaryTypeName","src":"5396:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1825,"mutability":"mutable","name":"maxSubmissionCost","nameLocation":"5433:17:29","nodeType":"VariableDeclaration","scope":1828,"src":"5425:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1824,"name":"uint256","nodeType":"ElementaryTypeName","src":"5425:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5338:118:29"},"returnParameters":{"id":1827,"nodeType":"ParameterList","parameters":[],"src":"5465:0:29"},"scope":1861,"src":"5306:160:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1829,"nodeType":"StructuredDocumentation","src":"5472:966:29","text":" @notice Send a delegator's delegated tokens to L2\n @dev This function can only be called by the delegator.\n This function will validate that the indexer has transferred their stake using transferStakeToL2,\n and that the delegation is not locked for undelegation.\n Since the delegator's address might be an L1-only contract, the function takes a beneficiary\n address that will be the delegator's address in L2.\n The caller must provide an amount of ETH to use for the L2 retryable ticket, that\n must be at least `maxSubmissionCost + gasPriceBid * maxGas`.\n @param indexer Address of the indexer (in L1, before transferring to L2)\n @param l2Beneficiary Address of the delegator in L2\n @param maxGas Max gas to use for the L2 retryable ticket\n @param gasPriceBid Gas price bid for the L2 retryable ticket\n @param maxSubmissionCost Max submission cost for the L2 retryable ticket"},"functionSelector":"bb8d57c9","id":1842,"implemented":false,"kind":"function","modifiers":[],"name":"transferDelegationToL2","nameLocation":"6452:22:29","nodeType":"FunctionDefinition","parameters":{"id":1840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1831,"mutability":"mutable","name":"indexer","nameLocation":"6492:7:29","nodeType":"VariableDeclaration","scope":1842,"src":"6484:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1830,"name":"address","nodeType":"ElementaryTypeName","src":"6484:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1833,"mutability":"mutable","name":"l2Beneficiary","nameLocation":"6517:13:29","nodeType":"VariableDeclaration","scope":1842,"src":"6509:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1832,"name":"address","nodeType":"ElementaryTypeName","src":"6509:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1835,"mutability":"mutable","name":"maxGas","nameLocation":"6548:6:29","nodeType":"VariableDeclaration","scope":1842,"src":"6540:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1834,"name":"uint256","nodeType":"ElementaryTypeName","src":"6540:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1837,"mutability":"mutable","name":"gasPriceBid","nameLocation":"6572:11:29","nodeType":"VariableDeclaration","scope":1842,"src":"6564:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1836,"name":"uint256","nodeType":"ElementaryTypeName","src":"6564:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1839,"mutability":"mutable","name":"maxSubmissionCost","nameLocation":"6601:17:29","nodeType":"VariableDeclaration","scope":1842,"src":"6593:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1838,"name":"uint256","nodeType":"ElementaryTypeName","src":"6593:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6474:150:29"},"returnParameters":{"id":1841,"nodeType":"ParameterList","parameters":[],"src":"6641:0:29"},"scope":1861,"src":"6443:199:29","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1843,"nodeType":"StructuredDocumentation","src":"6648:1210:29","text":" @notice Send a delegator's delegated tokens to L2, for a GraphTokenLockWallet vesting contract\n @dev This function can only be called by the delegator.\n This function will validate that the indexer has transferred their stake using transferStakeToL2,\n and that the delegation is not locked for undelegation.\n The L2 beneficiary for the delegation will be determined by calling the L1GraphTokenLockTransferTool contract,\n so the caller must have previously transferred tokens through that first\n (see GIP-0046 for details: https://forum.thegraph.com/t/4023).\n The ETH for the L2 gas will be pulled from the L1GraphTokenLockTransferTool, so the owner of\n the GraphTokenLockWallet must have previously deposited at least `maxSubmissionCost + gasPriceBid * maxGas`\n ETH into the L1GraphTokenLockTransferTool contract (using its depositETH function).\n @param indexer Address of the indexer (in L1, before transferring to L2)\n @param maxGas Max gas to use for the L2 retryable ticket\n @param gasPriceBid Gas price bid for the L2 retryable ticket\n @param maxSubmissionCost Max submission cost for the L2 retryable ticket"},"functionSelector":"0a6655a0","id":1854,"implemented":false,"kind":"function","modifiers":[],"name":"transferLockedDelegationToL2","nameLocation":"7872:28:29","nodeType":"FunctionDefinition","parameters":{"id":1852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1845,"mutability":"mutable","name":"indexer","nameLocation":"7918:7:29","nodeType":"VariableDeclaration","scope":1854,"src":"7910:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1844,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1847,"mutability":"mutable","name":"maxGas","nameLocation":"7943:6:29","nodeType":"VariableDeclaration","scope":1854,"src":"7935:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1846,"name":"uint256","nodeType":"ElementaryTypeName","src":"7935:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1849,"mutability":"mutable","name":"gasPriceBid","nameLocation":"7967:11:29","nodeType":"VariableDeclaration","scope":1854,"src":"7959:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1848,"name":"uint256","nodeType":"ElementaryTypeName","src":"7959:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1851,"mutability":"mutable","name":"maxSubmissionCost","nameLocation":"7996:17:29","nodeType":"VariableDeclaration","scope":1854,"src":"7988:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1850,"name":"uint256","nodeType":"ElementaryTypeName","src":"7988:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7900:119:29"},"returnParameters":{"id":1853,"nodeType":"ParameterList","parameters":[],"src":"8028:0:29"},"scope":1861,"src":"7863:166:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1855,"nodeType":"StructuredDocumentation","src":"8035:583:29","text":" @notice Unlock a delegator's delegated tokens, if the indexer has transferred to L2\n @dev This function can only be called by the delegator.\n This function will validate that the indexer has transferred their stake using transferStakeToL2,\n and that the indexer has no remaining stake in L1.\n The tokens must previously be locked for undelegation by calling `undelegate()`,\n and can be withdrawn with `withdrawDelegated()` immediately after calling this.\n @param indexer Address of the indexer (in L1, before transferring to L2)"},"functionSelector":"2fd43482","id":1860,"implemented":false,"kind":"function","modifiers":[],"name":"unlockDelegationToTransferredIndexer","nameLocation":"8632:36:29","nodeType":"FunctionDefinition","parameters":{"id":1858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1857,"mutability":"mutable","name":"indexer","nameLocation":"8677:7:29","nodeType":"VariableDeclaration","scope":1860,"src":"8669:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1856,"name":"address","nodeType":"ElementaryTypeName","src":"8669:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8668:17:29"},"returnParameters":{"id":1859,"nodeType":"ParameterList","parameters":[],"src":"8694:0:29"},"scope":1861,"src":"8623:72:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1862,"src":"566:8131:29","usedErrors":[],"usedEvents":[1770,1783,1788,1795]}],"src":"46:8652:29"},"id":29},"contracts/contracts/staking/IStaking.sol":{"ast":{"absolutePath":"contracts/contracts/staking/IStaking.sol","exportedSymbols":{"IManaged":[1256],"IMulticall":[436],"IStaking":[1882],"IStakingBase":[2277],"IStakingExtension":[2647]},"id":1883,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1863,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:30"},{"id":1864,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"80:19:30"},{"absolutePath":"contracts/contracts/staking/IStakingBase.sol","file":"./IStakingBase.sol","id":1866,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1883,"sourceUnit":2278,"src":"101:50:30","symbolAliases":[{"foreign":{"id":1865,"name":"IStakingBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"110:12:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/staking/IStakingExtension.sol","file":"./IStakingExtension.sol","id":1868,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1883,"sourceUnit":2648,"src":"152:60:30","symbolAliases":[{"foreign":{"id":1867,"name":"IStakingExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2647,"src":"161:17:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/base/IMulticall.sol","file":"../base/IMulticall.sol","id":1870,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1883,"sourceUnit":437,"src":"213:52:30","symbolAliases":[{"foreign":{"id":1869,"name":"IMulticall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":436,"src":"222:10:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/governance/IManaged.sol","file":"../governance/IManaged.sol","id":1872,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1883,"sourceUnit":1257,"src":"266:54:30","symbolAliases":[{"foreign":{"id":1871,"name":"IManaged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"275:8:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1874,"name":"IStakingBase","nameLocations":["799:12:30"],"nodeType":"IdentifierPath","referencedDeclaration":2277,"src":"799:12:30"},"id":1875,"nodeType":"InheritanceSpecifier","src":"799:12:30"},{"baseName":{"id":1876,"name":"IStakingExtension","nameLocations":["813:17:30"],"nodeType":"IdentifierPath","referencedDeclaration":2647,"src":"813:17:30"},"id":1877,"nodeType":"InheritanceSpecifier","src":"813:17:30"},{"baseName":{"id":1878,"name":"IMulticall","nameLocations":["832:10:30"],"nodeType":"IdentifierPath","referencedDeclaration":436,"src":"832:10:30"},"id":1879,"nodeType":"InheritanceSpecifier","src":"832:10:30"},{"baseName":{"id":1880,"name":"IManaged","nameLocations":["844:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":1256,"src":"844:8:30"},"id":1881,"nodeType":"InheritanceSpecifier","src":"844:8:30"}],"canonicalName":"IStaking","contractDependencies":[],"contractKind":"interface","documentation":{"id":1873,"nodeType":"StructuredDocumentation","src":"322:454:30","text":" @title Interface for the Staking contract\n @author Edge & Node\n @notice This is the interface that should be used when interacting with the Staking contract.\n @dev Note that Staking doesn't actually inherit this interface. This is because of\n the custom setup of the Staking contract where part of the functionality is implemented\n in a separate contract (StakingExtension) to which calls are delegated through the fallback function."},"fullyImplemented":false,"id":1882,"linearizedBaseContracts":[1882,1256,436,2647,2277,2338],"name":"IStaking","nameLocation":"787:8:30","nodeType":"ContractDefinition","nodes":[],"scope":1883,"src":"777:78:30","usedErrors":[],"usedEvents":[1897,1906,1913,1928,1947,1972,1983,1992,1999,2004,2373,2386,2395,2406,2415]}],"src":"46:810:30"},"id":30},"contracts/contracts/staking/IStakingBase.sol":{"ast":{"absolutePath":"contracts/contracts/staking/IStakingBase.sol","exportedSymbols":{"IStakingBase":[2277],"IStakingData":[2338]},"id":2278,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1884,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:31"},{"id":1885,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"80:19:31"},{"absolutePath":"contracts/contracts/staking/IStakingData.sol","file":"./IStakingData.sol","id":1887,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2278,"sourceUnit":2339,"src":"204:50:31","symbolAliases":[{"foreign":{"id":1886,"name":"IStakingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2338,"src":"213:12:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1889,"name":"IStakingData","nameLocations":["805:12:31"],"nodeType":"IdentifierPath","referencedDeclaration":2338,"src":"805:12:31"},"id":1890,"nodeType":"InheritanceSpecifier","src":"805:12:31"}],"canonicalName":"IStakingBase","contractDependencies":[],"contractKind":"interface","documentation":{"id":1888,"nodeType":"StructuredDocumentation","src":"256:522:31","text":" @title Base interface for the Staking contract.\n @author Edge & Node\n @notice Base interface for the Staking contract.\n @dev This interface includes only what's implemented in the base Staking contract.\n It does not include the L1 and L2 specific functionality. It also does not include\n several functions that are implemented in the StakingExtension contract, and are called\n via delegatecall through the fallback function. See IStaking.sol for an interface\n that includes the full functionality."},"fullyImplemented":false,"id":2277,"linearizedBaseContracts":[2277,2338],"name":"IStakingBase","nameLocation":"789:12:31","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1891,"nodeType":"StructuredDocumentation","src":"824:163:31","text":" @notice Emitted when `indexer` stakes `tokens` amount.\n @param indexer Address of the indexer\n @param tokens Amount of tokens staked"},"eventSelector":"0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2","id":1897,"name":"StakeDeposited","nameLocation":"998:14:31","nodeType":"EventDefinition","parameters":{"id":1896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1893,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"1029:7:31","nodeType":"VariableDeclaration","scope":1897,"src":"1013:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1892,"name":"address","nodeType":"ElementaryTypeName","src":"1013:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1895,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1046:6:31","nodeType":"VariableDeclaration","scope":1897,"src":"1038:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1894,"name":"uint256","nodeType":"ElementaryTypeName","src":"1038:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1012:41:31"},"src":"992:62:31"},{"anonymous":false,"documentation":{"id":1898,"nodeType":"StructuredDocumentation","src":"1060:259:31","text":" @notice Emitted when `indexer` unstaked and locked `tokens` amount until `until` block.\n @param indexer Address of the indexer\n @param tokens Amount of tokens locked\n @param until Block number until which tokens are locked"},"eventSelector":"a5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01","id":1906,"name":"StakeLocked","nameLocation":"1330:11:31","nodeType":"EventDefinition","parameters":{"id":1905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1900,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"1358:7:31","nodeType":"VariableDeclaration","scope":1906,"src":"1342:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1899,"name":"address","nodeType":"ElementaryTypeName","src":"1342:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1902,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1375:6:31","nodeType":"VariableDeclaration","scope":1906,"src":"1367:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1901,"name":"uint256","nodeType":"ElementaryTypeName","src":"1367:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1904,"indexed":false,"mutability":"mutable","name":"until","nameLocation":"1391:5:31","nodeType":"VariableDeclaration","scope":1906,"src":"1383:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1903,"name":"uint256","nodeType":"ElementaryTypeName","src":"1383:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:56:31"},"src":"1324:74:31"},{"anonymous":false,"documentation":{"id":1907,"nodeType":"StructuredDocumentation","src":"1404:168:31","text":" @notice Emitted when `indexer` withdrew `tokens` staked.\n @param indexer Address of the indexer\n @param tokens Amount of tokens withdrawn"},"eventSelector":"8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc","id":1913,"name":"StakeWithdrawn","nameLocation":"1583:14:31","nodeType":"EventDefinition","parameters":{"id":1912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1909,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"1614:7:31","nodeType":"VariableDeclaration","scope":1913,"src":"1598:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1908,"name":"address","nodeType":"ElementaryTypeName","src":"1598:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1911,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1631:6:31","nodeType":"VariableDeclaration","scope":1913,"src":"1623:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1910,"name":"uint256","nodeType":"ElementaryTypeName","src":"1623:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1597:41:31"},"src":"1577:62:31"},{"anonymous":false,"documentation":{"id":1914,"nodeType":"StructuredDocumentation","src":"1645:596:31","text":" @notice Emitted when `indexer` allocated `tokens` amount to `subgraphDeploymentID`\n during `epoch`.\n `allocationID` indexer derived address used to identify the allocation.\n `metadata` additional information related to the allocation.\n @param indexer Address of the indexer\n @param subgraphDeploymentID Subgraph deployment ID\n @param epoch Epoch when allocation was created\n @param tokens Amount of tokens allocated\n @param allocationID Allocation identifier\n @param metadata IPFS hash for additional allocation information"},"eventSelector":"0f73ab5f706106366951b51f760e0a6f60c794f233d90958d81c82ad84fa6e87","id":1928,"name":"AllocationCreated","nameLocation":"2252:17:31","nodeType":"EventDefinition","parameters":{"id":1927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1916,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"2295:7:31","nodeType":"VariableDeclaration","scope":1928,"src":"2279:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1915,"name":"address","nodeType":"ElementaryTypeName","src":"2279:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1918,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"2328:20:31","nodeType":"VariableDeclaration","scope":1928,"src":"2312:36:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1917,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2312:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1920,"indexed":false,"mutability":"mutable","name":"epoch","nameLocation":"2366:5:31","nodeType":"VariableDeclaration","scope":1928,"src":"2358:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1919,"name":"uint256","nodeType":"ElementaryTypeName","src":"2358:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1922,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"2389:6:31","nodeType":"VariableDeclaration","scope":1928,"src":"2381:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1921,"name":"uint256","nodeType":"ElementaryTypeName","src":"2381:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1924,"indexed":true,"mutability":"mutable","name":"allocationID","nameLocation":"2421:12:31","nodeType":"VariableDeclaration","scope":1928,"src":"2405:28:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1923,"name":"address","nodeType":"ElementaryTypeName","src":"2405:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1926,"indexed":false,"mutability":"mutable","name":"metadata","nameLocation":"2451:8:31","nodeType":"VariableDeclaration","scope":1928,"src":"2443:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1925,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2443:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2269:196:31"},"src":"2246:220:31"},{"anonymous":false,"documentation":{"id":1929,"nodeType":"StructuredDocumentation","src":"2472:762:31","text":" @notice 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 @param indexer Address of the indexer\n @param subgraphDeploymentID Subgraph deployment ID\n @param epoch Epoch when allocation was closed\n @param tokens Amount of tokens unallocated\n @param allocationID Allocation identifier\n @param sender Address that closed the allocation\n @param poi Proof of indexing submitted\n @param isPublic True if closed by someone other than the indexer"},"eventSelector":"f6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce1403","id":1947,"name":"AllocationClosed","nameLocation":"3245:16:31","nodeType":"EventDefinition","parameters":{"id":1946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1931,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"3287:7:31","nodeType":"VariableDeclaration","scope":1947,"src":"3271:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1930,"name":"address","nodeType":"ElementaryTypeName","src":"3271:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1933,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"3320:20:31","nodeType":"VariableDeclaration","scope":1947,"src":"3304:36:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1932,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3304:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1935,"indexed":false,"mutability":"mutable","name":"epoch","nameLocation":"3358:5:31","nodeType":"VariableDeclaration","scope":1947,"src":"3350:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1934,"name":"uint256","nodeType":"ElementaryTypeName","src":"3350:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1937,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"3381:6:31","nodeType":"VariableDeclaration","scope":1947,"src":"3373:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1936,"name":"uint256","nodeType":"ElementaryTypeName","src":"3373:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1939,"indexed":true,"mutability":"mutable","name":"allocationID","nameLocation":"3413:12:31","nodeType":"VariableDeclaration","scope":1947,"src":"3397:28:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1938,"name":"address","nodeType":"ElementaryTypeName","src":"3397:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1941,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3443:6:31","nodeType":"VariableDeclaration","scope":1947,"src":"3435:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1940,"name":"address","nodeType":"ElementaryTypeName","src":"3435:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1943,"indexed":false,"mutability":"mutable","name":"poi","nameLocation":"3467:3:31","nodeType":"VariableDeclaration","scope":1947,"src":"3459:11:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1942,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3459:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1945,"indexed":false,"mutability":"mutable","name":"isPublic","nameLocation":"3485:8:31","nodeType":"VariableDeclaration","scope":1947,"src":"3480:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1944,"name":"bool","nodeType":"ElementaryTypeName","src":"3480:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3261:238:31"},"src":"3239:261:31"},{"anonymous":false,"documentation":{"id":1948,"nodeType":"StructuredDocumentation","src":"3506:1160:31","text":" @notice 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 @param assetHolder Address providing the rebate tokens\n @param indexer Address of the indexer collecting the rebate\n @param subgraphDeploymentID Subgraph deployment ID\n @param allocationID Allocation identifier\n @param epoch Epoch when rebate was collected\n @param tokens Total amount of tokens in the rebate\n @param protocolTax Amount burned as protocol tax\n @param curationFees Amount distributed to curators\n @param queryFees Amount available for rebate after fees\n @param queryRebates Amount distributed to the indexer\n @param delegationRewards Amount distributed to delegators"},"eventSelector":"f5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b","id":1972,"name":"RebateCollected","nameLocation":"4677:15:31","nodeType":"EventDefinition","parameters":{"id":1971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1950,"indexed":false,"mutability":"mutable","name":"assetHolder","nameLocation":"4710:11:31","nodeType":"VariableDeclaration","scope":1972,"src":"4702:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1949,"name":"address","nodeType":"ElementaryTypeName","src":"4702:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1952,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"4747:7:31","nodeType":"VariableDeclaration","scope":1972,"src":"4731:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1951,"name":"address","nodeType":"ElementaryTypeName","src":"4731:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1954,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"4780:20:31","nodeType":"VariableDeclaration","scope":1972,"src":"4764:36:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1953,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4764:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1956,"indexed":true,"mutability":"mutable","name":"allocationID","nameLocation":"4826:12:31","nodeType":"VariableDeclaration","scope":1972,"src":"4810:28:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1955,"name":"address","nodeType":"ElementaryTypeName","src":"4810:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1958,"indexed":false,"mutability":"mutable","name":"epoch","nameLocation":"4856:5:31","nodeType":"VariableDeclaration","scope":1972,"src":"4848:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1957,"name":"uint256","nodeType":"ElementaryTypeName","src":"4848:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1960,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"4879:6:31","nodeType":"VariableDeclaration","scope":1972,"src":"4871:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1959,"name":"uint256","nodeType":"ElementaryTypeName","src":"4871:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1962,"indexed":false,"mutability":"mutable","name":"protocolTax","nameLocation":"4903:11:31","nodeType":"VariableDeclaration","scope":1972,"src":"4895:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1961,"name":"uint256","nodeType":"ElementaryTypeName","src":"4895:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1964,"indexed":false,"mutability":"mutable","name":"curationFees","nameLocation":"4932:12:31","nodeType":"VariableDeclaration","scope":1972,"src":"4924:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1963,"name":"uint256","nodeType":"ElementaryTypeName","src":"4924:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1966,"indexed":false,"mutability":"mutable","name":"queryFees","nameLocation":"4962:9:31","nodeType":"VariableDeclaration","scope":1972,"src":"4954:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1965,"name":"uint256","nodeType":"ElementaryTypeName","src":"4954:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1968,"indexed":false,"mutability":"mutable","name":"queryRebates","nameLocation":"4989:12:31","nodeType":"VariableDeclaration","scope":1972,"src":"4981:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1967,"name":"uint256","nodeType":"ElementaryTypeName","src":"4981:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1970,"indexed":false,"mutability":"mutable","name":"delegationRewards","nameLocation":"5019:17:31","nodeType":"VariableDeclaration","scope":1972,"src":"5011:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1969,"name":"uint256","nodeType":"ElementaryTypeName","src":"5011:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4692:350:31"},"src":"4671:372:31"},{"anonymous":false,"documentation":{"id":1973,"nodeType":"StructuredDocumentation","src":"5049:388:31","text":" @notice Emitted when `indexer` update the delegation parameters for its delegation pool.\n @param indexer Address of the indexer\n @param indexingRewardCut Percentage of indexing rewards left for the indexer\n @param queryFeeCut Percentage of query fees left for the indexer\n @param __DEPRECATED_cooldownBlocks Deprecated parameter (no longer used)"},"eventSelector":"dd5c1add84431df7ff63c721510522fbccafda37dfc33f0f5094d90135a8f22a","id":1983,"name":"DelegationParametersUpdated","nameLocation":"5448:27:31","nodeType":"EventDefinition","parameters":{"id":1982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1975,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"5501:7:31","nodeType":"VariableDeclaration","scope":1983,"src":"5485:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1974,"name":"address","nodeType":"ElementaryTypeName","src":"5485:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1977,"indexed":false,"mutability":"mutable","name":"indexingRewardCut","nameLocation":"5525:17:31","nodeType":"VariableDeclaration","scope":1983,"src":"5518:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1976,"name":"uint32","nodeType":"ElementaryTypeName","src":"5518:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1979,"indexed":false,"mutability":"mutable","name":"queryFeeCut","nameLocation":"5559:11:31","nodeType":"VariableDeclaration","scope":1983,"src":"5552:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1978,"name":"uint32","nodeType":"ElementaryTypeName","src":"5552:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1981,"indexed":false,"mutability":"mutable","name":"__DEPRECATED_cooldownBlocks","nameLocation":"5587:27:31","nodeType":"VariableDeclaration","scope":1983,"src":"5580:34:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1980,"name":"uint32","nodeType":"ElementaryTypeName","src":"5580:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"5475:188:31"},"src":"5442:222:31"},{"anonymous":false,"documentation":{"id":1984,"nodeType":"StructuredDocumentation","src":"5670:221:31","text":" @notice Emitted when `indexer` set `operator` access.\n @param indexer Address of the indexer\n @param operator Address of the operator\n @param allowed Whether the operator is authorized"},"eventSelector":"a3581229e2c315eb01303f468621e07aa9b628a23b1608162ae063f143355135","id":1992,"name":"SetOperator","nameLocation":"5902:11:31","nodeType":"EventDefinition","parameters":{"id":1991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1986,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"5930:7:31","nodeType":"VariableDeclaration","scope":1992,"src":"5914:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1985,"name":"address","nodeType":"ElementaryTypeName","src":"5914:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1988,"indexed":true,"mutability":"mutable","name":"operator","nameLocation":"5955:8:31","nodeType":"VariableDeclaration","scope":1992,"src":"5939:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1987,"name":"address","nodeType":"ElementaryTypeName","src":"5939:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1990,"indexed":false,"mutability":"mutable","name":"allowed","nameLocation":"5970:7:31","nodeType":"VariableDeclaration","scope":1992,"src":"5965:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1989,"name":"bool","nodeType":"ElementaryTypeName","src":"5965:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5913:65:31"},"src":"5896:83:31"},{"anonymous":false,"documentation":{"id":1993,"nodeType":"StructuredDocumentation","src":"5985:182:31","text":" @notice Emitted when `indexer` set an address to receive rewards.\n @param indexer Address of the indexer\n @param destination Address to receive rewards"},"eventSelector":"29c33cd533c17d8916c8e471a4e2c4d1e34caa9b8844527c0bb182b3c104c7d3","id":1999,"name":"SetRewardsDestination","nameLocation":"6178:21:31","nodeType":"EventDefinition","parameters":{"id":1998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1995,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"6216:7:31","nodeType":"VariableDeclaration","scope":1999,"src":"6200:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1994,"name":"address","nodeType":"ElementaryTypeName","src":"6200:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1997,"indexed":true,"mutability":"mutable","name":"destination","nameLocation":"6241:11:31","nodeType":"VariableDeclaration","scope":1999,"src":"6225:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1996,"name":"address","nodeType":"ElementaryTypeName","src":"6225:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6199:54:31"},"src":"6172:82:31"},{"anonymous":false,"documentation":{"id":2000,"nodeType":"StructuredDocumentation","src":"6260:239:31","text":" @notice Emitted when `extensionImpl` was set as the address of the StakingExtension contract\n to which extended functionality is delegated.\n @param extensionImpl Address of the StakingExtension implementation"},"eventSelector":"0cb7ab0359507b75eb7d3af43896a0a80baf3c8e551e4e8393f37f8b9bb9f385","id":2004,"name":"ExtensionImplementationSet","nameLocation":"6510:26:31","nodeType":"EventDefinition","parameters":{"id":2003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2002,"indexed":true,"mutability":"mutable","name":"extensionImpl","nameLocation":"6553:13:31","nodeType":"VariableDeclaration","scope":2004,"src":"6537:29:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2001,"name":"address","nodeType":"ElementaryTypeName","src":"6537:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6536:31:31"},"src":"6504:64:31"},{"canonicalName":"IStakingBase.AllocationState","documentation":{"id":2005,"nodeType":"StructuredDocumentation","src":"6574:202:31","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":2009,"members":[{"id":2006,"name":"Null","nameLocation":"6812:4:31","nodeType":"EnumValue","src":"6812:4:31"},{"id":2007,"name":"Active","nameLocation":"6826:6:31","nodeType":"EnumValue","src":"6826:6:31"},{"id":2008,"name":"Closed","nameLocation":"6842:6:31","nodeType":"EnumValue","src":"6842:6:31"}],"name":"AllocationState","nameLocation":"6786:15:31","nodeType":"EnumDefinition","src":"6781:73:31"},{"documentation":{"id":2010,"nodeType":"StructuredDocumentation","src":"6860:951:31","text":" @notice Initialize this contract.\n @param controller Address of the controller that manages this contract\n @param minimumIndexerStake Minimum amount of tokens that an indexer must stake\n @param thawingPeriod Number of blocks that tokens get locked after unstaking\n @param protocolPercentage Percentage of query fees that are burned as protocol fee (in PPM)\n @param curationPercentage Percentage of query fees that are given to curators (in PPM)\n @param maxAllocationEpochs The maximum number of epochs that an allocation can be active\n @param delegationUnbondingPeriod The period in epochs that tokens get locked after undelegating\n @param delegationRatio The ratio between an indexer's own stake and the delegation they can use\n @param rebatesParameters Alpha and lambda parameters for rebates function\n @param extensionImpl Address of the StakingExtension implementation"},"functionSelector":"687fe40e","id":2034,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7825:10:31","nodeType":"FunctionDefinition","parameters":{"id":2032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2012,"mutability":"mutable","name":"controller","nameLocation":"7853:10:31","nodeType":"VariableDeclaration","scope":2034,"src":"7845:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2011,"name":"address","nodeType":"ElementaryTypeName","src":"7845:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2014,"mutability":"mutable","name":"minimumIndexerStake","nameLocation":"7881:19:31","nodeType":"VariableDeclaration","scope":2034,"src":"7873:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2013,"name":"uint256","nodeType":"ElementaryTypeName","src":"7873:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2016,"mutability":"mutable","name":"thawingPeriod","nameLocation":"7917:13:31","nodeType":"VariableDeclaration","scope":2034,"src":"7910:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2015,"name":"uint32","nodeType":"ElementaryTypeName","src":"7910:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2018,"mutability":"mutable","name":"protocolPercentage","nameLocation":"7947:18:31","nodeType":"VariableDeclaration","scope":2034,"src":"7940:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2017,"name":"uint32","nodeType":"ElementaryTypeName","src":"7940:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2020,"mutability":"mutable","name":"curationPercentage","nameLocation":"7982:18:31","nodeType":"VariableDeclaration","scope":2034,"src":"7975:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2019,"name":"uint32","nodeType":"ElementaryTypeName","src":"7975:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2022,"mutability":"mutable","name":"maxAllocationEpochs","nameLocation":"8017:19:31","nodeType":"VariableDeclaration","scope":2034,"src":"8010:26:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2021,"name":"uint32","nodeType":"ElementaryTypeName","src":"8010:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2024,"mutability":"mutable","name":"delegationUnbondingPeriod","nameLocation":"8053:25:31","nodeType":"VariableDeclaration","scope":2034,"src":"8046:32:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2023,"name":"uint32","nodeType":"ElementaryTypeName","src":"8046:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2026,"mutability":"mutable","name":"delegationRatio","nameLocation":"8095:15:31","nodeType":"VariableDeclaration","scope":2034,"src":"8088:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2025,"name":"uint32","nodeType":"ElementaryTypeName","src":"8088:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2029,"mutability":"mutable","name":"rebatesParameters","nameLocation":"8147:17:31","nodeType":"VariableDeclaration","scope":2034,"src":"8120:44:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RebatesParameters_$2337_calldata_ptr","typeString":"struct IStakingData.RebatesParameters"},"typeName":{"id":2028,"nodeType":"UserDefinedTypeName","pathNode":{"id":2027,"name":"RebatesParameters","nameLocations":["8120:17:31"],"nodeType":"IdentifierPath","referencedDeclaration":2337,"src":"8120:17:31"},"referencedDeclaration":2337,"src":"8120:17:31","typeDescriptions":{"typeIdentifier":"t_struct$_RebatesParameters_$2337_storage_ptr","typeString":"struct IStakingData.RebatesParameters"}},"visibility":"internal"},{"constant":false,"id":2031,"mutability":"mutable","name":"extensionImpl","nameLocation":"8182:13:31","nodeType":"VariableDeclaration","scope":2034,"src":"8174:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2030,"name":"address","nodeType":"ElementaryTypeName","src":"8174:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7835:366:31"},"returnParameters":{"id":2033,"nodeType":"ParameterList","parameters":[],"src":"8210:0:31"},"scope":2277,"src":"7816:395:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2035,"nodeType":"StructuredDocumentation","src":"8217:219:31","text":" @notice Set the address of the StakingExtension implementation.\n @dev This function can only be called by the governor.\n @param extensionImpl Address of the StakingExtension implementation"},"functionSelector":"6948a78c","id":2040,"implemented":false,"kind":"function","modifiers":[],"name":"setExtensionImpl","nameLocation":"8450:16:31","nodeType":"FunctionDefinition","parameters":{"id":2038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2037,"mutability":"mutable","name":"extensionImpl","nameLocation":"8475:13:31","nodeType":"VariableDeclaration","scope":2040,"src":"8467:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2036,"name":"address","nodeType":"ElementaryTypeName","src":"8467:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8466:23:31"},"returnParameters":{"id":2039,"nodeType":"ParameterList","parameters":[],"src":"8498:0:31"},"scope":2277,"src":"8441:58:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2041,"nodeType":"StructuredDocumentation","src":"8505:264:31","text":" @notice Set the address of the counterpart (L1 or L2) staking contract.\n @dev This function can only be called by the governor.\n @param counterpart Address of the counterpart staking contract in the other chain, without any aliasing."},"functionSelector":"1ae72045","id":2046,"implemented":false,"kind":"function","modifiers":[],"name":"setCounterpartStakingAddress","nameLocation":"8783:28:31","nodeType":"FunctionDefinition","parameters":{"id":2044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2043,"mutability":"mutable","name":"counterpart","nameLocation":"8820:11:31","nodeType":"VariableDeclaration","scope":2046,"src":"8812:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2042,"name":"address","nodeType":"ElementaryTypeName","src":"8812:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8811:21:31"},"returnParameters":{"id":2045,"nodeType":"ParameterList","parameters":[],"src":"8841:0:31"},"scope":2277,"src":"8774:68:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2047,"nodeType":"StructuredDocumentation","src":"8848:220:31","text":" @notice Set the minimum stake needed to be an Indexer\n @dev This function can only be called by the governor.\n @param minimumIndexerStake Minimum amount of tokens that an indexer must stake"},"functionSelector":"ddb8b131","id":2052,"implemented":false,"kind":"function","modifiers":[],"name":"setMinimumIndexerStake","nameLocation":"9082:22:31","nodeType":"FunctionDefinition","parameters":{"id":2050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2049,"mutability":"mutable","name":"minimumIndexerStake","nameLocation":"9113:19:31","nodeType":"VariableDeclaration","scope":2052,"src":"9105:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2048,"name":"uint256","nodeType":"ElementaryTypeName","src":"9105:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9104:29:31"},"returnParameters":{"id":2051,"nodeType":"ParameterList","parameters":[],"src":"9142:0:31"},"scope":2277,"src":"9073:70:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2053,"nodeType":"StructuredDocumentation","src":"9149:236:31","text":" @notice Set the number of blocks that tokens get locked after unstaking\n @dev This function can only be called by the governor.\n @param thawingPeriod Number of blocks that tokens get locked after unstaking"},"functionSelector":"32bc9108","id":2058,"implemented":false,"kind":"function","modifiers":[],"name":"setThawingPeriod","nameLocation":"9399:16:31","nodeType":"FunctionDefinition","parameters":{"id":2056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2055,"mutability":"mutable","name":"thawingPeriod","nameLocation":"9423:13:31","nodeType":"VariableDeclaration","scope":2058,"src":"9416:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2054,"name":"uint32","nodeType":"ElementaryTypeName","src":"9416:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"9415:22:31"},"returnParameters":{"id":2057,"nodeType":"ParameterList","parameters":[],"src":"9446:0:31"},"scope":2277,"src":"9390:57:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2059,"nodeType":"StructuredDocumentation","src":"9453:215:31","text":" @notice Set the curation percentage of query fees sent to curators.\n @dev This function can only be called by the governor.\n @param percentage Percentage of query fees sent to curators"},"functionSelector":"39dcf476","id":2064,"implemented":false,"kind":"function","modifiers":[],"name":"setCurationPercentage","nameLocation":"9682:21:31","nodeType":"FunctionDefinition","parameters":{"id":2062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2061,"mutability":"mutable","name":"percentage","nameLocation":"9711:10:31","nodeType":"VariableDeclaration","scope":2064,"src":"9704:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2060,"name":"uint32","nodeType":"ElementaryTypeName","src":"9704:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"9703:19:31"},"returnParameters":{"id":2063,"nodeType":"ParameterList","parameters":[],"src":"9731:0:31"},"scope":2277,"src":"9673:59:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2065,"nodeType":"StructuredDocumentation","src":"9738:224:31","text":" @notice Set a protocol percentage to burn when collecting query fees.\n @dev This function can only be called by the governor.\n @param percentage Percentage of query fees to burn as protocol fee"},"functionSelector":"9a48bf83","id":2070,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolPercentage","nameLocation":"9976:21:31","nodeType":"FunctionDefinition","parameters":{"id":2068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2067,"mutability":"mutable","name":"percentage","nameLocation":"10005:10:31","nodeType":"VariableDeclaration","scope":2070,"src":"9998:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2066,"name":"uint32","nodeType":"ElementaryTypeName","src":"9998:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"9997:19:31"},"returnParameters":{"id":2069,"nodeType":"ParameterList","parameters":[],"src":"10025:0:31"},"scope":2277,"src":"9967:59:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2071,"nodeType":"StructuredDocumentation","src":"10032:280:31","text":" @notice Set the max time allowed for indexers to allocate on a subgraph\n before others are allowed to close the allocation.\n @dev This function can only be called by the governor.\n @param maxAllocationEpochs Allocation duration limit in epochs"},"functionSelector":"2652d75e","id":2076,"implemented":false,"kind":"function","modifiers":[],"name":"setMaxAllocationEpochs","nameLocation":"10326:22:31","nodeType":"FunctionDefinition","parameters":{"id":2074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2073,"mutability":"mutable","name":"maxAllocationEpochs","nameLocation":"10356:19:31","nodeType":"VariableDeclaration","scope":2076,"src":"10349:26:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2072,"name":"uint32","nodeType":"ElementaryTypeName","src":"10349:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"10348:28:31"},"returnParameters":{"id":2075,"nodeType":"ParameterList","parameters":[],"src":"10385:0:31"},"scope":2277,"src":"10317:69:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2077,"nodeType":"StructuredDocumentation","src":"10392:326:31","text":" @notice Set the rebate parameters\n @dev This function can only be called by the governor.\n @param alphaNumerator Numerator of `alpha`\n @param alphaDenominator Denominator of `alpha`\n @param lambdaNumerator Numerator of `lambda`\n @param lambdaDenominator Denominator of `lambda`"},"functionSelector":"69286e47","id":2088,"implemented":false,"kind":"function","modifiers":[],"name":"setRebateParameters","nameLocation":"10732:19:31","nodeType":"FunctionDefinition","parameters":{"id":2086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2079,"mutability":"mutable","name":"alphaNumerator","nameLocation":"10768:14:31","nodeType":"VariableDeclaration","scope":2088,"src":"10761:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2078,"name":"uint32","nodeType":"ElementaryTypeName","src":"10761:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2081,"mutability":"mutable","name":"alphaDenominator","nameLocation":"10799:16:31","nodeType":"VariableDeclaration","scope":2088,"src":"10792:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2080,"name":"uint32","nodeType":"ElementaryTypeName","src":"10792:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2083,"mutability":"mutable","name":"lambdaNumerator","nameLocation":"10832:15:31","nodeType":"VariableDeclaration","scope":2088,"src":"10825:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2082,"name":"uint32","nodeType":"ElementaryTypeName","src":"10825:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2085,"mutability":"mutable","name":"lambdaDenominator","nameLocation":"10864:17:31","nodeType":"VariableDeclaration","scope":2088,"src":"10857:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2084,"name":"uint32","nodeType":"ElementaryTypeName","src":"10857:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"10751:136:31"},"returnParameters":{"id":2087,"nodeType":"ParameterList","parameters":[],"src":"10896:0:31"},"scope":2277,"src":"10723:174:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2089,"nodeType":"StructuredDocumentation","src":"10903:219:31","text":" @notice Authorize or unauthorize an address to be an operator for the caller.\n @param operator Address to authorize or unauthorize\n @param allowed Whether the operator is authorized or not"},"functionSelector":"558a7297","id":2096,"implemented":false,"kind":"function","modifiers":[],"name":"setOperator","nameLocation":"11136:11:31","nodeType":"FunctionDefinition","parameters":{"id":2094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2091,"mutability":"mutable","name":"operator","nameLocation":"11156:8:31","nodeType":"VariableDeclaration","scope":2096,"src":"11148:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2090,"name":"address","nodeType":"ElementaryTypeName","src":"11148:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2093,"mutability":"mutable","name":"allowed","nameLocation":"11171:7:31","nodeType":"VariableDeclaration","scope":2096,"src":"11166:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2092,"name":"bool","nodeType":"ElementaryTypeName","src":"11166:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11147:32:31"},"returnParameters":{"id":2095,"nodeType":"ParameterList","parameters":[],"src":"11188:0:31"},"scope":2277,"src":"11127:62:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2097,"nodeType":"StructuredDocumentation","src":"11195:175:31","text":" @notice Deposit tokens on the indexer's stake.\n The amount staked must be over the minimumIndexerStake.\n @param tokens Amount of tokens to stake"},"functionSelector":"a694fc3a","id":2102,"implemented":false,"kind":"function","modifiers":[],"name":"stake","nameLocation":"11384:5:31","nodeType":"FunctionDefinition","parameters":{"id":2100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2099,"mutability":"mutable","name":"tokens","nameLocation":"11398:6:31","nodeType":"VariableDeclaration","scope":2102,"src":"11390:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2098,"name":"uint256","nodeType":"ElementaryTypeName","src":"11390:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11389:16:31"},"returnParameters":{"id":2101,"nodeType":"ParameterList","parameters":[],"src":"11414:0:31"},"scope":2277,"src":"11375:40:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2103,"nodeType":"StructuredDocumentation","src":"11421:244:31","text":" @notice Deposit tokens on the Indexer stake, on behalf of the Indexer.\n The amount staked must be over the minimumIndexerStake.\n @param indexer Address of the indexer\n @param tokens Amount of tokens to stake"},"functionSelector":"a2a31722","id":2110,"implemented":false,"kind":"function","modifiers":[],"name":"stakeTo","nameLocation":"11679:7:31","nodeType":"FunctionDefinition","parameters":{"id":2108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2105,"mutability":"mutable","name":"indexer","nameLocation":"11695:7:31","nodeType":"VariableDeclaration","scope":2110,"src":"11687:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2104,"name":"address","nodeType":"ElementaryTypeName","src":"11687:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2107,"mutability":"mutable","name":"tokens","nameLocation":"11712:6:31","nodeType":"VariableDeclaration","scope":2110,"src":"11704:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2106,"name":"uint256","nodeType":"ElementaryTypeName","src":"11704:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11686:33:31"},"returnParameters":{"id":2109,"nodeType":"ParameterList","parameters":[],"src":"11728:0:31"},"scope":2277,"src":"11670:59:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2111,"nodeType":"StructuredDocumentation","src":"11735:437:31","text":" @notice Unstake tokens from the indexer stake, lock them until the thawing period expires.\n @dev NOTE: The function accepts an amount greater than the currently staked tokens.\n If that happens, it will try to unstake the max amount of tokens it can.\n The reason for this behaviour is to avoid time conditions while the transaction\n is in flight.\n @param tokens Amount of tokens to unstake"},"functionSelector":"2e17de78","id":2116,"implemented":false,"kind":"function","modifiers":[],"name":"unstake","nameLocation":"12186:7:31","nodeType":"FunctionDefinition","parameters":{"id":2114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2113,"mutability":"mutable","name":"tokens","nameLocation":"12202:6:31","nodeType":"VariableDeclaration","scope":2116,"src":"12194:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2112,"name":"uint256","nodeType":"ElementaryTypeName","src":"12194:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12193:16:31"},"returnParameters":{"id":2115,"nodeType":"ParameterList","parameters":[],"src":"12218:0:31"},"scope":2277,"src":"12177:42:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2117,"nodeType":"StructuredDocumentation","src":"12225:86:31","text":" @notice Withdraw indexer tokens once the thawing period has passed."},"functionSelector":"3ccfd60b","id":2120,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"12325:8:31","nodeType":"FunctionDefinition","parameters":{"id":2118,"nodeType":"ParameterList","parameters":[],"src":"12333:2:31"},"returnParameters":{"id":2119,"nodeType":"ParameterList","parameters":[],"src":"12344:0:31"},"scope":2277,"src":"12316:29:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2121,"nodeType":"StructuredDocumentation","src":"12351:180:31","text":" @notice Set the destination where to send rewards for an indexer.\n @param destination Rewards destination address. If set to zero, rewards will be restaked"},"functionSelector":"772495c3","id":2126,"implemented":false,"kind":"function","modifiers":[],"name":"setRewardsDestination","nameLocation":"12545:21:31","nodeType":"FunctionDefinition","parameters":{"id":2124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2123,"mutability":"mutable","name":"destination","nameLocation":"12575:11:31","nodeType":"VariableDeclaration","scope":2126,"src":"12567:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2122,"name":"address","nodeType":"ElementaryTypeName","src":"12567:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12566:21:31"},"returnParameters":{"id":2125,"nodeType":"ParameterList","parameters":[],"src":"12596:0:31"},"scope":2277,"src":"12536:61:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2127,"nodeType":"StructuredDocumentation","src":"12603:311:31","text":" @notice Set the delegation parameters for the caller.\n @param indexingRewardCut Percentage of indexing rewards left for the indexer\n @param queryFeeCut Percentage of query fees left for the indexer\n @param cooldownBlocks Deprecated cooldown blocks parameter (no longer used)"},"functionSelector":"9dcaa6c9","id":2136,"implemented":false,"kind":"function","modifiers":[],"name":"setDelegationParameters","nameLocation":"12928:23:31","nodeType":"FunctionDefinition","parameters":{"id":2134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2129,"mutability":"mutable","name":"indexingRewardCut","nameLocation":"12959:17:31","nodeType":"VariableDeclaration","scope":2136,"src":"12952:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2128,"name":"uint32","nodeType":"ElementaryTypeName","src":"12952:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2131,"mutability":"mutable","name":"queryFeeCut","nameLocation":"12985:11:31","nodeType":"VariableDeclaration","scope":2136,"src":"12978:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2130,"name":"uint32","nodeType":"ElementaryTypeName","src":"12978:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2133,"mutability":"mutable","name":"cooldownBlocks","nameLocation":"13005:14:31","nodeType":"VariableDeclaration","scope":2136,"src":"12998:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2132,"name":"uint32","nodeType":"ElementaryTypeName","src":"12998:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"12951:69:31"},"returnParameters":{"id":2135,"nodeType":"ParameterList","parameters":[],"src":"13029:0:31"},"scope":2277,"src":"12919:111:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2137,"nodeType":"StructuredDocumentation","src":"13036:456:31","text":" @notice Allocate available tokens to a subgraph deployment.\n @param subgraphDeploymentID ID of the SubgraphDeployment where tokens will be allocated\n @param tokens Amount of tokens to allocate\n @param allocationID The allocation identifier\n @param metadata IPFS hash for additional information about the allocation\n @param proof A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`"},"functionSelector":"a6fe292b","id":2150,"implemented":false,"kind":"function","modifiers":[],"name":"allocate","nameLocation":"13506:8:31","nodeType":"FunctionDefinition","parameters":{"id":2148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2139,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"13532:20:31","nodeType":"VariableDeclaration","scope":2150,"src":"13524:28:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2138,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13524:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2141,"mutability":"mutable","name":"tokens","nameLocation":"13570:6:31","nodeType":"VariableDeclaration","scope":2150,"src":"13562:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2140,"name":"uint256","nodeType":"ElementaryTypeName","src":"13562:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2143,"mutability":"mutable","name":"allocationID","nameLocation":"13594:12:31","nodeType":"VariableDeclaration","scope":2150,"src":"13586:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2142,"name":"address","nodeType":"ElementaryTypeName","src":"13586:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2145,"mutability":"mutable","name":"metadata","nameLocation":"13624:8:31","nodeType":"VariableDeclaration","scope":2150,"src":"13616:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2144,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13616:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2147,"mutability":"mutable","name":"proof","nameLocation":"13657:5:31","nodeType":"VariableDeclaration","scope":2150,"src":"13642:20:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2146,"name":"bytes","nodeType":"ElementaryTypeName","src":"13642:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"13514:154:31"},"returnParameters":{"id":2149,"nodeType":"ParameterList","parameters":[],"src":"13677:0:31"},"scope":2277,"src":"13497:181:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2151,"nodeType":"StructuredDocumentation","src":"13684:608:31","text":" @notice Allocate available tokens to a subgraph deployment from and indexer's stake.\n The caller must be the indexer or the indexer's operator.\n @param indexer Indexer address to allocate funds from.\n @param subgraphDeploymentID ID of the SubgraphDeployment where tokens will be allocated\n @param tokens Amount of tokens to allocate\n @param allocationID The allocation identifier\n @param metadata IPFS hash for additional information about the allocation\n @param proof A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`"},"functionSelector":"23477e48","id":2166,"implemented":false,"kind":"function","modifiers":[],"name":"allocateFrom","nameLocation":"14306:12:31","nodeType":"FunctionDefinition","parameters":{"id":2164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2153,"mutability":"mutable","name":"indexer","nameLocation":"14336:7:31","nodeType":"VariableDeclaration","scope":2166,"src":"14328:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2152,"name":"address","nodeType":"ElementaryTypeName","src":"14328:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2155,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"14361:20:31","nodeType":"VariableDeclaration","scope":2166,"src":"14353:28:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2154,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14353:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2157,"mutability":"mutable","name":"tokens","nameLocation":"14399:6:31","nodeType":"VariableDeclaration","scope":2166,"src":"14391:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2156,"name":"uint256","nodeType":"ElementaryTypeName","src":"14391:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2159,"mutability":"mutable","name":"allocationID","nameLocation":"14423:12:31","nodeType":"VariableDeclaration","scope":2166,"src":"14415:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2158,"name":"address","nodeType":"ElementaryTypeName","src":"14415:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2161,"mutability":"mutable","name":"metadata","nameLocation":"14453:8:31","nodeType":"VariableDeclaration","scope":2166,"src":"14445:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2160,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14445:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2163,"mutability":"mutable","name":"proof","nameLocation":"14486:5:31","nodeType":"VariableDeclaration","scope":2166,"src":"14471:20:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2162,"name":"bytes","nodeType":"ElementaryTypeName","src":"14471:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"14318:179:31"},"returnParameters":{"id":2165,"nodeType":"ParameterList","parameters":[],"src":"14506:0:31"},"scope":2277,"src":"14297:210:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2167,"nodeType":"StructuredDocumentation","src":"14513:380:31","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":2174,"implemented":false,"kind":"function","modifiers":[],"name":"closeAllocation","nameLocation":"14907:15:31","nodeType":"FunctionDefinition","parameters":{"id":2172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2169,"mutability":"mutable","name":"allocationID","nameLocation":"14931:12:31","nodeType":"VariableDeclaration","scope":2174,"src":"14923:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2168,"name":"address","nodeType":"ElementaryTypeName","src":"14923:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2171,"mutability":"mutable","name":"poi","nameLocation":"14953:3:31","nodeType":"VariableDeclaration","scope":2174,"src":"14945:11:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2170,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14945:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14922:35:31"},"returnParameters":{"id":2173,"nodeType":"ParameterList","parameters":[],"src":"14966:0:31"},"scope":2277,"src":"14898:69:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2175,"nodeType":"StructuredDocumentation","src":"14973:539:31","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":2182,"implemented":false,"kind":"function","modifiers":[],"name":"collect","nameLocation":"15526:7:31","nodeType":"FunctionDefinition","parameters":{"id":2180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2177,"mutability":"mutable","name":"tokens","nameLocation":"15542:6:31","nodeType":"VariableDeclaration","scope":2182,"src":"15534:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2176,"name":"uint256","nodeType":"ElementaryTypeName","src":"15534:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2179,"mutability":"mutable","name":"allocationID","nameLocation":"15558:12:31","nodeType":"VariableDeclaration","scope":2182,"src":"15550:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2178,"name":"address","nodeType":"ElementaryTypeName","src":"15550:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15533:38:31"},"returnParameters":{"id":2181,"nodeType":"ParameterList","parameters":[],"src":"15580:0:31"},"scope":2277,"src":"15517:64:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2183,"nodeType":"StructuredDocumentation","src":"15587:238:31","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":2192,"implemented":false,"kind":"function","modifiers":[],"name":"isOperator","nameLocation":"15839:10:31","nodeType":"FunctionDefinition","parameters":{"id":2188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2185,"mutability":"mutable","name":"operator","nameLocation":"15858:8:31","nodeType":"VariableDeclaration","scope":2192,"src":"15850:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2184,"name":"address","nodeType":"ElementaryTypeName","src":"15850:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2187,"mutability":"mutable","name":"indexer","nameLocation":"15876:7:31","nodeType":"VariableDeclaration","scope":2192,"src":"15868:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2186,"name":"address","nodeType":"ElementaryTypeName","src":"15868:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15849:35:31"},"returnParameters":{"id":2191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2190,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2192,"src":"15908:4:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2189,"name":"bool","nodeType":"ElementaryTypeName","src":"15908:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15907:6:31"},"scope":2277,"src":"15830:84:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2193,"nodeType":"StructuredDocumentation","src":"15920:169:31","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":2200,"implemented":false,"kind":"function","modifiers":[],"name":"hasStake","nameLocation":"16103:8:31","nodeType":"FunctionDefinition","parameters":{"id":2196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2195,"mutability":"mutable","name":"indexer","nameLocation":"16120:7:31","nodeType":"VariableDeclaration","scope":2200,"src":"16112:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2194,"name":"address","nodeType":"ElementaryTypeName","src":"16112:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16111:17:31"},"returnParameters":{"id":2199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2198,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2200,"src":"16152:4:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2197,"name":"bool","nodeType":"ElementaryTypeName","src":"16152:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16151:6:31"},"scope":2277,"src":"16094:64:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2201,"nodeType":"StructuredDocumentation","src":"16164:179:31","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":2208,"implemented":false,"kind":"function","modifiers":[],"name":"getIndexerStakedTokens","nameLocation":"16357:22:31","nodeType":"FunctionDefinition","parameters":{"id":2204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2203,"mutability":"mutable","name":"indexer","nameLocation":"16388:7:31","nodeType":"VariableDeclaration","scope":2208,"src":"16380:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2202,"name":"address","nodeType":"ElementaryTypeName","src":"16380:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16379:17:31"},"returnParameters":{"id":2207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2206,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2208,"src":"16420:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2205,"name":"uint256","nodeType":"ElementaryTypeName","src":"16420:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16419:9:31"},"scope":2277,"src":"16348:81:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2209,"nodeType":"StructuredDocumentation","src":"16435:301:31","text":" @notice Get the total amount of tokens available to use in allocations.\n This considers the indexer stake and delegated tokens according to delegation ratio\n @param indexer Address of the indexer\n @return Amount of tokens available to allocate including delegation"},"functionSelector":"a510be20","id":2216,"implemented":false,"kind":"function","modifiers":[],"name":"getIndexerCapacity","nameLocation":"16750:18:31","nodeType":"FunctionDefinition","parameters":{"id":2212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2211,"mutability":"mutable","name":"indexer","nameLocation":"16777:7:31","nodeType":"VariableDeclaration","scope":2216,"src":"16769:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2210,"name":"address","nodeType":"ElementaryTypeName","src":"16769:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16768:17:31"},"returnParameters":{"id":2215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2214,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2216,"src":"16809:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2213,"name":"uint256","nodeType":"ElementaryTypeName","src":"16809:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16808:9:31"},"scope":2277,"src":"16741:77:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2217,"nodeType":"StructuredDocumentation","src":"16824:151:31","text":" @notice Return the allocation by ID.\n @param allocationID Address used as allocation identifier\n @return Allocation data"},"functionSelector":"0e022923","id":2225,"implemented":false,"kind":"function","modifiers":[],"name":"getAllocation","nameLocation":"16989:13:31","nodeType":"FunctionDefinition","parameters":{"id":2220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2219,"mutability":"mutable","name":"allocationID","nameLocation":"17011:12:31","nodeType":"VariableDeclaration","scope":2225,"src":"17003:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2218,"name":"address","nodeType":"ElementaryTypeName","src":"17003:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17002:22:31"},"returnParameters":{"id":2224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2225,"src":"17048:17:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Allocation_$2300_memory_ptr","typeString":"struct IStakingData.Allocation"},"typeName":{"id":2222,"nodeType":"UserDefinedTypeName","pathNode":{"id":2221,"name":"Allocation","nameLocations":["17048:10:31"],"nodeType":"IdentifierPath","referencedDeclaration":2300,"src":"17048:10:31"},"referencedDeclaration":2300,"src":"17048:10:31","typeDescriptions":{"typeIdentifier":"t_struct$_Allocation_$2300_storage_ptr","typeString":"struct IStakingData.Allocation"}},"visibility":"internal"}],"src":"17047:19:31"},"scope":2277,"src":"16980:87:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2226,"nodeType":"StructuredDocumentation","src":"17073:699:31","text":" @notice Get the allocation data for the rewards manager\n @dev New function to get the allocation data for the rewards manager\n @dev Note that this is only to make tests pass, as the staking contract with\n this changes will never get deployed. HorizonStaking is taking it's place.\n @param allocationID The allocation ID\n @return active Whether the allocation is active\n @return indexer The indexer address\n @return subgraphDeploymentID The subgraph deployment ID\n @return tokens The allocated tokens\n @return createdAtEpoch The epoch when allocation was created\n @return closedAtEpoch The epoch when allocation was closed"},"functionSelector":"55c85269","id":2243,"implemented":false,"kind":"function","modifiers":[],"name":"getAllocationData","nameLocation":"17786:17:31","nodeType":"FunctionDefinition","parameters":{"id":2229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2228,"mutability":"mutable","name":"allocationID","nameLocation":"17821:12:31","nodeType":"VariableDeclaration","scope":2243,"src":"17813:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2227,"name":"address","nodeType":"ElementaryTypeName","src":"17813:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17803:36:31"},"returnParameters":{"id":2242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2231,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2243,"src":"17863:4:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2230,"name":"bool","nodeType":"ElementaryTypeName","src":"17863:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2233,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2243,"src":"17869:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2232,"name":"address","nodeType":"ElementaryTypeName","src":"17869:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2243,"src":"17878:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2234,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17878:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2237,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2243,"src":"17887:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2236,"name":"uint256","nodeType":"ElementaryTypeName","src":"17887:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2239,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2243,"src":"17896:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2238,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2241,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2243,"src":"17905:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2240,"name":"uint256","nodeType":"ElementaryTypeName","src":"17905:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17862:51:31"},"scope":2277,"src":"17777:137:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2244,"nodeType":"StructuredDocumentation","src":"17920:452:31","text":" @notice Get the allocation active status for the rewards manager\n @dev New function to get the allocation active status for the rewards manager\n @dev Note that this is only to make tests pass, as the staking contract with\n this changes will never get deployed. HorizonStaking is taking it's place.\n @param allocationID The allocation identifier\n @return True if the allocation is active, false otherwise"},"functionSelector":"6a3ca383","id":2251,"implemented":false,"kind":"function","modifiers":[],"name":"isActiveAllocation","nameLocation":"18386:18:31","nodeType":"FunctionDefinition","parameters":{"id":2247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2246,"mutability":"mutable","name":"allocationID","nameLocation":"18413:12:31","nodeType":"VariableDeclaration","scope":2251,"src":"18405:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2245,"name":"address","nodeType":"ElementaryTypeName","src":"18405:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18404:22:31"},"returnParameters":{"id":2250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2251,"src":"18450:4:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2248,"name":"bool","nodeType":"ElementaryTypeName","src":"18450:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18449:6:31"},"scope":2277,"src":"18377:79:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2252,"nodeType":"StructuredDocumentation","src":"18462:186:31","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":2260,"implemented":false,"kind":"function","modifiers":[],"name":"getAllocationState","nameLocation":"18662:18:31","nodeType":"FunctionDefinition","parameters":{"id":2255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2254,"mutability":"mutable","name":"allocationID","nameLocation":"18689:12:31","nodeType":"VariableDeclaration","scope":2260,"src":"18681:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2253,"name":"address","nodeType":"ElementaryTypeName","src":"18681:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18680:22:31"},"returnParameters":{"id":2259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2260,"src":"18726:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AllocationState_$2009","typeString":"enum IStakingBase.AllocationState"},"typeName":{"id":2257,"nodeType":"UserDefinedTypeName","pathNode":{"id":2256,"name":"AllocationState","nameLocations":["18726:15:31"],"nodeType":"IdentifierPath","referencedDeclaration":2009,"src":"18726:15:31"},"referencedDeclaration":2009,"src":"18726:15:31","typeDescriptions":{"typeIdentifier":"t_enum$_AllocationState_$2009","typeString":"enum IStakingBase.AllocationState"}},"visibility":"internal"}],"src":"18725:17:31"},"scope":2277,"src":"18653:90:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2261,"nodeType":"StructuredDocumentation","src":"18749:190:31","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":2268,"implemented":false,"kind":"function","modifiers":[],"name":"isAllocation","nameLocation":"18953:12:31","nodeType":"FunctionDefinition","parameters":{"id":2264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2263,"mutability":"mutable","name":"allocationID","nameLocation":"18974:12:31","nodeType":"VariableDeclaration","scope":2268,"src":"18966:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2262,"name":"address","nodeType":"ElementaryTypeName","src":"18966:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18965:22:31"},"returnParameters":{"id":2267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2266,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2268,"src":"19011:4:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2265,"name":"bool","nodeType":"ElementaryTypeName","src":"19011:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19010:6:31"},"scope":2277,"src":"18944:73:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2269,"nodeType":"StructuredDocumentation","src":"19023:199:31","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":2276,"implemented":false,"kind":"function","modifiers":[],"name":"getSubgraphAllocatedTokens","nameLocation":"19236:26:31","nodeType":"FunctionDefinition","parameters":{"id":2272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2271,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"19271:20:31","nodeType":"VariableDeclaration","scope":2276,"src":"19263:28:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2270,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19263:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"19262:30:31"},"returnParameters":{"id":2275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2274,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2276,"src":"19316:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2273,"name":"uint256","nodeType":"ElementaryTypeName","src":"19316:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19315:9:31"},"scope":2277,"src":"19227:98:31","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2278,"src":"779:18548:31","usedErrors":[],"usedEvents":[1897,1906,1913,1928,1947,1972,1983,1992,1999,2004]}],"src":"46:19282:31"},"id":31},"contracts/contracts/staking/IStakingData.sol":{"ast":{"absolutePath":"contracts/contracts/staking/IStakingData.sol","exportedSymbols":{"IStakingData":[2338]},"id":2339,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2279,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:32"},{"abstract":false,"baseContracts":[],"canonicalName":"IStakingData","contractDependencies":[],"contractKind":"interface","documentation":{"id":2280,"nodeType":"StructuredDocumentation","src":"81:143:32","text":" @title Staking Data interface\n @author Edge & Node\n @notice This interface defines some structures used by the Staking contract."},"fullyImplemented":true,"id":2338,"linearizedBaseContracts":[2338],"name":"IStakingData","nameLocation":"235:12:32","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IStakingData.Allocation","documentation":{"id":2281,"nodeType":"StructuredDocumentation","src":"254:808:32","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()\n @param indexer Address of the indexer that owns the allocation\n @param subgraphDeploymentID Subgraph deployment ID being allocated to\n @param tokens Tokens allocated to a SubgraphDeployment\n @param createdAtEpoch Epoch when it was created\n @param closedAtEpoch Epoch when it was closed\n @param collectedFees Collected fees for the allocation\n @param __DEPRECATED_effectiveAllocation Deprecated field for effective allocation\n @param accRewardsPerAllocatedToken Snapshot used for reward calc\n @param distributedRebates Collected rebates that have been rebated"},"id":2300,"members":[{"constant":false,"id":2283,"mutability":"mutable","name":"indexer","nameLocation":"1103:7:32","nodeType":"VariableDeclaration","scope":2300,"src":"1095:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2282,"name":"address","nodeType":"ElementaryTypeName","src":"1095:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2285,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"1128:20:32","nodeType":"VariableDeclaration","scope":2300,"src":"1120:28:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2284,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1120:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2287,"mutability":"mutable","name":"tokens","nameLocation":"1166:6:32","nodeType":"VariableDeclaration","scope":2300,"src":"1158:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2286,"name":"uint256","nodeType":"ElementaryTypeName","src":"1158:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2289,"mutability":"mutable","name":"createdAtEpoch","nameLocation":"1234:14:32","nodeType":"VariableDeclaration","scope":2300,"src":"1226:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2288,"name":"uint256","nodeType":"ElementaryTypeName","src":"1226:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2291,"mutability":"mutable","name":"closedAtEpoch","nameLocation":"1295:13:32","nodeType":"VariableDeclaration","scope":2300,"src":"1287:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2290,"name":"uint256","nodeType":"ElementaryTypeName","src":"1287:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2293,"mutability":"mutable","name":"collectedFees","nameLocation":"1354:13:32","nodeType":"VariableDeclaration","scope":2300,"src":"1346:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2292,"name":"uint256","nodeType":"ElementaryTypeName","src":"1346:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2295,"mutability":"mutable","name":"__DEPRECATED_effectiveAllocation","nameLocation":"1422:32:32","nodeType":"VariableDeclaration","scope":2300,"src":"1414:40:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2294,"name":"uint256","nodeType":"ElementaryTypeName","src":"1414:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2297,"mutability":"mutable","name":"accRewardsPerAllocatedToken","nameLocation":"1515:27:32","nodeType":"VariableDeclaration","scope":2300,"src":"1507:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2296,"name":"uint256","nodeType":"ElementaryTypeName","src":"1507:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2299,"mutability":"mutable","name":"distributedRebates","nameLocation":"1593:18:32","nodeType":"VariableDeclaration","scope":2300,"src":"1585:26:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2298,"name":"uint256","nodeType":"ElementaryTypeName","src":"1585:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Allocation","nameLocation":"1074:10:32","nodeType":"StructDefinition","scope":2338,"src":"1067:595:32","visibility":"public"},{"canonicalName":"IStakingData.DelegationPool","documentation":{"id":2301,"nodeType":"StructuredDocumentation","src":"1698:484:32","text":" @dev Delegation pool information. One per indexer.\n @param __DEPRECATED_cooldownBlocks Deprecated field for cooldown blocks\n @param indexingRewardCut Indexing reward cut in PPM\n @param queryFeeCut Query fee cut in PPM\n @param updatedAtBlock Block when the pool was last updated\n @param tokens Total tokens as pool reserves\n @param shares Total shares minted in the pool\n @param delegators Mapping of delegator => Delegation"},"id":2319,"members":[{"constant":false,"id":2303,"mutability":"mutable","name":"__DEPRECATED_cooldownBlocks","nameLocation":"2226:27:32","nodeType":"VariableDeclaration","scope":2319,"src":"2219:34:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2302,"name":"uint32","nodeType":"ElementaryTypeName","src":"2219:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2305,"mutability":"mutable","name":"indexingRewardCut","nameLocation":"2313:17:32","nodeType":"VariableDeclaration","scope":2319,"src":"2306:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2304,"name":"uint32","nodeType":"ElementaryTypeName","src":"2306:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2307,"mutability":"mutable","name":"queryFeeCut","nameLocation":"2357:11:32","nodeType":"VariableDeclaration","scope":2319,"src":"2350:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2306,"name":"uint32","nodeType":"ElementaryTypeName","src":"2350:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2309,"mutability":"mutable","name":"updatedAtBlock","nameLocation":"2396:14:32","nodeType":"VariableDeclaration","scope":2319,"src":"2388:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2308,"name":"uint256","nodeType":"ElementaryTypeName","src":"2388:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2311,"mutability":"mutable","name":"tokens","nameLocation":"2468:6:32","nodeType":"VariableDeclaration","scope":2319,"src":"2460:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2310,"name":"uint256","nodeType":"ElementaryTypeName","src":"2460:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2313,"mutability":"mutable","name":"shares","nameLocation":"2525:6:32","nodeType":"VariableDeclaration","scope":2319,"src":"2517:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2312,"name":"uint256","nodeType":"ElementaryTypeName","src":"2517:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2318,"mutability":"mutable","name":"delegators","nameLocation":"2607:10:32","nodeType":"VariableDeclaration","scope":2319,"src":"2576:41:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Delegation_$2327_storage_$","typeString":"mapping(address => struct IStakingData.Delegation)"},"typeName":{"id":2317,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":2314,"name":"address","nodeType":"ElementaryTypeName","src":"2584:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2576:30:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Delegation_$2327_storage_$","typeString":"mapping(address => struct IStakingData.Delegation)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2316,"nodeType":"UserDefinedTypeName","pathNode":{"id":2315,"name":"Delegation","nameLocations":["2595:10:32"],"nodeType":"IdentifierPath","referencedDeclaration":2327,"src":"2595:10:32"},"referencedDeclaration":2327,"src":"2595:10:32","typeDescriptions":{"typeIdentifier":"t_struct$_Delegation_$2327_storage_ptr","typeString":"struct IStakingData.Delegation"}}},"visibility":"internal"}],"name":"DelegationPool","nameLocation":"2194:14:32","nodeType":"StructDefinition","scope":2338,"src":"2187:475:32","visibility":"public"},{"canonicalName":"IStakingData.Delegation","documentation":{"id":2320,"nodeType":"StructuredDocumentation","src":"2668:269:32","text":" @dev Individual delegation data of a delegator in a pool.\n @param shares Shares owned by a delegator in the pool\n @param tokensLocked Tokens locked for undelegation\n @param tokensLockedUntil Epoch when locked tokens can be withdrawn"},"id":2327,"members":[{"constant":false,"id":2322,"mutability":"mutable","name":"shares","nameLocation":"2978:6:32","nodeType":"VariableDeclaration","scope":2327,"src":"2970:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2321,"name":"uint256","nodeType":"ElementaryTypeName","src":"2970:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2324,"mutability":"mutable","name":"tokensLocked","nameLocation":"3045:12:32","nodeType":"VariableDeclaration","scope":2327,"src":"3037:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2323,"name":"uint256","nodeType":"ElementaryTypeName","src":"3037:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2326,"mutability":"mutable","name":"tokensLockedUntil","nameLocation":"3109:17:32","nodeType":"VariableDeclaration","scope":2327,"src":"3101:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2325,"name":"uint256","nodeType":"ElementaryTypeName","src":"3101:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Delegation","nameLocation":"2949:10:32","nodeType":"StructDefinition","scope":2338,"src":"2942:236:32","visibility":"public"},{"canonicalName":"IStakingData.RebatesParameters","documentation":{"id":2328,"nodeType":"StructuredDocumentation","src":"3184:435:32","text":" @dev Rebates parameters. Used to avoid stack too deep errors in Staking initialize function.\n @param alphaNumerator Alpha parameter numerator for rebate calculation\n @param alphaDenominator Alpha parameter denominator for rebate calculation\n @param lambdaNumerator Lambda parameter numerator for rebate calculation\n @param lambdaDenominator Lambda parameter denominator for rebate calculation"},"id":2337,"members":[{"constant":false,"id":2330,"mutability":"mutable","name":"alphaNumerator","nameLocation":"3666:14:32","nodeType":"VariableDeclaration","scope":2337,"src":"3659:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2329,"name":"uint32","nodeType":"ElementaryTypeName","src":"3659:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2332,"mutability":"mutable","name":"alphaDenominator","nameLocation":"3697:16:32","nodeType":"VariableDeclaration","scope":2337,"src":"3690:23:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2331,"name":"uint32","nodeType":"ElementaryTypeName","src":"3690:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2334,"mutability":"mutable","name":"lambdaNumerator","nameLocation":"3730:15:32","nodeType":"VariableDeclaration","scope":2337,"src":"3723:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2333,"name":"uint32","nodeType":"ElementaryTypeName","src":"3723:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2336,"mutability":"mutable","name":"lambdaDenominator","nameLocation":"3762:17:32","nodeType":"VariableDeclaration","scope":2337,"src":"3755:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2335,"name":"uint32","nodeType":"ElementaryTypeName","src":"3755:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"name":"RebatesParameters","nameLocation":"3631:17:32","nodeType":"StructDefinition","scope":2338,"src":"3624:162:32","visibility":"public"}],"scope":2339,"src":"225:3563:32","usedErrors":[],"usedEvents":[]}],"src":"46:3743:32"},"id":32},"contracts/contracts/staking/IStakingExtension.sol":{"ast":{"absolutePath":"contracts/contracts/staking/IStakingExtension.sol","exportedSymbols":{"IStakes":[2661],"IStakingData":[2338],"IStakingExtension":[2647]},"id":2648,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2340,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:33"},{"id":2341,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"80:19:33"},{"absolutePath":"contracts/contracts/staking/IStakingData.sol","file":"./IStakingData.sol","id":2343,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2648,"sourceUnit":2339,"src":"204:50:33","symbolAliases":[{"foreign":{"id":2342,"name":"IStakingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2338,"src":"213:12:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/staking/libs/IStakes.sol","file":"./libs/IStakes.sol","id":2345,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2648,"sourceUnit":2662,"src":"255:45:33","symbolAliases":[{"foreign":{"id":2344,"name":"IStakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2661,"src":"264:7:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2347,"name":"IStakingData","nameLocations":["743:12:33"],"nodeType":"IdentifierPath","referencedDeclaration":2338,"src":"743:12:33"},"id":2348,"nodeType":"InheritanceSpecifier","src":"743:12:33"}],"canonicalName":"IStakingExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":2346,"nodeType":"StructuredDocumentation","src":"302:409:33","text":" @title Interface for the StakingExtension contract\n @author Edge & Node\n @notice This interface defines the events and functions implemented\n in the StakingExtension contract, which is used to extend the functionality\n of the Staking contract while keeping it within the 24kB mainnet size limit.\n In particular, this interface includes delegation functions and various storage\n getters."},"fullyImplemented":false,"id":2647,"linearizedBaseContracts":[2647,2338],"name":"IStakingExtension","nameLocation":"722:17:33","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IStakingExtension.DelegationPoolReturn","documentation":{"id":2349,"nodeType":"StructuredDocumentation","src":"762:522:33","text":" @dev DelegationPool struct as returned by delegationPools(), since\n the original DelegationPool in IStakingData.sol contains a nested mapping.\n @param __DEPRECATED_cooldownBlocks Deprecated field for cooldown blocks\n @param indexingRewardCut Indexing reward cut in PPM\n @param queryFeeCut Query fee cut in PPM\n @param updatedAtBlock Block when the pool was last updated\n @param tokens Total tokens as pool reserves\n @param shares Total shares minted in the pool"},"id":2362,"members":[{"constant":false,"id":2351,"mutability":"mutable","name":"__DEPRECATED_cooldownBlocks","nameLocation":"1334:27:33","nodeType":"VariableDeclaration","scope":2362,"src":"1327:34:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2350,"name":"uint32","nodeType":"ElementaryTypeName","src":"1327:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2353,"mutability":"mutable","name":"indexingRewardCut","nameLocation":"1421:17:33","nodeType":"VariableDeclaration","scope":2362,"src":"1414:24:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2352,"name":"uint32","nodeType":"ElementaryTypeName","src":"1414:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2355,"mutability":"mutable","name":"queryFeeCut","nameLocation":"1465:11:33","nodeType":"VariableDeclaration","scope":2362,"src":"1458:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2354,"name":"uint32","nodeType":"ElementaryTypeName","src":"1458:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2357,"mutability":"mutable","name":"updatedAtBlock","nameLocation":"1504:14:33","nodeType":"VariableDeclaration","scope":2362,"src":"1496:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2356,"name":"uint256","nodeType":"ElementaryTypeName","src":"1496:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2359,"mutability":"mutable","name":"tokens","nameLocation":"1576:6:33","nodeType":"VariableDeclaration","scope":2362,"src":"1568:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2358,"name":"uint256","nodeType":"ElementaryTypeName","src":"1568:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2361,"mutability":"mutable","name":"shares","nameLocation":"1633:6:33","nodeType":"VariableDeclaration","scope":2362,"src":"1625:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2360,"name":"uint256","nodeType":"ElementaryTypeName","src":"1625:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"DelegationPoolReturn","nameLocation":"1296:20:33","nodeType":"StructDefinition","scope":2647,"src":"1289:392:33","visibility":"public"},{"anonymous":false,"documentation":{"id":2363,"nodeType":"StructuredDocumentation","src":"1687:413:33","text":" @notice Emitted when `delegator` delegated `tokens` to the `indexer`, the delegator\n gets `shares` for the delegation pool proportionally to the tokens staked.\n @param indexer Address of the indexer receiving the delegation\n @param delegator Address of the delegator\n @param tokens Amount of tokens delegated\n @param shares Amount of shares issued to the delegator"},"eventSelector":"cd0366dce5247d874ffc60a762aa7abbb82c1695bbb171609c1b8861e279eb73","id":2373,"name":"StakeDelegated","nameLocation":"2111:14:33","nodeType":"EventDefinition","parameters":{"id":2372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2365,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"2142:7:33","nodeType":"VariableDeclaration","scope":2373,"src":"2126:23:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2364,"name":"address","nodeType":"ElementaryTypeName","src":"2126:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2367,"indexed":true,"mutability":"mutable","name":"delegator","nameLocation":"2167:9:33","nodeType":"VariableDeclaration","scope":2373,"src":"2151:25:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2366,"name":"address","nodeType":"ElementaryTypeName","src":"2151:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2369,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"2186:6:33","nodeType":"VariableDeclaration","scope":2373,"src":"2178:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2368,"name":"uint256","nodeType":"ElementaryTypeName","src":"2178:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2371,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"2202:6:33","nodeType":"VariableDeclaration","scope":2373,"src":"2194:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2370,"name":"uint256","nodeType":"ElementaryTypeName","src":"2194:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2125:84:33"},"src":"2105:105:33"},{"anonymous":false,"documentation":{"id":2374,"nodeType":"StructuredDocumentation","src":"2216:433:33","text":" @notice Emitted when `delegator` undelegated `tokens` from `indexer`.\n Tokens get locked for withdrawal after a period of time.\n @param indexer Address of the indexer from which tokens are undelegated\n @param delegator Address of the delegator\n @param tokens Amount of tokens undelegated\n @param shares Amount of shares returned\n @param until Epoch until which tokens are locked"},"eventSelector":"0430183f84d9c4502386d499da806543dee1d9de83c08b01e39a6d2116c43b25","id":2386,"name":"StakeDelegatedLocked","nameLocation":"2660:20:33","nodeType":"EventDefinition","parameters":{"id":2385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2376,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"2706:7:33","nodeType":"VariableDeclaration","scope":2386,"src":"2690:23:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2375,"name":"address","nodeType":"ElementaryTypeName","src":"2690:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2378,"indexed":true,"mutability":"mutable","name":"delegator","nameLocation":"2739:9:33","nodeType":"VariableDeclaration","scope":2386,"src":"2723:25:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2377,"name":"address","nodeType":"ElementaryTypeName","src":"2723:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2380,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"2766:6:33","nodeType":"VariableDeclaration","scope":2386,"src":"2758:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2379,"name":"uint256","nodeType":"ElementaryTypeName","src":"2758:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2382,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"2790:6:33","nodeType":"VariableDeclaration","scope":2386,"src":"2782:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2381,"name":"uint256","nodeType":"ElementaryTypeName","src":"2782:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2384,"indexed":false,"mutability":"mutable","name":"until","nameLocation":"2814:5:33","nodeType":"VariableDeclaration","scope":2386,"src":"2806:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2383,"name":"uint256","nodeType":"ElementaryTypeName","src":"2806:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2680:145:33"},"src":"2654:172:33"},{"anonymous":false,"documentation":{"id":2387,"nodeType":"StructuredDocumentation","src":"2832:269:33","text":" @notice Emitted when `delegator` withdrew delegated `tokens` from `indexer`.\n @param indexer Address of the indexer from which tokens are withdrawn\n @param delegator Address of the delegator\n @param tokens Amount of tokens withdrawn"},"eventSelector":"1b2e7737e043c5cf1b587ceb4daeb7ae00148b9bda8f79f1093eead08f141952","id":2395,"name":"StakeDelegatedWithdrawn","nameLocation":"3112:23:33","nodeType":"EventDefinition","parameters":{"id":2394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2389,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"3152:7:33","nodeType":"VariableDeclaration","scope":2395,"src":"3136:23:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2388,"name":"address","nodeType":"ElementaryTypeName","src":"3136:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2391,"indexed":true,"mutability":"mutable","name":"delegator","nameLocation":"3177:9:33","nodeType":"VariableDeclaration","scope":2395,"src":"3161:25:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2390,"name":"address","nodeType":"ElementaryTypeName","src":"3161:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2393,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"3196:6:33","nodeType":"VariableDeclaration","scope":2395,"src":"3188:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2392,"name":"uint256","nodeType":"ElementaryTypeName","src":"3188:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3135:68:33"},"src":"3106:98:33"},{"anonymous":false,"documentation":{"id":2396,"nodeType":"StructuredDocumentation","src":"3210:380:33","text":" @notice Emitted when `indexer` was slashed for a total of `tokens` amount.\n Tracks `reward` amount of tokens given to `beneficiary`.\n @param indexer Address of the indexer that was slashed\n @param tokens Total amount of tokens slashed\n @param reward Amount of tokens given as reward\n @param beneficiary Address receiving the reward"},"eventSelector":"f2717be2f27d9d2d7d265e42dc556e40d2d9aeaba02f49c5286030f30c0571f3","id":2406,"name":"StakeSlashed","nameLocation":"3601:12:33","nodeType":"EventDefinition","parameters":{"id":2405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2398,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"3630:7:33","nodeType":"VariableDeclaration","scope":2406,"src":"3614:23:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2397,"name":"address","nodeType":"ElementaryTypeName","src":"3614:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2400,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"3647:6:33","nodeType":"VariableDeclaration","scope":2406,"src":"3639:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2399,"name":"uint256","nodeType":"ElementaryTypeName","src":"3639:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2402,"indexed":false,"mutability":"mutable","name":"reward","nameLocation":"3663:6:33","nodeType":"VariableDeclaration","scope":2406,"src":"3655:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2401,"name":"uint256","nodeType":"ElementaryTypeName","src":"3655:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2404,"indexed":false,"mutability":"mutable","name":"beneficiary","nameLocation":"3679:11:33","nodeType":"VariableDeclaration","scope":2406,"src":"3671:19:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2403,"name":"address","nodeType":"ElementaryTypeName","src":"3671:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3613:78:33"},"src":"3595:97:33"},{"anonymous":false,"documentation":{"id":2407,"nodeType":"StructuredDocumentation","src":"3698:268:33","text":" @notice Emitted when `caller` set `slasher` address as `allowed` to slash stakes.\n @param caller Address that updated the slasher status\n @param slasher Address of the slasher\n @param allowed Whether the slasher is allowed to slash"},"eventSelector":"87ea6771e87d96ce16dbe8eda64da9473733e4c1c568baf8ae47256c5bd765e9","id":2415,"name":"SlasherUpdate","nameLocation":"3977:13:33","nodeType":"EventDefinition","parameters":{"id":2414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2409,"indexed":true,"mutability":"mutable","name":"caller","nameLocation":"4007:6:33","nodeType":"VariableDeclaration","scope":2415,"src":"3991:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2408,"name":"address","nodeType":"ElementaryTypeName","src":"3991:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2411,"indexed":true,"mutability":"mutable","name":"slasher","nameLocation":"4031:7:33","nodeType":"VariableDeclaration","scope":2415,"src":"4015:23:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2410,"name":"address","nodeType":"ElementaryTypeName","src":"4015:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2413,"indexed":false,"mutability":"mutable","name":"allowed","nameLocation":"4045:7:33","nodeType":"VariableDeclaration","scope":2415,"src":"4040:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2412,"name":"bool","nodeType":"ElementaryTypeName","src":"4040:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3990:63:33"},"src":"3971:83:33"},{"documentation":{"id":2416,"nodeType":"StructuredDocumentation","src":"4060:295:33","text":" @notice Set the delegation ratio.\n If set to 10 it means the indexer can use up to 10x the indexer staked amount\n from their delegated tokens\n @dev This function is only callable by the governor\n @param newDelegationRatio Delegation capacity multiplier"},"functionSelector":"1dd42f60","id":2421,"implemented":false,"kind":"function","modifiers":[],"name":"setDelegationRatio","nameLocation":"4369:18:33","nodeType":"FunctionDefinition","parameters":{"id":2419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2418,"mutability":"mutable","name":"newDelegationRatio","nameLocation":"4395:18:33","nodeType":"VariableDeclaration","scope":2421,"src":"4388:25:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2417,"name":"uint32","nodeType":"ElementaryTypeName","src":"4388:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4387:27:33"},"returnParameters":{"id":2420,"nodeType":"ParameterList","parameters":[],"src":"4423:0:33"},"scope":2647,"src":"4360:64:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2422,"nodeType":"StructuredDocumentation","src":"4430:284:33","text":" @notice Set the time, in epochs, a Delegator needs to wait to withdraw tokens after undelegating.\n @dev This function is only callable by the governor\n @param newDelegationUnbondingPeriod Period in epochs to wait for token withdrawals after undelegating"},"functionSelector":"5e9a6392","id":2427,"implemented":false,"kind":"function","modifiers":[],"name":"setDelegationUnbondingPeriod","nameLocation":"4728:28:33","nodeType":"FunctionDefinition","parameters":{"id":2425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2424,"mutability":"mutable","name":"newDelegationUnbondingPeriod","nameLocation":"4764:28:33","nodeType":"VariableDeclaration","scope":2427,"src":"4757:35:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2423,"name":"uint32","nodeType":"ElementaryTypeName","src":"4757:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4756:37:33"},"returnParameters":{"id":2426,"nodeType":"ParameterList","parameters":[],"src":"4802:0:33"},"scope":2647,"src":"4719:84:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2428,"nodeType":"StructuredDocumentation","src":"4809:275:33","text":" @notice Set a delegation tax percentage to burn when delegated funds are deposited.\n @dev This function is only callable by the governor\n @param percentage Percentage of delegated tokens to burn as delegation tax, expressed in parts per million"},"functionSelector":"e6dc5a1c","id":2433,"implemented":false,"kind":"function","modifiers":[],"name":"setDelegationTaxPercentage","nameLocation":"5098:26:33","nodeType":"FunctionDefinition","parameters":{"id":2431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2430,"mutability":"mutable","name":"percentage","nameLocation":"5132:10:33","nodeType":"VariableDeclaration","scope":2433,"src":"5125:17:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2429,"name":"uint32","nodeType":"ElementaryTypeName","src":"5125:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"5124:19:33"},"returnParameters":{"id":2432,"nodeType":"ParameterList","parameters":[],"src":"5152:0:33"},"scope":2647,"src":"5089:64:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2434,"nodeType":"StructuredDocumentation","src":"5159:250:33","text":" @notice Set or unset an address as allowed slasher.\n @dev This function can only be called by the governor.\n @param slasher Address of the party allowed to slash indexers\n @param allowed True if slasher is allowed"},"functionSelector":"52348080","id":2441,"implemented":false,"kind":"function","modifiers":[],"name":"setSlasher","nameLocation":"5423:10:33","nodeType":"FunctionDefinition","parameters":{"id":2439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2436,"mutability":"mutable","name":"slasher","nameLocation":"5442:7:33","nodeType":"VariableDeclaration","scope":2441,"src":"5434:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2435,"name":"address","nodeType":"ElementaryTypeName","src":"5434:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2438,"mutability":"mutable","name":"allowed","nameLocation":"5456:7:33","nodeType":"VariableDeclaration","scope":2441,"src":"5451:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2437,"name":"bool","nodeType":"ElementaryTypeName","src":"5451:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5433:31:33"},"returnParameters":{"id":2440,"nodeType":"ParameterList","parameters":[],"src":"5473:0:33"},"scope":2647,"src":"5414:60:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2442,"nodeType":"StructuredDocumentation","src":"5480:246:33","text":" @notice Delegate tokens to an indexer.\n @param indexer Address of the indexer to which tokens are delegated\n @param tokens Amount of tokens to delegate\n @return Amount of shares issued from the delegation pool"},"functionSelector":"026e402b","id":2451,"implemented":false,"kind":"function","modifiers":[],"name":"delegate","nameLocation":"5740:8:33","nodeType":"FunctionDefinition","parameters":{"id":2447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2444,"mutability":"mutable","name":"indexer","nameLocation":"5757:7:33","nodeType":"VariableDeclaration","scope":2451,"src":"5749:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2443,"name":"address","nodeType":"ElementaryTypeName","src":"5749:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2446,"mutability":"mutable","name":"tokens","nameLocation":"5774:6:33","nodeType":"VariableDeclaration","scope":2451,"src":"5766:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2445,"name":"uint256","nodeType":"ElementaryTypeName","src":"5766:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5748:33:33"},"returnParameters":{"id":2450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2449,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2451,"src":"5800:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2448,"name":"uint256","nodeType":"ElementaryTypeName","src":"5800:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5799:9:33"},"scope":2647,"src":"5731:78:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2452,"nodeType":"StructuredDocumentation","src":"5815:338:33","text":" @notice Undelegate tokens from an indexer. Tokens will be locked for the unbonding period.\n @param indexer Address of the indexer to which tokens had been delegated\n @param shares Amount of shares to return and undelegate tokens\n @return Amount of tokens returned for the shares of the delegation pool"},"functionSelector":"4d99dd16","id":2461,"implemented":false,"kind":"function","modifiers":[],"name":"undelegate","nameLocation":"6167:10:33","nodeType":"FunctionDefinition","parameters":{"id":2457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2454,"mutability":"mutable","name":"indexer","nameLocation":"6186:7:33","nodeType":"VariableDeclaration","scope":2461,"src":"6178:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2453,"name":"address","nodeType":"ElementaryTypeName","src":"6178:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2456,"mutability":"mutable","name":"shares","nameLocation":"6203:6:33","nodeType":"VariableDeclaration","scope":2461,"src":"6195:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2455,"name":"uint256","nodeType":"ElementaryTypeName","src":"6195:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6177:33:33"},"returnParameters":{"id":2460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2459,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2461,"src":"6229:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2458,"name":"uint256","nodeType":"ElementaryTypeName","src":"6229:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6228:9:33"},"scope":2647,"src":"6158:80:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2462,"nodeType":"StructuredDocumentation","src":"6244:349:33","text":" @notice Withdraw undelegated tokens once the unbonding period has passed, and optionally\n re-delegate to a new indexer.\n @param indexer Withdraw available tokens delegated to indexer\n @param newIndexer Re-delegate to indexer address if non-zero, withdraw if zero address\n @return Amount of tokens withdrawn"},"functionSelector":"51a60b02","id":2471,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawDelegated","nameLocation":"6607:17:33","nodeType":"FunctionDefinition","parameters":{"id":2467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2464,"mutability":"mutable","name":"indexer","nameLocation":"6633:7:33","nodeType":"VariableDeclaration","scope":2471,"src":"6625:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2463,"name":"address","nodeType":"ElementaryTypeName","src":"6625:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2466,"mutability":"mutable","name":"newIndexer","nameLocation":"6650:10:33","nodeType":"VariableDeclaration","scope":2471,"src":"6642:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2465,"name":"address","nodeType":"ElementaryTypeName","src":"6642:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6624:37:33"},"returnParameters":{"id":2470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2469,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2471,"src":"6680:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2468,"name":"uint256","nodeType":"ElementaryTypeName","src":"6680:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6679:9:33"},"scope":2647,"src":"6598:91:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2472,"nodeType":"StructuredDocumentation","src":"6695:427:33","text":" @notice Slash the indexer stake. Delegated tokens are not subject to slashing.\n @dev Can only be called by the slasher role.\n @param indexer Address of indexer to slash\n @param tokens Amount of tokens to slash from the indexer stake\n @param reward Amount of reward tokens to send to a beneficiary\n @param beneficiary Address of a beneficiary to receive a reward for the slashing"},"functionSelector":"e76fede6","id":2483,"implemented":false,"kind":"function","modifiers":[],"name":"slash","nameLocation":"7136:5:33","nodeType":"FunctionDefinition","parameters":{"id":2481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2474,"mutability":"mutable","name":"indexer","nameLocation":"7150:7:33","nodeType":"VariableDeclaration","scope":2483,"src":"7142:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2473,"name":"address","nodeType":"ElementaryTypeName","src":"7142:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2476,"mutability":"mutable","name":"tokens","nameLocation":"7167:6:33","nodeType":"VariableDeclaration","scope":2483,"src":"7159:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2475,"name":"uint256","nodeType":"ElementaryTypeName","src":"7159:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2478,"mutability":"mutable","name":"reward","nameLocation":"7183:6:33","nodeType":"VariableDeclaration","scope":2483,"src":"7175:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2477,"name":"uint256","nodeType":"ElementaryTypeName","src":"7175:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2480,"mutability":"mutable","name":"beneficiary","nameLocation":"7199:11:33","nodeType":"VariableDeclaration","scope":2483,"src":"7191:19:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2479,"name":"address","nodeType":"ElementaryTypeName","src":"7191:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7141:70:33"},"returnParameters":{"id":2482,"nodeType":"ParameterList","parameters":[],"src":"7220:0:33"},"scope":2647,"src":"7127:94:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2484,"nodeType":"StructuredDocumentation","src":"7227:237:33","text":" @notice Return the delegation from a delegator to an indexer.\n @param indexer Address of the indexer where funds have been delegated\n @param delegator Address of the delegator\n @return Delegation data"},"functionSelector":"15049a5a","id":2494,"implemented":false,"kind":"function","modifiers":[],"name":"getDelegation","nameLocation":"7478:13:33","nodeType":"FunctionDefinition","parameters":{"id":2489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2486,"mutability":"mutable","name":"indexer","nameLocation":"7500:7:33","nodeType":"VariableDeclaration","scope":2494,"src":"7492:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2485,"name":"address","nodeType":"ElementaryTypeName","src":"7492:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2488,"mutability":"mutable","name":"delegator","nameLocation":"7517:9:33","nodeType":"VariableDeclaration","scope":2494,"src":"7509:17:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2487,"name":"address","nodeType":"ElementaryTypeName","src":"7509:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7491:36:33"},"returnParameters":{"id":2493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2492,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2494,"src":"7551:17:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Delegation_$2327_memory_ptr","typeString":"struct IStakingData.Delegation"},"typeName":{"id":2491,"nodeType":"UserDefinedTypeName","pathNode":{"id":2490,"name":"Delegation","nameLocations":["7551:10:33"],"nodeType":"IdentifierPath","referencedDeclaration":2327,"src":"7551:10:33"},"referencedDeclaration":2327,"src":"7551:10:33","typeDescriptions":{"typeIdentifier":"t_struct$_Delegation_$2327_storage_ptr","typeString":"struct IStakingData.Delegation"}},"visibility":"internal"}],"src":"7550:19:33"},"scope":2647,"src":"7469:101:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2495,"nodeType":"StructuredDocumentation","src":"7576:280:33","text":" @notice Return whether the delegator has delegated to the indexer.\n @param indexer Address of the indexer where funds have been delegated\n @param delegator Address of the delegator\n @return True if delegator has tokens delegated to the indexer"},"functionSelector":"a0e11929","id":2504,"implemented":false,"kind":"function","modifiers":[],"name":"isDelegator","nameLocation":"7870:11:33","nodeType":"FunctionDefinition","parameters":{"id":2500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2497,"mutability":"mutable","name":"indexer","nameLocation":"7890:7:33","nodeType":"VariableDeclaration","scope":2504,"src":"7882:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2496,"name":"address","nodeType":"ElementaryTypeName","src":"7882:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2499,"mutability":"mutable","name":"delegator","nameLocation":"7907:9:33","nodeType":"VariableDeclaration","scope":2504,"src":"7899:17:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2498,"name":"address","nodeType":"ElementaryTypeName","src":"7899:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7881:36:33"},"returnParameters":{"id":2503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2502,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2504,"src":"7941:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2501,"name":"bool","nodeType":"ElementaryTypeName","src":"7941:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7940:6:33"},"scope":2647,"src":"7861:86:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2505,"nodeType":"StructuredDocumentation","src":"7953:223:33","text":" @notice Returns amount of delegated tokens ready to be withdrawn after unbonding period.\n @param delegation Delegation of tokens from delegator to indexer\n @return Amount of tokens to withdraw"},"functionSelector":"130bea57","id":2513,"implemented":false,"kind":"function","modifiers":[],"name":"getWithdraweableDelegatedTokens","nameLocation":"8190:31:33","nodeType":"FunctionDefinition","parameters":{"id":2509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2508,"mutability":"mutable","name":"delegation","nameLocation":"8240:10:33","nodeType":"VariableDeclaration","scope":2513,"src":"8222:28:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Delegation_$2327_memory_ptr","typeString":"struct IStakingData.Delegation"},"typeName":{"id":2507,"nodeType":"UserDefinedTypeName","pathNode":{"id":2506,"name":"Delegation","nameLocations":["8222:10:33"],"nodeType":"IdentifierPath","referencedDeclaration":2327,"src":"8222:10:33"},"referencedDeclaration":2327,"src":"8222:10:33","typeDescriptions":{"typeIdentifier":"t_struct$_Delegation_$2327_storage_ptr","typeString":"struct IStakingData.Delegation"}},"visibility":"internal"}],"src":"8221:30:33"},"returnParameters":{"id":2512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2511,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2513,"src":"8275:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2510,"name":"uint256","nodeType":"ElementaryTypeName","src":"8275:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8274:9:33"},"scope":2647,"src":"8181:103:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2514,"nodeType":"StructuredDocumentation","src":"8290:263:33","text":" @notice Getter for the delegationRatio, i.e. the delegation capacity multiplier:\n If delegation ratio is 100, and an Indexer has staked 5 GRT,\n then they can use up to 500 GRT from the delegated stake\n @return Delegation ratio"},"functionSelector":"bfdfa7af","id":2519,"implemented":false,"kind":"function","modifiers":[],"name":"delegationRatio","nameLocation":"8567:15:33","nodeType":"FunctionDefinition","parameters":{"id":2515,"nodeType":"ParameterList","parameters":[],"src":"8582:2:33"},"returnParameters":{"id":2518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2517,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2519,"src":"8608:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2516,"name":"uint32","nodeType":"ElementaryTypeName","src":"8608:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"8607:8:33"},"scope":2647,"src":"8558:58:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2520,"nodeType":"StructuredDocumentation","src":"8622:193:33","text":" @notice Getter for delegationUnbondingPeriod:\n Time in epochs a delegator needs to wait to withdraw delegated stake\n @return Delegation unbonding period in epochs"},"functionSelector":"b6846e47","id":2525,"implemented":false,"kind":"function","modifiers":[],"name":"delegationUnbondingPeriod","nameLocation":"8829:25:33","nodeType":"FunctionDefinition","parameters":{"id":2521,"nodeType":"ParameterList","parameters":[],"src":"8854:2:33"},"returnParameters":{"id":2524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2523,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2525,"src":"8880:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2522,"name":"uint32","nodeType":"ElementaryTypeName","src":"8880:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"8879:8:33"},"scope":2647,"src":"8820:68:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2526,"nodeType":"StructuredDocumentation","src":"8894:212:33","text":" @notice Getter for delegationTaxPercentage:\n Percentage of tokens to tax a delegation deposit, expressed in parts per million\n @return Delegation tax percentage in parts per million"},"functionSelector":"e6aeb796","id":2531,"implemented":false,"kind":"function","modifiers":[],"name":"delegationTaxPercentage","nameLocation":"9120:23:33","nodeType":"FunctionDefinition","parameters":{"id":2527,"nodeType":"ParameterList","parameters":[],"src":"9143:2:33"},"returnParameters":{"id":2530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2529,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2531,"src":"9169:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2528,"name":"uint32","nodeType":"ElementaryTypeName","src":"9169:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"9168:8:33"},"scope":2647,"src":"9111:66:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2532,"nodeType":"StructuredDocumentation","src":"9183:280:33","text":" @notice Getter for delegationPools[_indexer]:\n gets the delegation pool structure for a particular indexer.\n @param indexer Address of the indexer for which to query the delegation pool\n @return Delegation pool as a DelegationPoolReturn struct"},"functionSelector":"92511c8f","id":2540,"implemented":false,"kind":"function","modifiers":[],"name":"delegationPools","nameLocation":"9477:15:33","nodeType":"FunctionDefinition","parameters":{"id":2535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2534,"mutability":"mutable","name":"indexer","nameLocation":"9501:7:33","nodeType":"VariableDeclaration","scope":2540,"src":"9493:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2533,"name":"address","nodeType":"ElementaryTypeName","src":"9493:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9492:17:33"},"returnParameters":{"id":2539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2538,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2540,"src":"9533:27:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_DelegationPoolReturn_$2362_memory_ptr","typeString":"struct IStakingExtension.DelegationPoolReturn"},"typeName":{"id":2537,"nodeType":"UserDefinedTypeName","pathNode":{"id":2536,"name":"DelegationPoolReturn","nameLocations":["9533:20:33"],"nodeType":"IdentifierPath","referencedDeclaration":2362,"src":"9533:20:33"},"referencedDeclaration":2362,"src":"9533:20:33","typeDescriptions":{"typeIdentifier":"t_struct$_DelegationPoolReturn_$2362_storage_ptr","typeString":"struct IStakingExtension.DelegationPoolReturn"}},"visibility":"internal"}],"src":"9532:29:33"},"scope":2647,"src":"9468:94:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2541,"nodeType":"StructuredDocumentation","src":"9568:400:33","text":" @notice Getter for operatorAuth[_indexer][_maybeOperator]:\n returns true if the operator is authorized to operate on behalf of the indexer.\n @param indexer The indexer address for which to query authorization\n @param maybeOperator The address that may or may not be an operator\n @return True if the operator is authorized to operate on behalf of the indexer"},"functionSelector":"e2e94656","id":2550,"implemented":false,"kind":"function","modifiers":[],"name":"operatorAuth","nameLocation":"9982:12:33","nodeType":"FunctionDefinition","parameters":{"id":2546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2543,"mutability":"mutable","name":"indexer","nameLocation":"10003:7:33","nodeType":"VariableDeclaration","scope":2550,"src":"9995:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2542,"name":"address","nodeType":"ElementaryTypeName","src":"9995:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2545,"mutability":"mutable","name":"maybeOperator","nameLocation":"10020:13:33","nodeType":"VariableDeclaration","scope":2550,"src":"10012:21:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2544,"name":"address","nodeType":"ElementaryTypeName","src":"10012:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9994:40:33"},"returnParameters":{"id":2549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2548,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2550,"src":"10058:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2547,"name":"bool","nodeType":"ElementaryTypeName","src":"10058:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10057:6:33"},"scope":2647,"src":"9973:91:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2551,"nodeType":"StructuredDocumentation","src":"10070:338:33","text":" @notice Getter for rewardsDestination[_indexer]:\n returns the address where the indexer's rewards are sent.\n @param indexer The indexer address for which to query the rewards destination\n @return The address where the indexer's rewards are sent, zero if none is set in which case rewards are re-staked"},"functionSelector":"7203ca78","id":2558,"implemented":false,"kind":"function","modifiers":[],"name":"rewardsDestination","nameLocation":"10422:18:33","nodeType":"FunctionDefinition","parameters":{"id":2554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2553,"mutability":"mutable","name":"indexer","nameLocation":"10449:7:33","nodeType":"VariableDeclaration","scope":2558,"src":"10441:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2552,"name":"address","nodeType":"ElementaryTypeName","src":"10441:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10440:17:33"},"returnParameters":{"id":2557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2558,"src":"10481:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2555,"name":"address","nodeType":"ElementaryTypeName","src":"10481:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10480:9:33"},"scope":2647,"src":"10413:77:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2559,"nodeType":"StructuredDocumentation","src":"10496:320:33","text":" @notice Getter for subgraphAllocations[_subgraphDeploymentId]:\n returns the amount of tokens allocated to a subgraph deployment.\n @param subgraphDeploymentId The subgraph deployment for which to query the allocations\n @return The amount of tokens allocated to the subgraph deployment"},"functionSelector":"b1468f52","id":2566,"implemented":false,"kind":"function","modifiers":[],"name":"subgraphAllocations","nameLocation":"10830:19:33","nodeType":"FunctionDefinition","parameters":{"id":2562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2561,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"10858:20:33","nodeType":"VariableDeclaration","scope":2566,"src":"10850:28:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2560,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10850:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10849:30:33"},"returnParameters":{"id":2565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2564,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2566,"src":"10903:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2563,"name":"uint256","nodeType":"ElementaryTypeName","src":"10903:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10902:9:33"},"scope":2647,"src":"10821:91:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2567,"nodeType":"StructuredDocumentation","src":"10918:269:33","text":" @notice Getter for slashers[_maybeSlasher]:\n returns true if the address is a slasher, i.e. an entity that can slash indexers\n @param maybeSlasher Address for which to check the slasher role\n @return True if the address is a slasher"},"functionSelector":"b87fcbff","id":2574,"implemented":false,"kind":"function","modifiers":[],"name":"slashers","nameLocation":"11201:8:33","nodeType":"FunctionDefinition","parameters":{"id":2570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2569,"mutability":"mutable","name":"maybeSlasher","nameLocation":"11218:12:33","nodeType":"VariableDeclaration","scope":2574,"src":"11210:20:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2568,"name":"address","nodeType":"ElementaryTypeName","src":"11210:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11209:22:33"},"returnParameters":{"id":2573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2572,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2574,"src":"11255:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2571,"name":"bool","nodeType":"ElementaryTypeName","src":"11255:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11254:6:33"},"scope":2647,"src":"11192:69:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2575,"nodeType":"StructuredDocumentation","src":"11267:167:33","text":" @notice Getter for minimumIndexerStake: the minimum\n amount of GRT that an indexer needs to stake.\n @return Minimum indexer stake in GRT"},"functionSelector":"f2485bf2","id":2580,"implemented":false,"kind":"function","modifiers":[],"name":"minimumIndexerStake","nameLocation":"11448:19:33","nodeType":"FunctionDefinition","parameters":{"id":2576,"nodeType":"ParameterList","parameters":[],"src":"11467:2:33"},"returnParameters":{"id":2579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2578,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2580,"src":"11493:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2577,"name":"uint256","nodeType":"ElementaryTypeName","src":"11493:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11492:9:33"},"scope":2647,"src":"11439:63:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2581,"nodeType":"StructuredDocumentation","src":"11508:162:33","text":" @notice Getter for thawingPeriod: the time in blocks an\n indexer needs to wait to unstake tokens.\n @return Thawing period in blocks"},"functionSelector":"cdc747dd","id":2586,"implemented":false,"kind":"function","modifiers":[],"name":"thawingPeriod","nameLocation":"11684:13:33","nodeType":"FunctionDefinition","parameters":{"id":2582,"nodeType":"ParameterList","parameters":[],"src":"11697:2:33"},"returnParameters":{"id":2585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2584,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2586,"src":"11723:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2583,"name":"uint32","nodeType":"ElementaryTypeName","src":"11723:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"11722:8:33"},"scope":2647,"src":"11675:56:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2587,"nodeType":"StructuredDocumentation","src":"11737:183:33","text":" @notice Getter for curationPercentage: the percentage of\n query fees that are distributed to curators.\n @return Curation percentage in parts per million"},"functionSelector":"85b52ad0","id":2592,"implemented":false,"kind":"function","modifiers":[],"name":"curationPercentage","nameLocation":"11934:18:33","nodeType":"FunctionDefinition","parameters":{"id":2588,"nodeType":"ParameterList","parameters":[],"src":"11952:2:33"},"returnParameters":{"id":2591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2590,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2592,"src":"11978:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2589,"name":"uint32","nodeType":"ElementaryTypeName","src":"11978:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"11977:8:33"},"scope":2647,"src":"11925:61:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2593,"nodeType":"StructuredDocumentation","src":"11992:183:33","text":" @notice Getter for protocolPercentage: the percentage of\n query fees that are burned as protocol fees.\n @return Protocol percentage in parts per million"},"functionSelector":"a26b90f2","id":2598,"implemented":false,"kind":"function","modifiers":[],"name":"protocolPercentage","nameLocation":"12189:18:33","nodeType":"FunctionDefinition","parameters":{"id":2594,"nodeType":"ParameterList","parameters":[],"src":"12207:2:33"},"returnParameters":{"id":2597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2596,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2598,"src":"12233:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2595,"name":"uint32","nodeType":"ElementaryTypeName","src":"12233:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"12232:8:33"},"scope":2647,"src":"12180:61:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2599,"nodeType":"StructuredDocumentation","src":"12247:327:33","text":" @notice Getter for maxAllocationEpochs: the maximum time in epochs\n that an allocation can be open before anyone is allowed to close it. This\n also caps the effective allocation when sending the allocation's query fees\n to the rebate pool.\n @return Maximum allocation period in epochs"},"functionSelector":"fb765938","id":2604,"implemented":false,"kind":"function","modifiers":[],"name":"maxAllocationEpochs","nameLocation":"12588:19:33","nodeType":"FunctionDefinition","parameters":{"id":2600,"nodeType":"ParameterList","parameters":[],"src":"12607:2:33"},"returnParameters":{"id":2603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2604,"src":"12633:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2601,"name":"uint32","nodeType":"ElementaryTypeName","src":"12633:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"12632:8:33"},"scope":2647,"src":"12579:62:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2605,"nodeType":"StructuredDocumentation","src":"12647:113:33","text":" @notice Getter for the numerator of the rebates alpha parameter\n @return Alpha numerator"},"functionSelector":"7ef82070","id":2610,"implemented":false,"kind":"function","modifiers":[],"name":"alphaNumerator","nameLocation":"12774:14:33","nodeType":"FunctionDefinition","parameters":{"id":2606,"nodeType":"ParameterList","parameters":[],"src":"12788:2:33"},"returnParameters":{"id":2609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2608,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2610,"src":"12814:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2607,"name":"uint32","nodeType":"ElementaryTypeName","src":"12814:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"12813:8:33"},"scope":2647,"src":"12765:57:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2611,"nodeType":"StructuredDocumentation","src":"12828:117:33","text":" @notice Getter for the denominator of the rebates alpha parameter\n @return Alpha denominator"},"functionSelector":"ce853613","id":2616,"implemented":false,"kind":"function","modifiers":[],"name":"alphaDenominator","nameLocation":"12959:16:33","nodeType":"FunctionDefinition","parameters":{"id":2612,"nodeType":"ParameterList","parameters":[],"src":"12975:2:33"},"returnParameters":{"id":2615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2614,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2616,"src":"13001:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2613,"name":"uint32","nodeType":"ElementaryTypeName","src":"13001:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"13000:8:33"},"scope":2647,"src":"12950:59:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2617,"nodeType":"StructuredDocumentation","src":"13015:115:33","text":" @notice Getter for the numerator of the rebates lambda parameter\n @return Lambda numerator"},"functionSelector":"09da07f7","id":2622,"implemented":false,"kind":"function","modifiers":[],"name":"lambdaNumerator","nameLocation":"13144:15:33","nodeType":"FunctionDefinition","parameters":{"id":2618,"nodeType":"ParameterList","parameters":[],"src":"13159:2:33"},"returnParameters":{"id":2621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2620,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2622,"src":"13185:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2619,"name":"uint32","nodeType":"ElementaryTypeName","src":"13185:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"13184:8:33"},"scope":2647,"src":"13135:58:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2623,"nodeType":"StructuredDocumentation","src":"13199:119:33","text":" @notice Getter for the denominator of the rebates lambda parameter\n @return Lambda denominator"},"functionSelector":"4b8a9b8e","id":2628,"implemented":false,"kind":"function","modifiers":[],"name":"lambdaDenominator","nameLocation":"13332:17:33","nodeType":"FunctionDefinition","parameters":{"id":2624,"nodeType":"ParameterList","parameters":[],"src":"13349:2:33"},"returnParameters":{"id":2627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2626,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2628,"src":"13375:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2625,"name":"uint32","nodeType":"ElementaryTypeName","src":"13375:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"13374:8:33"},"scope":2647,"src":"13323:60:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2629,"nodeType":"StructuredDocumentation","src":"13389:300:33","text":" @notice Getter for stakes[_indexer]:\n gets the stake information for an indexer as a IStakes.Indexer struct.\n @param indexer Indexer address for which to query the stake information\n @return Stake information for the specified indexer, as a IStakes.Indexer struct"},"functionSelector":"16934fc4","id":2637,"implemented":false,"kind":"function","modifiers":[],"name":"stakes","nameLocation":"13703:6:33","nodeType":"FunctionDefinition","parameters":{"id":2632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2631,"mutability":"mutable","name":"indexer","nameLocation":"13718:7:33","nodeType":"VariableDeclaration","scope":2637,"src":"13710:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2630,"name":"address","nodeType":"ElementaryTypeName","src":"13710:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13709:17:33"},"returnParameters":{"id":2636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2635,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2637,"src":"13750:22:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Indexer_$2660_memory_ptr","typeString":"struct IStakes.Indexer"},"typeName":{"id":2634,"nodeType":"UserDefinedTypeName","pathNode":{"id":2633,"name":"IStakes.Indexer","nameLocations":["13750:7:33","13758:7:33"],"nodeType":"IdentifierPath","referencedDeclaration":2660,"src":"13750:15:33"},"referencedDeclaration":2660,"src":"13750:15:33","typeDescriptions":{"typeIdentifier":"t_struct$_Indexer_$2660_storage_ptr","typeString":"struct IStakes.Indexer"}},"visibility":"internal"}],"src":"13749:24:33"},"scope":2647,"src":"13694:80:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2638,"nodeType":"StructuredDocumentation","src":"13780:308:33","text":" @notice Getter for allocations[_allocationID]:\n gets an allocation's information as an IStakingData.Allocation struct.\n @param allocationID Allocation ID for which to query the allocation information\n @return The specified allocation, as an IStakingData.Allocation struct"},"functionSelector":"52a9039c","id":2646,"implemented":false,"kind":"function","modifiers":[],"name":"allocations","nameLocation":"14102:11:33","nodeType":"FunctionDefinition","parameters":{"id":2641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2640,"mutability":"mutable","name":"allocationID","nameLocation":"14122:12:33","nodeType":"VariableDeclaration","scope":2646,"src":"14114:20:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2639,"name":"address","nodeType":"ElementaryTypeName","src":"14114:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14113:22:33"},"returnParameters":{"id":2645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2644,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2646,"src":"14159:30:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Allocation_$2300_memory_ptr","typeString":"struct IStakingData.Allocation"},"typeName":{"id":2643,"nodeType":"UserDefinedTypeName","pathNode":{"id":2642,"name":"IStakingData.Allocation","nameLocations":["14159:12:33","14172:10:33"],"nodeType":"IdentifierPath","referencedDeclaration":2300,"src":"14159:23:33"},"referencedDeclaration":2300,"src":"14159:23:33","typeDescriptions":{"typeIdentifier":"t_struct$_Allocation_$2300_storage_ptr","typeString":"struct IStakingData.Allocation"}},"visibility":"internal"}],"src":"14158:32:33"},"scope":2647,"src":"14093:98:33","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2648,"src":"712:13481:33","usedErrors":[],"usedEvents":[2373,2386,2395,2406,2415]}],"src":"46:14148:33"},"id":33},"contracts/contracts/staking/libs/IStakes.sol":{"ast":{"absolutePath":"contracts/contracts/staking/libs/IStakes.sol","exportedSymbols":{"IStakes":[2661]},"id":2662,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2649,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:34"},{"id":2650,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"80:19:34"},{"abstract":false,"baseContracts":[],"canonicalName":"IStakes","contractDependencies":[],"contractKind":"interface","documentation":{"id":2651,"nodeType":"StructuredDocumentation","src":"101:142:34","text":" @title Interface for staking data structures\n @author Edge & Node\n @notice Defines the data structures used for indexer staking"},"fullyImplemented":true,"id":2661,"linearizedBaseContracts":[2661],"name":"IStakes","nameLocation":"254:7:34","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IStakes.Indexer","id":2660,"members":[{"constant":false,"id":2653,"mutability":"mutable","name":"tokensStaked","nameLocation":"301:12:34","nodeType":"VariableDeclaration","scope":2660,"src":"293:20:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2652,"name":"uint256","nodeType":"ElementaryTypeName","src":"293:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2655,"mutability":"mutable","name":"tokensAllocated","nameLocation":"386:15:34","nodeType":"VariableDeclaration","scope":2660,"src":"378:23:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2654,"name":"uint256","nodeType":"ElementaryTypeName","src":"378:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2657,"mutability":"mutable","name":"tokensLocked","nameLocation":"449:12:34","nodeType":"VariableDeclaration","scope":2660,"src":"441:20:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2656,"name":"uint256","nodeType":"ElementaryTypeName","src":"441:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2659,"mutability":"mutable","name":"tokensLockedUntil","nameLocation":"537:17:34","nodeType":"VariableDeclaration","scope":2660,"src":"529:25:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2658,"name":"uint256","nodeType":"ElementaryTypeName","src":"529:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Indexer","nameLocation":"275:7:34","nodeType":"StructDefinition","scope":2661,"src":"268:338:34","visibility":"public"}],"scope":2662,"src":"244:364:34","usedErrors":[],"usedEvents":[]}],"src":"46:563:34"},"id":34},"contracts/contracts/upgrades/IGraphProxy.sol":{"ast":{"absolutePath":"contracts/contracts/upgrades/IGraphProxy.sol","exportedSymbols":{"IGraphProxy":[2705]},"id":2706,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2663,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:33:35"},{"abstract":false,"baseContracts":[],"canonicalName":"IGraphProxy","contractDependencies":[],"contractKind":"interface","documentation":{"id":2664,"nodeType":"StructuredDocumentation","src":"81:157:35","text":" @title Graph Proxy Interface\n @author Edge & Node\n @notice Interface for the Graph Proxy contract that handles upgradeable proxy functionality"},"fullyImplemented":false,"id":2705,"linearizedBaseContracts":[2705],"name":"IGraphProxy","nameLocation":"249:11:35","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2665,"nodeType":"StructuredDocumentation","src":"267:471:35","text":" @notice Get the current admin.\n @dev NOTE: Only the admin can call this function.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n @return adminAddress The address of the current admin"},"functionSelector":"f851a440","id":2670,"implemented":false,"kind":"function","modifiers":[],"name":"admin","nameLocation":"752:5:35","nodeType":"FunctionDefinition","parameters":{"id":2666,"nodeType":"ParameterList","parameters":[],"src":"757:2:35"},"returnParameters":{"id":2669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2670,"src":"778:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2667,"name":"address","nodeType":"ElementaryTypeName","src":"778:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"777:9:35"},"scope":2705,"src":"743:44:35","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2671,"nodeType":"StructuredDocumentation","src":"793:176:35","text":" @notice Change the admin of the proxy.\n @dev NOTE: Only the admin can call this function.\n @param newAdmin Address of the new admin"},"functionSelector":"704b6c02","id":2676,"implemented":false,"kind":"function","modifiers":[],"name":"setAdmin","nameLocation":"983:8:35","nodeType":"FunctionDefinition","parameters":{"id":2674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2673,"mutability":"mutable","name":"newAdmin","nameLocation":"1000:8:35","nodeType":"VariableDeclaration","scope":2676,"src":"992:16:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2672,"name":"address","nodeType":"ElementaryTypeName","src":"992:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"991:18:35"},"returnParameters":{"id":2675,"nodeType":"ParameterList","parameters":[],"src":"1018:0:35"},"scope":2705,"src":"974:45:35","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2677,"nodeType":"StructuredDocumentation","src":"1025:513:35","text":" @notice Get the current implementation.\n @dev NOTE: Only the admin can call this function.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n @return implementationAddress The address of the current implementation for this proxy"},"functionSelector":"5c60da1b","id":2682,"implemented":false,"kind":"function","modifiers":[],"name":"implementation","nameLocation":"1552:14:35","nodeType":"FunctionDefinition","parameters":{"id":2678,"nodeType":"ParameterList","parameters":[],"src":"1566:2:35"},"returnParameters":{"id":2681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2682,"src":"1587:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2679,"name":"address","nodeType":"ElementaryTypeName","src":"1587:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1586:9:35"},"scope":2705,"src":"1543:53:35","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2683,"nodeType":"StructuredDocumentation","src":"1602:536:35","text":" @notice Get the current pending implementation.\n @dev NOTE: Only the admin can call this function.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0x9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c`\n @return pendingImplementationAddress The address of the current pending implementation for this proxy"},"functionSelector":"396f7b23","id":2688,"implemented":false,"kind":"function","modifiers":[],"name":"pendingImplementation","nameLocation":"2152:21:35","nodeType":"FunctionDefinition","parameters":{"id":2684,"nodeType":"ParameterList","parameters":[],"src":"2173:2:35"},"returnParameters":{"id":2687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2688,"src":"2194:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2685,"name":"address","nodeType":"ElementaryTypeName","src":"2194:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2193:9:35"},"scope":2705,"src":"2143:60:35","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2689,"nodeType":"StructuredDocumentation","src":"2209:193:35","text":" @notice Upgrades to a new implementation contract.\n @dev NOTE: Only the admin can call this function.\n @param newImplementation Address of implementation contract"},"functionSelector":"3659cfe6","id":2694,"implemented":false,"kind":"function","modifiers":[],"name":"upgradeTo","nameLocation":"2416:9:35","nodeType":"FunctionDefinition","parameters":{"id":2692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2691,"mutability":"mutable","name":"newImplementation","nameLocation":"2434:17:35","nodeType":"VariableDeclaration","scope":2694,"src":"2426:25:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2690,"name":"address","nodeType":"ElementaryTypeName","src":"2426:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2425:27:35"},"returnParameters":{"id":2693,"nodeType":"ParameterList","parameters":[],"src":"2461:0:35"},"scope":2705,"src":"2407:55:35","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2695,"nodeType":"StructuredDocumentation","src":"2468:102:35","text":" @notice Admin function for new implementation to accept its role as implementation."},"functionSelector":"59fc20bb","id":2698,"implemented":false,"kind":"function","modifiers":[],"name":"acceptUpgrade","nameLocation":"2584:13:35","nodeType":"FunctionDefinition","parameters":{"id":2696,"nodeType":"ParameterList","parameters":[],"src":"2597:2:35"},"returnParameters":{"id":2697,"nodeType":"ParameterList","parameters":[],"src":"2608:0:35"},"scope":2705,"src":"2575:34:35","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2699,"nodeType":"StructuredDocumentation","src":"2615:261:35","text":" @notice Admin function for new implementation to accept its role as implementation,\n calling a function on the new implementation.\n @param data Calldata (including selector) for the function to delegatecall into the implementation"},"functionSelector":"623faf61","id":2704,"implemented":false,"kind":"function","modifiers":[],"name":"acceptUpgradeAndCall","nameLocation":"2890:20:35","nodeType":"FunctionDefinition","parameters":{"id":2702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2701,"mutability":"mutable","name":"data","nameLocation":"2926:4:35","nodeType":"VariableDeclaration","scope":2704,"src":"2911:19:35","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2700,"name":"bytes","nodeType":"ElementaryTypeName","src":"2911:5:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2910:21:35"},"returnParameters":{"id":2703,"nodeType":"ParameterList","parameters":[],"src":"2940:0:35"},"scope":2705,"src":"2881:60:35","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2706,"src":"239:2704:35","usedErrors":[],"usedEvents":[]}],"src":"46:2898:35"},"id":35},"contracts/contracts/upgrades/IGraphProxyAdmin.sol":{"ast":{"absolutePath":"contracts/contracts/upgrades/IGraphProxyAdmin.sol","exportedSymbols":{"IGoverned":[1233],"IGraphProxy":[2705],"IGraphProxyAdmin":[2802]},"id":2803,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2707,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:36"},{"absolutePath":"contracts/contracts/upgrades/IGraphProxy.sol","file":"./IGraphProxy.sol","id":2709,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2803,"sourceUnit":2706,"src":"72:48:36","symbolAliases":[{"foreign":{"id":2708,"name":"IGraphProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2705,"src":"81:11:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/governance/IGoverned.sol","file":"../governance/IGoverned.sol","id":2711,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2803,"sourceUnit":1234,"src":"121:56:36","symbolAliases":[{"foreign":{"id":2710,"name":"IGoverned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1233,"src":"130:9:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2713,"name":"IGoverned","nameLocations":["598:9:36"],"nodeType":"IdentifierPath","referencedDeclaration":1233,"src":"598:9:36"},"id":2714,"nodeType":"InheritanceSpecifier","src":"598:9:36"}],"canonicalName":"IGraphProxyAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":2712,"nodeType":"StructuredDocumentation","src":"179:388:36","text":" @title IGraphProxyAdmin\n @author Edge & Node\n @notice GraphProxyAdmin contract interface for managing proxy contracts\n @dev Note that this interface is not used by the contract implementation, just used for types and abi generation\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":false,"id":2802,"linearizedBaseContracts":[2802,1233],"name":"IGraphProxyAdmin","nameLocation":"578:16:36","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2715,"nodeType":"StructuredDocumentation","src":"614:158:36","text":" @notice Get the implementation address of a proxy\n @param proxy The proxy contract to query\n @return The implementation address"},"functionSelector":"204e1c7a","id":2723,"implemented":false,"kind":"function","modifiers":[],"name":"getProxyImplementation","nameLocation":"786:22:36","nodeType":"FunctionDefinition","parameters":{"id":2719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2718,"mutability":"mutable","name":"proxy","nameLocation":"821:5:36","nodeType":"VariableDeclaration","scope":2723,"src":"809:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"},"typeName":{"id":2717,"nodeType":"UserDefinedTypeName","pathNode":{"id":2716,"name":"IGraphProxy","nameLocations":["809:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":2705,"src":"809:11:36"},"referencedDeclaration":2705,"src":"809:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"}},"visibility":"internal"}],"src":"808:19:36"},"returnParameters":{"id":2722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2721,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2723,"src":"851:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2720,"name":"address","nodeType":"ElementaryTypeName","src":"851:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"850:9:36"},"scope":2802,"src":"777:83:36","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2724,"nodeType":"StructuredDocumentation","src":"866:174:36","text":" @notice Get the pending implementation address of a proxy\n @param proxy The proxy contract to query\n @return The pending implementation address"},"functionSelector":"5bf410eb","id":2732,"implemented":false,"kind":"function","modifiers":[],"name":"getProxyPendingImplementation","nameLocation":"1054:29:36","nodeType":"FunctionDefinition","parameters":{"id":2728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2727,"mutability":"mutable","name":"proxy","nameLocation":"1096:5:36","nodeType":"VariableDeclaration","scope":2732,"src":"1084:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"},"typeName":{"id":2726,"nodeType":"UserDefinedTypeName","pathNode":{"id":2725,"name":"IGraphProxy","nameLocations":["1084:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":2705,"src":"1084:11:36"},"referencedDeclaration":2705,"src":"1084:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"}},"visibility":"internal"}],"src":"1083:19:36"},"returnParameters":{"id":2731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2730,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2732,"src":"1126:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2729,"name":"address","nodeType":"ElementaryTypeName","src":"1126:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1125:9:36"},"scope":2802,"src":"1045:90:36","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2733,"nodeType":"StructuredDocumentation","src":"1141:140:36","text":" @notice Get the admin address of a proxy\n @param proxy The proxy contract to query\n @return The admin address"},"functionSelector":"f3b7dead","id":2741,"implemented":false,"kind":"function","modifiers":[],"name":"getProxyAdmin","nameLocation":"1295:13:36","nodeType":"FunctionDefinition","parameters":{"id":2737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2736,"mutability":"mutable","name":"proxy","nameLocation":"1321:5:36","nodeType":"VariableDeclaration","scope":2741,"src":"1309:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"},"typeName":{"id":2735,"nodeType":"UserDefinedTypeName","pathNode":{"id":2734,"name":"IGraphProxy","nameLocations":["1309:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":2705,"src":"1309:11:36"},"referencedDeclaration":2705,"src":"1309:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"}},"visibility":"internal"}],"src":"1308:19:36"},"returnParameters":{"id":2740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2739,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2741,"src":"1351:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2738,"name":"address","nodeType":"ElementaryTypeName","src":"1351:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1350:9:36"},"scope":2802,"src":"1286:74:36","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2742,"nodeType":"StructuredDocumentation","src":"1366:157:36","text":" @notice Change the admin of a proxy contract\n @param proxy The proxy contract to modify\n @param newAdmin The new admin address"},"functionSelector":"7eff275e","id":2750,"implemented":false,"kind":"function","modifiers":[],"name":"changeProxyAdmin","nameLocation":"1537:16:36","nodeType":"FunctionDefinition","parameters":{"id":2748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2745,"mutability":"mutable","name":"proxy","nameLocation":"1566:5:36","nodeType":"VariableDeclaration","scope":2750,"src":"1554:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"},"typeName":{"id":2744,"nodeType":"UserDefinedTypeName","pathNode":{"id":2743,"name":"IGraphProxy","nameLocations":["1554:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":2705,"src":"1554:11:36"},"referencedDeclaration":2705,"src":"1554:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"}},"visibility":"internal"},{"constant":false,"id":2747,"mutability":"mutable","name":"newAdmin","nameLocation":"1581:8:36","nodeType":"VariableDeclaration","scope":2750,"src":"1573:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2746,"name":"address","nodeType":"ElementaryTypeName","src":"1573:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1553:37:36"},"returnParameters":{"id":2749,"nodeType":"ParameterList","parameters":[],"src":"1599:0:36"},"scope":2802,"src":"1528:72:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2751,"nodeType":"StructuredDocumentation","src":"1606:176:36","text":" @notice Upgrade a proxy to a new implementation\n @param proxy The proxy contract to upgrade\n @param implementation The new implementation address"},"functionSelector":"99a88ec4","id":2759,"implemented":false,"kind":"function","modifiers":[],"name":"upgrade","nameLocation":"1796:7:36","nodeType":"FunctionDefinition","parameters":{"id":2757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2754,"mutability":"mutable","name":"proxy","nameLocation":"1816:5:36","nodeType":"VariableDeclaration","scope":2759,"src":"1804:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"},"typeName":{"id":2753,"nodeType":"UserDefinedTypeName","pathNode":{"id":2752,"name":"IGraphProxy","nameLocations":["1804:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":2705,"src":"1804:11:36"},"referencedDeclaration":2705,"src":"1804:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"}},"visibility":"internal"},{"constant":false,"id":2756,"mutability":"mutable","name":"implementation","nameLocation":"1831:14:36","nodeType":"VariableDeclaration","scope":2759,"src":"1823:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2755,"name":"address","nodeType":"ElementaryTypeName","src":"1823:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1803:43:36"},"returnParameters":{"id":2758,"nodeType":"ParameterList","parameters":[],"src":"1855:0:36"},"scope":2802,"src":"1787:69:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2760,"nodeType":"StructuredDocumentation","src":"1862:176:36","text":" @notice Upgrade a proxy to a new implementation\n @param proxy The proxy contract to upgrade\n @param implementation The new implementation address"},"functionSelector":"132d807e","id":2768,"implemented":false,"kind":"function","modifiers":[],"name":"upgradeTo","nameLocation":"2052:9:36","nodeType":"FunctionDefinition","parameters":{"id":2766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2763,"mutability":"mutable","name":"proxy","nameLocation":"2074:5:36","nodeType":"VariableDeclaration","scope":2768,"src":"2062:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"},"typeName":{"id":2762,"nodeType":"UserDefinedTypeName","pathNode":{"id":2761,"name":"IGraphProxy","nameLocations":["2062:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":2705,"src":"2062:11:36"},"referencedDeclaration":2705,"src":"2062:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"}},"visibility":"internal"},{"constant":false,"id":2765,"mutability":"mutable","name":"implementation","nameLocation":"2089:14:36","nodeType":"VariableDeclaration","scope":2768,"src":"2081:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2764,"name":"address","nodeType":"ElementaryTypeName","src":"2081:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2061:43:36"},"returnParameters":{"id":2767,"nodeType":"ParameterList","parameters":[],"src":"2113:0:36"},"scope":2802,"src":"2043:71:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2769,"nodeType":"StructuredDocumentation","src":"2120:265:36","text":" @notice Upgrade a proxy to a new implementation and call a function\n @param proxy The proxy contract to upgrade\n @param implementation The new implementation address\n @param data The calldata to execute on the new implementation"},"functionSelector":"13b7adcc","id":2779,"implemented":false,"kind":"function","modifiers":[],"name":"upgradeToAndCall","nameLocation":"2399:16:36","nodeType":"FunctionDefinition","parameters":{"id":2777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2772,"mutability":"mutable","name":"proxy","nameLocation":"2428:5:36","nodeType":"VariableDeclaration","scope":2779,"src":"2416:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"},"typeName":{"id":2771,"nodeType":"UserDefinedTypeName","pathNode":{"id":2770,"name":"IGraphProxy","nameLocations":["2416:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":2705,"src":"2416:11:36"},"referencedDeclaration":2705,"src":"2416:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"}},"visibility":"internal"},{"constant":false,"id":2774,"mutability":"mutable","name":"implementation","nameLocation":"2443:14:36","nodeType":"VariableDeclaration","scope":2779,"src":"2435:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2773,"name":"address","nodeType":"ElementaryTypeName","src":"2435:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2776,"mutability":"mutable","name":"data","nameLocation":"2474:4:36","nodeType":"VariableDeclaration","scope":2779,"src":"2459:19:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2775,"name":"bytes","nodeType":"ElementaryTypeName","src":"2459:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2415:64:36"},"returnParameters":{"id":2778,"nodeType":"ParameterList","parameters":[],"src":"2488:0:36"},"scope":2802,"src":"2390:99:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2780,"nodeType":"StructuredDocumentation","src":"2495:112:36","text":" @notice Accept ownership of a proxy contract\n @param proxy The proxy contract to accept"},"functionSelector":"a2594d82","id":2786,"implemented":false,"kind":"function","modifiers":[],"name":"acceptProxy","nameLocation":"2621:11:36","nodeType":"FunctionDefinition","parameters":{"id":2784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2783,"mutability":"mutable","name":"proxy","nameLocation":"2645:5:36","nodeType":"VariableDeclaration","scope":2786,"src":"2633:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"},"typeName":{"id":2782,"nodeType":"UserDefinedTypeName","pathNode":{"id":2781,"name":"IGraphProxy","nameLocations":["2633:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":2705,"src":"2633:11:36"},"referencedDeclaration":2705,"src":"2633:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"}},"visibility":"internal"}],"src":"2632:19:36"},"returnParameters":{"id":2785,"nodeType":"ParameterList","parameters":[],"src":"2660:0:36"},"scope":2802,"src":"2612:49:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2787,"nodeType":"StructuredDocumentation","src":"2667:191:36","text":" @notice Accept ownership of a proxy contract and call a function\n @param proxy The proxy contract to accept\n @param data The calldata to execute after accepting"},"functionSelector":"9ce7abe5","id":2795,"implemented":false,"kind":"function","modifiers":[],"name":"acceptProxyAndCall","nameLocation":"2872:18:36","nodeType":"FunctionDefinition","parameters":{"id":2793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2790,"mutability":"mutable","name":"proxy","nameLocation":"2903:5:36","nodeType":"VariableDeclaration","scope":2795,"src":"2891:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"},"typeName":{"id":2789,"nodeType":"UserDefinedTypeName","pathNode":{"id":2788,"name":"IGraphProxy","nameLocations":["2891:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":2705,"src":"2891:11:36"},"referencedDeclaration":2705,"src":"2891:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IGraphProxy_$2705","typeString":"contract IGraphProxy"}},"visibility":"internal"},{"constant":false,"id":2792,"mutability":"mutable","name":"data","nameLocation":"2925:4:36","nodeType":"VariableDeclaration","scope":2795,"src":"2910:19:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2791,"name":"bytes","nodeType":"ElementaryTypeName","src":"2910:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2890:40:36"},"returnParameters":{"id":2794,"nodeType":"ParameterList","parameters":[],"src":"2939:0:36"},"scope":2802,"src":"2863:77:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1202],"documentation":{"id":2796,"nodeType":"StructuredDocumentation","src":"2962:94:36","text":" @notice Get the governor address\n @return The address of the governor"},"functionSelector":"0c340a24","id":2801,"implemented":false,"kind":"function","modifiers":[],"name":"governor","nameLocation":"3070:8:36","nodeType":"FunctionDefinition","parameters":{"id":2797,"nodeType":"ParameterList","parameters":[],"src":"3078:2:36"},"returnParameters":{"id":2800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2799,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2801,"src":"3104:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2798,"name":"address","nodeType":"ElementaryTypeName","src":"3104:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3103:9:36"},"scope":2802,"src":"3061:52:36","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2803,"src":"568:2547:36","usedErrors":[],"usedEvents":[1225,1232]}],"src":"46:3070:36"},"id":36},"contracts/data-service/IDataService.sol":{"ast":{"absolutePath":"contracts/data-service/IDataService.sol","exportedSymbols":{"IDataService":[2934],"IGraphPayments":[3286]},"id":2935,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2804,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:37"},{"absolutePath":"contracts/horizon/IGraphPayments.sol","file":"../horizon/IGraphPayments.sol","id":2806,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2935,"sourceUnit":3287,"src":"174:63:37","symbolAliases":[{"foreign":{"id":2805,"name":"IGraphPayments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"183:14:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IDataService","contractDependencies":[],"contractKind":"interface","documentation":{"id":2807,"nodeType":"StructuredDocumentation","src":"239:918:37","text":" @title Interface of the base {DataService} contract as defined by the Graph Horizon specification.\n @author Edge & Node\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 @custom:security-contact Please email security+contracts@thegraph.com if you find any\n bugs. We may have an active bug bounty program."},"fullyImplemented":false,"id":2934,"linearizedBaseContracts":[2934],"name":"IDataService","nameLocation":"1168:12:37","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":2808,"nodeType":"StructuredDocumentation","src":"1187:229:37","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":2814,"name":"ServiceProviderRegistered","nameLocation":"1427:25:37","nodeType":"EventDefinition","parameters":{"id":2813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2810,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"1469:15:37","nodeType":"VariableDeclaration","scope":2814,"src":"1453:31:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2809,"name":"address","nodeType":"ElementaryTypeName","src":"1453:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2812,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"1492:4:37","nodeType":"VariableDeclaration","scope":2814,"src":"1486:10:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2811,"name":"bytes","nodeType":"ElementaryTypeName","src":"1486:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1452:45:37"},"src":"1421:77:37"},{"anonymous":false,"documentation":{"id":2815,"nodeType":"StructuredDocumentation","src":"1504:182:37","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":2819,"name":"ProvisionPendingParametersAccepted","nameLocation":"1697:34:37","nodeType":"EventDefinition","parameters":{"id":2818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2817,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"1748:15:37","nodeType":"VariableDeclaration","scope":2819,"src":"1732:31:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2816,"name":"address","nodeType":"ElementaryTypeName","src":"1732:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1731:33:37"},"src":"1691:74:37"},{"anonymous":false,"documentation":{"id":2820,"nodeType":"StructuredDocumentation","src":"1771:222:37","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":2826,"name":"ServiceStarted","nameLocation":"2004:14:37","nodeType":"EventDefinition","parameters":{"id":2825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2822,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"2035:15:37","nodeType":"VariableDeclaration","scope":2826,"src":"2019:31:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2821,"name":"address","nodeType":"ElementaryTypeName","src":"2019:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2824,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"2058:4:37","nodeType":"VariableDeclaration","scope":2826,"src":"2052:10:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2823,"name":"bytes","nodeType":"ElementaryTypeName","src":"2052:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2018:45:37"},"src":"1998:66:37"},{"anonymous":false,"documentation":{"id":2827,"nodeType":"StructuredDocumentation","src":"2070:221:37","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":2833,"name":"ServiceStopped","nameLocation":"2302:14:37","nodeType":"EventDefinition","parameters":{"id":2832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2829,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"2333:15:37","nodeType":"VariableDeclaration","scope":2833,"src":"2317:31:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2828,"name":"address","nodeType":"ElementaryTypeName","src":"2317:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2831,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"2356:4:37","nodeType":"VariableDeclaration","scope":2833,"src":"2350:10:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2830,"name":"bytes","nodeType":"ElementaryTypeName","src":"2350:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2316:45:37"},"src":"2296:66:37"},{"anonymous":false,"documentation":{"id":2834,"nodeType":"StructuredDocumentation","src":"2368:276:37","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":2843,"name":"ServicePaymentCollected","nameLocation":"2655:23:37","nodeType":"EventDefinition","parameters":{"id":2842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2836,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"2704:15:37","nodeType":"VariableDeclaration","scope":2843,"src":"2688:31:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2835,"name":"address","nodeType":"ElementaryTypeName","src":"2688:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2839,"indexed":true,"mutability":"mutable","name":"feeType","nameLocation":"2765:7:37","nodeType":"VariableDeclaration","scope":2843,"src":"2729:43:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":2838,"nodeType":"UserDefinedTypeName","pathNode":{"id":2837,"name":"IGraphPayments.PaymentTypes","nameLocations":["2729:14:37","2744:12:37"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"2729:27:37"},"referencedDeclaration":3224,"src":"2729:27:37","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":2841,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"2790:6:37","nodeType":"VariableDeclaration","scope":2843,"src":"2782:14:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2840,"name":"uint256","nodeType":"ElementaryTypeName","src":"2782:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2678:124:37"},"src":"2649:154:37"},{"anonymous":false,"documentation":{"id":2844,"nodeType":"StructuredDocumentation","src":"2809:188:37","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":2850,"name":"ServiceProviderSlashed","nameLocation":"3008:22:37","nodeType":"EventDefinition","parameters":{"id":2849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2846,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"3047:15:37","nodeType":"VariableDeclaration","scope":2850,"src":"3031:31:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2845,"name":"address","nodeType":"ElementaryTypeName","src":"3031:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2848,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"3072:6:37","nodeType":"VariableDeclaration","scope":2850,"src":"3064:14:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2847,"name":"uint256","nodeType":"ElementaryTypeName","src":"3064:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3030:49:37"},"src":"3002:78:37"},{"documentation":{"id":2851,"nodeType":"StructuredDocumentation","src":"3086:903:37","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":2858,"implemented":false,"kind":"function","modifiers":[],"name":"register","nameLocation":"4003:8:37","nodeType":"FunctionDefinition","parameters":{"id":2856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2853,"mutability":"mutable","name":"serviceProvider","nameLocation":"4020:15:37","nodeType":"VariableDeclaration","scope":2858,"src":"4012:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2852,"name":"address","nodeType":"ElementaryTypeName","src":"4012:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2855,"mutability":"mutable","name":"data","nameLocation":"4052:4:37","nodeType":"VariableDeclaration","scope":2858,"src":"4037:19:37","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2854,"name":"bytes","nodeType":"ElementaryTypeName","src":"4037:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4011:46:37"},"returnParameters":{"id":2857,"nodeType":"ParameterList","parameters":[],"src":"4066:0:37"},"scope":2934,"src":"3994:73:37","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2859,"nodeType":"StructuredDocumentation","src":"4073:472:37","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":2866,"implemented":false,"kind":"function","modifiers":[],"name":"acceptProvisionPendingParameters","nameLocation":"4559:32:37","nodeType":"FunctionDefinition","parameters":{"id":2864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2861,"mutability":"mutable","name":"serviceProvider","nameLocation":"4600:15:37","nodeType":"VariableDeclaration","scope":2866,"src":"4592:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2860,"name":"address","nodeType":"ElementaryTypeName","src":"4592:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2863,"mutability":"mutable","name":"data","nameLocation":"4632:4:37","nodeType":"VariableDeclaration","scope":2866,"src":"4617:19:37","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2862,"name":"bytes","nodeType":"ElementaryTypeName","src":"4617:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4591:46:37"},"returnParameters":{"id":2865,"nodeType":"ParameterList","parameters":[],"src":"4646:0:37"},"scope":2934,"src":"4550:97:37","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2867,"nodeType":"StructuredDocumentation","src":"4653:251:37","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":2874,"implemented":false,"kind":"function","modifiers":[],"name":"startService","nameLocation":"4918:12:37","nodeType":"FunctionDefinition","parameters":{"id":2872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2869,"mutability":"mutable","name":"serviceProvider","nameLocation":"4939:15:37","nodeType":"VariableDeclaration","scope":2874,"src":"4931:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2868,"name":"address","nodeType":"ElementaryTypeName","src":"4931:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2871,"mutability":"mutable","name":"data","nameLocation":"4971:4:37","nodeType":"VariableDeclaration","scope":2874,"src":"4956:19:37","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2870,"name":"bytes","nodeType":"ElementaryTypeName","src":"4956:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4930:46:37"},"returnParameters":{"id":2873,"nodeType":"ParameterList","parameters":[],"src":"4985:0:37"},"scope":2934,"src":"4909:77:37","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2875,"nodeType":"StructuredDocumentation","src":"4992:250:37","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":2882,"implemented":false,"kind":"function","modifiers":[],"name":"stopService","nameLocation":"5256:11:37","nodeType":"FunctionDefinition","parameters":{"id":2880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2877,"mutability":"mutable","name":"serviceProvider","nameLocation":"5276:15:37","nodeType":"VariableDeclaration","scope":2882,"src":"5268:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2876,"name":"address","nodeType":"ElementaryTypeName","src":"5268:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2879,"mutability":"mutable","name":"data","nameLocation":"5308:4:37","nodeType":"VariableDeclaration","scope":2882,"src":"5293:19:37","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2878,"name":"bytes","nodeType":"ElementaryTypeName","src":"5293:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5267:46:37"},"returnParameters":{"id":2881,"nodeType":"ParameterList","parameters":[],"src":"5322:0:37"},"scope":2934,"src":"5247:76:37","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2883,"nodeType":"StructuredDocumentation","src":"5329:864:37","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 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":2895,"implemented":false,"kind":"function","modifiers":[],"name":"collect","nameLocation":"6207:7:37","nodeType":"FunctionDefinition","parameters":{"id":2891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2885,"mutability":"mutable","name":"serviceProvider","nameLocation":"6232:15:37","nodeType":"VariableDeclaration","scope":2895,"src":"6224:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2884,"name":"address","nodeType":"ElementaryTypeName","src":"6224:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2888,"mutability":"mutable","name":"feeType","nameLocation":"6285:7:37","nodeType":"VariableDeclaration","scope":2895,"src":"6257:35:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":2887,"nodeType":"UserDefinedTypeName","pathNode":{"id":2886,"name":"IGraphPayments.PaymentTypes","nameLocations":["6257:14:37","6272:12:37"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"6257:27:37"},"referencedDeclaration":3224,"src":"6257:27:37","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":2890,"mutability":"mutable","name":"data","nameLocation":"6317:4:37","nodeType":"VariableDeclaration","scope":2895,"src":"6302:19:37","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2889,"name":"bytes","nodeType":"ElementaryTypeName","src":"6302:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6214:113:37"},"returnParameters":{"id":2894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2893,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2895,"src":"6346:7:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2892,"name":"uint256","nodeType":"ElementaryTypeName","src":"6346:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6345:9:37"},"scope":2934,"src":"6198:157:37","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2896,"nodeType":"StructuredDocumentation","src":"6361:367:37","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":2903,"implemented":false,"kind":"function","modifiers":[],"name":"slash","nameLocation":"6742:5:37","nodeType":"FunctionDefinition","parameters":{"id":2901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2898,"mutability":"mutable","name":"serviceProvider","nameLocation":"6756:15:37","nodeType":"VariableDeclaration","scope":2903,"src":"6748:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2897,"name":"address","nodeType":"ElementaryTypeName","src":"6748:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2900,"mutability":"mutable","name":"data","nameLocation":"6788:4:37","nodeType":"VariableDeclaration","scope":2903,"src":"6773:19:37","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2899,"name":"bytes","nodeType":"ElementaryTypeName","src":"6773:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6747:46:37"},"returnParameters":{"id":2902,"nodeType":"ParameterList","parameters":[],"src":"6802:0:37"},"scope":2934,"src":"6733:70:37","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2904,"nodeType":"StructuredDocumentation","src":"6809:163:37","text":" @notice External getter for the thawing period range\n @return Minimum thawing period allowed\n @return Maximum thawing period allowed"},"functionSelector":"71ce020a","id":2911,"implemented":false,"kind":"function","modifiers":[],"name":"getThawingPeriodRange","nameLocation":"6986:21:37","nodeType":"FunctionDefinition","parameters":{"id":2905,"nodeType":"ParameterList","parameters":[],"src":"7007:2:37"},"returnParameters":{"id":2910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2907,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2911,"src":"7033:6:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":2906,"name":"uint64","nodeType":"ElementaryTypeName","src":"7033:6:37","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":2909,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2911,"src":"7041:6:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":2908,"name":"uint64","nodeType":"ElementaryTypeName","src":"7041:6:37","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"7032:16:37"},"scope":2934,"src":"6977:72:37","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2912,"nodeType":"StructuredDocumentation","src":"7055:157:37","text":" @notice External getter for the verifier cut range\n @return Minimum verifier cut allowed\n @return Maximum verifier cut allowed"},"functionSelector":"482468b7","id":2919,"implemented":false,"kind":"function","modifiers":[],"name":"getVerifierCutRange","nameLocation":"7226:19:37","nodeType":"FunctionDefinition","parameters":{"id":2913,"nodeType":"ParameterList","parameters":[],"src":"7245:2:37"},"returnParameters":{"id":2918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2915,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2919,"src":"7271:6:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2914,"name":"uint32","nodeType":"ElementaryTypeName","src":"7271:6:37","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2917,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2919,"src":"7279:6:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2916,"name":"uint32","nodeType":"ElementaryTypeName","src":"7279:6:37","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"7270:16:37"},"scope":2934,"src":"7217:70:37","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2920,"nodeType":"StructuredDocumentation","src":"7293:169:37","text":" @notice External getter for the provision tokens range\n @return Minimum provision tokens allowed\n @return Maximum provision tokens allowed"},"functionSelector":"819ba366","id":2927,"implemented":false,"kind":"function","modifiers":[],"name":"getProvisionTokensRange","nameLocation":"7476:23:37","nodeType":"FunctionDefinition","parameters":{"id":2921,"nodeType":"ParameterList","parameters":[],"src":"7499:2:37"},"returnParameters":{"id":2926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2927,"src":"7525:7:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2922,"name":"uint256","nodeType":"ElementaryTypeName","src":"7525:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2925,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2927,"src":"7534:7:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2924,"name":"uint256","nodeType":"ElementaryTypeName","src":"7534:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7524:18:37"},"scope":2934,"src":"7467:76:37","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2928,"nodeType":"StructuredDocumentation","src":"7549:103:37","text":" @notice External getter for the delegation ratio\n @return The delegation ratio"},"functionSelector":"1ebb7c30","id":2933,"implemented":false,"kind":"function","modifiers":[],"name":"getDelegationRatio","nameLocation":"7666:18:37","nodeType":"FunctionDefinition","parameters":{"id":2929,"nodeType":"ParameterList","parameters":[],"src":"7684:2:37"},"returnParameters":{"id":2932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2931,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2933,"src":"7710:6:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2930,"name":"uint32","nodeType":"ElementaryTypeName","src":"7710:6:37","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"7709:8:37"},"scope":2934,"src":"7657:61:37","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2935,"src":"1158:6562:37","usedErrors":[],"usedEvents":[2814,2819,2826,2833,2843,2850]}],"src":"45:7676:37"},"id":37},"contracts/data-service/IDataServiceFees.sol":{"ast":{"absolutePath":"contracts/data-service/IDataServiceFees.sol","exportedSymbols":{"IDataService":[2934],"IDataServiceFees":[2997]},"id":2998,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2936,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:38"},{"absolutePath":"contracts/data-service/IDataService.sol","file":"./IDataService.sol","id":2938,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2998,"sourceUnit":2935,"src":"174:50:38","symbolAliases":[{"foreign":{"id":2937,"name":"IDataService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2934,"src":"183:12:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2940,"name":"IDataService","nameLocations":["1334:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":2934,"src":"1334:12:38"},"id":2941,"nodeType":"InheritanceSpecifier","src":"1334:12:38"}],"canonicalName":"IDataServiceFees","contractDependencies":[],"contractKind":"interface","documentation":{"id":2939,"nodeType":"StructuredDocumentation","src":"226:1077:38","text":" @title Interface for the {DataServiceFees} contract.\n @author Edge & Node\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.\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":false,"id":2997,"linearizedBaseContracts":[2997,2934],"name":"IDataServiceFees","nameLocation":"1314:16:38","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IDataServiceFees.StakeClaim","documentation":{"id":2942,"nodeType":"StructuredDocumentation","src":"1353:508:38","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.\n @param tokens The amount of tokens to be locked in the claim\n @param createdAt The timestamp when the claim was created\n @param releasableAt The timestamp when the tokens can be released\n @param nextClaim The next claim in the linked list"},"id":2951,"members":[{"constant":false,"id":2944,"mutability":"mutable","name":"tokens","nameLocation":"1902:6:38","nodeType":"VariableDeclaration","scope":2951,"src":"1894:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2943,"name":"uint256","nodeType":"ElementaryTypeName","src":"1894:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2946,"mutability":"mutable","name":"createdAt","nameLocation":"1926:9:38","nodeType":"VariableDeclaration","scope":2951,"src":"1918:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2945,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2948,"mutability":"mutable","name":"releasableAt","nameLocation":"1953:12:38","nodeType":"VariableDeclaration","scope":2951,"src":"1945:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2947,"name":"uint256","nodeType":"ElementaryTypeName","src":"1945:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2950,"mutability":"mutable","name":"nextClaim","nameLocation":"1983:9:38","nodeType":"VariableDeclaration","scope":2951,"src":"1975:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2949,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1975:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"StakeClaim","nameLocation":"1873:10:38","nodeType":"StructDefinition","scope":2997,"src":"1866:133:38","visibility":"public"},{"anonymous":false,"documentation":{"id":2952,"nodeType":"StructuredDocumentation","src":"2005:338:38","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":2962,"name":"StakeClaimLocked","nameLocation":"2354:16:38","nodeType":"EventDefinition","parameters":{"id":2961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2954,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"2396:15:38","nodeType":"VariableDeclaration","scope":2962,"src":"2380:31:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2953,"name":"address","nodeType":"ElementaryTypeName","src":"2380:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2956,"indexed":true,"mutability":"mutable","name":"claimId","nameLocation":"2437:7:38","nodeType":"VariableDeclaration","scope":2962,"src":"2421:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2955,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2421:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2958,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"2462:6:38","nodeType":"VariableDeclaration","scope":2962,"src":"2454:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2957,"name":"uint256","nodeType":"ElementaryTypeName","src":"2454:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2960,"indexed":false,"mutability":"mutable","name":"unlockTimestamp","nameLocation":"2486:15:38","nodeType":"VariableDeclaration","scope":2962,"src":"2478:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2959,"name":"uint256","nodeType":"ElementaryTypeName","src":"2478:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2370:137:38"},"src":"2348:160:38"},{"anonymous":false,"documentation":{"id":2963,"nodeType":"StructuredDocumentation","src":"2514:324:38","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":2973,"name":"StakeClaimReleased","nameLocation":"2849:18:38","nodeType":"EventDefinition","parameters":{"id":2972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2965,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"2893:15:38","nodeType":"VariableDeclaration","scope":2973,"src":"2877:31:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2964,"name":"address","nodeType":"ElementaryTypeName","src":"2877:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2967,"indexed":true,"mutability":"mutable","name":"claimId","nameLocation":"2934:7:38","nodeType":"VariableDeclaration","scope":2973,"src":"2918:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2966,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2918:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2969,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"2959:6:38","nodeType":"VariableDeclaration","scope":2973,"src":"2951:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2968,"name":"uint256","nodeType":"ElementaryTypeName","src":"2951:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2971,"indexed":false,"mutability":"mutable","name":"releasableAt","nameLocation":"2983:12:38","nodeType":"VariableDeclaration","scope":2973,"src":"2975:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2970,"name":"uint256","nodeType":"ElementaryTypeName","src":"2975:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2867:134:38"},"src":"2843:159:38"},{"anonymous":false,"documentation":{"id":2974,"nodeType":"StructuredDocumentation","src":"3008:283:38","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":2982,"name":"StakeClaimsReleased","nameLocation":"3302:19:38","nodeType":"EventDefinition","parameters":{"id":2981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2976,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"3338:15:38","nodeType":"VariableDeclaration","scope":2982,"src":"3322:31:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2975,"name":"address","nodeType":"ElementaryTypeName","src":"3322:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2978,"indexed":false,"mutability":"mutable","name":"claimsCount","nameLocation":"3363:11:38","nodeType":"VariableDeclaration","scope":2982,"src":"3355:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2977,"name":"uint256","nodeType":"ElementaryTypeName","src":"3355:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2980,"indexed":false,"mutability":"mutable","name":"tokensReleased","nameLocation":"3384:14:38","nodeType":"VariableDeclaration","scope":2982,"src":"3376:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2979,"name":"uint256","nodeType":"ElementaryTypeName","src":"3376:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3321:78:38"},"src":"3296:104:38"},{"documentation":{"id":2983,"nodeType":"StructuredDocumentation","src":"3406:139:38","text":" @notice Thrown when attempting to get a stake claim that does not exist.\n @param claimId The id of the stake claim"},"errorSelector":"41cd26a4","id":2987,"name":"DataServiceFeesClaimNotFound","nameLocation":"3556:28:38","nodeType":"ErrorDefinition","parameters":{"id":2986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2985,"mutability":"mutable","name":"claimId","nameLocation":"3593:7:38","nodeType":"VariableDeclaration","scope":2987,"src":"3585:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2984,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3585:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3584:17:38"},"src":"3550:52:38"},{"documentation":{"id":2988,"nodeType":"StructuredDocumentation","src":"3608:83:38","text":" @notice Emitted when trying to lock zero tokens in a stake claim"},"errorSelector":"8f4c63d9","id":2990,"name":"DataServiceFeesZeroTokens","nameLocation":"3702:25:38","nodeType":"ErrorDefinition","parameters":{"id":2989,"nodeType":"ParameterList","parameters":[],"src":"3727:2:38"},"src":"3696:34:38"},{"documentation":{"id":2991,"nodeType":"StructuredDocumentation","src":"3736:519:38","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":2996,"implemented":false,"kind":"function","modifiers":[],"name":"releaseStake","nameLocation":"4269:12:38","nodeType":"FunctionDefinition","parameters":{"id":2994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2993,"mutability":"mutable","name":"numClaimsToRelease","nameLocation":"4290:18:38","nodeType":"VariableDeclaration","scope":2996,"src":"4282:26:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2992,"name":"uint256","nodeType":"ElementaryTypeName","src":"4282:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4281:28:38"},"returnParameters":{"id":2995,"nodeType":"ParameterList","parameters":[],"src":"4318:0:38"},"scope":2997,"src":"4260:59:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2998,"src":"1304:3017:38","usedErrors":[2987,2990],"usedEvents":[2814,2819,2826,2833,2843,2850,2962,2973,2982]}],"src":"45:4277:38"},"id":38},"contracts/data-service/IDataServicePausable.sol":{"ast":{"absolutePath":"contracts/data-service/IDataServicePausable.sol","exportedSymbols":{"IDataService":[2934],"IDataServicePausable":[3032]},"id":3033,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2999,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:39"},{"absolutePath":"contracts/data-service/IDataService.sol","file":"./IDataService.sol","id":3001,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3033,"sourceUnit":2935,"src":"174:50:39","symbolAliases":[{"foreign":{"id":3000,"name":"IDataService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2934,"src":"183:12:39","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3003,"name":"IDataService","nameLocations":["668:12:39"],"nodeType":"IdentifierPath","referencedDeclaration":2934,"src":"668:12:39"},"id":3004,"nodeType":"InheritanceSpecifier","src":"668:12:39"}],"canonicalName":"IDataServicePausable","contractDependencies":[],"contractKind":"interface","documentation":{"id":3002,"nodeType":"StructuredDocumentation","src":"226:407:39","text":" @title Interface for the {DataServicePausable} contract.\n @author Edge & Node\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 @custom:security-contact Please email security+contracts@thegraph.com if you find any\n bugs. We may have an active bug bounty program."},"fullyImplemented":false,"id":3032,"linearizedBaseContracts":[3032,2934],"name":"IDataServicePausable","nameLocation":"644:20:39","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3005,"nodeType":"StructuredDocumentation","src":"687:183:39","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":3011,"name":"PauseGuardianSet","nameLocation":"881:16:39","nodeType":"EventDefinition","parameters":{"id":3010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3007,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"914:7:39","nodeType":"VariableDeclaration","scope":3011,"src":"898:23:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3006,"name":"address","nodeType":"ElementaryTypeName","src":"898:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3009,"indexed":false,"mutability":"mutable","name":"allowed","nameLocation":"928:7:39","nodeType":"VariableDeclaration","scope":3011,"src":"923:12:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3008,"name":"bool","nodeType":"ElementaryTypeName","src":"923:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"897:39:39"},"src":"875:62:39"},{"documentation":{"id":3012,"nodeType":"StructuredDocumentation","src":"943:132:39","text":" @notice Emitted when a the caller is not a pause guardian\n @param account The address of the pause guardian"},"errorSelector":"72e3ef97","id":3016,"name":"DataServicePausableNotPauseGuardian","nameLocation":"1086:35:39","nodeType":"ErrorDefinition","parameters":{"id":3015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3014,"mutability":"mutable","name":"account","nameLocation":"1130:7:39","nodeType":"VariableDeclaration","scope":3016,"src":"1122:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3013,"name":"address","nodeType":"ElementaryTypeName","src":"1122:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1121:17:39"},"src":"1080:59:39"},{"documentation":{"id":3017,"nodeType":"StructuredDocumentation","src":"1145:209:39","text":" @notice Emitted when a pause guardian is set to the same allowed status\n @param account The address of the pause guardian\n @param allowed The allowed status of the pause guardian"},"errorSelector":"5e67e54b","id":3023,"name":"DataServicePausablePauseGuardianNoChange","nameLocation":"1365:40:39","nodeType":"ErrorDefinition","parameters":{"id":3022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3019,"mutability":"mutable","name":"account","nameLocation":"1414:7:39","nodeType":"VariableDeclaration","scope":3023,"src":"1406:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3018,"name":"address","nodeType":"ElementaryTypeName","src":"1406:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3021,"mutability":"mutable","name":"allowed","nameLocation":"1428:7:39","nodeType":"VariableDeclaration","scope":3023,"src":"1423:12:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3020,"name":"bool","nodeType":"ElementaryTypeName","src":"1423:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1405:31:39"},"src":"1359:78:39"},{"documentation":{"id":3024,"nodeType":"StructuredDocumentation","src":"1443:256:39","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":3027,"implemented":false,"kind":"function","modifiers":[],"name":"pause","nameLocation":"1713:5:39","nodeType":"FunctionDefinition","parameters":{"id":3025,"nodeType":"ParameterList","parameters":[],"src":"1718:2:39"},"returnParameters":{"id":3026,"nodeType":"ParameterList","parameters":[],"src":"1729:0:39"},"scope":3032,"src":"1704:26:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3028,"nodeType":"StructuredDocumentation","src":"1736:246:39","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":3031,"implemented":false,"kind":"function","modifiers":[],"name":"unpause","nameLocation":"1996:7:39","nodeType":"FunctionDefinition","parameters":{"id":3029,"nodeType":"ParameterList","parameters":[],"src":"2003:2:39"},"returnParameters":{"id":3030,"nodeType":"ParameterList","parameters":[],"src":"2014:0:39"},"scope":3032,"src":"1987:28:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3033,"src":"634:1383:39","usedErrors":[3016,3023],"usedEvents":[2814,2819,2826,2833,2843,2850,3011]}],"src":"45:1973:39"},"id":39},"contracts/data-service/IDataServiceRescuable.sol":{"ast":{"absolutePath":"contracts/data-service/IDataServiceRescuable.sol","exportedSymbols":{"IDataService":[2934],"IDataServiceRescuable":[3082]},"id":3083,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3034,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:40"},{"absolutePath":"contracts/data-service/IDataService.sol","file":"./IDataService.sol","id":3036,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3083,"sourceUnit":2935,"src":"174:50:40","symbolAliases":[{"foreign":{"id":3035,"name":"IDataService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2934,"src":"183:12:40","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3038,"name":"IDataService","nameLocations":["660:12:40"],"nodeType":"IdentifierPath","referencedDeclaration":2934,"src":"660:12:40"},"id":3039,"nodeType":"InheritanceSpecifier","src":"660:12:40"}],"canonicalName":"IDataServiceRescuable","contractDependencies":[],"contractKind":"interface","documentation":{"id":3037,"nodeType":"StructuredDocumentation","src":"226:398:40","text":" @title Interface for the {IDataServicePausable} contract.\n @author Edge & Node\n @notice Extension for the {IDataService} contract, adds the ability to rescue\n any ERC20 token or ETH from the contract, controlled by a rescuer privileged role.\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":false,"id":3082,"linearizedBaseContracts":[3082,2934],"name":"IDataServiceRescuable","nameLocation":"635:21:40","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3040,"nodeType":"StructuredDocumentation","src":"679:297:40","text":" @notice Emitted when tokens are rescued from the contract.\n @param from The address initiating the rescue\n @param to The address receiving the rescued tokens\n @param token The address of the token being rescued\n @param tokens The amount of tokens rescued"},"eventSelector":"fe9f3209ad63169cacd501429b3ca17fa51a44a9828be89c2ae50eb6846d2711","id":3050,"name":"TokensRescued","nameLocation":"987:13:40","nodeType":"EventDefinition","parameters":{"id":3049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3042,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1017:4:40","nodeType":"VariableDeclaration","scope":3050,"src":"1001:20:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3041,"name":"address","nodeType":"ElementaryTypeName","src":"1001:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3044,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"1039:2:40","nodeType":"VariableDeclaration","scope":3050,"src":"1023:18:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3043,"name":"address","nodeType":"ElementaryTypeName","src":"1023:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3046,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"1059:5:40","nodeType":"VariableDeclaration","scope":3050,"src":"1043:21:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3045,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3048,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1074:6:40","nodeType":"VariableDeclaration","scope":3050,"src":"1066:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3047,"name":"uint256","nodeType":"ElementaryTypeName","src":"1066:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1000:81:40"},"src":"981:101:40"},{"anonymous":false,"documentation":{"id":3051,"nodeType":"StructuredDocumentation","src":"1088:176:40","text":" @notice Emitted when a rescuer is set.\n @param account The address of the rescuer\n @param allowed Whether the rescuer is allowed to rescue tokens"},"eventSelector":"739cc8b38c9ed7a971f0e2bd7e03c2c4ab00500b9ba53ba6d9ecf6222f709fdb","id":3057,"name":"RescuerSet","nameLocation":"1275:10:40","nodeType":"EventDefinition","parameters":{"id":3056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3053,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1302:7:40","nodeType":"VariableDeclaration","scope":3057,"src":"1286:23:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3052,"name":"address","nodeType":"ElementaryTypeName","src":"1286:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3055,"indexed":false,"mutability":"mutable","name":"allowed","nameLocation":"1316:7:40","nodeType":"VariableDeclaration","scope":3057,"src":"1311:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3054,"name":"bool","nodeType":"ElementaryTypeName","src":"1311:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1285:39:40"},"src":"1269:56:40"},{"documentation":{"id":3058,"nodeType":"StructuredDocumentation","src":"1331:68:40","text":" @notice Thrown when trying to rescue zero tokens."},"errorSelector":"00c4a4dc","id":3060,"name":"DataServiceRescuableCannotRescueZero","nameLocation":"1410:36:40","nodeType":"ErrorDefinition","parameters":{"id":3059,"nodeType":"ParameterList","parameters":[],"src":"1446:2:40"},"src":"1404:45:40"},{"documentation":{"id":3061,"nodeType":"StructuredDocumentation","src":"1455:142:40","text":" @notice Thrown when the caller is not a rescuer.\n @param account The address of the account that attempted the rescue"},"errorSelector":"bab20434","id":3065,"name":"DataServiceRescuableNotRescuer","nameLocation":"1608:30:40","nodeType":"ErrorDefinition","parameters":{"id":3064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3063,"mutability":"mutable","name":"account","nameLocation":"1647:7:40","nodeType":"VariableDeclaration","scope":3065,"src":"1639:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3062,"name":"address","nodeType":"ElementaryTypeName","src":"1639:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1638:17:40"},"src":"1602:54:40"},{"documentation":{"id":3066,"nodeType":"StructuredDocumentation","src":"1662:357:40","text":" @notice Rescues GRT tokens from the contract.\n @dev Declared as virtual to allow disabling the function via override.\n Requirements:\n - Cannot rescue zero tokens.\n Emits a {TokensRescued} event.\n @param to Address of the tokens recipient.\n @param tokens Amount of tokens to rescue."},"functionSelector":"8723fce5","id":3073,"implemented":false,"kind":"function","modifiers":[],"name":"rescueGRT","nameLocation":"2033:9:40","nodeType":"FunctionDefinition","parameters":{"id":3071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3068,"mutability":"mutable","name":"to","nameLocation":"2051:2:40","nodeType":"VariableDeclaration","scope":3073,"src":"2043:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3067,"name":"address","nodeType":"ElementaryTypeName","src":"2043:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3070,"mutability":"mutable","name":"tokens","nameLocation":"2063:6:40","nodeType":"VariableDeclaration","scope":3073,"src":"2055:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3069,"name":"uint256","nodeType":"ElementaryTypeName","src":"2055:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2042:28:40"},"returnParameters":{"id":3072,"nodeType":"ParameterList","parameters":[],"src":"2079:0:40"},"scope":3082,"src":"2024:56:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3074,"nodeType":"StructuredDocumentation","src":"2086:350:40","text":" @notice Rescues ether from the contract.\n @dev Declared as virtual to allow disabling the function via override.\n Requirements:\n - Cannot rescue zeroether.\n Emits a {TokensRescued} event.\n @param to Address of the tokens recipient.\n @param tokens Amount of tokens to rescue."},"functionSelector":"099a04e5","id":3081,"implemented":false,"kind":"function","modifiers":[],"name":"rescueETH","nameLocation":"2450:9:40","nodeType":"FunctionDefinition","parameters":{"id":3079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3076,"mutability":"mutable","name":"to","nameLocation":"2476:2:40","nodeType":"VariableDeclaration","scope":3081,"src":"2460:18:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3075,"name":"address","nodeType":"ElementaryTypeName","src":"2460:15:40","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3078,"mutability":"mutable","name":"tokens","nameLocation":"2488:6:40","nodeType":"VariableDeclaration","scope":3081,"src":"2480:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3077,"name":"uint256","nodeType":"ElementaryTypeName","src":"2480:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2459:36:40"},"returnParameters":{"id":3080,"nodeType":"ParameterList","parameters":[],"src":"2504:0:40"},"scope":3082,"src":"2441:64:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3083,"src":"625:1882:40","usedErrors":[3060,3065],"usedEvents":[2814,2819,2826,2833,2843,2850,3050,3057]}],"src":"45:2463:40"},"id":40},"contracts/horizon/IAuthorizable.sol":{"ast":{"absolutePath":"contracts/horizon/IAuthorizable.sol","exportedSymbols":{"IAuthorizable":[3216]},"id":3217,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3084,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:41"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizable","contractDependencies":[],"contractKind":"interface","documentation":{"id":3085,"nodeType":"StructuredDocumentation","src":"212:341:41","text":" @title Interface for the {Authorizable} contract\n @author Edge & Node\n @notice Implements an authorization scheme that allows authorizers to\n authorize signers to sign on their behalf.\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":false,"id":3216,"linearizedBaseContracts":[3216],"name":"IAuthorizable","nameLocation":"564:13:41","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IAuthorizable.Authorization","documentation":{"id":3086,"nodeType":"StructuredDocumentation","src":"584:373:41","text":" @notice Details for an authorizer-signer pair\n @dev Authorizations can be removed only after a thawing period\n @param authorizer The address of the authorizer - resource owner\n @param thawEndTimestamp The timestamp at which the thawing period ends (zero if not thawing)\n @param revoked Whether the signer authorization was revoked"},"id":3093,"members":[{"constant":false,"id":3088,"mutability":"mutable","name":"authorizer","nameLocation":"1001:10:41","nodeType":"VariableDeclaration","scope":3093,"src":"993:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3087,"name":"address","nodeType":"ElementaryTypeName","src":"993:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3090,"mutability":"mutable","name":"thawEndTimestamp","nameLocation":"1029:16:41","nodeType":"VariableDeclaration","scope":3093,"src":"1021:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3089,"name":"uint256","nodeType":"ElementaryTypeName","src":"1021:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3092,"mutability":"mutable","name":"revoked","nameLocation":"1060:7:41","nodeType":"VariableDeclaration","scope":3093,"src":"1055:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3091,"name":"bool","nodeType":"ElementaryTypeName","src":"1055:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"Authorization","nameLocation":"969:13:41","nodeType":"StructDefinition","scope":3216,"src":"962:112:41","visibility":"public"},{"anonymous":false,"documentation":{"id":3094,"nodeType":"StructuredDocumentation","src":"1080:189:41","text":" @notice Emitted when a signer is authorized to sign for a authorizer\n @param authorizer The address of the authorizer\n @param signer The address of the signer"},"eventSelector":"6edcdd4150e63c6c36d965976c1c37375609c8b040c50d39e7156437b80e2828","id":3100,"name":"SignerAuthorized","nameLocation":"1280:16:41","nodeType":"EventDefinition","parameters":{"id":3099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3096,"indexed":true,"mutability":"mutable","name":"authorizer","nameLocation":"1313:10:41","nodeType":"VariableDeclaration","scope":3100,"src":"1297:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3095,"name":"address","nodeType":"ElementaryTypeName","src":"1297:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3098,"indexed":true,"mutability":"mutable","name":"signer","nameLocation":"1341:6:41","nodeType":"VariableDeclaration","scope":3100,"src":"1325:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3097,"name":"address","nodeType":"ElementaryTypeName","src":"1325:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1296:52:41"},"src":"1274:75:41"},{"anonymous":false,"documentation":{"id":3101,"nodeType":"StructuredDocumentation","src":"1355:285:41","text":" @notice Emitted when a signer is thawed to be de-authorized\n @param authorizer The address of the authorizer thawing the signer\n @param signer The address of the signer to thaw\n @param thawEndTimestamp The timestamp at which the thawing period ends"},"eventSelector":"d939049941f6a15381248e4ac0010f15efdf0f3221923711244c200b5ff2cddf","id":3109,"name":"SignerThawing","nameLocation":"1651:13:41","nodeType":"EventDefinition","parameters":{"id":3108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3103,"indexed":true,"mutability":"mutable","name":"authorizer","nameLocation":"1681:10:41","nodeType":"VariableDeclaration","scope":3109,"src":"1665:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3102,"name":"address","nodeType":"ElementaryTypeName","src":"1665:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3105,"indexed":true,"mutability":"mutable","name":"signer","nameLocation":"1709:6:41","nodeType":"VariableDeclaration","scope":3109,"src":"1693:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3104,"name":"address","nodeType":"ElementaryTypeName","src":"1693:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3107,"indexed":false,"mutability":"mutable","name":"thawEndTimestamp","nameLocation":"1725:16:41","nodeType":"VariableDeclaration","scope":3109,"src":"1717:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3106,"name":"uint256","nodeType":"ElementaryTypeName","src":"1717:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1664:78:41"},"src":"1645:98:41"},{"anonymous":false,"documentation":{"id":3110,"nodeType":"StructuredDocumentation","src":"1749:295:41","text":" @notice Emitted when the thawing of a signer is cancelled\n @param authorizer The address of the authorizer cancelling the thawing\n @param signer The address of the signer\n @param thawEndTimestamp The timestamp at which the thawing period was scheduled to end"},"eventSelector":"3b4432b11b66b46d9a7b190aa989c0ae85a5395b543540220596dd94dd405ceb","id":3118,"name":"SignerThawCanceled","nameLocation":"2055:18:41","nodeType":"EventDefinition","parameters":{"id":3117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3112,"indexed":true,"mutability":"mutable","name":"authorizer","nameLocation":"2090:10:41","nodeType":"VariableDeclaration","scope":3118,"src":"2074:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3111,"name":"address","nodeType":"ElementaryTypeName","src":"2074:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3114,"indexed":true,"mutability":"mutable","name":"signer","nameLocation":"2118:6:41","nodeType":"VariableDeclaration","scope":3118,"src":"2102:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3113,"name":"address","nodeType":"ElementaryTypeName","src":"2102:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3116,"indexed":false,"mutability":"mutable","name":"thawEndTimestamp","nameLocation":"2134:16:41","nodeType":"VariableDeclaration","scope":3118,"src":"2126:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3115,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2073:78:41"},"src":"2049:103:41"},{"anonymous":false,"documentation":{"id":3119,"nodeType":"StructuredDocumentation","src":"2158:201:41","text":" @notice Emitted when a signer has been revoked after thawing\n @param authorizer The address of the authorizer revoking the signer\n @param signer The address of the signer"},"eventSelector":"2fc91dbd92d741cae16e0315578d7f6cf77043b771692c4bd993658ecfe89422","id":3125,"name":"SignerRevoked","nameLocation":"2370:13:41","nodeType":"EventDefinition","parameters":{"id":3124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3121,"indexed":true,"mutability":"mutable","name":"authorizer","nameLocation":"2400:10:41","nodeType":"VariableDeclaration","scope":3125,"src":"2384:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3120,"name":"address","nodeType":"ElementaryTypeName","src":"2384:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3123,"indexed":true,"mutability":"mutable","name":"signer","nameLocation":"2428:6:41","nodeType":"VariableDeclaration","scope":3125,"src":"2412:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3122,"name":"address","nodeType":"ElementaryTypeName","src":"2412:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2383:52:41"},"src":"2364:72:41"},{"documentation":{"id":3126,"nodeType":"StructuredDocumentation","src":"2442:262:41","text":" @notice Thrown when attempting to authorize a signer that is already authorized\n @param authorizer The address of the authorizer\n @param signer The address of the signer\n @param revoked The revoked status of the authorization"},"errorSelector":"0c83a00f","id":3134,"name":"AuthorizableSignerAlreadyAuthorized","nameLocation":"2715:35:41","nodeType":"ErrorDefinition","parameters":{"id":3133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3128,"mutability":"mutable","name":"authorizer","nameLocation":"2759:10:41","nodeType":"VariableDeclaration","scope":3134,"src":"2751:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3127,"name":"address","nodeType":"ElementaryTypeName","src":"2751:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3130,"mutability":"mutable","name":"signer","nameLocation":"2779:6:41","nodeType":"VariableDeclaration","scope":3134,"src":"2771:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3129,"name":"address","nodeType":"ElementaryTypeName","src":"2771:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3132,"mutability":"mutable","name":"revoked","nameLocation":"2792:7:41","nodeType":"VariableDeclaration","scope":3134,"src":"2787:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3131,"name":"bool","nodeType":"ElementaryTypeName","src":"2787:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2750:50:41"},"src":"2709:92:41"},{"documentation":{"id":3135,"nodeType":"StructuredDocumentation","src":"2807:192:41","text":" @notice Thrown when the signer proof deadline is invalid\n @param proofDeadline The deadline for the proof provided\n @param currentTimestamp The current timestamp"},"errorSelector":"d7705a01","id":3141,"name":"AuthorizableInvalidSignerProofDeadline","nameLocation":"3010:38:41","nodeType":"ErrorDefinition","parameters":{"id":3140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3137,"mutability":"mutable","name":"proofDeadline","nameLocation":"3057:13:41","nodeType":"VariableDeclaration","scope":3141,"src":"3049:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3136,"name":"uint256","nodeType":"ElementaryTypeName","src":"3049:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3139,"mutability":"mutable","name":"currentTimestamp","nameLocation":"3080:16:41","nodeType":"VariableDeclaration","scope":3141,"src":"3072:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3138,"name":"uint256","nodeType":"ElementaryTypeName","src":"3072:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3048:49:41"},"src":"3004:94:41"},{"documentation":{"id":3142,"nodeType":"StructuredDocumentation","src":"3104:66:41","text":" @notice Thrown when the signer proof is invalid"},"errorSelector":"e03f6998","id":3144,"name":"AuthorizableInvalidSignerProof","nameLocation":"3181:30:41","nodeType":"ErrorDefinition","parameters":{"id":3143,"nodeType":"ParameterList","parameters":[],"src":"3211:2:41"},"src":"3175:39:41"},{"documentation":{"id":3145,"nodeType":"StructuredDocumentation","src":"3220:187:41","text":" @notice Thrown when the signer is not authorized by the authorizer\n @param authorizer The address of the authorizer\n @param signer The address of the signer"},"errorSelector":"1e58ab1f","id":3151,"name":"AuthorizableSignerNotAuthorized","nameLocation":"3418:31:41","nodeType":"ErrorDefinition","parameters":{"id":3150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3147,"mutability":"mutable","name":"authorizer","nameLocation":"3458:10:41","nodeType":"VariableDeclaration","scope":3151,"src":"3450:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3146,"name":"address","nodeType":"ElementaryTypeName","src":"3450:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3149,"mutability":"mutable","name":"signer","nameLocation":"3478:6:41","nodeType":"VariableDeclaration","scope":3151,"src":"3470:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3148,"name":"address","nodeType":"ElementaryTypeName","src":"3470:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3449:36:41"},"src":"3412:74:41"},{"documentation":{"id":3152,"nodeType":"StructuredDocumentation","src":"3492:111:41","text":" @notice Thrown when the signer is not thawing\n @param signer The address of the signer"},"errorSelector":"cd3cd55d","id":3156,"name":"AuthorizableSignerNotThawing","nameLocation":"3614:28:41","nodeType":"ErrorDefinition","parameters":{"id":3155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3154,"mutability":"mutable","name":"signer","nameLocation":"3651:6:41","nodeType":"VariableDeclaration","scope":3156,"src":"3643:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3153,"name":"address","nodeType":"ElementaryTypeName","src":"3643:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3642:16:41"},"src":"3608:51:41"},{"documentation":{"id":3157,"nodeType":"StructuredDocumentation","src":"3665:197:41","text":" @notice 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":"bd76307f","id":3163,"name":"AuthorizableSignerStillThawing","nameLocation":"3873:30:41","nodeType":"ErrorDefinition","parameters":{"id":3162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3159,"mutability":"mutable","name":"currentTimestamp","nameLocation":"3912:16:41","nodeType":"VariableDeclaration","scope":3163,"src":"3904:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3158,"name":"uint256","nodeType":"ElementaryTypeName","src":"3904:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3161,"mutability":"mutable","name":"thawEndTimestamp","nameLocation":"3938:16:41","nodeType":"VariableDeclaration","scope":3163,"src":"3930:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3160,"name":"uint256","nodeType":"ElementaryTypeName","src":"3930:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3903:52:41"},"src":"3867:89:41"},{"documentation":{"id":3164,"nodeType":"StructuredDocumentation","src":"3962:124:41","text":" @notice The period after which a signer can be revoked after thawing\n @return The period in seconds"},"functionSelector":"9b952881","id":3169,"implemented":false,"kind":"function","modifiers":[],"name":"REVOKE_AUTHORIZATION_THAWING_PERIOD","nameLocation":"4100:35:41","nodeType":"FunctionDefinition","parameters":{"id":3165,"nodeType":"ParameterList","parameters":[],"src":"4135:2:41"},"returnParameters":{"id":3168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3167,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3169,"src":"4161:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3166,"name":"uint256","nodeType":"ElementaryTypeName","src":"4161:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4160:9:41"},"scope":3216,"src":"4091:79:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3170,"nodeType":"StructuredDocumentation","src":"4176:662:41","text":" @notice Authorize a signer to sign on behalf of the authorizer\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 a {SignerAuthorized} event\n @param signer The address of the 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 authorizer\n consists of (chain id, verifying contract address, domain, proof deadline, authorizer address)"},"functionSelector":"fee9f01f","id":3179,"implemented":false,"kind":"function","modifiers":[],"name":"authorizeSigner","nameLocation":"4852:15:41","nodeType":"FunctionDefinition","parameters":{"id":3177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3172,"mutability":"mutable","name":"signer","nameLocation":"4876:6:41","nodeType":"VariableDeclaration","scope":3179,"src":"4868:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3171,"name":"address","nodeType":"ElementaryTypeName","src":"4868:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3174,"mutability":"mutable","name":"proofDeadline","nameLocation":"4892:13:41","nodeType":"VariableDeclaration","scope":3179,"src":"4884:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3173,"name":"uint256","nodeType":"ElementaryTypeName","src":"4884:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3176,"mutability":"mutable","name":"proof","nameLocation":"4922:5:41","nodeType":"VariableDeclaration","scope":3179,"src":"4907:20:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3175,"name":"bytes","nodeType":"ElementaryTypeName","src":"4907:5:41","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4867:61:41"},"returnParameters":{"id":3178,"nodeType":"ParameterList","parameters":[],"src":"4937:0:41"},"scope":3216,"src":"4843:95:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3180,"nodeType":"StructuredDocumentation","src":"4944:566:41","text":" @notice Starts thawing a signer to be de-authorized\n @dev Thawing a signer signals that signatures from that signer will soon be deemed invalid.\n Once a signer is thawed, they should be viewed as revoked regardless of their revocation status.\n If a signer is already thawing and this function is called, the thawing period is reset.\n Requirements:\n - `signer` must be authorized by the authorizer calling this function\n Emits a {SignerThawing} event\n @param signer The address of the signer to thaw"},"functionSelector":"1354f019","id":3185,"implemented":false,"kind":"function","modifiers":[],"name":"thawSigner","nameLocation":"5524:10:41","nodeType":"FunctionDefinition","parameters":{"id":3183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3182,"mutability":"mutable","name":"signer","nameLocation":"5543:6:41","nodeType":"VariableDeclaration","scope":3185,"src":"5535:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3181,"name":"address","nodeType":"ElementaryTypeName","src":"5535:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5534:16:41"},"returnParameters":{"id":3184,"nodeType":"ParameterList","parameters":[],"src":"5559:0:41"},"scope":3216,"src":"5515:45:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3186,"nodeType":"StructuredDocumentation","src":"5566:262:41","text":" @notice Stops thawing a signer.\n @dev Requirements:\n - `signer` must be thawing and authorized by the function caller\n Emits a {SignerThawCanceled} event\n @param signer The address of the signer to cancel thawing"},"functionSelector":"015cdd80","id":3191,"implemented":false,"kind":"function","modifiers":[],"name":"cancelThawSigner","nameLocation":"5842:16:41","nodeType":"FunctionDefinition","parameters":{"id":3189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3188,"mutability":"mutable","name":"signer","nameLocation":"5867:6:41","nodeType":"VariableDeclaration","scope":3191,"src":"5859:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3187,"name":"address","nodeType":"ElementaryTypeName","src":"5859:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5858:16:41"},"returnParameters":{"id":3190,"nodeType":"ParameterList","parameters":[],"src":"5883:0:41"},"scope":3216,"src":"5833:51:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3192,"nodeType":"StructuredDocumentation","src":"5890:242:41","text":" @notice Revokes a signer if thawed.\n @dev Requirements:\n - `signer` must be thawed and authorized by the function caller\n Emits a {SignerRevoked} event\n @param signer The address of the signer"},"functionSelector":"39aa7416","id":3197,"implemented":false,"kind":"function","modifiers":[],"name":"revokeAuthorizedSigner","nameLocation":"6146:22:41","nodeType":"FunctionDefinition","parameters":{"id":3195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3194,"mutability":"mutable","name":"signer","nameLocation":"6177:6:41","nodeType":"VariableDeclaration","scope":3197,"src":"6169:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3193,"name":"address","nodeType":"ElementaryTypeName","src":"6169:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6168:16:41"},"returnParameters":{"id":3196,"nodeType":"ParameterList","parameters":[],"src":"6193:0:41"},"scope":3216,"src":"6137:57:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3198,"nodeType":"StructuredDocumentation","src":"6200:251:41","text":" @notice Returns the timestamp at which the thawing period ends for a signer.\n Returns 0 if the signer is not thawing.\n @param signer The address of the signer\n @return The timestamp at which the thawing period ends"},"functionSelector":"bea5d2ab","id":3205,"implemented":false,"kind":"function","modifiers":[],"name":"getThawEnd","nameLocation":"6465:10:41","nodeType":"FunctionDefinition","parameters":{"id":3201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3200,"mutability":"mutable","name":"signer","nameLocation":"6484:6:41","nodeType":"VariableDeclaration","scope":3205,"src":"6476:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3199,"name":"address","nodeType":"ElementaryTypeName","src":"6476:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6475:16:41"},"returnParameters":{"id":3204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3203,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3205,"src":"6515:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3202,"name":"uint256","nodeType":"ElementaryTypeName","src":"6515:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6514:9:41"},"scope":3216,"src":"6456:68:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3206,"nodeType":"StructuredDocumentation","src":"6530:270:41","text":" @notice Returns true if the signer is authorized by the authorizer\n @param authorizer The address of the authorizer\n @param signer The address of the signer\n @return true if the signer is authorized by the authorizer, false otherwise"},"functionSelector":"65e4ad9e","id":3215,"implemented":false,"kind":"function","modifiers":[],"name":"isAuthorized","nameLocation":"6814:12:41","nodeType":"FunctionDefinition","parameters":{"id":3211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3208,"mutability":"mutable","name":"authorizer","nameLocation":"6835:10:41","nodeType":"VariableDeclaration","scope":3215,"src":"6827:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3207,"name":"address","nodeType":"ElementaryTypeName","src":"6827:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3210,"mutability":"mutable","name":"signer","nameLocation":"6855:6:41","nodeType":"VariableDeclaration","scope":3215,"src":"6847:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3209,"name":"address","nodeType":"ElementaryTypeName","src":"6847:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6826:36:41"},"returnParameters":{"id":3214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3213,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3215,"src":"6886:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3212,"name":"bool","nodeType":"ElementaryTypeName","src":"6886:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6885:6:41"},"scope":3216,"src":"6805:87:41","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3217,"src":"554:6340:41","usedErrors":[3134,3141,3144,3151,3156,3163],"usedEvents":[3100,3109,3118,3125]}],"src":"45:6850:41"},"id":41},"contracts/horizon/IGraphPayments.sol":{"ast":{"absolutePath":"contracts/horizon/IGraphPayments.sol","exportedSymbols":{"IGraphPayments":[3286]},"id":3287,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3218,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:42"},{"abstract":false,"baseContracts":[],"canonicalName":"IGraphPayments","contractDependencies":[],"contractKind":"interface","documentation":{"id":3219,"nodeType":"StructuredDocumentation","src":"71:427:42","text":" @title Interface for the {GraphPayments} contract\n @author Edge & Node\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 @custom:security-contact Please email security+contracts@thegraph.com if you find any\n bugs. We may have an active bug bounty program."},"fullyImplemented":false,"id":3286,"linearizedBaseContracts":[3286],"name":"IGraphPayments","nameLocation":"509:14:42","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IGraphPayments.PaymentTypes","documentation":{"id":3220,"nodeType":"StructuredDocumentation","src":"530:100:42","text":" @notice Types of payments that are supported by the payments protocol\n @dev"},"id":3224,"members":[{"id":3221,"name":"QueryFee","nameLocation":"663:8:42","nodeType":"EnumValue","src":"663:8:42"},{"id":3222,"name":"IndexingFee","nameLocation":"681:11:42","nodeType":"EnumValue","src":"681:11:42"},{"id":3223,"name":"IndexingRewards","nameLocation":"702:15:42","nodeType":"EnumValue","src":"702:15:42"}],"name":"PaymentTypes","nameLocation":"640:12:42","nodeType":"EnumDefinition","src":"635:88:42"},{"anonymous":false,"documentation":{"id":3225,"nodeType":"StructuredDocumentation","src":"729:715:42","text":" @notice Emitted when a payment is collected\n @param paymentType The type of payment as defined in {IGraphPayments}\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 tokens The total amount of tokens being collected\n @param tokensProtocol Amount of tokens charged as protocol tax\n @param tokensDataService Amount of tokens for the data service\n @param tokensDelegationPool Amount of tokens for delegators\n @param tokensReceiver Amount of tokens for the receiver\n @param receiverDestination The address where the receiver's payment cut is sent."},"eventSelector":"b1ac8b16683562f4b1b5ecbe3321151b400058de5cdd25ac44d5bfacb106765f","id":3248,"name":"GraphPaymentCollected","nameLocation":"1455:21:42","nodeType":"EventDefinition","parameters":{"id":3247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3228,"indexed":true,"mutability":"mutable","name":"paymentType","nameLocation":"1507:11:42","nodeType":"VariableDeclaration","scope":3248,"src":"1486:32:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":3227,"nodeType":"UserDefinedTypeName","pathNode":{"id":3226,"name":"PaymentTypes","nameLocations":["1486:12:42"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"1486:12:42"},"referencedDeclaration":3224,"src":"1486:12:42","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":3230,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"1544:5:42","nodeType":"VariableDeclaration","scope":3248,"src":"1528:21:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3229,"name":"address","nodeType":"ElementaryTypeName","src":"1528:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3232,"indexed":false,"mutability":"mutable","name":"receiver","nameLocation":"1567:8:42","nodeType":"VariableDeclaration","scope":3248,"src":"1559:16:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3231,"name":"address","nodeType":"ElementaryTypeName","src":"1559:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3234,"indexed":true,"mutability":"mutable","name":"dataService","nameLocation":"1601:11:42","nodeType":"VariableDeclaration","scope":3248,"src":"1585:27:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3233,"name":"address","nodeType":"ElementaryTypeName","src":"1585:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3236,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1630:6:42","nodeType":"VariableDeclaration","scope":3248,"src":"1622:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3235,"name":"uint256","nodeType":"ElementaryTypeName","src":"1622:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3238,"indexed":false,"mutability":"mutable","name":"tokensProtocol","nameLocation":"1654:14:42","nodeType":"VariableDeclaration","scope":3248,"src":"1646:22:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3237,"name":"uint256","nodeType":"ElementaryTypeName","src":"1646:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3240,"indexed":false,"mutability":"mutable","name":"tokensDataService","nameLocation":"1686:17:42","nodeType":"VariableDeclaration","scope":3248,"src":"1678:25:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3239,"name":"uint256","nodeType":"ElementaryTypeName","src":"1678:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3242,"indexed":false,"mutability":"mutable","name":"tokensDelegationPool","nameLocation":"1721:20:42","nodeType":"VariableDeclaration","scope":3248,"src":"1713:28:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3241,"name":"uint256","nodeType":"ElementaryTypeName","src":"1713:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3244,"indexed":false,"mutability":"mutable","name":"tokensReceiver","nameLocation":"1759:14:42","nodeType":"VariableDeclaration","scope":3248,"src":"1751:22:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3243,"name":"uint256","nodeType":"ElementaryTypeName","src":"1751:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3246,"indexed":false,"mutability":"mutable","name":"receiverDestination","nameLocation":"1791:19:42","nodeType":"VariableDeclaration","scope":3248,"src":"1783:27:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3245,"name":"address","nodeType":"ElementaryTypeName","src":"1783:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1476:340:42"},"src":"1449:368:42"},{"documentation":{"id":3249,"nodeType":"StructuredDocumentation","src":"1823:132:42","text":" @notice Thrown when the protocol payment cut is invalid\n @param protocolPaymentCut The protocol payment cut"},"errorSelector":"d3097bcb","id":3253,"name":"GraphPaymentsInvalidProtocolPaymentCut","nameLocation":"1966:38:42","nodeType":"ErrorDefinition","parameters":{"id":3252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3251,"mutability":"mutable","name":"protocolPaymentCut","nameLocation":"2013:18:42","nodeType":"VariableDeclaration","scope":3253,"src":"2005:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3250,"name":"uint256","nodeType":"ElementaryTypeName","src":"2005:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2004:28:42"},"src":"1960:73:42"},{"documentation":{"id":3254,"nodeType":"StructuredDocumentation","src":"2039:113:42","text":" @notice Thrown when trying to use a cut that is not expressed in PPM\n @param cut The cut"},"errorSelector":"e6dd8b94","id":3258,"name":"GraphPaymentsInvalidCut","nameLocation":"2163:23:42","nodeType":"ErrorDefinition","parameters":{"id":3257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3256,"mutability":"mutable","name":"cut","nameLocation":"2195:3:42","nodeType":"VariableDeclaration","scope":3258,"src":"2187:11:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3255,"name":"uint256","nodeType":"ElementaryTypeName","src":"2187:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2186:13:42"},"src":"2157:43:42"},{"documentation":{"id":3259,"nodeType":"StructuredDocumentation","src":"2206:106:42","text":" @notice Returns the protocol payment cut\n @return The protocol payment cut in PPM"},"functionSelector":"1d526e50","id":3264,"implemented":false,"kind":"function","modifiers":[],"name":"PROTOCOL_PAYMENT_CUT","nameLocation":"2326:20:42","nodeType":"FunctionDefinition","parameters":{"id":3260,"nodeType":"ParameterList","parameters":[],"src":"2346:2:42"},"returnParameters":{"id":3263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3262,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3264,"src":"2372:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3261,"name":"uint256","nodeType":"ElementaryTypeName","src":"2372:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2371:9:42"},"scope":3286,"src":"2317:64:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3265,"nodeType":"StructuredDocumentation","src":"2387:50:42","text":" @notice Initialize the contract"},"functionSelector":"8129fc1c","id":3268,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"2451:10:42","nodeType":"FunctionDefinition","parameters":{"id":3266,"nodeType":"ParameterList","parameters":[],"src":"2461:2:42"},"returnParameters":{"id":3267,"nodeType":"ParameterList","parameters":[],"src":"2472:0:42"},"scope":3286,"src":"2442:31:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3269,"nodeType":"StructuredDocumentation","src":"2479:848:42","text":" @notice Collects funds from a payer.\n It will pay cuts to all relevant parties and forward the rest to the receiver destination address. If the\n destination address is zero the funds are automatically staked to the receiver. Note that the receiver\n destination address can be set to the receiver address to collect funds on the receiver without re-staking.\n Note that the collected amount can be zero.\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 dataServiceCut The data service cut in PPM\n @param receiverDestination The address where the receiver's payment cut is sent."},"functionSelector":"81cd11a0","id":3285,"implemented":false,"kind":"function","modifiers":[],"name":"collect","nameLocation":"3341:7:42","nodeType":"FunctionDefinition","parameters":{"id":3283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3272,"mutability":"mutable","name":"paymentType","nameLocation":"3371:11:42","nodeType":"VariableDeclaration","scope":3285,"src":"3358:24:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":3271,"nodeType":"UserDefinedTypeName","pathNode":{"id":3270,"name":"PaymentTypes","nameLocations":["3358:12:42"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"3358:12:42"},"referencedDeclaration":3224,"src":"3358:12:42","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":3274,"mutability":"mutable","name":"receiver","nameLocation":"3400:8:42","nodeType":"VariableDeclaration","scope":3285,"src":"3392:16:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3273,"name":"address","nodeType":"ElementaryTypeName","src":"3392:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3276,"mutability":"mutable","name":"tokens","nameLocation":"3426:6:42","nodeType":"VariableDeclaration","scope":3285,"src":"3418:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3275,"name":"uint256","nodeType":"ElementaryTypeName","src":"3418:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3278,"mutability":"mutable","name":"dataService","nameLocation":"3450:11:42","nodeType":"VariableDeclaration","scope":3285,"src":"3442:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3277,"name":"address","nodeType":"ElementaryTypeName","src":"3442:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3280,"mutability":"mutable","name":"dataServiceCut","nameLocation":"3479:14:42","nodeType":"VariableDeclaration","scope":3285,"src":"3471:22:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3279,"name":"uint256","nodeType":"ElementaryTypeName","src":"3471:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3282,"mutability":"mutable","name":"receiverDestination","nameLocation":"3511:19:42","nodeType":"VariableDeclaration","scope":3285,"src":"3503:27:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3281,"name":"address","nodeType":"ElementaryTypeName","src":"3503:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3348:188:42"},"returnParameters":{"id":3284,"nodeType":"ParameterList","parameters":[],"src":"3545:0:42"},"scope":3286,"src":"3332:214:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3287,"src":"499:3049:42","usedErrors":[3253,3258],"usedEvents":[3248]}],"src":"45:3504:42"},"id":42},"contracts/horizon/IGraphTallyCollector.sol":{"ast":{"absolutePath":"contracts/horizon/IGraphTallyCollector.sol","exportedSymbols":{"IAuthorizable":[3216],"IGraphPayments":[3286],"IGraphTallyCollector":[3402],"IPaymentsCollector":[3455]},"id":3403,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3288,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:43"},{"absolutePath":"contracts/horizon/IPaymentsCollector.sol","file":"./IPaymentsCollector.sol","id":3290,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3403,"sourceUnit":3456,"src":"71:62:43","symbolAliases":[{"foreign":{"id":3289,"name":"IPaymentsCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3455,"src":"80:18:43","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/horizon/IGraphPayments.sol","file":"./IGraphPayments.sol","id":3292,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3403,"sourceUnit":3287,"src":"134:54:43","symbolAliases":[{"foreign":{"id":3291,"name":"IGraphPayments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"143:14:43","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/horizon/IAuthorizable.sol","file":"./IAuthorizable.sol","id":3294,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3403,"sourceUnit":3217,"src":"189:52:43","symbolAliases":[{"foreign":{"id":3293,"name":"IAuthorizable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3216,"src":"198:13:43","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3296,"name":"IPaymentsCollector","nameLocations":["758:18:43"],"nodeType":"IdentifierPath","referencedDeclaration":3455,"src":"758:18:43"},"id":3297,"nodeType":"InheritanceSpecifier","src":"758:18:43"},{"baseName":{"id":3298,"name":"IAuthorizable","nameLocations":["778:13:43"],"nodeType":"IdentifierPath","referencedDeclaration":3216,"src":"778:13:43"},"id":3299,"nodeType":"InheritanceSpecifier","src":"778:13:43"}],"canonicalName":"IGraphTallyCollector","contractDependencies":[],"contractKind":"interface","documentation":{"id":3295,"nodeType":"StructuredDocumentation","src":"243:480:43","text":" @title Interface for the {GraphTallyCollector} contract\n @author Edge & Node\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 GraphTally RAV (Receipt Aggregate Voucher).\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":false,"id":3402,"linearizedBaseContracts":[3402,3216,3455],"name":"IGraphTallyCollector","nameLocation":"734:20:43","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IGraphTallyCollector.ReceiptAggregateVoucher","documentation":{"id":3300,"nodeType":"StructuredDocumentation","src":"798:831:43","text":" @notice The Receipt Aggregate Voucher (RAV) struct\n @param collectionId The ID of the collection \"bucket\" the RAV belongs to. Note that multiple RAVs can be collected for the same collection id.\n @param payer The address of the payer the RAV was issued by\n @param serviceProvider The address of the service provider the RAV was issued to\n @param dataService The address of the data service the RAV was issued to\n @param timestampNs The RAV timestamp, indicating the latest GraphTally Receipt in the RAV\n @param valueAggregate The total amount owed to the service provider since the beginning of the payer-service provider relationship, including all debt that is already paid for.\n @param metadata Arbitrary metadata to extend functionality if a data service requires it"},"id":3315,"members":[{"constant":false,"id":3302,"mutability":"mutable","name":"collectionId","nameLocation":"1683:12:43","nodeType":"VariableDeclaration","scope":3315,"src":"1675:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3301,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1675:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3304,"mutability":"mutable","name":"payer","nameLocation":"1713:5:43","nodeType":"VariableDeclaration","scope":3315,"src":"1705:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3303,"name":"address","nodeType":"ElementaryTypeName","src":"1705:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3306,"mutability":"mutable","name":"serviceProvider","nameLocation":"1736:15:43","nodeType":"VariableDeclaration","scope":3315,"src":"1728:23:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3305,"name":"address","nodeType":"ElementaryTypeName","src":"1728:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3308,"mutability":"mutable","name":"dataService","nameLocation":"1769:11:43","nodeType":"VariableDeclaration","scope":3315,"src":"1761:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3307,"name":"address","nodeType":"ElementaryTypeName","src":"1761:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3310,"mutability":"mutable","name":"timestampNs","nameLocation":"1797:11:43","nodeType":"VariableDeclaration","scope":3315,"src":"1790:18:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":3309,"name":"uint64","nodeType":"ElementaryTypeName","src":"1790:6:43","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":3312,"mutability":"mutable","name":"valueAggregate","nameLocation":"1826:14:43","nodeType":"VariableDeclaration","scope":3315,"src":"1818:22:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":3311,"name":"uint128","nodeType":"ElementaryTypeName","src":"1818:7:43","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":3314,"mutability":"mutable","name":"metadata","nameLocation":"1856:8:43","nodeType":"VariableDeclaration","scope":3315,"src":"1850:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":3313,"name":"bytes","nodeType":"ElementaryTypeName","src":"1850:5:43","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"ReceiptAggregateVoucher","nameLocation":"1641:23:43","nodeType":"StructDefinition","scope":3402,"src":"1634:237:43","visibility":"public"},{"canonicalName":"IGraphTallyCollector.SignedRAV","documentation":{"id":3316,"nodeType":"StructuredDocumentation","src":"1877:191:43","text":" @notice A struct representing a signed RAV\n @param rav The RAV\n @param signature The signature of the RAV - 65 bytes: r (32 Bytes) || s (32 Bytes) || v (1 Byte)"},"id":3322,"members":[{"constant":false,"id":3319,"mutability":"mutable","name":"rav","nameLocation":"2124:3:43","nodeType":"VariableDeclaration","scope":3322,"src":"2100:27:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReceiptAggregateVoucher_$3315_storage_ptr","typeString":"struct IGraphTallyCollector.ReceiptAggregateVoucher"},"typeName":{"id":3318,"nodeType":"UserDefinedTypeName","pathNode":{"id":3317,"name":"ReceiptAggregateVoucher","nameLocations":["2100:23:43"],"nodeType":"IdentifierPath","referencedDeclaration":3315,"src":"2100:23:43"},"referencedDeclaration":3315,"src":"2100:23:43","typeDescriptions":{"typeIdentifier":"t_struct$_ReceiptAggregateVoucher_$3315_storage_ptr","typeString":"struct IGraphTallyCollector.ReceiptAggregateVoucher"}},"visibility":"internal"},{"constant":false,"id":3321,"mutability":"mutable","name":"signature","nameLocation":"2143:9:43","nodeType":"VariableDeclaration","scope":3322,"src":"2137:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":3320,"name":"bytes","nodeType":"ElementaryTypeName","src":"2137:5:43","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SignedRAV","nameLocation":"2080:9:43","nodeType":"StructDefinition","scope":3402,"src":"2073:86:43","visibility":"public"},{"anonymous":false,"documentation":{"id":3323,"nodeType":"StructuredDocumentation","src":"2165:525:43","text":" @notice Emitted when a RAV is collected\n @param collectionId The ID of the collection \"bucket\" the RAV belongs to.\n @param payer The address of the payer\n @param serviceProvider The address of the service provider\n @param dataService The address of the data service\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":"3943fc3b19ec289c87b57de7a8bf1448d81ced03d1806144ecaca4ba9e976056","id":3341,"name":"RAVCollected","nameLocation":"2701:12:43","nodeType":"EventDefinition","parameters":{"id":3340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3325,"indexed":true,"mutability":"mutable","name":"collectionId","nameLocation":"2739:12:43","nodeType":"VariableDeclaration","scope":3341,"src":"2723:28:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3324,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2723:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3327,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"2777:5:43","nodeType":"VariableDeclaration","scope":3341,"src":"2761:21:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3326,"name":"address","nodeType":"ElementaryTypeName","src":"2761:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3329,"indexed":false,"mutability":"mutable","name":"serviceProvider","nameLocation":"2800:15:43","nodeType":"VariableDeclaration","scope":3341,"src":"2792:23:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3328,"name":"address","nodeType":"ElementaryTypeName","src":"2792:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3331,"indexed":true,"mutability":"mutable","name":"dataService","nameLocation":"2841:11:43","nodeType":"VariableDeclaration","scope":3341,"src":"2825:27:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3330,"name":"address","nodeType":"ElementaryTypeName","src":"2825:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3333,"indexed":false,"mutability":"mutable","name":"timestampNs","nameLocation":"2869:11:43","nodeType":"VariableDeclaration","scope":3341,"src":"2862:18:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":3332,"name":"uint64","nodeType":"ElementaryTypeName","src":"2862:6:43","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":3335,"indexed":false,"mutability":"mutable","name":"valueAggregate","nameLocation":"2898:14:43","nodeType":"VariableDeclaration","scope":3341,"src":"2890:22:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":3334,"name":"uint128","nodeType":"ElementaryTypeName","src":"2890:7:43","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":3337,"indexed":false,"mutability":"mutable","name":"metadata","nameLocation":"2928:8:43","nodeType":"VariableDeclaration","scope":3341,"src":"2922:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3336,"name":"bytes","nodeType":"ElementaryTypeName","src":"2922:5:43","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3339,"indexed":false,"mutability":"mutable","name":"signature","nameLocation":"2952:9:43","nodeType":"VariableDeclaration","scope":3341,"src":"2946:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3338,"name":"bytes","nodeType":"ElementaryTypeName","src":"2946:5:43","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2713:254:43"},"src":"2695:273:43"},{"documentation":{"id":3342,"nodeType":"StructuredDocumentation","src":"2974:64:43","text":" @notice Thrown when the RAV signer is invalid"},"errorSelector":"aa415c33","id":3344,"name":"GraphTallyCollectorInvalidRAVSigner","nameLocation":"3049:35:43","nodeType":"ErrorDefinition","parameters":{"id":3343,"nodeType":"ParameterList","parameters":[],"src":"3084:2:43"},"src":"3043:44:43"},{"documentation":{"id":3345,"nodeType":"StructuredDocumentation","src":"3093:168:43","text":" @notice Thrown when the RAV is for a data service the service provider has no provision for\n @param dataService The address of the data service"},"errorSelector":"de8b47c0","id":3349,"name":"GraphTallyCollectorUnauthorizedDataService","nameLocation":"3272:42:43","nodeType":"ErrorDefinition","parameters":{"id":3348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3347,"mutability":"mutable","name":"dataService","nameLocation":"3323:11:43","nodeType":"VariableDeclaration","scope":3349,"src":"3315:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3346,"name":"address","nodeType":"ElementaryTypeName","src":"3315:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3314:21:43"},"src":"3266:70:43"},{"documentation":{"id":3350,"nodeType":"StructuredDocumentation","src":"3342:200:43","text":" @notice 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":"56cbc92e","id":3356,"name":"GraphTallyCollectorCallerNotDataService","nameLocation":"3553:39:43","nodeType":"ErrorDefinition","parameters":{"id":3355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3352,"mutability":"mutable","name":"caller","nameLocation":"3601:6:43","nodeType":"VariableDeclaration","scope":3356,"src":"3593:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3351,"name":"address","nodeType":"ElementaryTypeName","src":"3593:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3354,"mutability":"mutable","name":"dataService","nameLocation":"3617:11:43","nodeType":"VariableDeclaration","scope":3356,"src":"3609:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3353,"name":"address","nodeType":"ElementaryTypeName","src":"3609:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3592:37:43"},"src":"3547:83:43"},{"documentation":{"id":3357,"nodeType":"StructuredDocumentation","src":"3636:292:43","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":"7007d4a1","id":3363,"name":"GraphTallyCollectorInconsistentRAVTokens","nameLocation":"3939:40:43","nodeType":"ErrorDefinition","parameters":{"id":3362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3359,"mutability":"mutable","name":"tokens","nameLocation":"3988:6:43","nodeType":"VariableDeclaration","scope":3363,"src":"3980:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3358,"name":"uint256","nodeType":"ElementaryTypeName","src":"3980:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3361,"mutability":"mutable","name":"tokensCollected","nameLocation":"4004:15:43","nodeType":"VariableDeclaration","scope":3363,"src":"3996:23:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3360,"name":"uint256","nodeType":"ElementaryTypeName","src":"3996:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:41:43"},"src":"3933:88:43"},{"documentation":{"id":3364,"nodeType":"StructuredDocumentation","src":"4027:231:43","text":" @notice Thrown when the attempting to collect more tokens than what it's owed\n @param tokensToCollect The amount of tokens to collect\n @param maxTokensToCollect The maximum amount of tokens to collect"},"errorSelector":"c5602bb1","id":3370,"name":"GraphTallyCollectorInvalidTokensToCollectAmount","nameLocation":"4269:47:43","nodeType":"ErrorDefinition","parameters":{"id":3369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3366,"mutability":"mutable","name":"tokensToCollect","nameLocation":"4325:15:43","nodeType":"VariableDeclaration","scope":3370,"src":"4317:23:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3365,"name":"uint256","nodeType":"ElementaryTypeName","src":"4317:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3368,"mutability":"mutable","name":"maxTokensToCollect","nameLocation":"4350:18:43","nodeType":"VariableDeclaration","scope":3370,"src":"4342:26:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3367,"name":"uint256","nodeType":"ElementaryTypeName","src":"4342:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4316:53:43"},"src":"4263:107:43"},{"documentation":{"id":3371,"nodeType":"StructuredDocumentation","src":"4376:813:43","text":" @notice See {IPaymentsCollector.collect}\n This variant adds the ability to partially collect a RAV by specifying the amount of tokens to collect.\n Requirements:\n - The amount of tokens to collect must be less than or equal to the total amount of tokens in the RAV minus\n   the tokens already collected.\n @param paymentType The payment type to collect\n @param data Additional data required for the payment collection. Encoded as follows:\n - SignedRAV `signedRAV`: The signed RAV\n - uint256 `dataServiceCut`: The data service cut in PPM\n - address `receiverDestination`: The address where the receiver's payment should be sent.\n @param tokensToCollect The amount of tokens to collect\n @return The amount of tokens collected"},"functionSelector":"692209ce","id":3383,"implemented":false,"kind":"function","modifiers":[],"name":"collect","nameLocation":"5203:7:43","nodeType":"FunctionDefinition","parameters":{"id":3379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3374,"mutability":"mutable","name":"paymentType","nameLocation":"5248:11:43","nodeType":"VariableDeclaration","scope":3383,"src":"5220:39:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":3373,"nodeType":"UserDefinedTypeName","pathNode":{"id":3372,"name":"IGraphPayments.PaymentTypes","nameLocations":["5220:14:43","5235:12:43"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"5220:27:43"},"referencedDeclaration":3224,"src":"5220:27:43","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":3376,"mutability":"mutable","name":"data","nameLocation":"5284:4:43","nodeType":"VariableDeclaration","scope":3383,"src":"5269:19:43","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3375,"name":"bytes","nodeType":"ElementaryTypeName","src":"5269:5:43","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3378,"mutability":"mutable","name":"tokensToCollect","nameLocation":"5306:15:43","nodeType":"VariableDeclaration","scope":3383,"src":"5298:23:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3377,"name":"uint256","nodeType":"ElementaryTypeName","src":"5298:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5210:117:43"},"returnParameters":{"id":3382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3381,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3383,"src":"5346:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3380,"name":"uint256","nodeType":"ElementaryTypeName","src":"5346:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5345:9:43"},"scope":3402,"src":"5194:161:43","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3384,"nodeType":"StructuredDocumentation","src":"5361:215:43","text":" @notice 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":"63648817","id":3392,"implemented":false,"kind":"function","modifiers":[],"name":"recoverRAVSigner","nameLocation":"5590:16:43","nodeType":"FunctionDefinition","parameters":{"id":3388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3387,"mutability":"mutable","name":"signedRAV","nameLocation":"5626:9:43","nodeType":"VariableDeclaration","scope":3392,"src":"5607:28:43","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SignedRAV_$3322_calldata_ptr","typeString":"struct IGraphTallyCollector.SignedRAV"},"typeName":{"id":3386,"nodeType":"UserDefinedTypeName","pathNode":{"id":3385,"name":"SignedRAV","nameLocations":["5607:9:43"],"nodeType":"IdentifierPath","referencedDeclaration":3322,"src":"5607:9:43"},"referencedDeclaration":3322,"src":"5607:9:43","typeDescriptions":{"typeIdentifier":"t_struct$_SignedRAV_$3322_storage_ptr","typeString":"struct IGraphTallyCollector.SignedRAV"}},"visibility":"internal"}],"src":"5606:30:43"},"returnParameters":{"id":3391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3390,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3392,"src":"5660:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3389,"name":"address","nodeType":"ElementaryTypeName","src":"5660:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5659:9:43"},"scope":3402,"src":"5581:88:43","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3393,"nodeType":"StructuredDocumentation","src":"5675:173:43","text":" @notice 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":"26969c4c","id":3401,"implemented":false,"kind":"function","modifiers":[],"name":"encodeRAV","nameLocation":"5862:9:43","nodeType":"FunctionDefinition","parameters":{"id":3397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3396,"mutability":"mutable","name":"rav","nameLocation":"5905:3:43","nodeType":"VariableDeclaration","scope":3401,"src":"5872:36:43","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ReceiptAggregateVoucher_$3315_calldata_ptr","typeString":"struct IGraphTallyCollector.ReceiptAggregateVoucher"},"typeName":{"id":3395,"nodeType":"UserDefinedTypeName","pathNode":{"id":3394,"name":"ReceiptAggregateVoucher","nameLocations":["5872:23:43"],"nodeType":"IdentifierPath","referencedDeclaration":3315,"src":"5872:23:43"},"referencedDeclaration":3315,"src":"5872:23:43","typeDescriptions":{"typeIdentifier":"t_struct$_ReceiptAggregateVoucher_$3315_storage_ptr","typeString":"struct IGraphTallyCollector.ReceiptAggregateVoucher"}},"visibility":"internal"}],"src":"5871:38:43"},"returnParameters":{"id":3400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3399,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3401,"src":"5933:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3398,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5933:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5932:9:43"},"scope":3402,"src":"5853:89:43","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3403,"src":"724:5220:43","usedErrors":[3134,3141,3144,3151,3156,3163,3344,3349,3356,3363,3370],"usedEvents":[3100,3109,3118,3125,3341,3443]}],"src":"45:5900:43"},"id":43},"contracts/horizon/IHorizonStaking.sol":{"ast":{"absolutePath":"contracts/horizon/IHorizonStaking.sol","exportedSymbols":{"IHorizonStaking":[3422],"IHorizonStakingBase":[3855],"IHorizonStakingExtension":[4035],"IHorizonStakingMain":[4746],"IHorizonStakingTypes":[4882]},"id":3423,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3404,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:44"},{"absolutePath":"contracts/horizon/internal/IHorizonStakingTypes.sol","file":"./internal/IHorizonStakingTypes.sol","id":3406,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3423,"sourceUnit":4883,"src":"72:75:44","symbolAliases":[{"foreign":{"id":3405,"name":"IHorizonStakingTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"81:20:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/horizon/internal/IHorizonStakingMain.sol","file":"./internal/IHorizonStakingMain.sol","id":3408,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3423,"sourceUnit":4747,"src":"148:73:44","symbolAliases":[{"foreign":{"id":3407,"name":"IHorizonStakingMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4746,"src":"157:19:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/horizon/internal/IHorizonStakingBase.sol","file":"./internal/IHorizonStakingBase.sol","id":3410,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3423,"sourceUnit":3856,"src":"222:73:44","symbolAliases":[{"foreign":{"id":3409,"name":"IHorizonStakingBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3855,"src":"231:19:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/horizon/internal/IHorizonStakingExtension.sol","file":"./internal/IHorizonStakingExtension.sol","id":3412,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3423,"sourceUnit":4036,"src":"296:83:44","symbolAliases":[{"foreign":{"id":3411,"name":"IHorizonStakingExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4035,"src":"305:24:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3414,"name":"IHorizonStakingTypes","nameLocations":["912:20:44"],"nodeType":"IdentifierPath","referencedDeclaration":4882,"src":"912:20:44"},"id":3415,"nodeType":"InheritanceSpecifier","src":"912:20:44"},{"baseName":{"id":3416,"name":"IHorizonStakingBase","nameLocations":["934:19:44"],"nodeType":"IdentifierPath","referencedDeclaration":3855,"src":"934:19:44"},"id":3417,"nodeType":"InheritanceSpecifier","src":"934:19:44"},{"baseName":{"id":3418,"name":"IHorizonStakingMain","nameLocations":["955:19:44"],"nodeType":"IdentifierPath","referencedDeclaration":4746,"src":"955:19:44"},"id":3419,"nodeType":"InheritanceSpecifier","src":"955:19:44"},{"baseName":{"id":3420,"name":"IHorizonStakingExtension","nameLocations":["976:24:44"],"nodeType":"IdentifierPath","referencedDeclaration":4035,"src":"976:24:44"},"id":3421,"nodeType":"InheritanceSpecifier","src":"976:24:44"}],"canonicalName":"IHorizonStaking","contractDependencies":[],"contractKind":"interface","documentation":{"id":3413,"nodeType":"StructuredDocumentation","src":"381:501:44","text":" @title Complete interface for the Horizon Staking contract\n @author Edge & Node\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 @custom:security-contact Please email security+contracts@thegraph.com if you find any\n bugs. We may have an active bug bounty program."},"fullyImplemented":false,"id":3422,"linearizedBaseContracts":[3422,4035,1587,4746,3855,4882],"name":"IHorizonStaking","nameLocation":"893:15:44","nodeType":"ContractDefinition","nodes":[],"scope":3423,"src":"883:120:44","usedErrors":[3686,4309,4316,4323,4330,4339,4344,4349,4356,4359,4366,4373,4380,4383,4390,4397,4404,4411,4414,4417,4420,4423,4426,4431,4436,4439,4444,4447,4450],"usedEvents":[3683,3906,3931,3942,4051,4058,4071,4080,4089,4098,4109,4120,4131,4140,4149,4158,4169,4182,4195,4206,4215,4224,4236,4256,4272,4288,4293,4300,4303,4306]}],"src":"46:958:44"},"id":44},"contracts/horizon/IPaymentsCollector.sol":{"ast":{"absolutePath":"contracts/horizon/IPaymentsCollector.sol","exportedSymbols":{"IGraphPayments":[3286],"IPaymentsCollector":[3455]},"id":3456,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3424,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:45"},{"absolutePath":"contracts/horizon/IGraphPayments.sol","file":"./IGraphPayments.sol","id":3426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3456,"sourceUnit":3287,"src":"72:54:45","symbolAliases":[{"foreign":{"id":3425,"name":"IGraphPayments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"81:14:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPaymentsCollector","contractDependencies":[],"contractKind":"interface","documentation":{"id":3427,"nodeType":"StructuredDocumentation","src":"128:654:45","text":" @title Interface for a payments collector contract as defined by Graph Horizon payments protocol\n @author Edge & Node\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.\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":false,"id":3455,"linearizedBaseContracts":[3455],"name":"IPaymentsCollector","nameLocation":"793:18:45","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3428,"nodeType":"StructuredDocumentation","src":"818:487:45","text":" @notice Emitted when a payment is collected\n @param paymentType The payment type collected as defined by {IGraphPayments}\n @param collectionId The id for the collection. Can be used at the discretion of the collector to group multiple payments.\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 tokens The amount of tokens being collected"},"eventSelector":"481a17595c709e8f745444fb9ffc8f0b5e98458de94463971947f548e12bbdb4","id":3443,"name":"PaymentCollected","nameLocation":"1316:16:45","nodeType":"EventDefinition","parameters":{"id":3442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3431,"indexed":false,"mutability":"mutable","name":"paymentType","nameLocation":"1370:11:45","nodeType":"VariableDeclaration","scope":3443,"src":"1342:39:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":3430,"nodeType":"UserDefinedTypeName","pathNode":{"id":3429,"name":"IGraphPayments.PaymentTypes","nameLocations":["1342:14:45","1357:12:45"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"1342:27:45"},"referencedDeclaration":3224,"src":"1342:27:45","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":3433,"indexed":true,"mutability":"mutable","name":"collectionId","nameLocation":"1407:12:45","nodeType":"VariableDeclaration","scope":3443,"src":"1391:28:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3432,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1391:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3435,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"1445:5:45","nodeType":"VariableDeclaration","scope":3443,"src":"1429:21:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3434,"name":"address","nodeType":"ElementaryTypeName","src":"1429:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3437,"indexed":false,"mutability":"mutable","name":"receiver","nameLocation":"1468:8:45","nodeType":"VariableDeclaration","scope":3443,"src":"1460:16:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3436,"name":"address","nodeType":"ElementaryTypeName","src":"1460:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3439,"indexed":true,"mutability":"mutable","name":"dataService","nameLocation":"1502:11:45","nodeType":"VariableDeclaration","scope":3443,"src":"1486:27:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3438,"name":"address","nodeType":"ElementaryTypeName","src":"1486:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3441,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1531:6:45","nodeType":"VariableDeclaration","scope":3443,"src":"1523:14:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3440,"name":"uint256","nodeType":"ElementaryTypeName","src":"1523:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1332:211:45"},"src":"1310:234:45"},{"documentation":{"id":3444,"nodeType":"StructuredDocumentation","src":"1550:613:45","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 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.\n @return The amount of tokens collected"},"functionSelector":"7f07d283","id":3454,"implemented":false,"kind":"function","modifiers":[],"name":"collect","nameLocation":"2177:7:45","nodeType":"FunctionDefinition","parameters":{"id":3450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3447,"mutability":"mutable","name":"paymentType","nameLocation":"2213:11:45","nodeType":"VariableDeclaration","scope":3454,"src":"2185:39:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":3446,"nodeType":"UserDefinedTypeName","pathNode":{"id":3445,"name":"IGraphPayments.PaymentTypes","nameLocations":["2185:14:45","2200:12:45"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"2185:27:45"},"referencedDeclaration":3224,"src":"2185:27:45","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":3449,"mutability":"mutable","name":"data","nameLocation":"2239:4:45","nodeType":"VariableDeclaration","scope":3454,"src":"2226:17:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3448,"name":"bytes","nodeType":"ElementaryTypeName","src":"2226:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2184:60:45"},"returnParameters":{"id":3453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3452,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3454,"src":"2263:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3451,"name":"uint256","nodeType":"ElementaryTypeName","src":"2263:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2262:9:45"},"scope":3455,"src":"2168:104:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3456,"src":"783:1491:45","usedErrors":[],"usedEvents":[3443]}],"src":"46:2229:45"},"id":45},"contracts/horizon/IPaymentsEscrow.sol":{"ast":{"absolutePath":"contracts/horizon/IPaymentsEscrow.sol","exportedSymbols":{"IGraphPayments":[3286],"IPaymentsEscrow":[3667]},"id":3668,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3457,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:46"},{"absolutePath":"contracts/horizon/IGraphPayments.sol","file":"./IGraphPayments.sol","id":3459,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3668,"sourceUnit":3287,"src":"71:54:46","symbolAliases":[{"foreign":{"id":3458,"name":"IGraphPayments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"80:14:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPaymentsEscrow","contractDependencies":[],"contractKind":"interface","documentation":{"id":3460,"nodeType":"StructuredDocumentation","src":"127:794:46","text":" @title Interface for the {PaymentsEscrow} contract\n @author Edge & Node\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.\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":false,"id":3667,"linearizedBaseContracts":[3667],"name":"IPaymentsEscrow","nameLocation":"932:15:46","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IPaymentsEscrow.EscrowAccount","documentation":{"id":3461,"nodeType":"StructuredDocumentation","src":"954:331:46","text":" @notice Escrow account for a payer-collector-receiver tuple\n @param balance The total token balance for the payer-collector-receiver tuple\n @param tokensThawing The amount of tokens currently being thawed\n @param thawEndTimestamp The timestamp at which thawing period ends (zero if not thawing)"},"id":3468,"members":[{"constant":false,"id":3463,"mutability":"mutable","name":"balance","nameLocation":"1329:7:46","nodeType":"VariableDeclaration","scope":3468,"src":"1321:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3462,"name":"uint256","nodeType":"ElementaryTypeName","src":"1321:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3465,"mutability":"mutable","name":"tokensThawing","nameLocation":"1354:13:46","nodeType":"VariableDeclaration","scope":3468,"src":"1346:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3464,"name":"uint256","nodeType":"ElementaryTypeName","src":"1346:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3467,"mutability":"mutable","name":"thawEndTimestamp","nameLocation":"1385:16:46","nodeType":"VariableDeclaration","scope":3468,"src":"1377:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3466,"name":"uint256","nodeType":"ElementaryTypeName","src":"1377:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"EscrowAccount","nameLocation":"1297:13:46","nodeType":"StructDefinition","scope":3667,"src":"1290:118:46","visibility":"public"},{"anonymous":false,"documentation":{"id":3469,"nodeType":"StructuredDocumentation","src":"1414:316:46","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":3479,"name":"Deposit","nameLocation":"1741:7:46","nodeType":"EventDefinition","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3471,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"1765:5:46","nodeType":"VariableDeclaration","scope":3479,"src":"1749:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3470,"name":"address","nodeType":"ElementaryTypeName","src":"1749:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3473,"indexed":true,"mutability":"mutable","name":"collector","nameLocation":"1788:9:46","nodeType":"VariableDeclaration","scope":3479,"src":"1772:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3472,"name":"address","nodeType":"ElementaryTypeName","src":"1772:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3475,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"1815:8:46","nodeType":"VariableDeclaration","scope":3479,"src":"1799:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3474,"name":"address","nodeType":"ElementaryTypeName","src":"1799:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3477,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1833:6:46","nodeType":"VariableDeclaration","scope":3479,"src":"1825:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3476,"name":"uint256","nodeType":"ElementaryTypeName","src":"1825:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1748:92:46"},"src":"1735:106:46"},{"anonymous":false,"documentation":{"id":3480,"nodeType":"StructuredDocumentation","src":"1847:378:46","text":" @notice Emitted when a payer cancels an escrow thawing\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 tokensThawing The amount of tokens that were being thawed\n @param thawEndTimestamp The timestamp at which the thawing period was ending"},"eventSelector":"6c4ed34e7347a8682024ee40d393e45f4075c46c593aaaed3cc3e49dd6933535","id":3492,"name":"CancelThaw","nameLocation":"2236:10:46","nodeType":"EventDefinition","parameters":{"id":3491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3482,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"2272:5:46","nodeType":"VariableDeclaration","scope":3492,"src":"2256:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3481,"name":"address","nodeType":"ElementaryTypeName","src":"2256:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3484,"indexed":true,"mutability":"mutable","name":"collector","nameLocation":"2303:9:46","nodeType":"VariableDeclaration","scope":3492,"src":"2287:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3483,"name":"address","nodeType":"ElementaryTypeName","src":"2287:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3486,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"2338:8:46","nodeType":"VariableDeclaration","scope":3492,"src":"2322:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3485,"name":"address","nodeType":"ElementaryTypeName","src":"2322:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3488,"indexed":false,"mutability":"mutable","name":"tokensThawing","nameLocation":"2364:13:46","nodeType":"VariableDeclaration","scope":3492,"src":"2356:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3487,"name":"uint256","nodeType":"ElementaryTypeName","src":"2356:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3490,"indexed":false,"mutability":"mutable","name":"thawEndTimestamp","nameLocation":"2395:16:46","nodeType":"VariableDeclaration","scope":3492,"src":"2387:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3489,"name":"uint256","nodeType":"ElementaryTypeName","src":"2387:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2246:171:46"},"src":"2230:188:46"},{"anonymous":false,"documentation":{"id":3493,"nodeType":"StructuredDocumentation","src":"2424:394:46","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":3505,"name":"Thaw","nameLocation":"2829:4:46","nodeType":"EventDefinition","parameters":{"id":3504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3495,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"2859:5:46","nodeType":"VariableDeclaration","scope":3505,"src":"2843:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3494,"name":"address","nodeType":"ElementaryTypeName","src":"2843:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3497,"indexed":true,"mutability":"mutable","name":"collector","nameLocation":"2890:9:46","nodeType":"VariableDeclaration","scope":3505,"src":"2874:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3496,"name":"address","nodeType":"ElementaryTypeName","src":"2874:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3499,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"2925:8:46","nodeType":"VariableDeclaration","scope":3505,"src":"2909:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3498,"name":"address","nodeType":"ElementaryTypeName","src":"2909:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3501,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"2951:6:46","nodeType":"VariableDeclaration","scope":3505,"src":"2943:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3500,"name":"uint256","nodeType":"ElementaryTypeName","src":"2943:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3503,"indexed":false,"mutability":"mutable","name":"thawEndTimestamp","nameLocation":"2975:16:46","nodeType":"VariableDeclaration","scope":3505,"src":"2967:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3502,"name":"uint256","nodeType":"ElementaryTypeName","src":"2967:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2833:164:46"},"src":"2823:175:46"},{"anonymous":false,"documentation":{"id":3506,"nodeType":"StructuredDocumentation","src":"3004:317:46","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":3516,"name":"Withdraw","nameLocation":"3332:8:46","nodeType":"EventDefinition","parameters":{"id":3515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3508,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"3357:5:46","nodeType":"VariableDeclaration","scope":3516,"src":"3341:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3507,"name":"address","nodeType":"ElementaryTypeName","src":"3341:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3510,"indexed":true,"mutability":"mutable","name":"collector","nameLocation":"3380:9:46","nodeType":"VariableDeclaration","scope":3516,"src":"3364:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3509,"name":"address","nodeType":"ElementaryTypeName","src":"3364:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3512,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"3407:8:46","nodeType":"VariableDeclaration","scope":3516,"src":"3391:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3511,"name":"address","nodeType":"ElementaryTypeName","src":"3391:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3514,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"3425:6:46","nodeType":"VariableDeclaration","scope":3516,"src":"3417:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3513,"name":"uint256","nodeType":"ElementaryTypeName","src":"3417:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3340:92:46"},"src":"3326:107:46"},{"anonymous":false,"documentation":{"id":3517,"nodeType":"StructuredDocumentation","src":"3439:518:46","text":" @notice Emitted when a collector collects funds from the escrow for a payer-collector-receiver tuple\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 collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens collected\n @param receiverDestination The address where the receiver's payment should be sent."},"eventSelector":"399b99b484be516eace7ececa486139581a25b0d2d12dac8bfa0948d07a8c913","id":3532,"name":"EscrowCollected","nameLocation":"3968:15:46","nodeType":"EventDefinition","parameters":{"id":3531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3520,"indexed":true,"mutability":"mutable","name":"paymentType","nameLocation":"4029:11:46","nodeType":"VariableDeclaration","scope":3532,"src":"3993:47:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":3519,"nodeType":"UserDefinedTypeName","pathNode":{"id":3518,"name":"IGraphPayments.PaymentTypes","nameLocations":["3993:14:46","4008:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"3993:27:46"},"referencedDeclaration":3224,"src":"3993:27:46","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":3522,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"4066:5:46","nodeType":"VariableDeclaration","scope":3532,"src":"4050:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3521,"name":"address","nodeType":"ElementaryTypeName","src":"4050:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3524,"indexed":true,"mutability":"mutable","name":"collector","nameLocation":"4097:9:46","nodeType":"VariableDeclaration","scope":3532,"src":"4081:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3523,"name":"address","nodeType":"ElementaryTypeName","src":"4081:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3526,"indexed":false,"mutability":"mutable","name":"receiver","nameLocation":"4124:8:46","nodeType":"VariableDeclaration","scope":3532,"src":"4116:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3525,"name":"address","nodeType":"ElementaryTypeName","src":"4116:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3528,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"4150:6:46","nodeType":"VariableDeclaration","scope":3532,"src":"4142:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3527,"name":"uint256","nodeType":"ElementaryTypeName","src":"4142:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3530,"indexed":false,"mutability":"mutable","name":"receiverDestination","nameLocation":"4174:19:46","nodeType":"VariableDeclaration","scope":3532,"src":"4166:27:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3529,"name":"address","nodeType":"ElementaryTypeName","src":"4166:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3983:216:46"},"src":"3962:238:46"},{"documentation":{"id":3533,"nodeType":"StructuredDocumentation","src":"4227:97:46","text":" @notice Thrown when a protected function is called and the contract is paused."},"errorSelector":"9e68cf0b","id":3535,"name":"PaymentsEscrowIsPaused","nameLocation":"4335:22:46","nodeType":"ErrorDefinition","parameters":{"id":3534,"nodeType":"ParameterList","parameters":[],"src":"4357:2:46"},"src":"4329:31:46"},{"documentation":{"id":3536,"nodeType":"StructuredDocumentation","src":"4366:196:46","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":3542,"name":"PaymentsEscrowInsufficientBalance","nameLocation":"4573:33:46","nodeType":"ErrorDefinition","parameters":{"id":3541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3538,"mutability":"mutable","name":"balance","nameLocation":"4615:7:46","nodeType":"VariableDeclaration","scope":3542,"src":"4607:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3537,"name":"uint256","nodeType":"ElementaryTypeName","src":"4607:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3540,"mutability":"mutable","name":"minBalance","nameLocation":"4632:10:46","nodeType":"VariableDeclaration","scope":3542,"src":"4624:18:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3539,"name":"uint256","nodeType":"ElementaryTypeName","src":"4624:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4606:37:46"},"src":"4567:77:46"},{"documentation":{"id":3543,"nodeType":"StructuredDocumentation","src":"4650:92:46","text":" @notice Thrown when a thawing is expected to be in progress but it is not"},"errorSelector":"8cbd172f","id":3545,"name":"PaymentsEscrowNotThawing","nameLocation":"4753:24:46","nodeType":"ErrorDefinition","parameters":{"id":3544,"nodeType":"ParameterList","parameters":[],"src":"4777:2:46"},"src":"4747:33:46"},{"documentation":{"id":3546,"nodeType":"StructuredDocumentation","src":"4786:200:46","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":3552,"name":"PaymentsEscrowStillThawing","nameLocation":"4997:26:46","nodeType":"ErrorDefinition","parameters":{"id":3551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3548,"mutability":"mutable","name":"currentTimestamp","nameLocation":"5032:16:46","nodeType":"VariableDeclaration","scope":3552,"src":"5024:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3547,"name":"uint256","nodeType":"ElementaryTypeName","src":"5024:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3550,"mutability":"mutable","name":"thawEndTimestamp","nameLocation":"5058:16:46","nodeType":"VariableDeclaration","scope":3552,"src":"5050:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3549,"name":"uint256","nodeType":"ElementaryTypeName","src":"5050:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5023:52:46"},"src":"4991:85:46"},{"documentation":{"id":3553,"nodeType":"StructuredDocumentation","src":"5082:200:46","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":3559,"name":"PaymentsEscrowThawingPeriodTooLong","nameLocation":"5293:34:46","nodeType":"ErrorDefinition","parameters":{"id":3558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3555,"mutability":"mutable","name":"thawingPeriod","nameLocation":"5336:13:46","nodeType":"VariableDeclaration","scope":3559,"src":"5328:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3554,"name":"uint256","nodeType":"ElementaryTypeName","src":"5328:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3557,"mutability":"mutable","name":"maxWaitPeriod","nameLocation":"5359:13:46","nodeType":"VariableDeclaration","scope":3559,"src":"5351:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3556,"name":"uint256","nodeType":"ElementaryTypeName","src":"5351:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5327:46:46"},"src":"5287:87:46"},{"documentation":{"id":3560,"nodeType":"StructuredDocumentation","src":"5380:278:46","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":3568,"name":"PaymentsEscrowInconsistentCollection","nameLocation":"5669:36:46","nodeType":"ErrorDefinition","parameters":{"id":3567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3562,"mutability":"mutable","name":"balanceBefore","nameLocation":"5714:13:46","nodeType":"VariableDeclaration","scope":3568,"src":"5706:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3561,"name":"uint256","nodeType":"ElementaryTypeName","src":"5706:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3564,"mutability":"mutable","name":"balanceAfter","nameLocation":"5737:12:46","nodeType":"VariableDeclaration","scope":3568,"src":"5729:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3563,"name":"uint256","nodeType":"ElementaryTypeName","src":"5729:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3566,"mutability":"mutable","name":"tokens","nameLocation":"5759:6:46","nodeType":"VariableDeclaration","scope":3568,"src":"5751:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3565,"name":"uint256","nodeType":"ElementaryTypeName","src":"5751:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5705:61:46"},"src":"5663:104:46"},{"documentation":{"id":3569,"nodeType":"StructuredDocumentation","src":"5773:84:46","text":" @notice Thrown when operating a zero token amount is not allowed."},"errorSelector":"ebfc7cdc","id":3571,"name":"PaymentsEscrowInvalidZeroTokens","nameLocation":"5868:31:46","nodeType":"ErrorDefinition","parameters":{"id":3570,"nodeType":"ParameterList","parameters":[],"src":"5899:2:46"},"src":"5862:40:46"},{"documentation":{"id":3572,"nodeType":"StructuredDocumentation","src":"5908:134:46","text":" @notice The maximum thawing period for escrow funds withdrawal\n @return The maximum thawing period in seconds"},"functionSelector":"b2168b6b","id":3577,"implemented":false,"kind":"function","modifiers":[],"name":"MAX_WAIT_PERIOD","nameLocation":"6056:15:46","nodeType":"FunctionDefinition","parameters":{"id":3573,"nodeType":"ParameterList","parameters":[],"src":"6071:2:46"},"returnParameters":{"id":3576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3575,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3577,"src":"6097:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3574,"name":"uint256","nodeType":"ElementaryTypeName","src":"6097:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6096:9:46"},"scope":3667,"src":"6047:59:46","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3578,"nodeType":"StructuredDocumentation","src":"6112:118:46","text":" @notice The thawing period for escrow funds withdrawal\n @return The thawing period in seconds"},"functionSelector":"7b8ae6cf","id":3583,"implemented":false,"kind":"function","modifiers":[],"name":"WITHDRAW_ESCROW_THAWING_PERIOD","nameLocation":"6244:30:46","nodeType":"FunctionDefinition","parameters":{"id":3579,"nodeType":"ParameterList","parameters":[],"src":"6274:2:46"},"returnParameters":{"id":3582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3583,"src":"6300:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3580,"name":"uint256","nodeType":"ElementaryTypeName","src":"6300:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6299:9:46"},"scope":3667,"src":"6235:74:46","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3584,"nodeType":"StructuredDocumentation","src":"6315:50:46","text":" @notice Initialize the contract"},"functionSelector":"8129fc1c","id":3587,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"6379:10:46","nodeType":"FunctionDefinition","parameters":{"id":3585,"nodeType":"ParameterList","parameters":[],"src":"6389:2:46"},"returnParameters":{"id":3586,"nodeType":"ParameterList","parameters":[],"src":"6400:0:46"},"scope":3667,"src":"6370:31:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3588,"nodeType":"StructuredDocumentation","src":"6407:338:46","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":3597,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"6759:7:46","nodeType":"FunctionDefinition","parameters":{"id":3595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3590,"mutability":"mutable","name":"collector","nameLocation":"6775:9:46","nodeType":"VariableDeclaration","scope":3597,"src":"6767:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3589,"name":"address","nodeType":"ElementaryTypeName","src":"6767:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3592,"mutability":"mutable","name":"receiver","nameLocation":"6794:8:46","nodeType":"VariableDeclaration","scope":3597,"src":"6786:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3591,"name":"address","nodeType":"ElementaryTypeName","src":"6786:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3594,"mutability":"mutable","name":"tokens","nameLocation":"6812:6:46","nodeType":"VariableDeclaration","scope":3597,"src":"6804:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3593,"name":"uint256","nodeType":"ElementaryTypeName","src":"6804:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6766:53:46"},"returnParameters":{"id":3596,"nodeType":"ParameterList","parameters":[],"src":"6828:0:46"},"scope":3667,"src":"6750:79:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3598,"nodeType":"StructuredDocumentation","src":"6835:374:46","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":3609,"implemented":false,"kind":"function","modifiers":[],"name":"depositTo","nameLocation":"7223:9:46","nodeType":"FunctionDefinition","parameters":{"id":3607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3600,"mutability":"mutable","name":"payer","nameLocation":"7241:5:46","nodeType":"VariableDeclaration","scope":3609,"src":"7233:13:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3599,"name":"address","nodeType":"ElementaryTypeName","src":"7233:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3602,"mutability":"mutable","name":"collector","nameLocation":"7256:9:46","nodeType":"VariableDeclaration","scope":3609,"src":"7248:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3601,"name":"address","nodeType":"ElementaryTypeName","src":"7248:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3604,"mutability":"mutable","name":"receiver","nameLocation":"7275:8:46","nodeType":"VariableDeclaration","scope":3609,"src":"7267:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3603,"name":"address","nodeType":"ElementaryTypeName","src":"7267:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3606,"mutability":"mutable","name":"tokens","nameLocation":"7293:6:46","nodeType":"VariableDeclaration","scope":3609,"src":"7285:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3605,"name":"uint256","nodeType":"ElementaryTypeName","src":"7285:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7232:68:46"},"returnParameters":{"id":3608,"nodeType":"ParameterList","parameters":[],"src":"7309:0:46"},"scope":3667,"src":"7214:96:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3610,"nodeType":"StructuredDocumentation","src":"7316:575:46","text":" @notice Thaw a specific amount of escrow from a payer-collector-receiver's escrow account.\n The payer is the transaction caller.\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.\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":3619,"implemented":false,"kind":"function","modifiers":[],"name":"thaw","nameLocation":"7905:4:46","nodeType":"FunctionDefinition","parameters":{"id":3617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3612,"mutability":"mutable","name":"collector","nameLocation":"7918:9:46","nodeType":"VariableDeclaration","scope":3619,"src":"7910:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3611,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3614,"mutability":"mutable","name":"receiver","nameLocation":"7937:8:46","nodeType":"VariableDeclaration","scope":3619,"src":"7929:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3613,"name":"address","nodeType":"ElementaryTypeName","src":"7929:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3616,"mutability":"mutable","name":"tokens","nameLocation":"7955:6:46","nodeType":"VariableDeclaration","scope":3619,"src":"7947:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3615,"name":"uint256","nodeType":"ElementaryTypeName","src":"7947:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7909:53:46"},"returnParameters":{"id":3618,"nodeType":"ParameterList","parameters":[],"src":"7971:0:46"},"scope":3667,"src":"7896:76:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3620,"nodeType":"StructuredDocumentation","src":"7978:312:46","text":" @notice Cancels the thawing of escrow from a payer-collector-receiver's escrow account.\n @param collector The address of the collector\n @param receiver The address of the receiver\n @dev Requirements:\n - The payer must be thawing funds\n Emits a {CancelThaw} event."},"functionSelector":"b1d07de4","id":3627,"implemented":false,"kind":"function","modifiers":[],"name":"cancelThaw","nameLocation":"8304:10:46","nodeType":"FunctionDefinition","parameters":{"id":3625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3622,"mutability":"mutable","name":"collector","nameLocation":"8323:9:46","nodeType":"VariableDeclaration","scope":3627,"src":"8315:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3621,"name":"address","nodeType":"ElementaryTypeName","src":"8315:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3624,"mutability":"mutable","name":"receiver","nameLocation":"8342:8:46","nodeType":"VariableDeclaration","scope":3627,"src":"8334:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3623,"name":"address","nodeType":"ElementaryTypeName","src":"8334:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8314:37:46"},"returnParameters":{"id":3626,"nodeType":"ParameterList","parameters":[],"src":"8360:0:46"},"scope":3667,"src":"8295:66:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3628,"nodeType":"StructuredDocumentation","src":"8367:486:46","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":3635,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"8867:8:46","nodeType":"FunctionDefinition","parameters":{"id":3633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3630,"mutability":"mutable","name":"collector","nameLocation":"8884:9:46","nodeType":"VariableDeclaration","scope":3635,"src":"8876:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3629,"name":"address","nodeType":"ElementaryTypeName","src":"8876:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3632,"mutability":"mutable","name":"receiver","nameLocation":"8903:8:46","nodeType":"VariableDeclaration","scope":3635,"src":"8895:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3631,"name":"address","nodeType":"ElementaryTypeName","src":"8895:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8875:37:46"},"returnParameters":{"id":3634,"nodeType":"ParameterList","parameters":[],"src":"8921:0:46"},"scope":3667,"src":"8858:64:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3636,"nodeType":"StructuredDocumentation","src":"8928:811:46","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 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 dataServiceCut The data service cut in PPM that {GraphPayments} should send\n @param receiverDestination The address where the receiver's payment should be sent."},"functionSelector":"1230fa3e","id":3654,"implemented":false,"kind":"function","modifiers":[],"name":"collect","nameLocation":"9753:7:46","nodeType":"FunctionDefinition","parameters":{"id":3652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3639,"mutability":"mutable","name":"paymentType","nameLocation":"9798:11:46","nodeType":"VariableDeclaration","scope":3654,"src":"9770:39:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":3638,"nodeType":"UserDefinedTypeName","pathNode":{"id":3637,"name":"IGraphPayments.PaymentTypes","nameLocations":["9770:14:46","9785:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"9770:27:46"},"referencedDeclaration":3224,"src":"9770:27:46","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":3641,"mutability":"mutable","name":"payer","nameLocation":"9827:5:46","nodeType":"VariableDeclaration","scope":3654,"src":"9819:13:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3640,"name":"address","nodeType":"ElementaryTypeName","src":"9819:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3643,"mutability":"mutable","name":"receiver","nameLocation":"9850:8:46","nodeType":"VariableDeclaration","scope":3654,"src":"9842:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3642,"name":"address","nodeType":"ElementaryTypeName","src":"9842:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3645,"mutability":"mutable","name":"tokens","nameLocation":"9876:6:46","nodeType":"VariableDeclaration","scope":3654,"src":"9868:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3644,"name":"uint256","nodeType":"ElementaryTypeName","src":"9868:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3647,"mutability":"mutable","name":"dataService","nameLocation":"9900:11:46","nodeType":"VariableDeclaration","scope":3654,"src":"9892:19:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3646,"name":"address","nodeType":"ElementaryTypeName","src":"9892:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3649,"mutability":"mutable","name":"dataServiceCut","nameLocation":"9929:14:46","nodeType":"VariableDeclaration","scope":3654,"src":"9921:22:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3648,"name":"uint256","nodeType":"ElementaryTypeName","src":"9921:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3651,"mutability":"mutable","name":"receiverDestination","nameLocation":"9961:19:46","nodeType":"VariableDeclaration","scope":3654,"src":"9953:27:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3650,"name":"address","nodeType":"ElementaryTypeName","src":"9953:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9760:226:46"},"returnParameters":{"id":3653,"nodeType":"ParameterList","parameters":[],"src":"9995:0:46"},"scope":3667,"src":"9744:252:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3655,"nodeType":"StructuredDocumentation","src":"10002:397:46","text":" @notice Get the balance of a payer-collector-receiver tuple\n This function will return 0 if the current balance is less than the amount of funds being thawed.\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 @return The balance of the payer-collector-receiver tuple"},"functionSelector":"d6bd603c","id":3666,"implemented":false,"kind":"function","modifiers":[],"name":"getBalance","nameLocation":"10413:10:46","nodeType":"FunctionDefinition","parameters":{"id":3662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3657,"mutability":"mutable","name":"payer","nameLocation":"10432:5:46","nodeType":"VariableDeclaration","scope":3666,"src":"10424:13:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3656,"name":"address","nodeType":"ElementaryTypeName","src":"10424:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3659,"mutability":"mutable","name":"collector","nameLocation":"10447:9:46","nodeType":"VariableDeclaration","scope":3666,"src":"10439:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3658,"name":"address","nodeType":"ElementaryTypeName","src":"10439:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3661,"mutability":"mutable","name":"receiver","nameLocation":"10466:8:46","nodeType":"VariableDeclaration","scope":3666,"src":"10458:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3660,"name":"address","nodeType":"ElementaryTypeName","src":"10458:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10423:52:46"},"returnParameters":{"id":3665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3664,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3666,"src":"10499:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3663,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10498:9:46"},"scope":3667,"src":"10404:104:46","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3668,"src":"922:9588:46","usedErrors":[3535,3542,3545,3552,3559,3568,3571],"usedEvents":[3479,3492,3505,3516,3532]}],"src":"45:10466:46"},"id":46},"contracts/horizon/internal/IHorizonStakingBase.sol":{"ast":{"absolutePath":"contracts/horizon/internal/IHorizonStakingBase.sol","exportedSymbols":{"IGraphPayments":[3286],"IHorizonStakingBase":[3855],"IHorizonStakingTypes":[4882],"ILinkedList":[4908]},"id":3856,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3669,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:47"},{"absolutePath":"contracts/horizon/internal/IHorizonStakingTypes.sol","file":"./IHorizonStakingTypes.sol","id":3671,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3856,"sourceUnit":4883,"src":"175:66:47","symbolAliases":[{"foreign":{"id":3670,"name":"IHorizonStakingTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"184:20:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/horizon/IGraphPayments.sol","file":"../IGraphPayments.sol","id":3673,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3856,"sourceUnit":3287,"src":"242:55:47","symbolAliases":[{"foreign":{"id":3672,"name":"IGraphPayments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"251:14:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/horizon/internal/ILinkedList.sol","file":"./ILinkedList.sol","id":3675,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3856,"sourceUnit":4909,"src":"299:48:47","symbolAliases":[{"foreign":{"id":3674,"name":"ILinkedList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4908,"src":"308:11:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHorizonStakingBase","contractDependencies":[],"contractKind":"interface","documentation":{"id":3676,"nodeType":"StructuredDocumentation","src":"349:487:47","text":" @title Interface for the {HorizonStakingBase} contract.\n @author Edge & Node\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 @custom:security-contact Please email security+contracts@thegraph.com if you find any\n bugs. We may have an active bug bounty program."},"fullyImplemented":false,"id":3855,"linearizedBaseContracts":[3855],"name":"IHorizonStakingBase","nameLocation":"847:19:47","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3677,"nodeType":"StructuredDocumentation","src":"873:421:47","text":" @notice Emitted when a service provider stakes tokens.\n @dev TRANSITION PERIOD: 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":"48c384dd8bdf1e06d8afecd810c4acfc3d553ac5d879dec5a69875dbbd90e14b","id":3683,"name":"HorizonStakeDeposited","nameLocation":"1305:21:47","nodeType":"EventDefinition","parameters":{"id":3682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3679,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"1343:15:47","nodeType":"VariableDeclaration","scope":3683,"src":"1327:31:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3678,"name":"address","nodeType":"ElementaryTypeName","src":"1327:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3681,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1368:6:47","nodeType":"VariableDeclaration","scope":3683,"src":"1360:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3680,"name":"uint256","nodeType":"ElementaryTypeName","src":"1360:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1326:49:47"},"src":"1299:77:47"},{"documentation":{"id":3684,"nodeType":"StructuredDocumentation","src":"1382:74:47","text":" @notice Thrown when using an invalid thaw request type."},"errorSelector":"d7a3f74e","id":3686,"name":"HorizonStakingInvalidThawRequestType","nameLocation":"1467:36:47","nodeType":"ErrorDefinition","parameters":{"id":3685,"nodeType":"ParameterList","parameters":[],"src":"1503:2:47"},"src":"1461:45:47"},{"documentation":{"id":3687,"nodeType":"StructuredDocumentation","src":"1512:178:47","text":" @notice Gets the details of a service provider.\n @param serviceProvider The address of the service provider.\n @return The service provider details."},"functionSelector":"8cc01c86","id":3695,"implemented":false,"kind":"function","modifiers":[],"name":"getServiceProvider","nameLocation":"1704:18:47","nodeType":"FunctionDefinition","parameters":{"id":3690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3689,"mutability":"mutable","name":"serviceProvider","nameLocation":"1740:15:47","nodeType":"VariableDeclaration","scope":3695,"src":"1732:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3688,"name":"address","nodeType":"ElementaryTypeName","src":"1732:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1722:39:47"},"returnParameters":{"id":3694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3695,"src":"1785:43:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ServiceProvider_$4777_memory_ptr","typeString":"struct IHorizonStakingTypes.ServiceProvider"},"typeName":{"id":3692,"nodeType":"UserDefinedTypeName","pathNode":{"id":3691,"name":"IHorizonStakingTypes.ServiceProvider","nameLocations":["1785:20:47","1806:15:47"],"nodeType":"IdentifierPath","referencedDeclaration":4777,"src":"1785:36:47"},"referencedDeclaration":4777,"src":"1785:36:47","typeDescriptions":{"typeIdentifier":"t_struct$_ServiceProvider_$4777_storage_ptr","typeString":"struct IHorizonStakingTypes.ServiceProvider"}},"visibility":"internal"}],"src":"1784:45:47"},"scope":3855,"src":"1695:135:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3696,"nodeType":"StructuredDocumentation","src":"1836:175:47","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":3703,"implemented":false,"kind":"function","modifiers":[],"name":"getStake","nameLocation":"2025:8:47","nodeType":"FunctionDefinition","parameters":{"id":3699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3698,"mutability":"mutable","name":"serviceProvider","nameLocation":"2042:15:47","nodeType":"VariableDeclaration","scope":3703,"src":"2034:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3697,"name":"address","nodeType":"ElementaryTypeName","src":"2034:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2033:25:47"},"returnParameters":{"id":3702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3701,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3703,"src":"2082:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3700,"name":"uint256","nodeType":"ElementaryTypeName","src":"2082:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2081:9:47"},"scope":3855,"src":"2016:75:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3704,"nodeType":"StructuredDocumentation","src":"2097:311:47","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":3711,"implemented":false,"kind":"function","modifiers":[],"name":"getIdleStake","nameLocation":"2422:12:47","nodeType":"FunctionDefinition","parameters":{"id":3707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3706,"mutability":"mutable","name":"serviceProvider","nameLocation":"2443:15:47","nodeType":"VariableDeclaration","scope":3711,"src":"2435:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3705,"name":"address","nodeType":"ElementaryTypeName","src":"2435:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2434:25:47"},"returnParameters":{"id":3710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3709,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3711,"src":"2483:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3708,"name":"uint256","nodeType":"ElementaryTypeName","src":"2483:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2482:9:47"},"scope":3855,"src":"2413:79:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3712,"nodeType":"StructuredDocumentation","src":"2498:226:47","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":3722,"implemented":false,"kind":"function","modifiers":[],"name":"getDelegationPool","nameLocation":"2738:17:47","nodeType":"FunctionDefinition","parameters":{"id":3717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3714,"mutability":"mutable","name":"serviceProvider","nameLocation":"2773:15:47","nodeType":"VariableDeclaration","scope":3722,"src":"2765:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3713,"name":"address","nodeType":"ElementaryTypeName","src":"2765:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3716,"mutability":"mutable","name":"verifier","nameLocation":"2806:8:47","nodeType":"VariableDeclaration","scope":3722,"src":"2798:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3715,"name":"address","nodeType":"ElementaryTypeName","src":"2798:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2755:65:47"},"returnParameters":{"id":3721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3720,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3722,"src":"2844:42:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_DelegationPool_$4801_memory_ptr","typeString":"struct IHorizonStakingTypes.DelegationPool"},"typeName":{"id":3719,"nodeType":"UserDefinedTypeName","pathNode":{"id":3718,"name":"IHorizonStakingTypes.DelegationPool","nameLocations":["2844:20:47","2865:14:47"],"nodeType":"IdentifierPath","referencedDeclaration":4801,"src":"2844:35:47"},"referencedDeclaration":4801,"src":"2844:35:47","typeDescriptions":{"typeIdentifier":"t_struct$_DelegationPool_$4801_storage_ptr","typeString":"struct IHorizonStakingTypes.DelegationPool"}},"visibility":"internal"}],"src":"2843:44:47"},"scope":3855,"src":"2729:159:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3723,"nodeType":"StructuredDocumentation","src":"2894:272:47","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":3735,"implemented":false,"kind":"function","modifiers":[],"name":"getDelegation","nameLocation":"3180:13:47","nodeType":"FunctionDefinition","parameters":{"id":3730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3725,"mutability":"mutable","name":"serviceProvider","nameLocation":"3211:15:47","nodeType":"VariableDeclaration","scope":3735,"src":"3203:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3724,"name":"address","nodeType":"ElementaryTypeName","src":"3203:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3727,"mutability":"mutable","name":"verifier","nameLocation":"3244:8:47","nodeType":"VariableDeclaration","scope":3735,"src":"3236:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3726,"name":"address","nodeType":"ElementaryTypeName","src":"3236:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3729,"mutability":"mutable","name":"delegator","nameLocation":"3270:9:47","nodeType":"VariableDeclaration","scope":3735,"src":"3262:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3728,"name":"address","nodeType":"ElementaryTypeName","src":"3262:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3193:92:47"},"returnParameters":{"id":3734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3733,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3735,"src":"3309:38:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Delegation_$4830_memory_ptr","typeString":"struct IHorizonStakingTypes.Delegation"},"typeName":{"id":3732,"nodeType":"UserDefinedTypeName","pathNode":{"id":3731,"name":"IHorizonStakingTypes.Delegation","nameLocations":["3309:20:47","3330:10:47"],"nodeType":"IdentifierPath","referencedDeclaration":4830,"src":"3309:31:47"},"referencedDeclaration":4830,"src":"3309:31:47","typeDescriptions":{"typeIdentifier":"t_struct$_Delegation_$4830_storage_ptr","typeString":"struct IHorizonStakingTypes.Delegation"}},"visibility":"internal"}],"src":"3308:40:47"},"scope":3855,"src":"3171:178:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3736,"nodeType":"StructuredDocumentation","src":"3355:327:47","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":3748,"implemented":false,"kind":"function","modifiers":[],"name":"getDelegationFeeCut","nameLocation":"3696:19:47","nodeType":"FunctionDefinition","parameters":{"id":3744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3738,"mutability":"mutable","name":"serviceProvider","nameLocation":"3733:15:47","nodeType":"VariableDeclaration","scope":3748,"src":"3725:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3737,"name":"address","nodeType":"ElementaryTypeName","src":"3725:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3740,"mutability":"mutable","name":"verifier","nameLocation":"3766:8:47","nodeType":"VariableDeclaration","scope":3748,"src":"3758:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3739,"name":"address","nodeType":"ElementaryTypeName","src":"3758:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3743,"mutability":"mutable","name":"paymentType","nameLocation":"3812:11:47","nodeType":"VariableDeclaration","scope":3748,"src":"3784:39:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":3742,"nodeType":"UserDefinedTypeName","pathNode":{"id":3741,"name":"IGraphPayments.PaymentTypes","nameLocations":["3784:14:47","3799:12:47"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"3784:27:47"},"referencedDeclaration":3224,"src":"3784:27:47","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"}],"src":"3715:114:47"},"returnParameters":{"id":3747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3746,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3748,"src":"3853:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3745,"name":"uint256","nodeType":"ElementaryTypeName","src":"3853:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3852:9:47"},"scope":3855,"src":"3687:175:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3749,"nodeType":"StructuredDocumentation","src":"3868:216:47","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":3759,"implemented":false,"kind":"function","modifiers":[],"name":"getProvision","nameLocation":"4098:12:47","nodeType":"FunctionDefinition","parameters":{"id":3754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3751,"mutability":"mutable","name":"serviceProvider","nameLocation":"4128:15:47","nodeType":"VariableDeclaration","scope":3759,"src":"4120:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3750,"name":"address","nodeType":"ElementaryTypeName","src":"4120:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3753,"mutability":"mutable","name":"verifier","nameLocation":"4161:8:47","nodeType":"VariableDeclaration","scope":3759,"src":"4153:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3752,"name":"address","nodeType":"ElementaryTypeName","src":"4153:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4110:65:47"},"returnParameters":{"id":3758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3759,"src":"4199:37:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Provision_$4771_memory_ptr","typeString":"struct IHorizonStakingTypes.Provision"},"typeName":{"id":3756,"nodeType":"UserDefinedTypeName","pathNode":{"id":3755,"name":"IHorizonStakingTypes.Provision","nameLocations":["4199:20:47","4220:9:47"],"nodeType":"IdentifierPath","referencedDeclaration":4771,"src":"4199:30:47"},"referencedDeclaration":4771,"src":"4199:30:47","typeDescriptions":{"typeIdentifier":"t_struct$_Provision_$4771_storage_ptr","typeString":"struct IHorizonStakingTypes.Provision"}},"visibility":"internal"}],"src":"4198:39:47"},"scope":3855,"src":"4089:149:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3760,"nodeType":"StructuredDocumentation","src":"4244:559:47","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":3771,"implemented":false,"kind":"function","modifiers":[],"name":"getTokensAvailable","nameLocation":"4817:18:47","nodeType":"FunctionDefinition","parameters":{"id":3767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3762,"mutability":"mutable","name":"serviceProvider","nameLocation":"4853:15:47","nodeType":"VariableDeclaration","scope":3771,"src":"4845:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3761,"name":"address","nodeType":"ElementaryTypeName","src":"4845:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3764,"mutability":"mutable","name":"verifier","nameLocation":"4886:8:47","nodeType":"VariableDeclaration","scope":3771,"src":"4878:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3763,"name":"address","nodeType":"ElementaryTypeName","src":"4878:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3766,"mutability":"mutable","name":"delegationRatio","nameLocation":"4911:15:47","nodeType":"VariableDeclaration","scope":3771,"src":"4904:22:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3765,"name":"uint32","nodeType":"ElementaryTypeName","src":"4904:6:47","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4835:97:47"},"returnParameters":{"id":3770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3769,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3771,"src":"4956:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3768,"name":"uint256","nodeType":"ElementaryTypeName","src":"4956:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4955:9:47"},"scope":3855,"src":"4808:157:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3772,"nodeType":"StructuredDocumentation","src":"4971:326:47","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":3781,"implemented":false,"kind":"function","modifiers":[],"name":"getProviderTokensAvailable","nameLocation":"5311:26:47","nodeType":"FunctionDefinition","parameters":{"id":3777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3774,"mutability":"mutable","name":"serviceProvider","nameLocation":"5346:15:47","nodeType":"VariableDeclaration","scope":3781,"src":"5338:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3773,"name":"address","nodeType":"ElementaryTypeName","src":"5338:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3776,"mutability":"mutable","name":"verifier","nameLocation":"5371:8:47","nodeType":"VariableDeclaration","scope":3781,"src":"5363:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3775,"name":"address","nodeType":"ElementaryTypeName","src":"5363:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5337:43:47"},"returnParameters":{"id":3780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3779,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3781,"src":"5404:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3778,"name":"uint256","nodeType":"ElementaryTypeName","src":"5404:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5403:9:47"},"scope":3855,"src":"5302:111:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3782,"nodeType":"StructuredDocumentation","src":"5419:319:47","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":3791,"implemented":false,"kind":"function","modifiers":[],"name":"getDelegatedTokensAvailable","nameLocation":"5752:27:47","nodeType":"FunctionDefinition","parameters":{"id":3787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3784,"mutability":"mutable","name":"serviceProvider","nameLocation":"5788:15:47","nodeType":"VariableDeclaration","scope":3791,"src":"5780:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3783,"name":"address","nodeType":"ElementaryTypeName","src":"5780:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3786,"mutability":"mutable","name":"verifier","nameLocation":"5813:8:47","nodeType":"VariableDeclaration","scope":3791,"src":"5805:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3785,"name":"address","nodeType":"ElementaryTypeName","src":"5805:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5779:43:47"},"returnParameters":{"id":3790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3789,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3791,"src":"5846:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3788,"name":"uint256","nodeType":"ElementaryTypeName","src":"5846:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5845:9:47"},"scope":3855,"src":"5743:112:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3792,"nodeType":"StructuredDocumentation","src":"5861:200:47","text":" @notice Gets a thaw request.\n @param thawRequestType The type of thaw request.\n @param thawRequestId The id of the thaw request.\n @return The thaw request details."},"functionSelector":"d48de845","id":3803,"implemented":false,"kind":"function","modifiers":[],"name":"getThawRequest","nameLocation":"6075:14:47","nodeType":"FunctionDefinition","parameters":{"id":3798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3795,"mutability":"mutable","name":"thawRequestType","nameLocation":"6136:15:47","nodeType":"VariableDeclaration","scope":3803,"src":"6099:52:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"},"typeName":{"id":3794,"nodeType":"UserDefinedTypeName","pathNode":{"id":3793,"name":"IHorizonStakingTypes.ThawRequestType","nameLocations":["6099:20:47","6120:15:47"],"nodeType":"IdentifierPath","referencedDeclaration":4842,"src":"6099:36:47"},"referencedDeclaration":4842,"src":"6099:36:47","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"}},"visibility":"internal"},{"constant":false,"id":3797,"mutability":"mutable","name":"thawRequestId","nameLocation":"6169:13:47","nodeType":"VariableDeclaration","scope":3803,"src":"6161:21:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3796,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6161:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6089:99:47"},"returnParameters":{"id":3802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3801,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3803,"src":"6212:39:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ThawRequest_$4852_memory_ptr","typeString":"struct IHorizonStakingTypes.ThawRequest"},"typeName":{"id":3800,"nodeType":"UserDefinedTypeName","pathNode":{"id":3799,"name":"IHorizonStakingTypes.ThawRequest","nameLocations":["6212:20:47","6233:11:47"],"nodeType":"IdentifierPath","referencedDeclaration":4852,"src":"6212:32:47"},"referencedDeclaration":4852,"src":"6212:32:47","typeDescriptions":{"typeIdentifier":"t_struct$_ThawRequest_$4852_storage_ptr","typeString":"struct IHorizonStakingTypes.ThawRequest"}},"visibility":"internal"}],"src":"6211:41:47"},"scope":3855,"src":"6066:187:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3804,"nodeType":"StructuredDocumentation","src":"6259:585:47","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 thawRequestType The type of thaw request.\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":"e56f8a1d","id":3819,"implemented":false,"kind":"function","modifiers":[],"name":"getThawRequestList","nameLocation":"6858:18:47","nodeType":"FunctionDefinition","parameters":{"id":3814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3807,"mutability":"mutable","name":"thawRequestType","nameLocation":"6923:15:47","nodeType":"VariableDeclaration","scope":3819,"src":"6886:52:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"},"typeName":{"id":3806,"nodeType":"UserDefinedTypeName","pathNode":{"id":3805,"name":"IHorizonStakingTypes.ThawRequestType","nameLocations":["6886:20:47","6907:15:47"],"nodeType":"IdentifierPath","referencedDeclaration":4842,"src":"6886:36:47"},"referencedDeclaration":4842,"src":"6886:36:47","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"}},"visibility":"internal"},{"constant":false,"id":3809,"mutability":"mutable","name":"serviceProvider","nameLocation":"6956:15:47","nodeType":"VariableDeclaration","scope":3819,"src":"6948:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3808,"name":"address","nodeType":"ElementaryTypeName","src":"6948:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3811,"mutability":"mutable","name":"verifier","nameLocation":"6989:8:47","nodeType":"VariableDeclaration","scope":3819,"src":"6981:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3810,"name":"address","nodeType":"ElementaryTypeName","src":"6981:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3813,"mutability":"mutable","name":"owner","nameLocation":"7015:5:47","nodeType":"VariableDeclaration","scope":3819,"src":"7007:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3812,"name":"address","nodeType":"ElementaryTypeName","src":"7007:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6876:150:47"},"returnParameters":{"id":3818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3819,"src":"7050:23:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_List_$4895_memory_ptr","typeString":"struct ILinkedList.List"},"typeName":{"id":3816,"nodeType":"UserDefinedTypeName","pathNode":{"id":3815,"name":"ILinkedList.List","nameLocations":["7050:11:47","7062:4:47"],"nodeType":"IdentifierPath","referencedDeclaration":4895,"src":"7050:16:47"},"referencedDeclaration":4895,"src":"7050:16:47","typeDescriptions":{"typeIdentifier":"t_struct$_List_$4895_storage_ptr","typeString":"struct ILinkedList.List"}},"visibility":"internal"}],"src":"7049:25:47"},"scope":3855,"src":"6849:226:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3820,"nodeType":"StructuredDocumentation","src":"7081:870:47","text":" @notice Gets the amount of thawed tokens that can be releasedfor a given provision.\n @dev Note that the value returned by this function does not return the total amount of thawed tokens\n but only those that can be released. If thaw requests are created with different thawing periods it's\n possible that an unexpired thaw request temporarily blocks the release of other ones that have already\n expired. This function will stop counting when it encounters the first thaw request that is not yet expired.\n @param thawRequestType The type of thaw request.\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":"2f7cc501","id":3834,"implemented":false,"kind":"function","modifiers":[],"name":"getThawedTokens","nameLocation":"7965:15:47","nodeType":"FunctionDefinition","parameters":{"id":3830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3823,"mutability":"mutable","name":"thawRequestType","nameLocation":"8027:15:47","nodeType":"VariableDeclaration","scope":3834,"src":"7990:52:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"},"typeName":{"id":3822,"nodeType":"UserDefinedTypeName","pathNode":{"id":3821,"name":"IHorizonStakingTypes.ThawRequestType","nameLocations":["7990:20:47","8011:15:47"],"nodeType":"IdentifierPath","referencedDeclaration":4842,"src":"7990:36:47"},"referencedDeclaration":4842,"src":"7990:36:47","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"}},"visibility":"internal"},{"constant":false,"id":3825,"mutability":"mutable","name":"serviceProvider","nameLocation":"8060:15:47","nodeType":"VariableDeclaration","scope":3834,"src":"8052:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3824,"name":"address","nodeType":"ElementaryTypeName","src":"8052:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3827,"mutability":"mutable","name":"verifier","nameLocation":"8093:8:47","nodeType":"VariableDeclaration","scope":3834,"src":"8085:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3826,"name":"address","nodeType":"ElementaryTypeName","src":"8085:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3829,"mutability":"mutable","name":"owner","nameLocation":"8119:5:47","nodeType":"VariableDeclaration","scope":3834,"src":"8111:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3828,"name":"address","nodeType":"ElementaryTypeName","src":"8111:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7980:150:47"},"returnParameters":{"id":3833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3832,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3834,"src":"8154:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3831,"name":"uint256","nodeType":"ElementaryTypeName","src":"8154:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8153:9:47"},"scope":3855,"src":"7956:207:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3835,"nodeType":"StructuredDocumentation","src":"8169:145:47","text":" @notice Gets the maximum allowed thawing period for a provision.\n @return The maximum allowed thawing period in seconds."},"functionSelector":"39514ad2","id":3840,"implemented":false,"kind":"function","modifiers":[],"name":"getMaxThawingPeriod","nameLocation":"8328:19:47","nodeType":"FunctionDefinition","parameters":{"id":3836,"nodeType":"ParameterList","parameters":[],"src":"8347:2:47"},"returnParameters":{"id":3839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3838,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3840,"src":"8373:6:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":3837,"name":"uint64","nodeType":"ElementaryTypeName","src":"8373:6:47","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"8372:8:47"},"scope":3855,"src":"8319:62:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3841,"nodeType":"StructuredDocumentation","src":"8387:208:47","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":3848,"implemented":false,"kind":"function","modifiers":[],"name":"isAllowedLockedVerifier","nameLocation":"8609:23:47","nodeType":"FunctionDefinition","parameters":{"id":3844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3843,"mutability":"mutable","name":"verifier","nameLocation":"8641:8:47","nodeType":"VariableDeclaration","scope":3848,"src":"8633:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3842,"name":"address","nodeType":"ElementaryTypeName","src":"8633:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8632:18:47"},"returnParameters":{"id":3847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3848,"src":"8674:4:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3845,"name":"bool","nodeType":"ElementaryTypeName","src":"8674:4:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8673:6:47"},"scope":3855,"src":"8600:80:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3849,"nodeType":"StructuredDocumentation","src":"8686:161:47","text":" @notice Return true if delegation slashing is enabled, false otherwise.\n @return True if delegation slashing is enabled, false otherwise"},"functionSelector":"fc54fb27","id":3854,"implemented":false,"kind":"function","modifiers":[],"name":"isDelegationSlashingEnabled","nameLocation":"8861:27:47","nodeType":"FunctionDefinition","parameters":{"id":3850,"nodeType":"ParameterList","parameters":[],"src":"8888:2:47"},"returnParameters":{"id":3853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3852,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3854,"src":"8914:4:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3851,"name":"bool","nodeType":"ElementaryTypeName","src":"8914:4:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8913:6:47"},"scope":3855,"src":"8852:68:47","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3856,"src":"837:8085:47","usedErrors":[3686],"usedEvents":[3683]}],"src":"46:8877:47"},"id":47},"contracts/horizon/internal/IHorizonStakingExtension.sol":{"ast":{"absolutePath":"contracts/horizon/internal/IHorizonStakingExtension.sol","exportedSymbols":{"IHorizonStakingExtension":[4035],"IRewardsIssuer":[1587]},"id":4036,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3857,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:48"},{"absolutePath":"contracts/contracts/rewards/IRewardsIssuer.sol","file":"../../contracts/rewards/IRewardsIssuer.sol","id":3859,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4036,"sourceUnit":1588,"src":"175:76:48","symbolAliases":[{"foreign":{"id":3858,"name":"IRewardsIssuer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1587,"src":"184:14:48","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3861,"name":"IRewardsIssuer","nameLocations":["585:14:48"],"nodeType":"IdentifierPath","referencedDeclaration":1587,"src":"585:14:48"},"id":3862,"nodeType":"InheritanceSpecifier","src":"585:14:48"}],"canonicalName":"IHorizonStakingExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":3860,"nodeType":"StructuredDocumentation","src":"253:293:48","text":" @title Interface for {HorizonStakingExtension} contract.\n @author Edge & Node\n @notice Provides functions for managing legacy allocations.\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":false,"id":4035,"linearizedBaseContracts":[4035,1587],"name":"IHorizonStakingExtension","nameLocation":"557:24:48","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IHorizonStakingExtension.Allocation","documentation":{"id":3863,"nodeType":"StructuredDocumentation","src":"606:825:48","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()\n @param indexer The indexer address\n @param subgraphDeploymentID The subgraph deployment ID\n @param tokens The amount of tokens allocated to the subgraph deployment\n @param createdAtEpoch The epoch when the allocation was created\n @param closedAtEpoch The epoch when the allocation was closed\n @param collectedFees The amount of collected fees for the allocation\n @param __DEPRECATED_effectiveAllocation Deprecated field.\n @param accRewardsPerAllocatedToken Snapshot used for reward calculation\n @param distributedRebates The amount of collected rebates that have been rebated"},"id":3882,"members":[{"constant":false,"id":3865,"mutability":"mutable","name":"indexer","nameLocation":"1472:7:48","nodeType":"VariableDeclaration","scope":3882,"src":"1464:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3864,"name":"address","nodeType":"ElementaryTypeName","src":"1464:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3867,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"1497:20:48","nodeType":"VariableDeclaration","scope":3882,"src":"1489:28:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3866,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1489:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3869,"mutability":"mutable","name":"tokens","nameLocation":"1535:6:48","nodeType":"VariableDeclaration","scope":3882,"src":"1527:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3868,"name":"uint256","nodeType":"ElementaryTypeName","src":"1527:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3871,"mutability":"mutable","name":"createdAtEpoch","nameLocation":"1559:14:48","nodeType":"VariableDeclaration","scope":3882,"src":"1551:22:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3870,"name":"uint256","nodeType":"ElementaryTypeName","src":"1551:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3873,"mutability":"mutable","name":"closedAtEpoch","nameLocation":"1591:13:48","nodeType":"VariableDeclaration","scope":3882,"src":"1583:21:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3872,"name":"uint256","nodeType":"ElementaryTypeName","src":"1583:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3875,"mutability":"mutable","name":"collectedFees","nameLocation":"1622:13:48","nodeType":"VariableDeclaration","scope":3882,"src":"1614:21:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3874,"name":"uint256","nodeType":"ElementaryTypeName","src":"1614:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3877,"mutability":"mutable","name":"__DEPRECATED_effectiveAllocation","nameLocation":"1653:32:48","nodeType":"VariableDeclaration","scope":3882,"src":"1645:40:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3876,"name":"uint256","nodeType":"ElementaryTypeName","src":"1645:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3879,"mutability":"mutable","name":"accRewardsPerAllocatedToken","nameLocation":"1703:27:48","nodeType":"VariableDeclaration","scope":3882,"src":"1695:35:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3878,"name":"uint256","nodeType":"ElementaryTypeName","src":"1695:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3881,"mutability":"mutable","name":"distributedRebates","nameLocation":"1748:18:48","nodeType":"VariableDeclaration","scope":3882,"src":"1740:26:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3880,"name":"uint256","nodeType":"ElementaryTypeName","src":"1740:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Allocation","nameLocation":"1443:10:48","nodeType":"StructDefinition","scope":4035,"src":"1436:337:48","visibility":"public"},{"canonicalName":"IHorizonStakingExtension.AllocationState","documentation":{"id":3883,"nodeType":"StructuredDocumentation","src":"1779:202:48","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":3887,"members":[{"id":3884,"name":"Null","nameLocation":"2017:4:48","nodeType":"EnumValue","src":"2017:4:48"},{"id":3885,"name":"Active","nameLocation":"2031:6:48","nodeType":"EnumValue","src":"2031:6:48"},{"id":3886,"name":"Closed","nameLocation":"2047:6:48","nodeType":"EnumValue","src":"2047:6:48"}],"name":"AllocationState","nameLocation":"1991:15:48","nodeType":"EnumDefinition","src":"1986:73:48"},{"anonymous":false,"documentation":{"id":3888,"nodeType":"StructuredDocumentation","src":"2065:858:48","text":" @notice 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 @param indexer The indexer address\n @param subgraphDeploymentID The subgraph deployment ID\n @param epoch The protocol epoch the allocation was closed on\n @param tokens The amount of tokens unallocated from the allocation\n @param allocationID The allocation identifier\n @param sender The address closing the allocation\n @param poi The proof of indexing submitted by the sender\n @param isPublic True if the allocation was force closed by someone other than the indexer/operator"},"eventSelector":"f6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce1403","id":3906,"name":"AllocationClosed","nameLocation":"2934:16:48","nodeType":"EventDefinition","parameters":{"id":3905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3890,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"2976:7:48","nodeType":"VariableDeclaration","scope":3906,"src":"2960:23:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3889,"name":"address","nodeType":"ElementaryTypeName","src":"2960:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3892,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"3009:20:48","nodeType":"VariableDeclaration","scope":3906,"src":"2993:36:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3891,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2993:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3894,"indexed":false,"mutability":"mutable","name":"epoch","nameLocation":"3047:5:48","nodeType":"VariableDeclaration","scope":3906,"src":"3039:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3893,"name":"uint256","nodeType":"ElementaryTypeName","src":"3039:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3896,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"3070:6:48","nodeType":"VariableDeclaration","scope":3906,"src":"3062:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3895,"name":"uint256","nodeType":"ElementaryTypeName","src":"3062:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3898,"indexed":true,"mutability":"mutable","name":"allocationID","nameLocation":"3102:12:48","nodeType":"VariableDeclaration","scope":3906,"src":"3086:28:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3897,"name":"address","nodeType":"ElementaryTypeName","src":"3086:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3900,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3132:6:48","nodeType":"VariableDeclaration","scope":3906,"src":"3124:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3899,"name":"address","nodeType":"ElementaryTypeName","src":"3124:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3902,"indexed":false,"mutability":"mutable","name":"poi","nameLocation":"3156:3:48","nodeType":"VariableDeclaration","scope":3906,"src":"3148:11:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3901,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3148:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3904,"indexed":false,"mutability":"mutable","name":"isPublic","nameLocation":"3174:8:48","nodeType":"VariableDeclaration","scope":3906,"src":"3169:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3903,"name":"bool","nodeType":"ElementaryTypeName","src":"3169:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2950:238:48"},"src":"2928:261:48"},{"anonymous":false,"documentation":{"id":3907,"nodeType":"StructuredDocumentation","src":"3195:1261:48","text":" @notice 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 @param assetHolder The address of the asset holder, the entity paying the query fees\n @param indexer The indexer address\n @param subgraphDeploymentID The subgraph deployment ID\n @param allocationID The allocation identifier\n @param epoch The protocol epoch the rebate was collected on\n @param tokens The amount of tokens collected\n @param protocolTax The amount of tokens burnt as protocol tax\n @param curationFees The amount of tokens distributed to the curation pool\n @param queryFees The amount of tokens collected as query fees\n @param queryRebates The amount of tokens distributed to the indexer\n @param delegationRewards The amount of tokens collected from the delegation pool"},"eventSelector":"f5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b","id":3931,"name":"RebateCollected","nameLocation":"4467:15:48","nodeType":"EventDefinition","parameters":{"id":3930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3909,"indexed":false,"mutability":"mutable","name":"assetHolder","nameLocation":"4500:11:48","nodeType":"VariableDeclaration","scope":3931,"src":"4492:19:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3908,"name":"address","nodeType":"ElementaryTypeName","src":"4492:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3911,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"4537:7:48","nodeType":"VariableDeclaration","scope":3931,"src":"4521:23:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3910,"name":"address","nodeType":"ElementaryTypeName","src":"4521:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3913,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"4570:20:48","nodeType":"VariableDeclaration","scope":3931,"src":"4554:36:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3912,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4554:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3915,"indexed":true,"mutability":"mutable","name":"allocationID","nameLocation":"4616:12:48","nodeType":"VariableDeclaration","scope":3931,"src":"4600:28:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3914,"name":"address","nodeType":"ElementaryTypeName","src":"4600:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3917,"indexed":false,"mutability":"mutable","name":"epoch","nameLocation":"4646:5:48","nodeType":"VariableDeclaration","scope":3931,"src":"4638:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3916,"name":"uint256","nodeType":"ElementaryTypeName","src":"4638:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3919,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"4669:6:48","nodeType":"VariableDeclaration","scope":3931,"src":"4661:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3918,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3921,"indexed":false,"mutability":"mutable","name":"protocolTax","nameLocation":"4693:11:48","nodeType":"VariableDeclaration","scope":3931,"src":"4685:19:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3920,"name":"uint256","nodeType":"ElementaryTypeName","src":"4685:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3923,"indexed":false,"mutability":"mutable","name":"curationFees","nameLocation":"4722:12:48","nodeType":"VariableDeclaration","scope":3931,"src":"4714:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3922,"name":"uint256","nodeType":"ElementaryTypeName","src":"4714:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3925,"indexed":false,"mutability":"mutable","name":"queryFees","nameLocation":"4752:9:48","nodeType":"VariableDeclaration","scope":3931,"src":"4744:17:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3924,"name":"uint256","nodeType":"ElementaryTypeName","src":"4744:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3927,"indexed":false,"mutability":"mutable","name":"queryRebates","nameLocation":"4779:12:48","nodeType":"VariableDeclaration","scope":3931,"src":"4771:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3926,"name":"uint256","nodeType":"ElementaryTypeName","src":"4771:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3929,"indexed":false,"mutability":"mutable","name":"delegationRewards","nameLocation":"4809:17:48","nodeType":"VariableDeclaration","scope":3931,"src":"4801:25:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3928,"name":"uint256","nodeType":"ElementaryTypeName","src":"4801:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4482:350:48"},"src":"4461:372:48"},{"anonymous":false,"documentation":{"id":3932,"nodeType":"StructuredDocumentation","src":"4839:415:48","text":" @notice Emitted when `indexer` was slashed for a total of `tokens` amount.\n Tracks `reward` amount of tokens given to `beneficiary`.\n @param indexer The indexer address\n @param tokens The amount of tokens slashed\n @param reward The amount of reward tokens to send to a beneficiary\n @param beneficiary The address of a beneficiary to receive a reward for the slashing"},"eventSelector":"f2717be2f27d9d2d7d265e42dc556e40d2d9aeaba02f49c5286030f30c0571f3","id":3942,"name":"StakeSlashed","nameLocation":"5265:12:48","nodeType":"EventDefinition","parameters":{"id":3941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3934,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"5294:7:48","nodeType":"VariableDeclaration","scope":3942,"src":"5278:23:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3933,"name":"address","nodeType":"ElementaryTypeName","src":"5278:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3936,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"5311:6:48","nodeType":"VariableDeclaration","scope":3942,"src":"5303:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3935,"name":"uint256","nodeType":"ElementaryTypeName","src":"5303:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3938,"indexed":false,"mutability":"mutable","name":"reward","nameLocation":"5327:6:48","nodeType":"VariableDeclaration","scope":3942,"src":"5319:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3937,"name":"uint256","nodeType":"ElementaryTypeName","src":"5319:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3940,"indexed":false,"mutability":"mutable","name":"beneficiary","nameLocation":"5343:11:48","nodeType":"VariableDeclaration","scope":3942,"src":"5335:19:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3939,"name":"address","nodeType":"ElementaryTypeName","src":"5335:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5277:78:48"},"src":"5259:97:48"},{"documentation":{"id":3943,"nodeType":"StructuredDocumentation","src":"5362:381:48","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":3950,"implemented":false,"kind":"function","modifiers":[],"name":"closeAllocation","nameLocation":"5757:15:48","nodeType":"FunctionDefinition","parameters":{"id":3948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3945,"mutability":"mutable","name":"allocationID","nameLocation":"5781:12:48","nodeType":"VariableDeclaration","scope":3950,"src":"5773:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3944,"name":"address","nodeType":"ElementaryTypeName","src":"5773:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3947,"mutability":"mutable","name":"poi","nameLocation":"5803:3:48","nodeType":"VariableDeclaration","scope":3950,"src":"5795:11:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3946,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5795:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5772:35:48"},"returnParameters":{"id":3949,"nodeType":"ParameterList","parameters":[],"src":"5816:0:48"},"scope":4035,"src":"5748:69:48","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3951,"nodeType":"StructuredDocumentation","src":"5823:563:48","text":" @notice Collect and rebate query fees to the indexer\n This function will accept calls with zero tokens.\n We use an exponential rebate formula to calculate the amount of tokens to rebate to the indexer.\n This implementation allows collecting multiple times on the same allocation, keeping track of the\n total amount rebated, the total amount collected and compensating the indexer for the difference.\n @param tokens Amount of tokens to collect\n @param allocationID Allocation where the tokens will be assigned"},"functionSelector":"8d3c100a","id":3958,"implemented":false,"kind":"function","modifiers":[],"name":"collect","nameLocation":"6400:7:48","nodeType":"FunctionDefinition","parameters":{"id":3956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3953,"mutability":"mutable","name":"tokens","nameLocation":"6416:6:48","nodeType":"VariableDeclaration","scope":3958,"src":"6408:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3952,"name":"uint256","nodeType":"ElementaryTypeName","src":"6408:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3955,"mutability":"mutable","name":"allocationID","nameLocation":"6432:12:48","nodeType":"VariableDeclaration","scope":3958,"src":"6424:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3954,"name":"address","nodeType":"ElementaryTypeName","src":"6424:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6407:38:48"},"returnParameters":{"id":3957,"nodeType":"ParameterList","parameters":[],"src":"6454:0:48"},"scope":4035,"src":"6391:64:48","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3959,"nodeType":"StructuredDocumentation","src":"6461:778:48","text":" @notice Slash the indexer stake. Delegated tokens are not subject to slashing.\n Note that depending on the state of the indexer's stake, the slashed amount might be smaller than the\n requested slash amount. This can happen if the indexer has moved a significant part of their stake to\n a provision. Any outstanding slashing amount should be settled using Horizon's slash function\n {IHorizonStaking.slash}.\n @dev Can only be called by the slasher role.\n @param indexer Address of indexer to slash\n @param tokens Amount of tokens to slash from the indexer stake\n @param reward Amount of reward tokens to send to a beneficiary\n @param beneficiary Address of a beneficiary to receive a reward for the slashing"},"functionSelector":"4488a382","id":3970,"implemented":false,"kind":"function","modifiers":[],"name":"legacySlash","nameLocation":"7253:11:48","nodeType":"FunctionDefinition","parameters":{"id":3968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3961,"mutability":"mutable","name":"indexer","nameLocation":"7273:7:48","nodeType":"VariableDeclaration","scope":3970,"src":"7265:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3960,"name":"address","nodeType":"ElementaryTypeName","src":"7265:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3963,"mutability":"mutable","name":"tokens","nameLocation":"7290:6:48","nodeType":"VariableDeclaration","scope":3970,"src":"7282:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3962,"name":"uint256","nodeType":"ElementaryTypeName","src":"7282:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3965,"mutability":"mutable","name":"reward","nameLocation":"7306:6:48","nodeType":"VariableDeclaration","scope":3970,"src":"7298:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3964,"name":"uint256","nodeType":"ElementaryTypeName","src":"7298:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3967,"mutability":"mutable","name":"beneficiary","nameLocation":"7322:11:48","nodeType":"VariableDeclaration","scope":3970,"src":"7314:19:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3966,"name":"address","nodeType":"ElementaryTypeName","src":"7314:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7264:70:48"},"returnParameters":{"id":3969,"nodeType":"ParameterList","parameters":[],"src":"7343:0:48"},"scope":4035,"src":"7244:100:48","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3971,"nodeType":"StructuredDocumentation","src":"7350:298:48","text":" @notice (Legacy) Return true if operator is allowed for the service provider on the subgraph data service.\n @param operator Address of the operator\n @param indexer Address of the service provider\n @return True if operator is allowed for indexer, false otherwise"},"functionSelector":"b6363cf2","id":3980,"implemented":false,"kind":"function","modifiers":[],"name":"isOperator","nameLocation":"7662:10:48","nodeType":"FunctionDefinition","parameters":{"id":3976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3973,"mutability":"mutable","name":"operator","nameLocation":"7681:8:48","nodeType":"VariableDeclaration","scope":3980,"src":"7673:16:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3972,"name":"address","nodeType":"ElementaryTypeName","src":"7673:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3975,"mutability":"mutable","name":"indexer","nameLocation":"7699:7:48","nodeType":"VariableDeclaration","scope":3980,"src":"7691:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3974,"name":"address","nodeType":"ElementaryTypeName","src":"7691:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7672:35:48"},"returnParameters":{"id":3979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3980,"src":"7731:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3977,"name":"bool","nodeType":"ElementaryTypeName","src":"7731:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7730:6:48"},"scope":4035,"src":"7653:84:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3981,"nodeType":"StructuredDocumentation","src":"7743:169:48","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":3988,"implemented":false,"kind":"function","modifiers":[],"name":"hasStake","nameLocation":"7926:8:48","nodeType":"FunctionDefinition","parameters":{"id":3984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3983,"mutability":"mutable","name":"indexer","nameLocation":"7943:7:48","nodeType":"VariableDeclaration","scope":3988,"src":"7935:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3982,"name":"address","nodeType":"ElementaryTypeName","src":"7935:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7934:17:48"},"returnParameters":{"id":3987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3986,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3988,"src":"7975:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3985,"name":"bool","nodeType":"ElementaryTypeName","src":"7975:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7974:6:48"},"scope":4035,"src":"7917:64:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3989,"nodeType":"StructuredDocumentation","src":"7987:179:48","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":3996,"implemented":false,"kind":"function","modifiers":[],"name":"getIndexerStakedTokens","nameLocation":"8180:22:48","nodeType":"FunctionDefinition","parameters":{"id":3992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3991,"mutability":"mutable","name":"indexer","nameLocation":"8211:7:48","nodeType":"VariableDeclaration","scope":3996,"src":"8203:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3990,"name":"address","nodeType":"ElementaryTypeName","src":"8203:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8202:17:48"},"returnParameters":{"id":3995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3994,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3996,"src":"8243:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3993,"name":"uint256","nodeType":"ElementaryTypeName","src":"8243:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8242:9:48"},"scope":4035,"src":"8171:81:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3997,"nodeType":"StructuredDocumentation","src":"8258:151:48","text":" @notice Return the allocation by ID.\n @param allocationID Address used as allocation identifier\n @return Allocation data"},"functionSelector":"0e022923","id":4005,"implemented":false,"kind":"function","modifiers":[],"name":"getAllocation","nameLocation":"8423:13:48","nodeType":"FunctionDefinition","parameters":{"id":4000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3999,"mutability":"mutable","name":"allocationID","nameLocation":"8445:12:48","nodeType":"VariableDeclaration","scope":4005,"src":"8437:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3998,"name":"address","nodeType":"ElementaryTypeName","src":"8437:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8436:22:48"},"returnParameters":{"id":4004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4003,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4005,"src":"8482:17:48","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Allocation_$3882_memory_ptr","typeString":"struct IHorizonStakingExtension.Allocation"},"typeName":{"id":4002,"nodeType":"UserDefinedTypeName","pathNode":{"id":4001,"name":"Allocation","nameLocations":["8482:10:48"],"nodeType":"IdentifierPath","referencedDeclaration":3882,"src":"8482:10:48"},"referencedDeclaration":3882,"src":"8482:10:48","typeDescriptions":{"typeIdentifier":"t_struct$_Allocation_$3882_storage_ptr","typeString":"struct IHorizonStakingExtension.Allocation"}},"visibility":"internal"}],"src":"8481:19:48"},"scope":4035,"src":"8414:87:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4006,"nodeType":"StructuredDocumentation","src":"8507:186:48","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":4014,"implemented":false,"kind":"function","modifiers":[],"name":"getAllocationState","nameLocation":"8707:18:48","nodeType":"FunctionDefinition","parameters":{"id":4009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4008,"mutability":"mutable","name":"allocationID","nameLocation":"8734:12:48","nodeType":"VariableDeclaration","scope":4014,"src":"8726:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4007,"name":"address","nodeType":"ElementaryTypeName","src":"8726:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8725:22:48"},"returnParameters":{"id":4013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4014,"src":"8771:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AllocationState_$3887","typeString":"enum IHorizonStakingExtension.AllocationState"},"typeName":{"id":4011,"nodeType":"UserDefinedTypeName","pathNode":{"id":4010,"name":"AllocationState","nameLocations":["8771:15:48"],"nodeType":"IdentifierPath","referencedDeclaration":3887,"src":"8771:15:48"},"referencedDeclaration":3887,"src":"8771:15:48","typeDescriptions":{"typeIdentifier":"t_enum$_AllocationState_$3887","typeString":"enum IHorizonStakingExtension.AllocationState"}},"visibility":"internal"}],"src":"8770:17:48"},"scope":4035,"src":"8698:90:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4015,"nodeType":"StructuredDocumentation","src":"8794:190:48","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":4022,"implemented":false,"kind":"function","modifiers":[],"name":"isAllocation","nameLocation":"8998:12:48","nodeType":"FunctionDefinition","parameters":{"id":4018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4017,"mutability":"mutable","name":"allocationID","nameLocation":"9019:12:48","nodeType":"VariableDeclaration","scope":4022,"src":"9011:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4016,"name":"address","nodeType":"ElementaryTypeName","src":"9011:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9010:22:48"},"returnParameters":{"id":4021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4022,"src":"9056:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4019,"name":"bool","nodeType":"ElementaryTypeName","src":"9056:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9055:6:48"},"scope":4035,"src":"8989:73:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4023,"nodeType":"StructuredDocumentation","src":"9068:167:48","text":" @notice Return the time in blocks to unstake\n Deprecated, now enforced by each data service (verifier)\n @return Thawing period in blocks"},"functionSelector":"c0641994","id":4028,"implemented":false,"kind":"function","modifiers":[],"name":"__DEPRECATED_getThawingPeriod","nameLocation":"9249:29:48","nodeType":"FunctionDefinition","parameters":{"id":4024,"nodeType":"ParameterList","parameters":[],"src":"9278:2:48"},"returnParameters":{"id":4027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4026,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4028,"src":"9304:6:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4025,"name":"uint64","nodeType":"ElementaryTypeName","src":"9304:6:48","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"9303:8:48"},"scope":4035,"src":"9240:72:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4029,"nodeType":"StructuredDocumentation","src":"9318:219:48","text":" @notice Return the address of the subgraph data service.\n @dev TRANSITION PERIOD: After transition period move to main HorizonStaking contract\n @return Address of the subgraph data service"},"functionSelector":"9363c522","id":4034,"implemented":false,"kind":"function","modifiers":[],"name":"getSubgraphService","nameLocation":"9551:18:48","nodeType":"FunctionDefinition","parameters":{"id":4030,"nodeType":"ParameterList","parameters":[],"src":"9569:2:48"},"returnParameters":{"id":4033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4032,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4034,"src":"9595:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4031,"name":"address","nodeType":"ElementaryTypeName","src":"9595:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9594:9:48"},"scope":4035,"src":"9542:62:48","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4036,"src":"547:9059:48","usedErrors":[],"usedEvents":[3906,3931,3942]}],"src":"46:9561:48"},"id":48},"contracts/horizon/internal/IHorizonStakingMain.sol":{"ast":{"absolutePath":"contracts/horizon/internal/IHorizonStakingMain.sol","exportedSymbols":{"IGraphPayments":[3286],"IHorizonStakingMain":[4746],"IHorizonStakingTypes":[4882]},"id":4747,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4037,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:49"},{"absolutePath":"contracts/horizon/IGraphPayments.sol","file":"../IGraphPayments.sol","id":4039,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4747,"sourceUnit":3287,"src":"175:55:49","symbolAliases":[{"foreign":{"id":4038,"name":"IGraphPayments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"184:14:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/horizon/internal/IHorizonStakingTypes.sol","file":"./IHorizonStakingTypes.sol","id":4041,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4747,"sourceUnit":4883,"src":"231:66:49","symbolAliases":[{"foreign":{"id":4040,"name":"IHorizonStakingTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"240:20:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHorizonStakingMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":4042,"nodeType":"StructuredDocumentation","src":"299:845:49","text":" @title Inferface for the {HorizonStaking} contract.\n @author Edge & Node\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 @dev TRANSITION PERIOD: After transition period rename to IHorizonStaking.\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":false,"id":4746,"linearizedBaseContracts":[4746],"name":"IHorizonStakingMain","nameLocation":"1155:19:49","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":4043,"nodeType":"StructuredDocumentation","src":"1209:323:49","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 now locked (including previously locked tokens)\n @param until The block number until the stake is locked"},"eventSelector":"91642f23a1196e1424949fafa2a428c3b5d1f699763942ff08a6fbe9d4d7e980","id":4051,"name":"HorizonStakeLocked","nameLocation":"1543:18:49","nodeType":"EventDefinition","parameters":{"id":4050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4045,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"1578:15:49","nodeType":"VariableDeclaration","scope":4051,"src":"1562:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4044,"name":"address","nodeType":"ElementaryTypeName","src":"1562:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4047,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1603:6:49","nodeType":"VariableDeclaration","scope":4051,"src":"1595:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4046,"name":"uint256","nodeType":"ElementaryTypeName","src":"1595:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4049,"indexed":false,"mutability":"mutable","name":"until","nameLocation":"1619:5:49","nodeType":"VariableDeclaration","scope":4051,"src":"1611:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4048,"name":"uint256","nodeType":"ElementaryTypeName","src":"1611:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1561:64:49"},"src":"1537:89:49"},{"anonymous":false,"documentation":{"id":4052,"nodeType":"StructuredDocumentation","src":"1632:223:49","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":"32eed9ebc5696170068a371fdbea4c076da1bc21b305e78ca0a5e65ee913be83","id":4058,"name":"HorizonStakeWithdrawn","nameLocation":"1866:21:49","nodeType":"EventDefinition","parameters":{"id":4057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4054,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"1904:15:49","nodeType":"VariableDeclaration","scope":4058,"src":"1888:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4053,"name":"address","nodeType":"ElementaryTypeName","src":"1888:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4056,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1929:6:49","nodeType":"VariableDeclaration","scope":4058,"src":"1921:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4055,"name":"uint256","nodeType":"ElementaryTypeName","src":"1921:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1887:49:49"},"src":"1860:77:49"},{"anonymous":false,"documentation":{"id":4059,"nodeType":"StructuredDocumentation","src":"1975:537:49","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":4071,"name":"ProvisionCreated","nameLocation":"2523:16:49","nodeType":"EventDefinition","parameters":{"id":4070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4061,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"2565:15:49","nodeType":"VariableDeclaration","scope":4071,"src":"2549:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4060,"name":"address","nodeType":"ElementaryTypeName","src":"2549:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4063,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"2606:8:49","nodeType":"VariableDeclaration","scope":4071,"src":"2590:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4062,"name":"address","nodeType":"ElementaryTypeName","src":"2590:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4065,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"2632:6:49","nodeType":"VariableDeclaration","scope":4071,"src":"2624:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4064,"name":"uint256","nodeType":"ElementaryTypeName","src":"2624:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4067,"indexed":false,"mutability":"mutable","name":"maxVerifierCut","nameLocation":"2655:14:49","nodeType":"VariableDeclaration","scope":4071,"src":"2648:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4066,"name":"uint32","nodeType":"ElementaryTypeName","src":"2648:6:49","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4069,"indexed":false,"mutability":"mutable","name":"thawingPeriod","nameLocation":"2686:13:49","nodeType":"VariableDeclaration","scope":4071,"src":"2679:20:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4068,"name":"uint64","nodeType":"ElementaryTypeName","src":"2679:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"2539:166:49"},"src":"2517:189:49"},{"anonymous":false,"documentation":{"id":4072,"nodeType":"StructuredDocumentation","src":"2712:274:49","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":4080,"name":"ProvisionIncreased","nameLocation":"2997:18:49","nodeType":"EventDefinition","parameters":{"id":4079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4074,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"3032:15:49","nodeType":"VariableDeclaration","scope":4080,"src":"3016:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4073,"name":"address","nodeType":"ElementaryTypeName","src":"3016:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4076,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"3065:8:49","nodeType":"VariableDeclaration","scope":4080,"src":"3049:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4075,"name":"address","nodeType":"ElementaryTypeName","src":"3049:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4078,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"3083:6:49","nodeType":"VariableDeclaration","scope":4080,"src":"3075:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4077,"name":"uint256","nodeType":"ElementaryTypeName","src":"3075:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3015:75:49"},"src":"2991:100:49"},{"anonymous":false,"documentation":{"id":4081,"nodeType":"StructuredDocumentation","src":"3097:255:49","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":4089,"name":"ProvisionThawed","nameLocation":"3363:15:49","nodeType":"EventDefinition","parameters":{"id":4088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4083,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"3395:15:49","nodeType":"VariableDeclaration","scope":4089,"src":"3379:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4082,"name":"address","nodeType":"ElementaryTypeName","src":"3379:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4085,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"3428:8:49","nodeType":"VariableDeclaration","scope":4089,"src":"3412:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4084,"name":"address","nodeType":"ElementaryTypeName","src":"3412:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4087,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"3446:6:49","nodeType":"VariableDeclaration","scope":4089,"src":"3438:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4086,"name":"uint256","nodeType":"ElementaryTypeName","src":"3438:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3378:75:49"},"src":"3357:97:49"},{"anonymous":false,"documentation":{"id":4090,"nodeType":"StructuredDocumentation","src":"3460:258:49","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":4098,"name":"TokensDeprovisioned","nameLocation":"3729:19:49","nodeType":"EventDefinition","parameters":{"id":4097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4092,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"3765:15:49","nodeType":"VariableDeclaration","scope":4098,"src":"3749:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4091,"name":"address","nodeType":"ElementaryTypeName","src":"3749:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4094,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"3798:8:49","nodeType":"VariableDeclaration","scope":4098,"src":"3782:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4093,"name":"address","nodeType":"ElementaryTypeName","src":"3782:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4096,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"3816:6:49","nodeType":"VariableDeclaration","scope":4098,"src":"3808:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4095,"name":"uint256","nodeType":"ElementaryTypeName","src":"3808:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3748:75:49"},"src":"3723:101:49"},{"anonymous":false,"documentation":{"id":4099,"nodeType":"StructuredDocumentation","src":"3830:512:49","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":4109,"name":"ProvisionParametersStaged","nameLocation":"4353:25:49","nodeType":"EventDefinition","parameters":{"id":4108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4101,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"4404:15:49","nodeType":"VariableDeclaration","scope":4109,"src":"4388:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4100,"name":"address","nodeType":"ElementaryTypeName","src":"4388:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4103,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"4445:8:49","nodeType":"VariableDeclaration","scope":4109,"src":"4429:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4102,"name":"address","nodeType":"ElementaryTypeName","src":"4429:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4105,"indexed":false,"mutability":"mutable","name":"maxVerifierCut","nameLocation":"4470:14:49","nodeType":"VariableDeclaration","scope":4109,"src":"4463:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4104,"name":"uint32","nodeType":"ElementaryTypeName","src":"4463:6:49","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4107,"indexed":false,"mutability":"mutable","name":"thawingPeriod","nameLocation":"4501:13:49","nodeType":"VariableDeclaration","scope":4109,"src":"4494:20:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4106,"name":"uint64","nodeType":"ElementaryTypeName","src":"4494:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"4378:142:49"},"src":"4347:174:49"},{"anonymous":false,"documentation":{"id":4110,"nodeType":"StructuredDocumentation","src":"4527:503:49","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":4120,"name":"ProvisionParametersSet","nameLocation":"5041:22:49","nodeType":"EventDefinition","parameters":{"id":4119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4112,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"5089:15:49","nodeType":"VariableDeclaration","scope":4120,"src":"5073:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4111,"name":"address","nodeType":"ElementaryTypeName","src":"5073:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4114,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"5130:8:49","nodeType":"VariableDeclaration","scope":4120,"src":"5114:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4113,"name":"address","nodeType":"ElementaryTypeName","src":"5114:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4116,"indexed":false,"mutability":"mutable","name":"maxVerifierCut","nameLocation":"5155:14:49","nodeType":"VariableDeclaration","scope":4120,"src":"5148:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4115,"name":"uint32","nodeType":"ElementaryTypeName","src":"5148:6:49","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4118,"indexed":false,"mutability":"mutable","name":"thawingPeriod","nameLocation":"5186:13:49","nodeType":"VariableDeclaration","scope":4120,"src":"5179:20:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4117,"name":"uint64","nodeType":"ElementaryTypeName","src":"5179:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"5063:142:49"},"src":"5035:171:49"},{"anonymous":false,"documentation":{"id":4121,"nodeType":"StructuredDocumentation","src":"5212:352:49","text":" @notice 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":4131,"name":"OperatorSet","nameLocation":"5575:11:49","nodeType":"EventDefinition","parameters":{"id":4130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4123,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"5612:15:49","nodeType":"VariableDeclaration","scope":4131,"src":"5596:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4122,"name":"address","nodeType":"ElementaryTypeName","src":"5596:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4125,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"5653:8:49","nodeType":"VariableDeclaration","scope":4131,"src":"5637:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4124,"name":"address","nodeType":"ElementaryTypeName","src":"5637:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4127,"indexed":true,"mutability":"mutable","name":"operator","nameLocation":"5687:8:49","nodeType":"VariableDeclaration","scope":4131,"src":"5671:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4126,"name":"address","nodeType":"ElementaryTypeName","src":"5671:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4129,"indexed":false,"mutability":"mutable","name":"allowed","nameLocation":"5710:7:49","nodeType":"VariableDeclaration","scope":4131,"src":"5705:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4128,"name":"bool","nodeType":"ElementaryTypeName","src":"5705:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5586:137:49"},"src":"5569:155:49"},{"anonymous":false,"documentation":{"id":4132,"nodeType":"StructuredDocumentation","src":"5761:305:49","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":4140,"name":"ProvisionSlashed","nameLocation":"6077:16:49","nodeType":"EventDefinition","parameters":{"id":4139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4134,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"6110:15:49","nodeType":"VariableDeclaration","scope":4140,"src":"6094:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4133,"name":"address","nodeType":"ElementaryTypeName","src":"6094:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4136,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"6143:8:49","nodeType":"VariableDeclaration","scope":4140,"src":"6127:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4135,"name":"address","nodeType":"ElementaryTypeName","src":"6127:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4138,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"6161:6:49","nodeType":"VariableDeclaration","scope":4140,"src":"6153:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4137,"name":"uint256","nodeType":"ElementaryTypeName","src":"6153:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6093:75:49"},"src":"6071:98:49"},{"anonymous":false,"documentation":{"id":4141,"nodeType":"StructuredDocumentation","src":"6175:310:49","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":4149,"name":"DelegationSlashed","nameLocation":"6496:17:49","nodeType":"EventDefinition","parameters":{"id":4148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4143,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"6530:15:49","nodeType":"VariableDeclaration","scope":4149,"src":"6514:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4142,"name":"address","nodeType":"ElementaryTypeName","src":"6514:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4145,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"6563:8:49","nodeType":"VariableDeclaration","scope":4149,"src":"6547:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4144,"name":"address","nodeType":"ElementaryTypeName","src":"6547:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4147,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"6581:6:49","nodeType":"VariableDeclaration","scope":4149,"src":"6573:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4146,"name":"uint256","nodeType":"ElementaryTypeName","src":"6573:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6513:75:49"},"src":"6490:99:49"},{"anonymous":false,"documentation":{"id":4150,"nodeType":"StructuredDocumentation","src":"6595:441:49","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":4158,"name":"DelegationSlashingSkipped","nameLocation":"7047:25:49","nodeType":"EventDefinition","parameters":{"id":4157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4152,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"7089:15:49","nodeType":"VariableDeclaration","scope":4158,"src":"7073:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4151,"name":"address","nodeType":"ElementaryTypeName","src":"7073:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4154,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"7122:8:49","nodeType":"VariableDeclaration","scope":4158,"src":"7106:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4153,"name":"address","nodeType":"ElementaryTypeName","src":"7106:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4156,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"7140:6:49","nodeType":"VariableDeclaration","scope":4158,"src":"7132:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4155,"name":"uint256","nodeType":"ElementaryTypeName","src":"7132:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7072:75:49"},"src":"7041:107:49"},{"anonymous":false,"documentation":{"id":4159,"nodeType":"StructuredDocumentation","src":"7154:357:49","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":4169,"name":"VerifierTokensSent","nameLocation":"7522:18:49","nodeType":"EventDefinition","parameters":{"id":4168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4161,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"7566:15:49","nodeType":"VariableDeclaration","scope":4169,"src":"7550:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4160,"name":"address","nodeType":"ElementaryTypeName","src":"7550:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4163,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"7607:8:49","nodeType":"VariableDeclaration","scope":4169,"src":"7591:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4162,"name":"address","nodeType":"ElementaryTypeName","src":"7591:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4165,"indexed":true,"mutability":"mutable","name":"destination","nameLocation":"7641:11:49","nodeType":"VariableDeclaration","scope":4169,"src":"7625:27:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4164,"name":"address","nodeType":"ElementaryTypeName","src":"7625:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4167,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"7670:6:49","nodeType":"VariableDeclaration","scope":4169,"src":"7662:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4166,"name":"uint256","nodeType":"ElementaryTypeName","src":"7662:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7540:142:49"},"src":"7516:167:49"},{"anonymous":false,"documentation":{"id":4170,"nodeType":"StructuredDocumentation","src":"7722:350:49","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\n @param shares The amount of shares delegated"},"eventSelector":"237818af8bb47710142edd8fc301fbc507064fb357cf122fb161ca447e3cb13e","id":4182,"name":"TokensDelegated","nameLocation":"8083:15:49","nodeType":"EventDefinition","parameters":{"id":4181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4172,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"8124:15:49","nodeType":"VariableDeclaration","scope":4182,"src":"8108:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4171,"name":"address","nodeType":"ElementaryTypeName","src":"8108:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4174,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"8165:8:49","nodeType":"VariableDeclaration","scope":4182,"src":"8149:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4173,"name":"address","nodeType":"ElementaryTypeName","src":"8149:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4176,"indexed":true,"mutability":"mutable","name":"delegator","nameLocation":"8199:9:49","nodeType":"VariableDeclaration","scope":4182,"src":"8183:25:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4175,"name":"address","nodeType":"ElementaryTypeName","src":"8183:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4178,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"8226:6:49","nodeType":"VariableDeclaration","scope":4182,"src":"8218:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4177,"name":"uint256","nodeType":"ElementaryTypeName","src":"8218:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4180,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"8250:6:49","nodeType":"VariableDeclaration","scope":4182,"src":"8242:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4179,"name":"uint256","nodeType":"ElementaryTypeName","src":"8242:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8098:164:49"},"src":"8077:186:49"},{"anonymous":false,"documentation":{"id":4183,"nodeType":"StructuredDocumentation","src":"8269:397:49","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\n @param shares The amount of shares undelegated"},"eventSelector":"0525d6ad1aa78abc571b5c1984b5e1ea4f1412368c1cc348ca408dbb1085c9a1","id":4195,"name":"TokensUndelegated","nameLocation":"8677:17:49","nodeType":"EventDefinition","parameters":{"id":4194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4185,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"8720:15:49","nodeType":"VariableDeclaration","scope":4195,"src":"8704:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4184,"name":"address","nodeType":"ElementaryTypeName","src":"8704:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4187,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"8761:8:49","nodeType":"VariableDeclaration","scope":4195,"src":"8745:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4186,"name":"address","nodeType":"ElementaryTypeName","src":"8745:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4189,"indexed":true,"mutability":"mutable","name":"delegator","nameLocation":"8795:9:49","nodeType":"VariableDeclaration","scope":4195,"src":"8779:25:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4188,"name":"address","nodeType":"ElementaryTypeName","src":"8779:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4191,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"8822:6:49","nodeType":"VariableDeclaration","scope":4195,"src":"8814:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4190,"name":"uint256","nodeType":"ElementaryTypeName","src":"8814:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4193,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"8846:6:49","nodeType":"VariableDeclaration","scope":4195,"src":"8838:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4192,"name":"uint256","nodeType":"ElementaryTypeName","src":"8838:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8694:164:49"},"src":"8671:188:49"},{"anonymous":false,"documentation":{"id":4196,"nodeType":"StructuredDocumentation","src":"8865:322:49","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":4206,"name":"DelegatedTokensWithdrawn","nameLocation":"9198:24:49","nodeType":"EventDefinition","parameters":{"id":4205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4198,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"9248:15:49","nodeType":"VariableDeclaration","scope":4206,"src":"9232:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4197,"name":"address","nodeType":"ElementaryTypeName","src":"9232:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4200,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"9289:8:49","nodeType":"VariableDeclaration","scope":4206,"src":"9273:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4199,"name":"address","nodeType":"ElementaryTypeName","src":"9273:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4202,"indexed":true,"mutability":"mutable","name":"delegator","nameLocation":"9323:9:49","nodeType":"VariableDeclaration","scope":4206,"src":"9307:25:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4201,"name":"address","nodeType":"ElementaryTypeName","src":"9307:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4204,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"9350:6:49","nodeType":"VariableDeclaration","scope":4206,"src":"9342:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4203,"name":"uint256","nodeType":"ElementaryTypeName","src":"9342:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9222:140:49"},"src":"9192:171:49"},{"anonymous":false,"documentation":{"id":4207,"nodeType":"StructuredDocumentation","src":"9369:346:49","text":" @notice Emitted when `delegator` withdrew delegated `tokens` from `indexer` using `withdrawDelegated`.\n @dev This event is for the legacy `withdrawDelegated` function.\n @param indexer The address of the indexer\n @param delegator The address of the delegator\n @param tokens The amount of tokens withdrawn"},"eventSelector":"1b2e7737e043c5cf1b587ceb4daeb7ae00148b9bda8f79f1093eead08f141952","id":4215,"name":"StakeDelegatedWithdrawn","nameLocation":"9726:23:49","nodeType":"EventDefinition","parameters":{"id":4214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4209,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"9766:7:49","nodeType":"VariableDeclaration","scope":4215,"src":"9750:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4208,"name":"address","nodeType":"ElementaryTypeName","src":"9750:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4211,"indexed":true,"mutability":"mutable","name":"delegator","nameLocation":"9791:9:49","nodeType":"VariableDeclaration","scope":4215,"src":"9775:25:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4210,"name":"address","nodeType":"ElementaryTypeName","src":"9775:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4213,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"9810:6:49","nodeType":"VariableDeclaration","scope":4215,"src":"9802:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4212,"name":"uint256","nodeType":"ElementaryTypeName","src":"9802:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9749:68:49"},"src":"9720:98:49"},{"anonymous":false,"documentation":{"id":4216,"nodeType":"StructuredDocumentation","src":"9824:257:49","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":4224,"name":"TokensToDelegationPoolAdded","nameLocation":"10092:27:49","nodeType":"EventDefinition","parameters":{"id":4223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4218,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"10136:15:49","nodeType":"VariableDeclaration","scope":4224,"src":"10120:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4217,"name":"address","nodeType":"ElementaryTypeName","src":"10120:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4220,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"10169:8:49","nodeType":"VariableDeclaration","scope":4224,"src":"10153:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4219,"name":"address","nodeType":"ElementaryTypeName","src":"10153:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4222,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"10187:6:49","nodeType":"VariableDeclaration","scope":4224,"src":"10179:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4221,"name":"uint256","nodeType":"ElementaryTypeName","src":"10179:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10119:75:49"},"src":"10086:109:49"},{"anonymous":false,"documentation":{"id":4225,"nodeType":"StructuredDocumentation","src":"10201:365:49","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":4236,"name":"DelegationFeeCutSet","nameLocation":"10577:19:49","nodeType":"EventDefinition","parameters":{"id":4235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4227,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"10622:15:49","nodeType":"VariableDeclaration","scope":4236,"src":"10606:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4226,"name":"address","nodeType":"ElementaryTypeName","src":"10606:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4229,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"10663:8:49","nodeType":"VariableDeclaration","scope":4236,"src":"10647:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4228,"name":"address","nodeType":"ElementaryTypeName","src":"10647:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4232,"indexed":true,"mutability":"mutable","name":"paymentType","nameLocation":"10717:11:49","nodeType":"VariableDeclaration","scope":4236,"src":"10681:47:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":4231,"nodeType":"UserDefinedTypeName","pathNode":{"id":4230,"name":"IGraphPayments.PaymentTypes","nameLocations":["10681:14:49","10696:12:49"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"10681:27:49"},"referencedDeclaration":3224,"src":"10681:27:49","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":4234,"indexed":false,"mutability":"mutable","name":"feeCut","nameLocation":"10746:6:49","nodeType":"VariableDeclaration","scope":4236,"src":"10738:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4233,"name":"uint256","nodeType":"ElementaryTypeName","src":"10738:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10596:162:49"},"src":"10571:188:49"},{"anonymous":false,"documentation":{"id":4237,"nodeType":"StructuredDocumentation","src":"10795:636:49","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 requestType The type of thaw request\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 @param nonce The nonce of the thaw request"},"eventSelector":"036538df4a591a5cc74b68cfc7f8c61e8173dbc81627e1d62600b61e82046178","id":4256,"name":"ThawRequestCreated","nameLocation":"11442:18:49","nodeType":"EventDefinition","parameters":{"id":4255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4240,"indexed":true,"mutability":"mutable","name":"requestType","nameLocation":"11515:11:49","nodeType":"VariableDeclaration","scope":4256,"src":"11470:56:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"},"typeName":{"id":4239,"nodeType":"UserDefinedTypeName","pathNode":{"id":4238,"name":"IHorizonStakingTypes.ThawRequestType","nameLocations":["11470:20:49","11491:15:49"],"nodeType":"IdentifierPath","referencedDeclaration":4842,"src":"11470:36:49"},"referencedDeclaration":4842,"src":"11470:36:49","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"}},"visibility":"internal"},{"constant":false,"id":4242,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"11552:15:49","nodeType":"VariableDeclaration","scope":4256,"src":"11536:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4241,"name":"address","nodeType":"ElementaryTypeName","src":"11536:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4244,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"11593:8:49","nodeType":"VariableDeclaration","scope":4256,"src":"11577:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4243,"name":"address","nodeType":"ElementaryTypeName","src":"11577:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4246,"indexed":false,"mutability":"mutable","name":"owner","nameLocation":"11619:5:49","nodeType":"VariableDeclaration","scope":4256,"src":"11611:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4245,"name":"address","nodeType":"ElementaryTypeName","src":"11611:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4248,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"11642:6:49","nodeType":"VariableDeclaration","scope":4256,"src":"11634:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4247,"name":"uint256","nodeType":"ElementaryTypeName","src":"11634:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4250,"indexed":false,"mutability":"mutable","name":"thawingUntil","nameLocation":"11665:12:49","nodeType":"VariableDeclaration","scope":4256,"src":"11658:19:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4249,"name":"uint64","nodeType":"ElementaryTypeName","src":"11658:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4252,"indexed":false,"mutability":"mutable","name":"thawRequestId","nameLocation":"11695:13:49","nodeType":"VariableDeclaration","scope":4256,"src":"11687:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4251,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11687:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4254,"indexed":false,"mutability":"mutable","name":"nonce","nameLocation":"11726:5:49","nodeType":"VariableDeclaration","scope":4256,"src":"11718:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4253,"name":"uint256","nodeType":"ElementaryTypeName","src":"11718:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11460:277:49"},"src":"11436:302:49"},{"anonymous":false,"documentation":{"id":4257,"nodeType":"StructuredDocumentation","src":"11744:469:49","text":" @notice Emitted when a thaw request is fulfilled, meaning the stake is released.\n @param requestType The type of thaw request\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":"469e89d0a4e0e5deb2eb1ade5b3fa67fdfbeb4787c3a7c1e8e89aaf28562cab2","id":4272,"name":"ThawRequestFulfilled","nameLocation":"12224:20:49","nodeType":"EventDefinition","parameters":{"id":4271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4260,"indexed":true,"mutability":"mutable","name":"requestType","nameLocation":"12299:11:49","nodeType":"VariableDeclaration","scope":4272,"src":"12254:56:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"},"typeName":{"id":4259,"nodeType":"UserDefinedTypeName","pathNode":{"id":4258,"name":"IHorizonStakingTypes.ThawRequestType","nameLocations":["12254:20:49","12275:15:49"],"nodeType":"IdentifierPath","referencedDeclaration":4842,"src":"12254:36:49"},"referencedDeclaration":4842,"src":"12254:36:49","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"}},"visibility":"internal"},{"constant":false,"id":4262,"indexed":true,"mutability":"mutable","name":"thawRequestId","nameLocation":"12336:13:49","nodeType":"VariableDeclaration","scope":4272,"src":"12320:29:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4261,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12320:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4264,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"12367:6:49","nodeType":"VariableDeclaration","scope":4272,"src":"12359:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4263,"name":"uint256","nodeType":"ElementaryTypeName","src":"12359:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4266,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"12391:6:49","nodeType":"VariableDeclaration","scope":4272,"src":"12383:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4265,"name":"uint256","nodeType":"ElementaryTypeName","src":"12383:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4268,"indexed":false,"mutability":"mutable","name":"thawingUntil","nameLocation":"12414:12:49","nodeType":"VariableDeclaration","scope":4272,"src":"12407:19:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4267,"name":"uint64","nodeType":"ElementaryTypeName","src":"12407:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4270,"indexed":false,"mutability":"mutable","name":"valid","nameLocation":"12441:5:49","nodeType":"VariableDeclaration","scope":4272,"src":"12436:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4269,"name":"bool","nodeType":"ElementaryTypeName","src":"12436:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12244:208:49"},"src":"12218:235:49"},{"anonymous":false,"documentation":{"id":4273,"nodeType":"StructuredDocumentation","src":"12459:451:49","text":" @notice Emitted when a series of thaw requests are fulfilled.\n @param requestType The type of thaw request\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":"86c2f162872d7c46d7ee0caad366da6dc430889b9d8f27e4bed3785548f9954b","id":4288,"name":"ThawRequestsFulfilled","nameLocation":"12921:21:49","nodeType":"EventDefinition","parameters":{"id":4287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4276,"indexed":true,"mutability":"mutable","name":"requestType","nameLocation":"12997:11:49","nodeType":"VariableDeclaration","scope":4288,"src":"12952:56:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"},"typeName":{"id":4275,"nodeType":"UserDefinedTypeName","pathNode":{"id":4274,"name":"IHorizonStakingTypes.ThawRequestType","nameLocations":["12952:20:49","12973:15:49"],"nodeType":"IdentifierPath","referencedDeclaration":4842,"src":"12952:36:49"},"referencedDeclaration":4842,"src":"12952:36:49","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"}},"visibility":"internal"},{"constant":false,"id":4278,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"13034:15:49","nodeType":"VariableDeclaration","scope":4288,"src":"13018:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4277,"name":"address","nodeType":"ElementaryTypeName","src":"13018:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4280,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"13075:8:49","nodeType":"VariableDeclaration","scope":4288,"src":"13059:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4279,"name":"address","nodeType":"ElementaryTypeName","src":"13059:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4282,"indexed":false,"mutability":"mutable","name":"owner","nameLocation":"13101:5:49","nodeType":"VariableDeclaration","scope":4288,"src":"13093:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4281,"name":"address","nodeType":"ElementaryTypeName","src":"13093:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4284,"indexed":false,"mutability":"mutable","name":"thawRequestsFulfilled","nameLocation":"13124:21:49","nodeType":"VariableDeclaration","scope":4288,"src":"13116:29:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4283,"name":"uint256","nodeType":"ElementaryTypeName","src":"13116:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4286,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"13163:6:49","nodeType":"VariableDeclaration","scope":4288,"src":"13155:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4285,"name":"uint256","nodeType":"ElementaryTypeName","src":"13155:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12942:233:49"},"src":"12915:261:49"},{"anonymous":false,"documentation":{"id":4289,"nodeType":"StructuredDocumentation","src":"13215:166:49","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":4293,"name":"MaxThawingPeriodSet","nameLocation":"13392:19:49","nodeType":"EventDefinition","parameters":{"id":4292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4291,"indexed":false,"mutability":"mutable","name":"maxThawingPeriod","nameLocation":"13419:16:49","nodeType":"VariableDeclaration","scope":4293,"src":"13412:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4290,"name":"uint64","nodeType":"ElementaryTypeName","src":"13412:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13411:25:49"},"src":"13386:51:49"},{"anonymous":false,"documentation":{"id":4294,"nodeType":"StructuredDocumentation","src":"13443:228:49","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":4300,"name":"AllowedLockedVerifierSet","nameLocation":"13682:24:49","nodeType":"EventDefinition","parameters":{"id":4299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4296,"indexed":true,"mutability":"mutable","name":"verifier","nameLocation":"13723:8:49","nodeType":"VariableDeclaration","scope":4300,"src":"13707:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4295,"name":"address","nodeType":"ElementaryTypeName","src":"13707:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4298,"indexed":false,"mutability":"mutable","name":"allowed","nameLocation":"13738:7:49","nodeType":"VariableDeclaration","scope":4300,"src":"13733:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4297,"name":"bool","nodeType":"ElementaryTypeName","src":"13733:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13706:40:49"},"src":"13676:71:49"},{"anonymous":false,"documentation":{"id":4301,"nodeType":"StructuredDocumentation","src":"13753:145:49","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":4303,"name":"ThawingPeriodCleared","nameLocation":"13909:20:49","nodeType":"EventDefinition","parameters":{"id":4302,"nodeType":"ParameterList","parameters":[],"src":"13929:2:49"},"src":"13903:29:49"},{"anonymous":false,"documentation":{"id":4304,"nodeType":"StructuredDocumentation","src":"13938:83:49","text":" @notice Emitted when the delegation slashing global flag is set."},"eventSelector":"2192802a8934dbf383338406b279ec7f3eccee31e58d6c0444d6dd6bfff24b35","id":4306,"name":"DelegationSlashingEnabled","nameLocation":"14032:25:49","nodeType":"EventDefinition","parameters":{"id":4305,"nodeType":"ParameterList","parameters":[],"src":"14057:2:49"},"src":"14026:34:49"},{"documentation":{"id":4307,"nodeType":"StructuredDocumentation","src":"14092:84:49","text":" @notice Thrown when operating a zero token amount is not allowed."},"errorSelector":"14549cb6","id":4309,"name":"HorizonStakingInvalidZeroTokens","nameLocation":"14187:31:49","nodeType":"ErrorDefinition","parameters":{"id":4308,"nodeType":"ParameterList","parameters":[],"src":"14218:2:49"},"src":"14181:40:49"},{"documentation":{"id":4310,"nodeType":"StructuredDocumentation","src":"14227:207:49","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":4316,"name":"HorizonStakingInsufficientTokens","nameLocation":"14445:32:49","nodeType":"ErrorDefinition","parameters":{"id":4315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4312,"mutability":"mutable","name":"tokens","nameLocation":"14486:6:49","nodeType":"VariableDeclaration","scope":4316,"src":"14478:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4311,"name":"uint256","nodeType":"ElementaryTypeName","src":"14478:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4314,"mutability":"mutable","name":"minRequired","nameLocation":"14502:11:49","nodeType":"VariableDeclaration","scope":4316,"src":"14494:19:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4313,"name":"uint256","nodeType":"ElementaryTypeName","src":"14494:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14477:37:49"},"src":"14439:76:49"},{"documentation":{"id":4317,"nodeType":"StructuredDocumentation","src":"14521:201:49","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":4323,"name":"HorizonStakingTooManyTokens","nameLocation":"14733:27:49","nodeType":"ErrorDefinition","parameters":{"id":4322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4319,"mutability":"mutable","name":"tokens","nameLocation":"14769:6:49","nodeType":"VariableDeclaration","scope":4323,"src":"14761:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4318,"name":"uint256","nodeType":"ElementaryTypeName","src":"14761:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4321,"mutability":"mutable","name":"maxTokens","nameLocation":"14785:9:49","nodeType":"VariableDeclaration","scope":4323,"src":"14777:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4320,"name":"uint256","nodeType":"ElementaryTypeName","src":"14777:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14760:35:49"},"src":"14727:69:49"},{"documentation":{"id":4324,"nodeType":"StructuredDocumentation","src":"14834:201:49","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":4330,"name":"HorizonStakingInvalidProvision","nameLocation":"15046:30:49","nodeType":"ErrorDefinition","parameters":{"id":4329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4326,"mutability":"mutable","name":"serviceProvider","nameLocation":"15085:15:49","nodeType":"VariableDeclaration","scope":4330,"src":"15077:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4325,"name":"address","nodeType":"ElementaryTypeName","src":"15077:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4328,"mutability":"mutable","name":"verifier","nameLocation":"15110:8:49","nodeType":"VariableDeclaration","scope":4330,"src":"15102:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4327,"name":"address","nodeType":"ElementaryTypeName","src":"15102:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15076:43:49"},"src":"15040:80:49"},{"documentation":{"id":4331,"nodeType":"StructuredDocumentation","src":"15126:237:49","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":4339,"name":"HorizonStakingNotAuthorized","nameLocation":"15374:27:49","nodeType":"ErrorDefinition","parameters":{"id":4338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4333,"mutability":"mutable","name":"serviceProvider","nameLocation":"15410:15:49","nodeType":"VariableDeclaration","scope":4339,"src":"15402:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4332,"name":"address","nodeType":"ElementaryTypeName","src":"15402:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4335,"mutability":"mutable","name":"verifier","nameLocation":"15435:8:49","nodeType":"VariableDeclaration","scope":4339,"src":"15427:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4334,"name":"address","nodeType":"ElementaryTypeName","src":"15427:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4337,"mutability":"mutable","name":"caller","nameLocation":"15453:6:49","nodeType":"VariableDeclaration","scope":4339,"src":"15445:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4336,"name":"address","nodeType":"ElementaryTypeName","src":"15445:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15401:59:49"},"src":"15368:93:49"},{"documentation":{"id":4340,"nodeType":"StructuredDocumentation","src":"15467:236:49","text":" @notice Thrown when attempting to create a provision with a verifier other than the\n subgraph data service. This restriction only applies during the transition period.\n @param verifier The verifier address"},"errorSelector":"353666ff","id":4344,"name":"HorizonStakingInvalidVerifier","nameLocation":"15714:29:49","nodeType":"ErrorDefinition","parameters":{"id":4343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4342,"mutability":"mutable","name":"verifier","nameLocation":"15752:8:49","nodeType":"VariableDeclaration","scope":4344,"src":"15744:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4341,"name":"address","nodeType":"ElementaryTypeName","src":"15744:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15743:18:49"},"src":"15708:54:49"},{"documentation":{"id":4345,"nodeType":"StructuredDocumentation","src":"15768:163:49","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":4349,"name":"HorizonStakingInvalidMaxVerifierCut","nameLocation":"15942:35:49","nodeType":"ErrorDefinition","parameters":{"id":4348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4347,"mutability":"mutable","name":"maxVerifierCut","nameLocation":"15985:14:49","nodeType":"VariableDeclaration","scope":4349,"src":"15978:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4346,"name":"uint32","nodeType":"ElementaryTypeName","src":"15978:6:49","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15977:23:49"},"src":"15936:65:49"},{"documentation":{"id":4350,"nodeType":"StructuredDocumentation","src":"16007:217:49","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":4356,"name":"HorizonStakingInvalidThawingPeriod","nameLocation":"16235:34:49","nodeType":"ErrorDefinition","parameters":{"id":4355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4352,"mutability":"mutable","name":"thawingPeriod","nameLocation":"16277:13:49","nodeType":"VariableDeclaration","scope":4356,"src":"16270:20:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4351,"name":"uint64","nodeType":"ElementaryTypeName","src":"16270:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4354,"mutability":"mutable","name":"maxThawingPeriod","nameLocation":"16299:16:49","nodeType":"VariableDeclaration","scope":4356,"src":"16292:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4353,"name":"uint64","nodeType":"ElementaryTypeName","src":"16292:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"16269:47:49"},"src":"16229:88:49"},{"documentation":{"id":4357,"nodeType":"StructuredDocumentation","src":"16323:120:49","text":" @notice Thrown when attempting to create a provision for a data service that already has a provision."},"errorSelector":"56a8581a","id":4359,"name":"HorizonStakingProvisionAlreadyExists","nameLocation":"16454:36:49","nodeType":"ErrorDefinition","parameters":{"id":4358,"nodeType":"ParameterList","parameters":[],"src":"16490:2:49"},"src":"16448:45:49"},{"documentation":{"id":4360,"nodeType":"StructuredDocumentation","src":"16527:202:49","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":4366,"name":"HorizonStakingInsufficientIdleStake","nameLocation":"16740:35:49","nodeType":"ErrorDefinition","parameters":{"id":4365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4362,"mutability":"mutable","name":"tokens","nameLocation":"16784:6:49","nodeType":"VariableDeclaration","scope":4366,"src":"16776:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4361,"name":"uint256","nodeType":"ElementaryTypeName","src":"16776:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4364,"mutability":"mutable","name":"minTokens","nameLocation":"16800:9:49","nodeType":"VariableDeclaration","scope":4366,"src":"16792:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4363,"name":"uint256","nodeType":"ElementaryTypeName","src":"16792:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16775:35:49"},"src":"16734:77:49"},{"documentation":{"id":4367,"nodeType":"StructuredDocumentation","src":"16817:265:49","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":4373,"name":"HorizonStakingInsufficientStakeForLegacyAllocations","nameLocation":"17093:51:49","nodeType":"ErrorDefinition","parameters":{"id":4372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4369,"mutability":"mutable","name":"tokens","nameLocation":"17153:6:49","nodeType":"VariableDeclaration","scope":4373,"src":"17145:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4368,"name":"uint256","nodeType":"ElementaryTypeName","src":"17145:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4371,"mutability":"mutable","name":"minTokens","nameLocation":"17169:9:49","nodeType":"VariableDeclaration","scope":4373,"src":"17161:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4370,"name":"uint256","nodeType":"ElementaryTypeName","src":"17161:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17144:35:49"},"src":"17087:93:49"},{"documentation":{"id":4374,"nodeType":"StructuredDocumentation","src":"17219:199:49","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":4380,"name":"HorizonStakingSlippageProtection","nameLocation":"17429:32:49","nodeType":"ErrorDefinition","parameters":{"id":4379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4376,"mutability":"mutable","name":"shares","nameLocation":"17470:6:49","nodeType":"VariableDeclaration","scope":4380,"src":"17462:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4375,"name":"uint256","nodeType":"ElementaryTypeName","src":"17462:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4378,"mutability":"mutable","name":"minShares","nameLocation":"17486:9:49","nodeType":"VariableDeclaration","scope":4380,"src":"17478:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4377,"name":"uint256","nodeType":"ElementaryTypeName","src":"17478:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17461:35:49"},"src":"17423:74:49"},{"documentation":{"id":4381,"nodeType":"StructuredDocumentation","src":"17503:84:49","text":" @notice Thrown when operating a zero share amount is not allowed."},"errorSelector":"7318ad99","id":4383,"name":"HorizonStakingInvalidZeroShares","nameLocation":"17598:31:49","nodeType":"ErrorDefinition","parameters":{"id":4382,"nodeType":"ParameterList","parameters":[],"src":"17629:2:49"},"src":"17592:40:49"},{"documentation":{"id":4384,"nodeType":"StructuredDocumentation","src":"17638:205:49","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":4390,"name":"HorizonStakingInsufficientShares","nameLocation":"17854:32:49","nodeType":"ErrorDefinition","parameters":{"id":4389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4386,"mutability":"mutable","name":"shares","nameLocation":"17895:6:49","nodeType":"VariableDeclaration","scope":4390,"src":"17887:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4385,"name":"uint256","nodeType":"ElementaryTypeName","src":"17887:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4388,"mutability":"mutable","name":"minShares","nameLocation":"17911:9:49","nodeType":"VariableDeclaration","scope":4390,"src":"17903:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4387,"name":"uint256","nodeType":"ElementaryTypeName","src":"17903:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17886:35:49"},"src":"17848:74:49"},{"documentation":{"id":4391,"nodeType":"StructuredDocumentation","src":"17928:211:49","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":4397,"name":"HorizonStakingInvalidDelegationPoolState","nameLocation":"18150:40:49","nodeType":"ErrorDefinition","parameters":{"id":4396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4393,"mutability":"mutable","name":"serviceProvider","nameLocation":"18199:15:49","nodeType":"VariableDeclaration","scope":4397,"src":"18191:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4392,"name":"address","nodeType":"ElementaryTypeName","src":"18191:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4395,"mutability":"mutable","name":"verifier","nameLocation":"18224:8:49","nodeType":"VariableDeclaration","scope":4397,"src":"18216:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4394,"name":"address","nodeType":"ElementaryTypeName","src":"18216:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18190:43:49"},"src":"18144:90:49"},{"documentation":{"id":4398,"nodeType":"StructuredDocumentation","src":"18240:207:49","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":4404,"name":"HorizonStakingInvalidDelegationPool","nameLocation":"18458:35:49","nodeType":"ErrorDefinition","parameters":{"id":4403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4400,"mutability":"mutable","name":"serviceProvider","nameLocation":"18502:15:49","nodeType":"VariableDeclaration","scope":4404,"src":"18494:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4399,"name":"address","nodeType":"ElementaryTypeName","src":"18494:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4402,"mutability":"mutable","name":"verifier","nameLocation":"18527:8:49","nodeType":"VariableDeclaration","scope":4404,"src":"18519:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4401,"name":"address","nodeType":"ElementaryTypeName","src":"18519:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18493:43:49"},"src":"18452:85:49"},{"documentation":{"id":4405,"nodeType":"StructuredDocumentation","src":"18543:202:49","text":" @notice Thrown when the minimum token amount required for delegation is not met.\n @param tokens The actual token amount\n @param minTokens The minimum required token amount"},"errorSelector":"b86d8857","id":4411,"name":"HorizonStakingInsufficientDelegationTokens","nameLocation":"18756:42:49","nodeType":"ErrorDefinition","parameters":{"id":4410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4407,"mutability":"mutable","name":"tokens","nameLocation":"18807:6:49","nodeType":"VariableDeclaration","scope":4411,"src":"18799:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4406,"name":"uint256","nodeType":"ElementaryTypeName","src":"18799:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4409,"mutability":"mutable","name":"minTokens","nameLocation":"18823:9:49","nodeType":"VariableDeclaration","scope":4411,"src":"18815:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4408,"name":"uint256","nodeType":"ElementaryTypeName","src":"18815:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18798:35:49"},"src":"18750:84:49"},{"documentation":{"id":4412,"nodeType":"StructuredDocumentation","src":"18840:113:49","text":" @notice Thrown when attempting to redelegate with a serivce provider that is the zero address."},"errorSelector":"88d1f59c","id":4414,"name":"HorizonStakingInvalidServiceProviderZeroAddress","nameLocation":"18964:47:49","nodeType":"ErrorDefinition","parameters":{"id":4413,"nodeType":"ParameterList","parameters":[],"src":"19011:2:49"},"src":"18958:56:49"},{"documentation":{"id":4415,"nodeType":"StructuredDocumentation","src":"19020:105:49","text":" @notice Thrown when attempting to redelegate with a verifier that is the zero address."},"errorSelector":"a9626059","id":4417,"name":"HorizonStakingInvalidVerifierZeroAddress","nameLocation":"19136:40:49","nodeType":"ErrorDefinition","parameters":{"id":4416,"nodeType":"ParameterList","parameters":[],"src":"19176:2:49"},"src":"19130:49:49"},{"documentation":{"id":4418,"nodeType":"StructuredDocumentation","src":"19221:105:49","text":" @notice Thrown when attempting to fulfill a thaw request but there is nothing thawing."},"errorSelector":"3f199628","id":4420,"name":"HorizonStakingNothingThawing","nameLocation":"19337:28:49","nodeType":"ErrorDefinition","parameters":{"id":4419,"nodeType":"ParameterList","parameters":[],"src":"19365:2:49"},"src":"19331:37:49"},{"documentation":{"id":4421,"nodeType":"StructuredDocumentation","src":"19374:85:49","text":" @notice Thrown when a service provider has too many thaw requests."},"errorSelector":"66570a56","id":4423,"name":"HorizonStakingTooManyThawRequests","nameLocation":"19470:33:49","nodeType":"ErrorDefinition","parameters":{"id":4422,"nodeType":"ParameterList","parameters":[],"src":"19503:2:49"},"src":"19464:42:49"},{"documentation":{"id":4424,"nodeType":"StructuredDocumentation","src":"19512:110:49","text":" @notice Thrown when attempting to withdraw tokens that have not thawed (legacy undelegate)."},"errorSelector":"19e9a8e0","id":4426,"name":"HorizonStakingNothingToWithdraw","nameLocation":"19633:31:49","nodeType":"ErrorDefinition","parameters":{"id":4425,"nodeType":"ParameterList","parameters":[],"src":"19664:2:49"},"src":"19627:40:49"},{"documentation":{"id":4427,"nodeType":"StructuredDocumentation","src":"19699:329:49","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":4431,"name":"HorizonStakingStillThawing","nameLocation":"20039:26:49","nodeType":"ErrorDefinition","parameters":{"id":4430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4429,"mutability":"mutable","name":"until","nameLocation":"20074:5:49","nodeType":"VariableDeclaration","scope":4431,"src":"20066:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4428,"name":"uint256","nodeType":"ElementaryTypeName","src":"20066:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20065:15:49"},"src":"20033:48:49"},{"documentation":{"id":4432,"nodeType":"StructuredDocumentation","src":"20087:211:49","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.\n @param verifier The verifier address"},"errorSelector":"00a483dc","id":4436,"name":"HorizonStakingVerifierNotAllowed","nameLocation":"20309:32:49","nodeType":"ErrorDefinition","parameters":{"id":4435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4434,"mutability":"mutable","name":"verifier","nameLocation":"20350:8:49","nodeType":"VariableDeclaration","scope":4436,"src":"20342:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4433,"name":"address","nodeType":"ElementaryTypeName","src":"20342:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20341:18:49"},"src":"20303:57:49"},{"documentation":{"id":4437,"nodeType":"StructuredDocumentation","src":"20366:103:49","text":" @notice Thrown when a service provider attempts to change their own operator access."},"errorSelector":"01230653","id":4439,"name":"HorizonStakingCallerIsServiceProvider","nameLocation":"20480:37:49","nodeType":"ErrorDefinition","parameters":{"id":4438,"nodeType":"ParameterList","parameters":[],"src":"20517:2:49"},"src":"20474:46:49"},{"documentation":{"id":4440,"nodeType":"StructuredDocumentation","src":"20526:125:49","text":" @notice Thrown when trying to set a delegation fee cut that is not valid.\n @param feeCut The fee cut"},"errorSelector":"54125404","id":4444,"name":"HorizonStakingInvalidDelegationFeeCut","nameLocation":"20662:37:49","nodeType":"ErrorDefinition","parameters":{"id":4443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4442,"mutability":"mutable","name":"feeCut","nameLocation":"20708:6:49","nodeType":"VariableDeclaration","scope":4444,"src":"20700:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4441,"name":"uint256","nodeType":"ElementaryTypeName","src":"20700:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20699:16:49"},"src":"20656:60:49"},{"documentation":{"id":4445,"nodeType":"StructuredDocumentation","src":"20722:60:49","text":" @notice Thrown when a legacy slash fails."},"errorSelector":"ef370f51","id":4447,"name":"HorizonStakingLegacySlashFailed","nameLocation":"20793:31:49","nodeType":"ErrorDefinition","parameters":{"id":4446,"nodeType":"ParameterList","parameters":[],"src":"20824:2:49"},"src":"20787:40:49"},{"documentation":{"id":4448,"nodeType":"StructuredDocumentation","src":"20833:101:49","text":" @notice Thrown when there attempting to slash a provision with no tokens to slash."},"errorSelector":"5452ae48","id":4450,"name":"HorizonStakingNoTokensToSlash","nameLocation":"20945:29:49","nodeType":"ErrorDefinition","parameters":{"id":4449,"nodeType":"ParameterList","parameters":[],"src":"20974:2:49"},"src":"20939:38:49"},{"documentation":{"id":4451,"nodeType":"StructuredDocumentation","src":"21007:373:49","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 {HorizonStakeDeposited} event.\n @param tokens Amount of tokens to stake"},"functionSelector":"a694fc3a","id":4456,"implemented":false,"kind":"function","modifiers":[],"name":"stake","nameLocation":"21394:5:49","nodeType":"FunctionDefinition","parameters":{"id":4454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4453,"mutability":"mutable","name":"tokens","nameLocation":"21408:6:49","nodeType":"VariableDeclaration","scope":4456,"src":"21400:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4452,"name":"uint256","nodeType":"ElementaryTypeName","src":"21400:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21399:16:49"},"returnParameters":{"id":4455,"nodeType":"ParameterList","parameters":[],"src":"21424:0:49"},"scope":4746,"src":"21385:40:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4457,"nodeType":"StructuredDocumentation","src":"21431:476:49","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 {HorizonStakeDeposited} event.\n @param serviceProvider Address of the service provider\n @param tokens Amount of tokens to stake"},"functionSelector":"a2a31722","id":4464,"implemented":false,"kind":"function","modifiers":[],"name":"stakeTo","nameLocation":"21921:7:49","nodeType":"FunctionDefinition","parameters":{"id":4462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4459,"mutability":"mutable","name":"serviceProvider","nameLocation":"21937:15:49","nodeType":"VariableDeclaration","scope":4464,"src":"21929:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4458,"name":"address","nodeType":"ElementaryTypeName","src":"21929:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4461,"mutability":"mutable","name":"tokens","nameLocation":"21962:6:49","nodeType":"VariableDeclaration","scope":4464,"src":"21954:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4460,"name":"uint256","nodeType":"ElementaryTypeName","src":"21954:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21928:41:49"},"returnParameters":{"id":4463,"nodeType":"ParameterList","parameters":[],"src":"21978:0:49"},"scope":4746,"src":"21912:67:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4465,"nodeType":"StructuredDocumentation","src":"21985:749:49","text":" @notice Deposit tokens on the service provider stake, on behalf of the service provider,\n provisioned to a specific verifier.\n @dev This function can be called by the service provider, by an authorized operator or by the verifier itself.\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 {HorizonStakeDeposited} 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":4474,"implemented":false,"kind":"function","modifiers":[],"name":"stakeToProvision","nameLocation":"22748:16:49","nodeType":"FunctionDefinition","parameters":{"id":4472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4467,"mutability":"mutable","name":"serviceProvider","nameLocation":"22773:15:49","nodeType":"VariableDeclaration","scope":4474,"src":"22765:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4466,"name":"address","nodeType":"ElementaryTypeName","src":"22765:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4469,"mutability":"mutable","name":"verifier","nameLocation":"22798:8:49","nodeType":"VariableDeclaration","scope":4474,"src":"22790:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4468,"name":"address","nodeType":"ElementaryTypeName","src":"22790:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4471,"mutability":"mutable","name":"tokens","nameLocation":"22816:6:49","nodeType":"VariableDeclaration","scope":4474,"src":"22808:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4470,"name":"uint256","nodeType":"ElementaryTypeName","src":"22808:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22764:59:49"},"returnParameters":{"id":4473,"nodeType":"ParameterList","parameters":[],"src":"22832:0:49"},"scope":4746,"src":"22739:94:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4475,"nodeType":"StructuredDocumentation","src":"22839:838:49","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 Note that after the transition period if there are tokens still locked they will have to be\n withdrawn by calling {withdraw}.\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 {HorizonStakeLocked} event during the transition period.\n Emits a {HorizonStakeWithdrawn} event after the transition period.\n @param tokens Amount of tokens to unstake"},"functionSelector":"2e17de78","id":4480,"implemented":false,"kind":"function","modifiers":[],"name":"unstake","nameLocation":"23691:7:49","nodeType":"FunctionDefinition","parameters":{"id":4478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4477,"mutability":"mutable","name":"tokens","nameLocation":"23707:6:49","nodeType":"VariableDeclaration","scope":4480,"src":"23699:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4476,"name":"uint256","nodeType":"ElementaryTypeName","src":"23699:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23698:16:49"},"returnParameters":{"id":4479,"nodeType":"ParameterList","parameters":[],"src":"23723:0:49"},"scope":4746,"src":"23682:42:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4481,"nodeType":"StructuredDocumentation","src":"23730:314:49","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":4484,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"24058:8:49","nodeType":"FunctionDefinition","parameters":{"id":4482,"nodeType":"ParameterList","parameters":[],"src":"24066:2:49"},"returnParameters":{"id":4483,"nodeType":"ParameterList","parameters":[],"src":"24077:0:49"},"scope":4746,"src":"24049:29:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4485,"nodeType":"StructuredDocumentation","src":"24084:1408:49","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 During the transition period, only the subgraph data service can be used as a verifier. This\n prevents an escape hatch for legacy allocation stake.\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":4498,"implemented":false,"kind":"function","modifiers":[],"name":"provision","nameLocation":"25506:9:49","nodeType":"FunctionDefinition","parameters":{"id":4496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4487,"mutability":"mutable","name":"serviceProvider","nameLocation":"25533:15:49","nodeType":"VariableDeclaration","scope":4498,"src":"25525:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4486,"name":"address","nodeType":"ElementaryTypeName","src":"25525:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4489,"mutability":"mutable","name":"verifier","nameLocation":"25566:8:49","nodeType":"VariableDeclaration","scope":4498,"src":"25558:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4488,"name":"address","nodeType":"ElementaryTypeName","src":"25558:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4491,"mutability":"mutable","name":"tokens","nameLocation":"25592:6:49","nodeType":"VariableDeclaration","scope":4498,"src":"25584:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4490,"name":"uint256","nodeType":"ElementaryTypeName","src":"25584:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4493,"mutability":"mutable","name":"maxVerifierCut","nameLocation":"25615:14:49","nodeType":"VariableDeclaration","scope":4498,"src":"25608:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4492,"name":"uint32","nodeType":"ElementaryTypeName","src":"25608:6:49","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4495,"mutability":"mutable","name":"thawingPeriod","nameLocation":"25646:13:49","nodeType":"VariableDeclaration","scope":4498,"src":"25639:20:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4494,"name":"uint64","nodeType":"ElementaryTypeName","src":"25639:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"25515:150:49"},"returnParameters":{"id":4497,"nodeType":"ParameterList","parameters":[],"src":"25674:0:49"},"scope":4746,"src":"25497:178:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4499,"nodeType":"StructuredDocumentation","src":"25681:564:49","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":4508,"implemented":false,"kind":"function","modifiers":[],"name":"addToProvision","nameLocation":"26259:14:49","nodeType":"FunctionDefinition","parameters":{"id":4506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4501,"mutability":"mutable","name":"serviceProvider","nameLocation":"26282:15:49","nodeType":"VariableDeclaration","scope":4508,"src":"26274:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4500,"name":"address","nodeType":"ElementaryTypeName","src":"26274:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4503,"mutability":"mutable","name":"verifier","nameLocation":"26307:8:49","nodeType":"VariableDeclaration","scope":4508,"src":"26299:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4502,"name":"address","nodeType":"ElementaryTypeName","src":"26299:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4505,"mutability":"mutable","name":"tokens","nameLocation":"26325:6:49","nodeType":"VariableDeclaration","scope":4508,"src":"26317:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4504,"name":"uint256","nodeType":"ElementaryTypeName","src":"26317:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26273:59:49"},"returnParameters":{"id":4507,"nodeType":"ParameterList","parameters":[],"src":"26341:0:49"},"scope":4746,"src":"26250:92:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4509,"nodeType":"StructuredDocumentation","src":"26348:929:49","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":4520,"implemented":false,"kind":"function","modifiers":[],"name":"thaw","nameLocation":"27291:4:49","nodeType":"FunctionDefinition","parameters":{"id":4516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4511,"mutability":"mutable","name":"serviceProvider","nameLocation":"27304:15:49","nodeType":"VariableDeclaration","scope":4520,"src":"27296:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4510,"name":"address","nodeType":"ElementaryTypeName","src":"27296:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4513,"mutability":"mutable","name":"verifier","nameLocation":"27329:8:49","nodeType":"VariableDeclaration","scope":4520,"src":"27321:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4512,"name":"address","nodeType":"ElementaryTypeName","src":"27321:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4515,"mutability":"mutable","name":"tokens","nameLocation":"27347:6:49","nodeType":"VariableDeclaration","scope":4520,"src":"27339:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4514,"name":"uint256","nodeType":"ElementaryTypeName","src":"27339:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27295:59:49"},"returnParameters":{"id":4519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4520,"src":"27373:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"27373:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"27372:9:49"},"scope":4746,"src":"27282:100:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4521,"nodeType":"StructuredDocumentation","src":"27388:854:49","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. Otherwise, the function\n will attempt to fulfill all thaw requests until the first one that is not yet expired is found.\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":4530,"implemented":false,"kind":"function","modifiers":[],"name":"deprovision","nameLocation":"28256:11:49","nodeType":"FunctionDefinition","parameters":{"id":4528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4523,"mutability":"mutable","name":"serviceProvider","nameLocation":"28276:15:49","nodeType":"VariableDeclaration","scope":4530,"src":"28268:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4522,"name":"address","nodeType":"ElementaryTypeName","src":"28268:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4525,"mutability":"mutable","name":"verifier","nameLocation":"28301:8:49","nodeType":"VariableDeclaration","scope":4530,"src":"28293:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4524,"name":"address","nodeType":"ElementaryTypeName","src":"28293:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4527,"mutability":"mutable","name":"nThawRequests","nameLocation":"28319:13:49","nodeType":"VariableDeclaration","scope":4530,"src":"28311:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4526,"name":"uint256","nodeType":"ElementaryTypeName","src":"28311:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28267:66:49"},"returnParameters":{"id":4529,"nodeType":"ParameterList","parameters":[],"src":"28342:0:49"},"scope":4746,"src":"28247:96:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4531,"nodeType":"StructuredDocumentation","src":"28349:1032:49","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":4542,"implemented":false,"kind":"function","modifiers":[],"name":"reprovision","nameLocation":"29395:11:49","nodeType":"FunctionDefinition","parameters":{"id":4540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4533,"mutability":"mutable","name":"serviceProvider","nameLocation":"29424:15:49","nodeType":"VariableDeclaration","scope":4542,"src":"29416:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4532,"name":"address","nodeType":"ElementaryTypeName","src":"29416:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4535,"mutability":"mutable","name":"oldVerifier","nameLocation":"29457:11:49","nodeType":"VariableDeclaration","scope":4542,"src":"29449:19:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4534,"name":"address","nodeType":"ElementaryTypeName","src":"29449:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4537,"mutability":"mutable","name":"newVerifier","nameLocation":"29486:11:49","nodeType":"VariableDeclaration","scope":4542,"src":"29478:19:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4536,"name":"address","nodeType":"ElementaryTypeName","src":"29478:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4539,"mutability":"mutable","name":"nThawRequests","nameLocation":"29515:13:49","nodeType":"VariableDeclaration","scope":4542,"src":"29507:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4538,"name":"uint256","nodeType":"ElementaryTypeName","src":"29507:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29406:128:49"},"returnParameters":{"id":4541,"nodeType":"ParameterList","parameters":[],"src":"29543:0:49"},"scope":4746,"src":"29386:158:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4543,"nodeType":"StructuredDocumentation","src":"29550:1146:49","text":" @notice Stages a provision parameter update. Note that the change is not effective until the verifier calls\n {acceptProvisionParameters}. Calling this function is a no-op if the new parameters are the same as the current\n ones.\n @dev This two step update process prevents the service provider from changing the parameters\n without the verifier's consent.\n Requirements:\n - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. Note that if `_maxThawingPeriod` changes the\n function will not revert if called with the same thawing period as the current one.\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":4554,"implemented":false,"kind":"function","modifiers":[],"name":"setProvisionParameters","nameLocation":"30710:22:49","nodeType":"FunctionDefinition","parameters":{"id":4552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4545,"mutability":"mutable","name":"serviceProvider","nameLocation":"30750:15:49","nodeType":"VariableDeclaration","scope":4554,"src":"30742:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4544,"name":"address","nodeType":"ElementaryTypeName","src":"30742:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4547,"mutability":"mutable","name":"verifier","nameLocation":"30783:8:49","nodeType":"VariableDeclaration","scope":4554,"src":"30775:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4546,"name":"address","nodeType":"ElementaryTypeName","src":"30775:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4549,"mutability":"mutable","name":"maxVerifierCut","nameLocation":"30808:14:49","nodeType":"VariableDeclaration","scope":4554,"src":"30801:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4548,"name":"uint32","nodeType":"ElementaryTypeName","src":"30801:6:49","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4551,"mutability":"mutable","name":"thawingPeriod","nameLocation":"30839:13:49","nodeType":"VariableDeclaration","scope":4554,"src":"30832:20:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4550,"name":"uint64","nodeType":"ElementaryTypeName","src":"30832:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"30732:126:49"},"returnParameters":{"id":4553,"nodeType":"ParameterList","parameters":[],"src":"30867:0:49"},"scope":4746,"src":"30701:167:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4555,"nodeType":"StructuredDocumentation","src":"30874:257:49","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":4560,"implemented":false,"kind":"function","modifiers":[],"name":"acceptProvisionParameters","nameLocation":"31145:25:49","nodeType":"FunctionDefinition","parameters":{"id":4558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4557,"mutability":"mutable","name":"serviceProvider","nameLocation":"31179:15:49","nodeType":"VariableDeclaration","scope":4560,"src":"31171:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4556,"name":"address","nodeType":"ElementaryTypeName","src":"31171:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31170:25:49"},"returnParameters":{"id":4559,"nodeType":"ParameterList","parameters":[],"src":"31204:0:49"},"scope":4746,"src":"31136:69:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4561,"nodeType":"StructuredDocumentation","src":"31211:547:49","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":4572,"implemented":false,"kind":"function","modifiers":[],"name":"delegate","nameLocation":"31772:8:49","nodeType":"FunctionDefinition","parameters":{"id":4570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4563,"mutability":"mutable","name":"serviceProvider","nameLocation":"31789:15:49","nodeType":"VariableDeclaration","scope":4572,"src":"31781:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4562,"name":"address","nodeType":"ElementaryTypeName","src":"31781:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4565,"mutability":"mutable","name":"verifier","nameLocation":"31814:8:49","nodeType":"VariableDeclaration","scope":4572,"src":"31806:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4564,"name":"address","nodeType":"ElementaryTypeName","src":"31806:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4567,"mutability":"mutable","name":"tokens","nameLocation":"31832:6:49","nodeType":"VariableDeclaration","scope":4572,"src":"31824:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4566,"name":"uint256","nodeType":"ElementaryTypeName","src":"31824:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4569,"mutability":"mutable","name":"minSharesOut","nameLocation":"31848:12:49","nodeType":"VariableDeclaration","scope":4572,"src":"31840:20:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4568,"name":"uint256","nodeType":"ElementaryTypeName","src":"31840:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31780:81:49"},"returnParameters":{"id":4571,"nodeType":"ParameterList","parameters":[],"src":"31870:0:49"},"scope":4746,"src":"31763:108:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4573,"nodeType":"StructuredDocumentation","src":"31877:632:49","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":4582,"implemented":false,"kind":"function","modifiers":[],"name":"addToDelegationPool","nameLocation":"32523:19:49","nodeType":"FunctionDefinition","parameters":{"id":4580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4575,"mutability":"mutable","name":"serviceProvider","nameLocation":"32551:15:49","nodeType":"VariableDeclaration","scope":4582,"src":"32543:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4574,"name":"address","nodeType":"ElementaryTypeName","src":"32543:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4577,"mutability":"mutable","name":"verifier","nameLocation":"32576:8:49","nodeType":"VariableDeclaration","scope":4582,"src":"32568:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4576,"name":"address","nodeType":"ElementaryTypeName","src":"32568:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4579,"mutability":"mutable","name":"tokens","nameLocation":"32594:6:49","nodeType":"VariableDeclaration","scope":4582,"src":"32586:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4578,"name":"uint256","nodeType":"ElementaryTypeName","src":"32586:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32542:59:49"},"returnParameters":{"id":4581,"nodeType":"ParameterList","parameters":[],"src":"32610:0:49"},"scope":4746,"src":"32514:97:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4583,"nodeType":"StructuredDocumentation","src":"32617:673:49","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":4594,"implemented":false,"kind":"function","modifiers":[],"name":"undelegate","nameLocation":"33304:10:49","nodeType":"FunctionDefinition","parameters":{"id":4590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4585,"mutability":"mutable","name":"serviceProvider","nameLocation":"33323:15:49","nodeType":"VariableDeclaration","scope":4594,"src":"33315:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4584,"name":"address","nodeType":"ElementaryTypeName","src":"33315:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4587,"mutability":"mutable","name":"verifier","nameLocation":"33348:8:49","nodeType":"VariableDeclaration","scope":4594,"src":"33340:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4586,"name":"address","nodeType":"ElementaryTypeName","src":"33340:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4589,"mutability":"mutable","name":"shares","nameLocation":"33366:6:49","nodeType":"VariableDeclaration","scope":4594,"src":"33358:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4588,"name":"uint256","nodeType":"ElementaryTypeName","src":"33358:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33314:59:49"},"returnParameters":{"id":4593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4592,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4594,"src":"33392:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4591,"name":"bytes32","nodeType":"ElementaryTypeName","src":"33392:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"33391:9:49"},"scope":4746,"src":"33295:106:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4595,"nodeType":"StructuredDocumentation","src":"33407:1005:49","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. Otherwise, the function\n will attempt to fulfill all thaw requests until the first one that is not yet expired is found.\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":4604,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawDelegated","nameLocation":"34426:17:49","nodeType":"FunctionDefinition","parameters":{"id":4602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4597,"mutability":"mutable","name":"serviceProvider","nameLocation":"34452:15:49","nodeType":"VariableDeclaration","scope":4604,"src":"34444:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4596,"name":"address","nodeType":"ElementaryTypeName","src":"34444:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4599,"mutability":"mutable","name":"verifier","nameLocation":"34477:8:49","nodeType":"VariableDeclaration","scope":4604,"src":"34469:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4598,"name":"address","nodeType":"ElementaryTypeName","src":"34469:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4601,"mutability":"mutable","name":"nThawRequests","nameLocation":"34495:13:49","nodeType":"VariableDeclaration","scope":4604,"src":"34487:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4600,"name":"uint256","nodeType":"ElementaryTypeName","src":"34487:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34443:66:49"},"returnParameters":{"id":4603,"nodeType":"ParameterList","parameters":[],"src":"34518:0:49"},"scope":4746,"src":"34417:102:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4605,"nodeType":"StructuredDocumentation","src":"34525:1169:49","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":4620,"implemented":false,"kind":"function","modifiers":[],"name":"redelegate","nameLocation":"35708:10:49","nodeType":"FunctionDefinition","parameters":{"id":4618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4607,"mutability":"mutable","name":"oldServiceProvider","nameLocation":"35736:18:49","nodeType":"VariableDeclaration","scope":4620,"src":"35728:26:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4606,"name":"address","nodeType":"ElementaryTypeName","src":"35728:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4609,"mutability":"mutable","name":"oldVerifier","nameLocation":"35772:11:49","nodeType":"VariableDeclaration","scope":4620,"src":"35764:19:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4608,"name":"address","nodeType":"ElementaryTypeName","src":"35764:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4611,"mutability":"mutable","name":"newServiceProvider","nameLocation":"35801:18:49","nodeType":"VariableDeclaration","scope":4620,"src":"35793:26:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4610,"name":"address","nodeType":"ElementaryTypeName","src":"35793:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4613,"mutability":"mutable","name":"newVerifier","nameLocation":"35837:11:49","nodeType":"VariableDeclaration","scope":4620,"src":"35829:19:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4612,"name":"address","nodeType":"ElementaryTypeName","src":"35829:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4615,"mutability":"mutable","name":"minSharesForNewProvider","nameLocation":"35866:23:49","nodeType":"VariableDeclaration","scope":4620,"src":"35858:31:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4614,"name":"uint256","nodeType":"ElementaryTypeName","src":"35858:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4617,"mutability":"mutable","name":"nThawRequests","nameLocation":"35907:13:49","nodeType":"VariableDeclaration","scope":4620,"src":"35899:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4616,"name":"uint256","nodeType":"ElementaryTypeName","src":"35899:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"35718:208:49"},"returnParameters":{"id":4619,"nodeType":"ParameterList","parameters":[],"src":"35935:0:49"},"scope":4746,"src":"35699:237:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4621,"nodeType":"StructuredDocumentation","src":"35942:389:49","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":4633,"implemented":false,"kind":"function","modifiers":[],"name":"setDelegationFeeCut","nameLocation":"36345:19:49","nodeType":"FunctionDefinition","parameters":{"id":4631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4623,"mutability":"mutable","name":"serviceProvider","nameLocation":"36382:15:49","nodeType":"VariableDeclaration","scope":4633,"src":"36374:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4622,"name":"address","nodeType":"ElementaryTypeName","src":"36374:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4625,"mutability":"mutable","name":"verifier","nameLocation":"36415:8:49","nodeType":"VariableDeclaration","scope":4633,"src":"36407:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4624,"name":"address","nodeType":"ElementaryTypeName","src":"36407:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4628,"mutability":"mutable","name":"paymentType","nameLocation":"36461:11:49","nodeType":"VariableDeclaration","scope":4633,"src":"36433:39:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":4627,"nodeType":"UserDefinedTypeName","pathNode":{"id":4626,"name":"IGraphPayments.PaymentTypes","nameLocations":["36433:14:49","36448:12:49"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"36433:27:49"},"referencedDeclaration":3224,"src":"36433:27:49","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":4630,"mutability":"mutable","name":"feeCut","nameLocation":"36490:6:49","nodeType":"VariableDeclaration","scope":4633,"src":"36482:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4629,"name":"uint256","nodeType":"ElementaryTypeName","src":"36482:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36364:138:49"},"returnParameters":{"id":4632,"nodeType":"ParameterList","parameters":[],"src":"36511:0:49"},"scope":4746,"src":"36336:176:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4634,"nodeType":"StructuredDocumentation","src":"36518:410:49","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":4641,"implemented":false,"kind":"function","modifiers":[],"name":"delegate","nameLocation":"36942:8:49","nodeType":"FunctionDefinition","parameters":{"id":4639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4636,"mutability":"mutable","name":"serviceProvider","nameLocation":"36959:15:49","nodeType":"VariableDeclaration","scope":4641,"src":"36951:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4635,"name":"address","nodeType":"ElementaryTypeName","src":"36951:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4638,"mutability":"mutable","name":"tokens","nameLocation":"36984:6:49","nodeType":"VariableDeclaration","scope":4641,"src":"36976:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4637,"name":"uint256","nodeType":"ElementaryTypeName","src":"36976:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36950:41:49"},"returnParameters":{"id":4640,"nodeType":"ParameterList","parameters":[],"src":"37000:0:49"},"scope":4746,"src":"36933:68:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4642,"nodeType":"StructuredDocumentation","src":"37007:407:49","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":4649,"implemented":false,"kind":"function","modifiers":[],"name":"undelegate","nameLocation":"37428:10:49","nodeType":"FunctionDefinition","parameters":{"id":4647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4644,"mutability":"mutable","name":"serviceProvider","nameLocation":"37447:15:49","nodeType":"VariableDeclaration","scope":4649,"src":"37439:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4643,"name":"address","nodeType":"ElementaryTypeName","src":"37439:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4646,"mutability":"mutable","name":"shares","nameLocation":"37472:6:49","nodeType":"VariableDeclaration","scope":4649,"src":"37464:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4645,"name":"uint256","nodeType":"ElementaryTypeName","src":"37464:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37438:41:49"},"returnParameters":{"id":4648,"nodeType":"ParameterList","parameters":[],"src":"37488:0:49"},"scope":4746,"src":"37419:70:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4650,"nodeType":"StructuredDocumentation","src":"37495:485:49","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 tokens undelegated before horizon upgrade.\n @dev See {delegate}.\n @param serviceProvider The service provider address\n @param deprecated Deprecated parameter kept for backwards compatibility\n @return The amount of tokens withdrawn"},"functionSelector":"51a60b02","id":4659,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawDelegated","nameLocation":"37994:17:49","nodeType":"FunctionDefinition","parameters":{"id":4655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4652,"mutability":"mutable","name":"serviceProvider","nameLocation":"38029:15:49","nodeType":"VariableDeclaration","scope":4659,"src":"38021:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4651,"name":"address","nodeType":"ElementaryTypeName","src":"38021:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4654,"mutability":"mutable","name":"deprecated","nameLocation":"38062:10:49","nodeType":"VariableDeclaration","scope":4659,"src":"38054:18:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4653,"name":"address","nodeType":"ElementaryTypeName","src":"38054:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"38011:103:49"},"returnParameters":{"id":4658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4659,"src":"38133:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4656,"name":"uint256","nodeType":"ElementaryTypeName","src":"38133:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38132:9:49"},"scope":4746,"src":"37985:157:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4660,"nodeType":"StructuredDocumentation","src":"38148:1190:49","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":4671,"implemented":false,"kind":"function","modifiers":[],"name":"slash","nameLocation":"39352:5:49","nodeType":"FunctionDefinition","parameters":{"id":4669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4662,"mutability":"mutable","name":"serviceProvider","nameLocation":"39375:15:49","nodeType":"VariableDeclaration","scope":4671,"src":"39367:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4661,"name":"address","nodeType":"ElementaryTypeName","src":"39367:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4664,"mutability":"mutable","name":"tokens","nameLocation":"39408:6:49","nodeType":"VariableDeclaration","scope":4671,"src":"39400:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4663,"name":"uint256","nodeType":"ElementaryTypeName","src":"39400:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4666,"mutability":"mutable","name":"tokensVerifier","nameLocation":"39432:14:49","nodeType":"VariableDeclaration","scope":4671,"src":"39424:22:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4665,"name":"uint256","nodeType":"ElementaryTypeName","src":"39424:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4668,"mutability":"mutable","name":"verifierDestination","nameLocation":"39464:19:49","nodeType":"VariableDeclaration","scope":4671,"src":"39456:27:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4667,"name":"address","nodeType":"ElementaryTypeName","src":"39456:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"39357:132:49"},"returnParameters":{"id":4670,"nodeType":"ParameterList","parameters":[],"src":"39498:0:49"},"scope":4746,"src":"39343:156:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4672,"nodeType":"StructuredDocumentation","src":"39505:769:49","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":4685,"implemented":false,"kind":"function","modifiers":[],"name":"provisionLocked","nameLocation":"40288:15:49","nodeType":"FunctionDefinition","parameters":{"id":4683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4674,"mutability":"mutable","name":"serviceProvider","nameLocation":"40321:15:49","nodeType":"VariableDeclaration","scope":4685,"src":"40313:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4673,"name":"address","nodeType":"ElementaryTypeName","src":"40313:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4676,"mutability":"mutable","name":"verifier","nameLocation":"40354:8:49","nodeType":"VariableDeclaration","scope":4685,"src":"40346:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4675,"name":"address","nodeType":"ElementaryTypeName","src":"40346:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4678,"mutability":"mutable","name":"tokens","nameLocation":"40380:6:49","nodeType":"VariableDeclaration","scope":4685,"src":"40372:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4677,"name":"uint256","nodeType":"ElementaryTypeName","src":"40372:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4680,"mutability":"mutable","name":"maxVerifierCut","nameLocation":"40403:14:49","nodeType":"VariableDeclaration","scope":4685,"src":"40396:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4679,"name":"uint32","nodeType":"ElementaryTypeName","src":"40396:6:49","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4682,"mutability":"mutable","name":"thawingPeriod","nameLocation":"40434:13:49","nodeType":"VariableDeclaration","scope":4685,"src":"40427:20:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4681,"name":"uint64","nodeType":"ElementaryTypeName","src":"40427:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"40303:150:49"},"returnParameters":{"id":4684,"nodeType":"ParameterList","parameters":[],"src":"40462:0:49"},"scope":4746,"src":"40279:184:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4686,"nodeType":"StructuredDocumentation","src":"40469:474:49","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":4695,"implemented":false,"kind":"function","modifiers":[],"name":"setOperatorLocked","nameLocation":"40957:17:49","nodeType":"FunctionDefinition","parameters":{"id":4693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4688,"mutability":"mutable","name":"verifier","nameLocation":"40983:8:49","nodeType":"VariableDeclaration","scope":4695,"src":"40975:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4687,"name":"address","nodeType":"ElementaryTypeName","src":"40975:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4690,"mutability":"mutable","name":"operator","nameLocation":"41001:8:49","nodeType":"VariableDeclaration","scope":4695,"src":"40993:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4689,"name":"address","nodeType":"ElementaryTypeName","src":"40993:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4692,"mutability":"mutable","name":"allowed","nameLocation":"41016:7:49","nodeType":"VariableDeclaration","scope":4695,"src":"41011:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4691,"name":"bool","nodeType":"ElementaryTypeName","src":"41011:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"40974:50:49"},"returnParameters":{"id":4694,"nodeType":"ParameterList","parameters":[],"src":"41033:0:49"},"scope":4746,"src":"40948:86:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4696,"nodeType":"StructuredDocumentation","src":"41040:449:49","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":4703,"implemented":false,"kind":"function","modifiers":[],"name":"setAllowedLockedVerifier","nameLocation":"41503:24:49","nodeType":"FunctionDefinition","parameters":{"id":4701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4698,"mutability":"mutable","name":"verifier","nameLocation":"41536:8:49","nodeType":"VariableDeclaration","scope":4703,"src":"41528:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4697,"name":"address","nodeType":"ElementaryTypeName","src":"41528:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4700,"mutability":"mutable","name":"allowed","nameLocation":"41551:7:49","nodeType":"VariableDeclaration","scope":4703,"src":"41546:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4699,"name":"bool","nodeType":"ElementaryTypeName","src":"41546:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"41527:32:49"},"returnParameters":{"id":4702,"nodeType":"ParameterList","parameters":[],"src":"41568:0:49"},"scope":4746,"src":"41494:75:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4704,"nodeType":"StructuredDocumentation","src":"41575:146:49","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":4707,"implemented":false,"kind":"function","modifiers":[],"name":"setDelegationSlashingEnabled","nameLocation":"41735:28:49","nodeType":"FunctionDefinition","parameters":{"id":4705,"nodeType":"ParameterList","parameters":[],"src":"41763:2:49"},"returnParameters":{"id":4706,"nodeType":"ParameterList","parameters":[],"src":"41774:0:49"},"scope":4746,"src":"41726:49:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4708,"nodeType":"StructuredDocumentation","src":"41781:293:49","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":4711,"implemented":false,"kind":"function","modifiers":[],"name":"clearThawingPeriod","nameLocation":"42088:18:49","nodeType":"FunctionDefinition","parameters":{"id":4709,"nodeType":"ParameterList","parameters":[],"src":"42106:2:49"},"returnParameters":{"id":4710,"nodeType":"ParameterList","parameters":[],"src":"42117:0:49"},"scope":4746,"src":"42079:39:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4712,"nodeType":"StructuredDocumentation","src":"42124:163:49","text":" @notice Sets the global maximum thawing period allowed for provisions.\n @param maxThawingPeriod The new maximum thawing period, in seconds"},"functionSelector":"259bc435","id":4717,"implemented":false,"kind":"function","modifiers":[],"name":"setMaxThawingPeriod","nameLocation":"42301:19:49","nodeType":"FunctionDefinition","parameters":{"id":4715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4714,"mutability":"mutable","name":"maxThawingPeriod","nameLocation":"42328:16:49","nodeType":"VariableDeclaration","scope":4717,"src":"42321:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4713,"name":"uint64","nodeType":"ElementaryTypeName","src":"42321:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"42320:25:49"},"returnParameters":{"id":4716,"nodeType":"ParameterList","parameters":[],"src":"42354:0:49"},"scope":4746,"src":"42292:63:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4718,"nodeType":"StructuredDocumentation","src":"42361:368:49","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":4727,"implemented":false,"kind":"function","modifiers":[],"name":"setOperator","nameLocation":"42743:11:49","nodeType":"FunctionDefinition","parameters":{"id":4725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4720,"mutability":"mutable","name":"verifier","nameLocation":"42763:8:49","nodeType":"VariableDeclaration","scope":4727,"src":"42755:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4719,"name":"address","nodeType":"ElementaryTypeName","src":"42755:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4722,"mutability":"mutable","name":"operator","nameLocation":"42781:8:49","nodeType":"VariableDeclaration","scope":4727,"src":"42773:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4721,"name":"address","nodeType":"ElementaryTypeName","src":"42773:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4724,"mutability":"mutable","name":"allowed","nameLocation":"42796:7:49","nodeType":"VariableDeclaration","scope":4727,"src":"42791:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4723,"name":"bool","nodeType":"ElementaryTypeName","src":"42791:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"42754:50:49"},"returnParameters":{"id":4726,"nodeType":"ParameterList","parameters":[],"src":"42813:0:49"},"scope":4746,"src":"42734:80:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4728,"nodeType":"StructuredDocumentation","src":"42820:402:49","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":4739,"implemented":false,"kind":"function","modifiers":[],"name":"isAuthorized","nameLocation":"43236:12:49","nodeType":"FunctionDefinition","parameters":{"id":4735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4730,"mutability":"mutable","name":"serviceProvider","nameLocation":"43257:15:49","nodeType":"VariableDeclaration","scope":4739,"src":"43249:23:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4729,"name":"address","nodeType":"ElementaryTypeName","src":"43249:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4732,"mutability":"mutable","name":"verifier","nameLocation":"43282:8:49","nodeType":"VariableDeclaration","scope":4739,"src":"43274:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4731,"name":"address","nodeType":"ElementaryTypeName","src":"43274:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4734,"mutability":"mutable","name":"operator","nameLocation":"43300:8:49","nodeType":"VariableDeclaration","scope":4739,"src":"43292:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4733,"name":"address","nodeType":"ElementaryTypeName","src":"43292:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"43248:61:49"},"returnParameters":{"id":4738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4739,"src":"43333:4:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4736,"name":"bool","nodeType":"ElementaryTypeName","src":"43333:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"43332:6:49"},"scope":4746,"src":"43227:112:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4740,"nodeType":"StructuredDocumentation","src":"43345:120:49","text":" @notice Get the address of the staking extension.\n @return The address of the staking extension"},"functionSelector":"66ee1b28","id":4745,"implemented":false,"kind":"function","modifiers":[],"name":"getStakingExtension","nameLocation":"43479:19:49","nodeType":"FunctionDefinition","parameters":{"id":4741,"nodeType":"ParameterList","parameters":[],"src":"43498:2:49"},"returnParameters":{"id":4744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4743,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4745,"src":"43524:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4742,"name":"address","nodeType":"ElementaryTypeName","src":"43524:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"43523:9:49"},"scope":4746,"src":"43470:63:49","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4747,"src":"1145:42390:49","usedErrors":[4309,4316,4323,4330,4339,4344,4349,4356,4359,4366,4373,4380,4383,4390,4397,4404,4411,4414,4417,4420,4423,4426,4431,4436,4439,4444,4447,4450],"usedEvents":[4051,4058,4071,4080,4089,4098,4109,4120,4131,4140,4149,4158,4169,4182,4195,4206,4215,4224,4236,4256,4272,4288,4293,4300,4303,4306]}],"src":"46:43490:49"},"id":49},"contracts/horizon/internal/IHorizonStakingTypes.sol":{"ast":{"absolutePath":"contracts/horizon/internal/IHorizonStakingTypes.sol","exportedSymbols":{"IHorizonStakingTypes":[4882]},"id":4883,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4748,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:50"},{"abstract":false,"baseContracts":[],"canonicalName":"IHorizonStakingTypes","contractDependencies":[],"contractKind":"interface","documentation":{"id":4749,"nodeType":"StructuredDocumentation","src":"72:651:50","text":" @title Defines the data types used in the Horizon staking contract\n @author Edge & Node\n @notice Interface defining data types and structures for Horizon staking\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 @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":4882,"linearizedBaseContracts":[4882],"name":"IHorizonStakingTypes","nameLocation":"734:20:50","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IHorizonStakingTypes.Provision","documentation":{"id":4750,"nodeType":"StructuredDocumentation","src":"761:1299:50","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.\n @param tokens Service provider tokens in the provision (does not include delegated tokens)\n @param tokensThawing Service provider tokens that are being thawed (and will stop being slashable soon)\n @param sharesThawing Shares representing the thawing tokens\n @param maxVerifierCut Max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed\n @param thawingPeriod Time, in seconds, tokens must thaw before being withdrawn\n @param createdAt Timestamp when the provision was created\n @param maxVerifierCutPending Pending value for `maxVerifierCut`. Verifier needs to accept it before it becomes active.\n @param thawingPeriodPending Pending value for `thawingPeriod`. Verifier needs to accept it before it becomes active.\n @param lastParametersStagedAt Timestamp when the provision parameters were last staged. Can be used by data service implementation to\n implement arbitrary parameter update logic.\n @param thawingNonce Value of the current thawing nonce. Thaw requests with older nonces are invalid."},"id":4771,"members":[{"constant":false,"id":4752,"mutability":"mutable","name":"tokens","nameLocation":"2100:6:50","nodeType":"VariableDeclaration","scope":4771,"src":"2092:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4751,"name":"uint256","nodeType":"ElementaryTypeName","src":"2092:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4754,"mutability":"mutable","name":"tokensThawing","nameLocation":"2124:13:50","nodeType":"VariableDeclaration","scope":4771,"src":"2116:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4753,"name":"uint256","nodeType":"ElementaryTypeName","src":"2116:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4756,"mutability":"mutable","name":"sharesThawing","nameLocation":"2155:13:50","nodeType":"VariableDeclaration","scope":4771,"src":"2147:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4755,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4758,"mutability":"mutable","name":"maxVerifierCut","nameLocation":"2185:14:50","nodeType":"VariableDeclaration","scope":4771,"src":"2178:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4757,"name":"uint32","nodeType":"ElementaryTypeName","src":"2178:6:50","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4760,"mutability":"mutable","name":"thawingPeriod","nameLocation":"2216:13:50","nodeType":"VariableDeclaration","scope":4771,"src":"2209:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4759,"name":"uint64","nodeType":"ElementaryTypeName","src":"2209:6:50","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4762,"mutability":"mutable","name":"createdAt","nameLocation":"2246:9:50","nodeType":"VariableDeclaration","scope":4771,"src":"2239:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4761,"name":"uint64","nodeType":"ElementaryTypeName","src":"2239:6:50","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4764,"mutability":"mutable","name":"maxVerifierCutPending","nameLocation":"2272:21:50","nodeType":"VariableDeclaration","scope":4771,"src":"2265:28:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4763,"name":"uint32","nodeType":"ElementaryTypeName","src":"2265:6:50","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4766,"mutability":"mutable","name":"thawingPeriodPending","nameLocation":"2310:20:50","nodeType":"VariableDeclaration","scope":4771,"src":"2303:27:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4765,"name":"uint64","nodeType":"ElementaryTypeName","src":"2303:6:50","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4768,"mutability":"mutable","name":"lastParametersStagedAt","nameLocation":"2348:22:50","nodeType":"VariableDeclaration","scope":4771,"src":"2340:30:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4767,"name":"uint256","nodeType":"ElementaryTypeName","src":"2340:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4770,"mutability":"mutable","name":"thawingNonce","nameLocation":"2388:12:50","nodeType":"VariableDeclaration","scope":4771,"src":"2380:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4769,"name":"uint256","nodeType":"ElementaryTypeName","src":"2380:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Provision","nameLocation":"2072:9:50","nodeType":"StructDefinition","scope":4882,"src":"2065:342:50","visibility":"public"},{"canonicalName":"IHorizonStakingTypes.ServiceProvider","documentation":{"id":4772,"nodeType":"StructuredDocumentation","src":"2413:384:50","text":" @notice Public representation of a service provider.\n @dev See {ServiceProviderInternal} for the actual storage representation\n @param tokensStaked Total amount of tokens on the provider stake (only staked by the provider, includes all provisions)\n @param tokensProvisioned Total amount of tokens locked in provisions (only staked by the provider)"},"id":4777,"members":[{"constant":false,"id":4774,"mutability":"mutable","name":"tokensStaked","nameLocation":"2843:12:50","nodeType":"VariableDeclaration","scope":4777,"src":"2835:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4773,"name":"uint256","nodeType":"ElementaryTypeName","src":"2835:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4776,"mutability":"mutable","name":"tokensProvisioned","nameLocation":"2873:17:50","nodeType":"VariableDeclaration","scope":4777,"src":"2865:25:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4775,"name":"uint256","nodeType":"ElementaryTypeName","src":"2865:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ServiceProvider","nameLocation":"2809:15:50","nodeType":"StructDefinition","scope":4882,"src":"2802:95:50","visibility":"public"},{"canonicalName":"IHorizonStakingTypes.ServiceProviderInternal","documentation":{"id":4778,"nodeType":"StructuredDocumentation","src":"2903:700:50","text":" @notice Internal representation of a service provider.\n @dev It contains deprecated fields from the `Indexer` struct to maintain storage compatibility.\n @param tokensStaked Total amount of tokens on the provider stake (only staked by the provider, includes all provisions)\n @param __DEPRECATED_tokensAllocated (Deprecated) Tokens used in allocations\n @param __DEPRECATED_tokensLocked (Deprecated) Tokens locked for withdrawal subject to thawing period\n @param __DEPRECATED_tokensLockedUntil (Deprecated) Block when locked tokens can be withdrawn\n @param tokensProvisioned Total amount of tokens locked in provisions (only staked by the provider)"},"id":4789,"members":[{"constant":false,"id":4780,"mutability":"mutable","name":"tokensStaked","nameLocation":"3657:12:50","nodeType":"VariableDeclaration","scope":4789,"src":"3649:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4779,"name":"uint256","nodeType":"ElementaryTypeName","src":"3649:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4782,"mutability":"mutable","name":"__DEPRECATED_tokensAllocated","nameLocation":"3687:28:50","nodeType":"VariableDeclaration","scope":4789,"src":"3679:36:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4781,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4784,"mutability":"mutable","name":"__DEPRECATED_tokensLocked","nameLocation":"3733:25:50","nodeType":"VariableDeclaration","scope":4789,"src":"3725:33:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4783,"name":"uint256","nodeType":"ElementaryTypeName","src":"3725:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4786,"mutability":"mutable","name":"__DEPRECATED_tokensLockedUntil","nameLocation":"3776:30:50","nodeType":"VariableDeclaration","scope":4789,"src":"3768:38:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4785,"name":"uint256","nodeType":"ElementaryTypeName","src":"3768:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4788,"mutability":"mutable","name":"tokensProvisioned","nameLocation":"3824:17:50","nodeType":"VariableDeclaration","scope":4789,"src":"3816:25:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4787,"name":"uint256","nodeType":"ElementaryTypeName","src":"3816:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ServiceProviderInternal","nameLocation":"3615:23:50","nodeType":"StructDefinition","scope":4882,"src":"3608:240:50","visibility":"public"},{"canonicalName":"IHorizonStakingTypes.DelegationPool","documentation":{"id":4790,"nodeType":"StructuredDocumentation","src":"3854:483:50","text":" @notice Public representation of a delegation pool.\n @dev See {DelegationPoolInternal} for the actual storage representation\n @param tokens Total tokens as pool reserves\n @param shares Total shares minted in the pool\n @param tokensThawing Tokens thawing in the pool\n @param sharesThawing Shares representing the thawing tokens\n @param thawingNonce Value of the current thawing nonce. Thaw requests with older nonces are invalid."},"id":4801,"members":[{"constant":false,"id":4792,"mutability":"mutable","name":"tokens","nameLocation":"4382:6:50","nodeType":"VariableDeclaration","scope":4801,"src":"4374:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4791,"name":"uint256","nodeType":"ElementaryTypeName","src":"4374:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4794,"mutability":"mutable","name":"shares","nameLocation":"4406:6:50","nodeType":"VariableDeclaration","scope":4801,"src":"4398:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4793,"name":"uint256","nodeType":"ElementaryTypeName","src":"4398:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4796,"mutability":"mutable","name":"tokensThawing","nameLocation":"4430:13:50","nodeType":"VariableDeclaration","scope":4801,"src":"4422:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4795,"name":"uint256","nodeType":"ElementaryTypeName","src":"4422:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4798,"mutability":"mutable","name":"sharesThawing","nameLocation":"4461:13:50","nodeType":"VariableDeclaration","scope":4801,"src":"4453:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4797,"name":"uint256","nodeType":"ElementaryTypeName","src":"4453:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4800,"mutability":"mutable","name":"thawingNonce","nameLocation":"4492:12:50","nodeType":"VariableDeclaration","scope":4801,"src":"4484:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4799,"name":"uint256","nodeType":"ElementaryTypeName","src":"4484:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"DelegationPool","nameLocation":"4349:14:50","nodeType":"StructDefinition","scope":4882,"src":"4342:169:50","visibility":"public"},{"canonicalName":"IHorizonStakingTypes.DelegationPoolInternal","documentation":{"id":4802,"nodeType":"StructuredDocumentation","src":"4517:1077:50","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.\n @param __DEPRECATED_cooldownBlocks (Deprecated) Time, in blocks, an indexer must wait before updating delegation parameters\n @param __DEPRECATED_indexingRewardCut (Deprecated) Percentage of indexing rewards for the service provider, in PPM\n @param __DEPRECATED_queryFeeCut (Deprecated) Percentage of query fees for the service provider, in PPM\n @param __DEPRECATED_updatedAtBlock (Deprecated) Block when the delegation parameters were last updated\n @param tokens Total tokens as pool reserves\n @param shares Total shares minted in the pool\n @param delegators Delegation details by delegator\n @param tokensThawing Tokens thawing in the pool\n @param sharesThawing Shares representing the thawing tokens\n @param thawingNonce Value of the current thawing nonce. Thaw requests with older nonces are invalid."},"id":4826,"members":[{"constant":false,"id":4804,"mutability":"mutable","name":"__DEPRECATED_cooldownBlocks","nameLocation":"5646:27:50","nodeType":"VariableDeclaration","scope":4826,"src":"5639:34:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4803,"name":"uint32","nodeType":"ElementaryTypeName","src":"5639:6:50","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4806,"mutability":"mutable","name":"__DEPRECATED_indexingRewardCut","nameLocation":"5690:30:50","nodeType":"VariableDeclaration","scope":4826,"src":"5683:37:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4805,"name":"uint32","nodeType":"ElementaryTypeName","src":"5683:6:50","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4808,"mutability":"mutable","name":"__DEPRECATED_queryFeeCut","nameLocation":"5737:24:50","nodeType":"VariableDeclaration","scope":4826,"src":"5730:31:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4807,"name":"uint32","nodeType":"ElementaryTypeName","src":"5730:6:50","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4810,"mutability":"mutable","name":"__DEPRECATED_updatedAtBlock","nameLocation":"5779:27:50","nodeType":"VariableDeclaration","scope":4826,"src":"5771:35:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4809,"name":"uint256","nodeType":"ElementaryTypeName","src":"5771:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4812,"mutability":"mutable","name":"tokens","nameLocation":"5824:6:50","nodeType":"VariableDeclaration","scope":4826,"src":"5816:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4811,"name":"uint256","nodeType":"ElementaryTypeName","src":"5816:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4814,"mutability":"mutable","name":"shares","nameLocation":"5848:6:50","nodeType":"VariableDeclaration","scope":4826,"src":"5840:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4813,"name":"uint256","nodeType":"ElementaryTypeName","src":"5840:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4819,"mutability":"mutable","name":"delegators","nameLocation":"5924:10:50","nodeType":"VariableDeclaration","scope":4826,"src":"5864:70:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_DelegationInternal_$4838_storage_$","typeString":"mapping(address => struct IHorizonStakingTypes.DelegationInternal)"},"typeName":{"id":4818,"keyName":"delegator","keyNameLocation":"5880:9:50","keyType":{"id":4815,"name":"address","nodeType":"ElementaryTypeName","src":"5872:7:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5864:59:50","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_DelegationInternal_$4838_storage_$","typeString":"mapping(address => struct IHorizonStakingTypes.DelegationInternal)"},"valueName":"delegation","valueNameLocation":"5912:10:50","valueType":{"id":4817,"nodeType":"UserDefinedTypeName","pathNode":{"id":4816,"name":"DelegationInternal","nameLocations":["5893:18:50"],"nodeType":"IdentifierPath","referencedDeclaration":4838,"src":"5893:18:50"},"referencedDeclaration":4838,"src":"5893:18:50","typeDescriptions":{"typeIdentifier":"t_struct$_DelegationInternal_$4838_storage_ptr","typeString":"struct IHorizonStakingTypes.DelegationInternal"}}},"visibility":"internal"},{"constant":false,"id":4821,"mutability":"mutable","name":"tokensThawing","nameLocation":"5952:13:50","nodeType":"VariableDeclaration","scope":4826,"src":"5944:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4820,"name":"uint256","nodeType":"ElementaryTypeName","src":"5944:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4823,"mutability":"mutable","name":"sharesThawing","nameLocation":"5983:13:50","nodeType":"VariableDeclaration","scope":4826,"src":"5975:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4822,"name":"uint256","nodeType":"ElementaryTypeName","src":"5975:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4825,"mutability":"mutable","name":"thawingNonce","nameLocation":"6014:12:50","nodeType":"VariableDeclaration","scope":4826,"src":"6006:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4824,"name":"uint256","nodeType":"ElementaryTypeName","src":"6006:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"DelegationPoolInternal","nameLocation":"5606:22:50","nodeType":"StructDefinition","scope":4882,"src":"5599:434:50","visibility":"public"},{"canonicalName":"IHorizonStakingTypes.Delegation","documentation":{"id":4827,"nodeType":"StructuredDocumentation","src":"6039:207:50","text":" @notice Public representation of delegation details.\n @dev See {DelegationInternal} for the actual storage representation\n @param shares Shares owned by a delegator in the pool"},"id":4830,"members":[{"constant":false,"id":4829,"mutability":"mutable","name":"shares","nameLocation":"6287:6:50","nodeType":"VariableDeclaration","scope":4830,"src":"6279:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4828,"name":"uint256","nodeType":"ElementaryTypeName","src":"6279:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Delegation","nameLocation":"6258:10:50","nodeType":"StructDefinition","scope":4882,"src":"6251:49:50","visibility":"public"},{"canonicalName":"IHorizonStakingTypes.DelegationInternal","documentation":{"id":4831,"nodeType":"StructuredDocumentation","src":"6306:431:50","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.\n @param shares Shares owned by the delegator in the pool\n @param __DEPRECATED_tokensLocked Tokens locked for undelegation\n @param __DEPRECATED_tokensLockedUntil Epoch when locked tokens can be withdrawn"},"id":4838,"members":[{"constant":false,"id":4833,"mutability":"mutable","name":"shares","nameLocation":"6786:6:50","nodeType":"VariableDeclaration","scope":4838,"src":"6778:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4832,"name":"uint256","nodeType":"ElementaryTypeName","src":"6778:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4835,"mutability":"mutable","name":"__DEPRECATED_tokensLocked","nameLocation":"6810:25:50","nodeType":"VariableDeclaration","scope":4838,"src":"6802:33:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4834,"name":"uint256","nodeType":"ElementaryTypeName","src":"6802:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4837,"mutability":"mutable","name":"__DEPRECATED_tokensLockedUntil","nameLocation":"6853:30:50","nodeType":"VariableDeclaration","scope":4838,"src":"6845:38:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4836,"name":"uint256","nodeType":"ElementaryTypeName","src":"6845:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"DelegationInternal","nameLocation":"6749:18:50","nodeType":"StructDefinition","scope":4882,"src":"6742:148:50","visibility":"public"},{"canonicalName":"IHorizonStakingTypes.ThawRequestType","documentation":{"id":4839,"nodeType":"StructuredDocumentation","src":"6896:201:50","text":" @dev Enum to specify the type of thaw request.\n @param Provision Represents a thaw request for a provision.\n @param Delegation Represents a thaw request for a delegation."},"id":4842,"members":[{"id":4840,"name":"Provision","nameLocation":"7133:9:50","nodeType":"EnumValue","src":"7133:9:50"},{"id":4841,"name":"Delegation","nameLocation":"7152:10:50","nodeType":"EnumValue","src":"7152:10:50"}],"name":"ThawRequestType","nameLocation":"7107:15:50","nodeType":"EnumDefinition","src":"7102:66:50"},{"canonicalName":"IHorizonStakingTypes.ThawRequest","documentation":{"id":4843,"nodeType":"StructuredDocumentation","src":"7174:494:50","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.\n @param shares Shares that represent the tokens being thawed\n @param thawingUntil The timestamp when the thawed funds can be removed from the provision\n @param nextRequest Id of the next thaw request in the linked list\n @param thawingNonce Used to invalidate unfulfilled thaw requests"},"id":4852,"members":[{"constant":false,"id":4845,"mutability":"mutable","name":"shares","nameLocation":"7710:6:50","nodeType":"VariableDeclaration","scope":4852,"src":"7702:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4844,"name":"uint256","nodeType":"ElementaryTypeName","src":"7702:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4847,"mutability":"mutable","name":"thawingUntil","nameLocation":"7733:12:50","nodeType":"VariableDeclaration","scope":4852,"src":"7726:19:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4846,"name":"uint64","nodeType":"ElementaryTypeName","src":"7726:6:50","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4849,"mutability":"mutable","name":"nextRequest","nameLocation":"7763:11:50","nodeType":"VariableDeclaration","scope":4852,"src":"7755:19:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4848,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7755:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4851,"mutability":"mutable","name":"thawingNonce","nameLocation":"7792:12:50","nodeType":"VariableDeclaration","scope":4852,"src":"7784:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4850,"name":"uint256","nodeType":"ElementaryTypeName","src":"7784:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ThawRequest","nameLocation":"7680:11:50","nodeType":"StructDefinition","scope":4882,"src":"7673:138:50","visibility":"public"},{"canonicalName":"IHorizonStakingTypes.FulfillThawRequestsParams","documentation":{"id":4853,"nodeType":"StructuredDocumentation","src":"7817:817:50","text":" @notice Parameters to fulfill thaw requests.\n @dev This struct is used to avoid stack too deep error in the `fulfillThawRequests` function.\n @param requestType The type of thaw request (Provision or Delegation)\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 tokensThawing The current amount of tokens already thawing\n @param sharesThawing The current amount of shares already thawing\n @param nThawRequests The number of thaw requests to fulfill. If set to 0, all thaw requests are fulfilled.\n @param thawingNonce The current valid thawing nonce. Any thaw request with a different nonce is invalid and should be ignored."},"id":4871,"members":[{"constant":false,"id":4856,"mutability":"mutable","name":"requestType","nameLocation":"8698:11:50","nodeType":"VariableDeclaration","scope":4871,"src":"8682:27:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"},"typeName":{"id":4855,"nodeType":"UserDefinedTypeName","pathNode":{"id":4854,"name":"ThawRequestType","nameLocations":["8682:15:50"],"nodeType":"IdentifierPath","referencedDeclaration":4842,"src":"8682:15:50"},"referencedDeclaration":4842,"src":"8682:15:50","typeDescriptions":{"typeIdentifier":"t_enum$_ThawRequestType_$4842","typeString":"enum IHorizonStakingTypes.ThawRequestType"}},"visibility":"internal"},{"constant":false,"id":4858,"mutability":"mutable","name":"serviceProvider","nameLocation":"8727:15:50","nodeType":"VariableDeclaration","scope":4871,"src":"8719:23:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4857,"name":"address","nodeType":"ElementaryTypeName","src":"8719:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4860,"mutability":"mutable","name":"verifier","nameLocation":"8760:8:50","nodeType":"VariableDeclaration","scope":4871,"src":"8752:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4859,"name":"address","nodeType":"ElementaryTypeName","src":"8752:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4862,"mutability":"mutable","name":"owner","nameLocation":"8786:5:50","nodeType":"VariableDeclaration","scope":4871,"src":"8778:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4861,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4864,"mutability":"mutable","name":"tokensThawing","nameLocation":"8809:13:50","nodeType":"VariableDeclaration","scope":4871,"src":"8801:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4863,"name":"uint256","nodeType":"ElementaryTypeName","src":"8801:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4866,"mutability":"mutable","name":"sharesThawing","nameLocation":"8840:13:50","nodeType":"VariableDeclaration","scope":4871,"src":"8832:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4865,"name":"uint256","nodeType":"ElementaryTypeName","src":"8832:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4868,"mutability":"mutable","name":"nThawRequests","nameLocation":"8871:13:50","nodeType":"VariableDeclaration","scope":4871,"src":"8863:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4867,"name":"uint256","nodeType":"ElementaryTypeName","src":"8863:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4870,"mutability":"mutable","name":"thawingNonce","nameLocation":"8902:12:50","nodeType":"VariableDeclaration","scope":4871,"src":"8894:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4869,"name":"uint256","nodeType":"ElementaryTypeName","src":"8894:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"FulfillThawRequestsParams","nameLocation":"8646:25:50","nodeType":"StructDefinition","scope":4882,"src":"8639:282:50","visibility":"public"},{"canonicalName":"IHorizonStakingTypes.TraverseThawRequestsResults","documentation":{"id":4872,"nodeType":"StructuredDocumentation","src":"8927:427:50","text":" @notice Results of the traversal of thaw requests.\n @dev This struct is used to avoid stack too deep error in the `fulfillThawRequests` function.\n @param requestsFulfilled The number of thaw requests fulfilled\n @param tokensThawed The total amount of tokens thawed\n @param tokensThawing The total amount of tokens thawing\n @param sharesThawing The total amount of shares thawing"},"id":4881,"members":[{"constant":false,"id":4874,"mutability":"mutable","name":"requestsFulfilled","nameLocation":"9412:17:50","nodeType":"VariableDeclaration","scope":4881,"src":"9404:25:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4873,"name":"uint256","nodeType":"ElementaryTypeName","src":"9404:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4876,"mutability":"mutable","name":"tokensThawed","nameLocation":"9447:12:50","nodeType":"VariableDeclaration","scope":4881,"src":"9439:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4875,"name":"uint256","nodeType":"ElementaryTypeName","src":"9439:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4878,"mutability":"mutable","name":"tokensThawing","nameLocation":"9477:13:50","nodeType":"VariableDeclaration","scope":4881,"src":"9469:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4877,"name":"uint256","nodeType":"ElementaryTypeName","src":"9469:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4880,"mutability":"mutable","name":"sharesThawing","nameLocation":"9508:13:50","nodeType":"VariableDeclaration","scope":4881,"src":"9500:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4879,"name":"uint256","nodeType":"ElementaryTypeName","src":"9500:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"TraverseThawRequestsResults","nameLocation":"9366:27:50","nodeType":"StructDefinition","scope":4882,"src":"9359:169:50","visibility":"public"}],"scope":4883,"src":"724:8806:50","usedErrors":[],"usedEvents":[]}],"src":"46:9485:50"},"id":50},"contracts/horizon/internal/ILinkedList.sol":{"ast":{"absolutePath":"contracts/horizon/internal/ILinkedList.sol","exportedSymbols":{"ILinkedList":[4908]},"id":4909,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4884,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:51"},{"abstract":false,"baseContracts":[],"canonicalName":"ILinkedList","contractDependencies":[],"contractKind":"interface","documentation":{"id":4885,"nodeType":"StructuredDocumentation","src":"72:291:51","text":" @title Interface for the {LinkedList} library contract.\n @author Edge & Node\n @notice Interface for managing linked list data structures\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":4908,"linearizedBaseContracts":[4908],"name":"ILinkedList","nameLocation":"374:11:51","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ILinkedList.List","documentation":{"id":4886,"nodeType":"StructuredDocumentation","src":"392:264:51","text":" @notice Represents a linked list\n @param head The head of the list\n @param tail The tail of the list\n @param nonce A nonce, which can optionally be used to generate unique ids\n @param count The number of items in the list"},"id":4895,"members":[{"constant":false,"id":4888,"mutability":"mutable","name":"head","nameLocation":"691:4:51","nodeType":"VariableDeclaration","scope":4895,"src":"683:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4887,"name":"bytes32","nodeType":"ElementaryTypeName","src":"683:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4890,"mutability":"mutable","name":"tail","nameLocation":"713:4:51","nodeType":"VariableDeclaration","scope":4895,"src":"705:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4889,"name":"bytes32","nodeType":"ElementaryTypeName","src":"705:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4892,"mutability":"mutable","name":"nonce","nameLocation":"735:5:51","nodeType":"VariableDeclaration","scope":4895,"src":"727:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4891,"name":"uint256","nodeType":"ElementaryTypeName","src":"727:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4894,"mutability":"mutable","name":"count","nameLocation":"758:5:51","nodeType":"VariableDeclaration","scope":4895,"src":"750:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4893,"name":"uint256","nodeType":"ElementaryTypeName","src":"750:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"List","nameLocation":"668:4:51","nodeType":"StructDefinition","scope":4908,"src":"661:109:51","visibility":"public"},{"documentation":{"id":4896,"nodeType":"StructuredDocumentation","src":"776:82:51","text":" @notice Thrown when trying to remove an item from an empty list"},"errorSelector":"ddaf8f21","id":4898,"name":"LinkedListEmptyList","nameLocation":"869:19:51","nodeType":"ErrorDefinition","parameters":{"id":4897,"nodeType":"ParameterList","parameters":[],"src":"888:2:51"},"src":"863:28:51"},{"documentation":{"id":4899,"nodeType":"StructuredDocumentation","src":"897:118:51","text":" @notice Thrown when trying to add an item to a list that has reached the maximum number of elements"},"errorSelector":"ea315ac0","id":4901,"name":"LinkedListMaxElementsExceeded","nameLocation":"1026:29:51","nodeType":"ErrorDefinition","parameters":{"id":4900,"nodeType":"ParameterList","parameters":[],"src":"1055:2:51"},"src":"1020:38:51"},{"documentation":{"id":4902,"nodeType":"StructuredDocumentation","src":"1064:99:51","text":" @notice Thrown when trying to traverse a list with more iterations than elements"},"errorSelector":"9482373a","id":4904,"name":"LinkedListInvalidIterations","nameLocation":"1174:27:51","nodeType":"ErrorDefinition","parameters":{"id":4903,"nodeType":"ParameterList","parameters":[],"src":"1201:2:51"},"src":"1168:36:51"},{"documentation":{"id":4905,"nodeType":"StructuredDocumentation","src":"1210:88:51","text":" @notice Thrown when trying to add an item with id equal to bytes32(0)"},"errorSelector":"8f4a893d","id":4907,"name":"LinkedListInvalidZeroId","nameLocation":"1309:23:51","nodeType":"ErrorDefinition","parameters":{"id":4906,"nodeType":"ParameterList","parameters":[],"src":"1332:2:51"},"src":"1303:32:51"}],"scope":4909,"src":"364:973:51","usedErrors":[4898,4901,4904,4907],"usedEvents":[]}],"src":"46:1292:51"},"id":51},"contracts/subgraph-service/IDisputeManager.sol":{"ast":{"absolutePath":"contracts/subgraph-service/IDisputeManager.sol","exportedSymbols":{"IAttestation":[5713],"IDisputeManager":[5383]},"id":5384,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4910,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:52"},{"absolutePath":"contracts/subgraph-service/internal/IAttestation.sol","file":"./internal/IAttestation.sol","id":4912,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5384,"sourceUnit":5714,"src":"175:59:52","symbolAliases":[{"foreign":{"id":4911,"name":"IAttestation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5713,"src":"184:12:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IDisputeManager","contractDependencies":[],"contractKind":"interface","documentation":{"id":4913,"nodeType":"StructuredDocumentation","src":"236:253:52","text":" @title IDisputeManager\n @author Edge & Node\n @notice Interface for the {Dispute Manager} 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":false,"id":5383,"linearizedBaseContracts":[5383],"name":"IDisputeManager","nameLocation":"500:15:52","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IDisputeManager.DisputeType","documentation":{"id":4914,"nodeType":"StructuredDocumentation","src":"522:49:52","text":"@notice Types of disputes that can be created"},"id":4919,"members":[{"id":4915,"name":"Null","nameLocation":"603:4:52","nodeType":"EnumValue","src":"603:4:52"},{"id":4916,"name":"IndexingDispute","nameLocation":"617:15:52","nodeType":"EnumValue","src":"617:15:52"},{"id":4917,"name":"QueryDispute","nameLocation":"642:12:52","nodeType":"EnumValue","src":"642:12:52"},{"id":4918,"name":"LegacyDispute","nameLocation":"664:13:52","nodeType":"EnumValue","src":"664:13:52"}],"name":"DisputeType","nameLocation":"581:11:52","nodeType":"EnumDefinition","src":"576:107:52"},{"canonicalName":"IDisputeManager.DisputeStatus","documentation":{"id":4920,"nodeType":"StructuredDocumentation","src":"689:31:52","text":"@notice Status of a dispute"},"id":4927,"members":[{"id":4921,"name":"Null","nameLocation":"754:4:52","nodeType":"EnumValue","src":"754:4:52"},{"id":4922,"name":"Accepted","nameLocation":"768:8:52","nodeType":"EnumValue","src":"768:8:52"},{"id":4923,"name":"Rejected","nameLocation":"786:8:52","nodeType":"EnumValue","src":"786:8:52"},{"id":4924,"name":"Drawn","nameLocation":"804:5:52","nodeType":"EnumValue","src":"804:5:52"},{"id":4925,"name":"Pending","nameLocation":"819:7:52","nodeType":"EnumValue","src":"819:7:52"},{"id":4926,"name":"Cancelled","nameLocation":"836:9:52","nodeType":"EnumValue","src":"836:9:52"}],"name":"DisputeStatus","nameLocation":"730:13:52","nodeType":"EnumDefinition","src":"725:126:52"},{"canonicalName":"IDisputeManager.Dispute","documentation":{"id":4928,"nodeType":"StructuredDocumentation","src":"857:724:52","text":" @notice Dispute details\n @param indexer The indexer that is being disputed\n @param fisherman The fisherman that created the dispute\n @param deposit The amount of tokens deposited by the fisherman\n @param relatedDisputeId The link to a related dispute, used when creating dispute via conflicting attestations\n @param disputeType The type of dispute\n @param status The status of the dispute\n @param createdAt The timestamp when the dispute was created\n @param cancellableAt The timestamp when the dispute can be cancelled\n @param stakeSnapshot The stake snapshot of the indexer at the time of the dispute (includes delegation up to the delegation ratio)"},"id":4949,"members":[{"constant":false,"id":4930,"mutability":"mutable","name":"indexer","nameLocation":"1619:7:52","nodeType":"VariableDeclaration","scope":4949,"src":"1611:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4929,"name":"address","nodeType":"ElementaryTypeName","src":"1611:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4932,"mutability":"mutable","name":"fisherman","nameLocation":"1644:9:52","nodeType":"VariableDeclaration","scope":4949,"src":"1636:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4931,"name":"address","nodeType":"ElementaryTypeName","src":"1636:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4934,"mutability":"mutable","name":"deposit","nameLocation":"1671:7:52","nodeType":"VariableDeclaration","scope":4949,"src":"1663:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4933,"name":"uint256","nodeType":"ElementaryTypeName","src":"1663:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4936,"mutability":"mutable","name":"relatedDisputeId","nameLocation":"1696:16:52","nodeType":"VariableDeclaration","scope":4949,"src":"1688:24:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4935,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1688:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4939,"mutability":"mutable","name":"disputeType","nameLocation":"1734:11:52","nodeType":"VariableDeclaration","scope":4949,"src":"1722:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DisputeType_$4919","typeString":"enum IDisputeManager.DisputeType"},"typeName":{"id":4938,"nodeType":"UserDefinedTypeName","pathNode":{"id":4937,"name":"DisputeType","nameLocations":["1722:11:52"],"nodeType":"IdentifierPath","referencedDeclaration":4919,"src":"1722:11:52"},"referencedDeclaration":4919,"src":"1722:11:52","typeDescriptions":{"typeIdentifier":"t_enum$_DisputeType_$4919","typeString":"enum IDisputeManager.DisputeType"}},"visibility":"internal"},{"constant":false,"id":4942,"mutability":"mutable","name":"status","nameLocation":"1769:6:52","nodeType":"VariableDeclaration","scope":4949,"src":"1755:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DisputeStatus_$4927","typeString":"enum IDisputeManager.DisputeStatus"},"typeName":{"id":4941,"nodeType":"UserDefinedTypeName","pathNode":{"id":4940,"name":"DisputeStatus","nameLocations":["1755:13:52"],"nodeType":"IdentifierPath","referencedDeclaration":4927,"src":"1755:13:52"},"referencedDeclaration":4927,"src":"1755:13:52","typeDescriptions":{"typeIdentifier":"t_enum$_DisputeStatus_$4927","typeString":"enum IDisputeManager.DisputeStatus"}},"visibility":"internal"},{"constant":false,"id":4944,"mutability":"mutable","name":"createdAt","nameLocation":"1793:9:52","nodeType":"VariableDeclaration","scope":4949,"src":"1785:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4943,"name":"uint256","nodeType":"ElementaryTypeName","src":"1785:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4946,"mutability":"mutable","name":"cancellableAt","nameLocation":"1820:13:52","nodeType":"VariableDeclaration","scope":4949,"src":"1812:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4945,"name":"uint256","nodeType":"ElementaryTypeName","src":"1812:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4948,"mutability":"mutable","name":"stakeSnapshot","nameLocation":"1851:13:52","nodeType":"VariableDeclaration","scope":4949,"src":"1843:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4947,"name":"uint256","nodeType":"ElementaryTypeName","src":"1843:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Dispute","nameLocation":"1593:7:52","nodeType":"StructDefinition","scope":5383,"src":"1586:285:52","visibility":"public"},{"anonymous":false,"documentation":{"id":4950,"nodeType":"StructuredDocumentation","src":"1877:114:52","text":" @notice Emitted when arbitrator is set.\n @param arbitrator The address of the arbitrator."},"eventSelector":"51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e","id":4954,"name":"ArbitratorSet","nameLocation":"2002:13:52","nodeType":"EventDefinition","parameters":{"id":4953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4952,"indexed":true,"mutability":"mutable","name":"arbitrator","nameLocation":"2032:10:52","nodeType":"VariableDeclaration","scope":4954,"src":"2016:26:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4951,"name":"address","nodeType":"ElementaryTypeName","src":"2016:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2015:28:52"},"src":"1996:48:52"},{"anonymous":false,"documentation":{"id":4955,"nodeType":"StructuredDocumentation","src":"2050:121:52","text":" @notice Emitted when dispute period is set.\n @param disputePeriod The dispute period in seconds."},"eventSelector":"310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6","id":4959,"name":"DisputePeriodSet","nameLocation":"2182:16:52","nodeType":"EventDefinition","parameters":{"id":4958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4957,"indexed":false,"mutability":"mutable","name":"disputePeriod","nameLocation":"2206:13:52","nodeType":"VariableDeclaration","scope":4959,"src":"2199:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4956,"name":"uint64","nodeType":"ElementaryTypeName","src":"2199:6:52","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"2198:22:52"},"src":"2176:45:52"},{"anonymous":false,"documentation":{"id":4960,"nodeType":"StructuredDocumentation","src":"2227:142:52","text":" @notice Emitted when dispute deposit is set.\n @param disputeDeposit The dispute deposit required to create a dispute."},"eventSelector":"97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8","id":4964,"name":"DisputeDepositSet","nameLocation":"2380:17:52","nodeType":"EventDefinition","parameters":{"id":4963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4962,"indexed":false,"mutability":"mutable","name":"disputeDeposit","nameLocation":"2406:14:52","nodeType":"VariableDeclaration","scope":4964,"src":"2398:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4961,"name":"uint256","nodeType":"ElementaryTypeName","src":"2398:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2397:24:52"},"src":"2374:48:52"},{"anonymous":false,"documentation":{"id":4965,"nodeType":"StructuredDocumentation","src":"2428: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":4969,"name":"MaxSlashingCutSet","nameLocation":"2574:17:52","nodeType":"EventDefinition","parameters":{"id":4968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4967,"indexed":false,"mutability":"mutable","name":"maxSlashingCut","nameLocation":"2599:14:52","nodeType":"VariableDeclaration","scope":4969,"src":"2592:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4966,"name":"uint32","nodeType":"ElementaryTypeName","src":"2592:6:52","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2591:23:52"},"src":"2568:47:52"},{"anonymous":false,"documentation":{"id":4970,"nodeType":"StructuredDocumentation","src":"2621:127:52","text":" @notice Emitted when fisherman reward cut is set.\n @param fishermanRewardCut The fisherman reward cut."},"eventSelector":"c573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab","id":4974,"name":"FishermanRewardCutSet","nameLocation":"2759:21:52","nodeType":"EventDefinition","parameters":{"id":4973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4972,"indexed":false,"mutability":"mutable","name":"fishermanRewardCut","nameLocation":"2788:18:52","nodeType":"VariableDeclaration","scope":4974,"src":"2781:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4971,"name":"uint32","nodeType":"ElementaryTypeName","src":"2781:6:52","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2780:27:52"},"src":"2753:55:52"},{"anonymous":false,"documentation":{"id":4975,"nodeType":"StructuredDocumentation","src":"2814:131:52","text":" @notice Emitted when subgraph service is set.\n @param subgraphService The address of the subgraph service."},"eventSelector":"81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c7","id":4979,"name":"SubgraphServiceSet","nameLocation":"2956:18:52","nodeType":"EventDefinition","parameters":{"id":4978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4977,"indexed":true,"mutability":"mutable","name":"subgraphService","nameLocation":"2991:15:52","nodeType":"VariableDeclaration","scope":4979,"src":"2975:31:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4976,"name":"address","nodeType":"ElementaryTypeName","src":"2975:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2974:33:52"},"src":"2950:58:52"},{"anonymous":false,"documentation":{"id":4980,"nodeType":"StructuredDocumentation","src":"3014:697:52","text":" @notice 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 @param disputeId The dispute id\n @param indexer The indexer address\n @param fisherman The fisherman address\n @param tokens The amount of tokens deposited by the fisherman\n @param subgraphDeploymentId The subgraph deployment id\n @param attestation The attestation\n @param stakeSnapshot The stake snapshot of the indexer at the time of the dispute\n @param cancellableAt The timestamp when the dispute can be cancelled"},"eventSelector":"fb70faf7306b83c2cec6d8c1627baad892cb79968a02cc0353174499ecfd8b35","id":4998,"name":"QueryDisputeCreated","nameLocation":"3722:19:52","nodeType":"EventDefinition","parameters":{"id":4997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4982,"indexed":true,"mutability":"mutable","name":"disputeId","nameLocation":"3767:9:52","nodeType":"VariableDeclaration","scope":4998,"src":"3751:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4981,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3751:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4984,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"3802:7:52","nodeType":"VariableDeclaration","scope":4998,"src":"3786:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4983,"name":"address","nodeType":"ElementaryTypeName","src":"3786:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4986,"indexed":true,"mutability":"mutable","name":"fisherman","nameLocation":"3835:9:52","nodeType":"VariableDeclaration","scope":4998,"src":"3819:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4985,"name":"address","nodeType":"ElementaryTypeName","src":"3819:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4988,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"3862:6:52","nodeType":"VariableDeclaration","scope":4998,"src":"3854:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4987,"name":"uint256","nodeType":"ElementaryTypeName","src":"3854:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4990,"indexed":false,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"3886:20:52","nodeType":"VariableDeclaration","scope":4998,"src":"3878:28:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4989,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3878:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4992,"indexed":false,"mutability":"mutable","name":"attestation","nameLocation":"3922:11:52","nodeType":"VariableDeclaration","scope":4998,"src":"3916:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4991,"name":"bytes","nodeType":"ElementaryTypeName","src":"3916:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4994,"indexed":false,"mutability":"mutable","name":"stakeSnapshot","nameLocation":"3951:13:52","nodeType":"VariableDeclaration","scope":4998,"src":"3943:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4993,"name":"uint256","nodeType":"ElementaryTypeName","src":"3943:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4996,"indexed":false,"mutability":"mutable","name":"cancellableAt","nameLocation":"3982:13:52","nodeType":"VariableDeclaration","scope":4998,"src":"3974:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4995,"name":"uint256","nodeType":"ElementaryTypeName","src":"3974:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3741:260:52"},"src":"3716:286:52"},{"anonymous":false,"documentation":{"id":4999,"nodeType":"StructuredDocumentation","src":"4008:708:52","text":" @notice 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 @param disputeId The dispute id\n @param indexer The indexer address\n @param fisherman The fisherman address\n @param tokens The amount of tokens deposited by the fisherman\n @param allocationId The allocation id\n @param poi The POI\n @param blockNumber The block number for which the POI was calculated\n @param stakeSnapshot The stake snapshot of the indexer at the time of the dispute\n @param cancellableAt The timestamp when the dispute can be cancelled"},"eventSelector":"b84691e86090d2bd1cb788cfe1efa80f01c0003f443474ccc841c70e020d3da0","id":5019,"name":"IndexingDisputeCreated","nameLocation":"4727:22:52","nodeType":"EventDefinition","parameters":{"id":5018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5001,"indexed":true,"mutability":"mutable","name":"disputeId","nameLocation":"4775:9:52","nodeType":"VariableDeclaration","scope":5019,"src":"4759:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5000,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4759:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5003,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"4810:7:52","nodeType":"VariableDeclaration","scope":5019,"src":"4794:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5002,"name":"address","nodeType":"ElementaryTypeName","src":"4794:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5005,"indexed":true,"mutability":"mutable","name":"fisherman","nameLocation":"4843:9:52","nodeType":"VariableDeclaration","scope":5019,"src":"4827:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5004,"name":"address","nodeType":"ElementaryTypeName","src":"4827:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5007,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"4870:6:52","nodeType":"VariableDeclaration","scope":5019,"src":"4862:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5006,"name":"uint256","nodeType":"ElementaryTypeName","src":"4862:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5009,"indexed":false,"mutability":"mutable","name":"allocationId","nameLocation":"4894:12:52","nodeType":"VariableDeclaration","scope":5019,"src":"4886:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5008,"name":"address","nodeType":"ElementaryTypeName","src":"4886:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5011,"indexed":false,"mutability":"mutable","name":"poi","nameLocation":"4924:3:52","nodeType":"VariableDeclaration","scope":5019,"src":"4916:11:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5010,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4916:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5013,"indexed":false,"mutability":"mutable","name":"blockNumber","nameLocation":"4945:11:52","nodeType":"VariableDeclaration","scope":5019,"src":"4937:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5012,"name":"uint256","nodeType":"ElementaryTypeName","src":"4937:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5015,"indexed":false,"mutability":"mutable","name":"stakeSnapshot","nameLocation":"4974:13:52","nodeType":"VariableDeclaration","scope":5019,"src":"4966:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5014,"name":"uint256","nodeType":"ElementaryTypeName","src":"4966:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5017,"indexed":false,"mutability":"mutable","name":"cancellableAt","nameLocation":"5005:13:52","nodeType":"VariableDeclaration","scope":5019,"src":"4997:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5016,"name":"uint256","nodeType":"ElementaryTypeName","src":"4997:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4749:275:52"},"src":"4721:304:52"},{"anonymous":false,"documentation":{"id":5020,"nodeType":"StructuredDocumentation","src":"5031:541:52","text":" @notice Emitted when a legacy dispute is created for `allocationId` and `fisherman`.\n The event emits the amount of `tokensSlash` to slash and `tokensRewards` to reward the fisherman.\n @param disputeId The dispute id\n @param indexer The indexer address\n @param fisherman The fisherman address to be credited with the rewards\n @param allocationId The allocation id\n @param tokensSlash The amount of tokens to slash\n @param tokensRewards The amount of tokens to reward the fisherman"},"eventSelector":"587a1fc7e80e653a2ab7f63f98c080f5818b8cedcfd1374590c8c786290ed031","id":5034,"name":"LegacyDisputeCreated","nameLocation":"5583:20:52","nodeType":"EventDefinition","parameters":{"id":5033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5022,"indexed":true,"mutability":"mutable","name":"disputeId","nameLocation":"5629:9:52","nodeType":"VariableDeclaration","scope":5034,"src":"5613:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5021,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5613:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5024,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"5664:7:52","nodeType":"VariableDeclaration","scope":5034,"src":"5648:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5023,"name":"address","nodeType":"ElementaryTypeName","src":"5648:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5026,"indexed":true,"mutability":"mutable","name":"fisherman","nameLocation":"5697:9:52","nodeType":"VariableDeclaration","scope":5034,"src":"5681:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5025,"name":"address","nodeType":"ElementaryTypeName","src":"5681:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5028,"indexed":false,"mutability":"mutable","name":"allocationId","nameLocation":"5724:12:52","nodeType":"VariableDeclaration","scope":5034,"src":"5716:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5027,"name":"address","nodeType":"ElementaryTypeName","src":"5716:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5030,"indexed":false,"mutability":"mutable","name":"tokensSlash","nameLocation":"5754:11:52","nodeType":"VariableDeclaration","scope":5034,"src":"5746:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5029,"name":"uint256","nodeType":"ElementaryTypeName","src":"5746:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5032,"indexed":false,"mutability":"mutable","name":"tokensRewards","nameLocation":"5783:13:52","nodeType":"VariableDeclaration","scope":5034,"src":"5775:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5031,"name":"uint256","nodeType":"ElementaryTypeName","src":"5775:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5603:199:52"},"src":"5577:226:52"},{"anonymous":false,"documentation":{"id":5035,"nodeType":"StructuredDocumentation","src":"5809:430:52","text":" @notice 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 @param disputeId The dispute id\n @param indexer The indexer address\n @param fisherman The fisherman address\n @param tokens The amount of tokens transferred to the fisherman, the deposit plus reward"},"eventSelector":"6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c4","id":5045,"name":"DisputeAccepted","nameLocation":"6250:15:52","nodeType":"EventDefinition","parameters":{"id":5044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5037,"indexed":true,"mutability":"mutable","name":"disputeId","nameLocation":"6291:9:52","nodeType":"VariableDeclaration","scope":5045,"src":"6275:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5036,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6275:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5039,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"6326:7:52","nodeType":"VariableDeclaration","scope":5045,"src":"6310:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5038,"name":"address","nodeType":"ElementaryTypeName","src":"6310:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5041,"indexed":true,"mutability":"mutable","name":"fisherman","nameLocation":"6359:9:52","nodeType":"VariableDeclaration","scope":5045,"src":"6343:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5040,"name":"address","nodeType":"ElementaryTypeName","src":"6343:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5043,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"6386:6:52","nodeType":"VariableDeclaration","scope":5045,"src":"6378:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5042,"name":"uint256","nodeType":"ElementaryTypeName","src":"6378:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6265:133:52"},"src":"6244:155:52"},{"anonymous":false,"documentation":{"id":5046,"nodeType":"StructuredDocumentation","src":"6405:391:52","text":" @notice Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`.\n The event emits the amount `tokens` burned from the fisherman deposit.\n @param disputeId The dispute id\n @param indexer The indexer address\n @param fisherman The fisherman address\n @param tokens The amount of tokens burned from the fisherman deposit"},"eventSelector":"2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d","id":5056,"name":"DisputeRejected","nameLocation":"6807:15:52","nodeType":"EventDefinition","parameters":{"id":5055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5048,"indexed":true,"mutability":"mutable","name":"disputeId","nameLocation":"6848:9:52","nodeType":"VariableDeclaration","scope":5056,"src":"6832:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5047,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6832:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5050,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"6883:7:52","nodeType":"VariableDeclaration","scope":5056,"src":"6867:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5049,"name":"address","nodeType":"ElementaryTypeName","src":"6867:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5052,"indexed":true,"mutability":"mutable","name":"fisherman","nameLocation":"6916:9:52","nodeType":"VariableDeclaration","scope":5056,"src":"6900:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5051,"name":"address","nodeType":"ElementaryTypeName","src":"6900:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5054,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"6943:6:52","nodeType":"VariableDeclaration","scope":5056,"src":"6935:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5053,"name":"uint256","nodeType":"ElementaryTypeName","src":"6935:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6822:133:52"},"src":"6801:155:52"},{"anonymous":false,"documentation":{"id":5057,"nodeType":"StructuredDocumentation","src":"6962:406:52","text":" @notice 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 @param disputeId The dispute id\n @param indexer The indexer address\n @param fisherman The fisherman address\n @param tokens The amount of tokens returned to the fisherman - the deposit"},"eventSelector":"f0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b7","id":5067,"name":"DisputeDrawn","nameLocation":"7379:12:52","nodeType":"EventDefinition","parameters":{"id":5066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5059,"indexed":true,"mutability":"mutable","name":"disputeId","nameLocation":"7408:9:52","nodeType":"VariableDeclaration","scope":5067,"src":"7392:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5058,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7392:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5061,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"7435:7:52","nodeType":"VariableDeclaration","scope":5067,"src":"7419:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5060,"name":"address","nodeType":"ElementaryTypeName","src":"7419:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5063,"indexed":true,"mutability":"mutable","name":"fisherman","nameLocation":"7460:9:52","nodeType":"VariableDeclaration","scope":5067,"src":"7444:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5062,"name":"address","nodeType":"ElementaryTypeName","src":"7444:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5065,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"7479:6:52","nodeType":"VariableDeclaration","scope":5067,"src":"7471:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5064,"name":"uint256","nodeType":"ElementaryTypeName","src":"7471:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7391:95:52"},"src":"7373:114:52"},{"anonymous":false,"documentation":{"id":5068,"nodeType":"StructuredDocumentation","src":"7493:296:52","text":" @notice 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 @param disputeId1 The first dispute id\n @param disputeId2 The second dispute id"},"eventSelector":"fec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba81407","id":5074,"name":"DisputeLinked","nameLocation":"7800:13:52","nodeType":"EventDefinition","parameters":{"id":5073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5070,"indexed":true,"mutability":"mutable","name":"disputeId1","nameLocation":"7830:10:52","nodeType":"VariableDeclaration","scope":5074,"src":"7814:26:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5069,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7814:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5072,"indexed":true,"mutability":"mutable","name":"disputeId2","nameLocation":"7858:10:52","nodeType":"VariableDeclaration","scope":5074,"src":"7842:26:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5071,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7842:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7813:56:52"},"src":"7794:76:52"},{"anonymous":false,"documentation":{"id":5075,"nodeType":"StructuredDocumentation","src":"7876:359:52","text":" @notice Emitted when a dispute is cancelled by the fisherman.\n The event emits the amount `tokens` returned to the fisherman.\n @param disputeId The dispute id\n @param indexer The indexer address\n @param fisherman The fisherman address\n @param tokens The amount of tokens returned to the fisherman - the deposit"},"eventSelector":"223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2","id":5085,"name":"DisputeCancelled","nameLocation":"8246:16:52","nodeType":"EventDefinition","parameters":{"id":5084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5077,"indexed":true,"mutability":"mutable","name":"disputeId","nameLocation":"8288:9:52","nodeType":"VariableDeclaration","scope":5085,"src":"8272:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5076,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8272:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5079,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"8323:7:52","nodeType":"VariableDeclaration","scope":5085,"src":"8307:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5078,"name":"address","nodeType":"ElementaryTypeName","src":"8307:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5081,"indexed":true,"mutability":"mutable","name":"fisherman","nameLocation":"8356:9:52","nodeType":"VariableDeclaration","scope":5085,"src":"8340:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5080,"name":"address","nodeType":"ElementaryTypeName","src":"8340:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5083,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"8383:6:52","nodeType":"VariableDeclaration","scope":5085,"src":"8375:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5082,"name":"uint256","nodeType":"ElementaryTypeName","src":"8375:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8262:133:52"},"src":"8240:156:52"},{"documentation":{"id":5086,"nodeType":"StructuredDocumentation","src":"8423:71:52","text":" @notice Thrown when the caller is not the arbitrator"},"errorSelector":"a8baf3bb","id":5088,"name":"DisputeManagerNotArbitrator","nameLocation":"8505:27:52","nodeType":"ErrorDefinition","parameters":{"id":5087,"nodeType":"ParameterList","parameters":[],"src":"8532:2:52"},"src":"8499:36:52"},{"documentation":{"id":5089,"nodeType":"StructuredDocumentation","src":"8541:70:52","text":" @notice Thrown when the caller is not the fisherman"},"errorSelector":"82c00550","id":5091,"name":"DisputeManagerNotFisherman","nameLocation":"8622:26:52","nodeType":"ErrorDefinition","parameters":{"id":5090,"nodeType":"ParameterList","parameters":[],"src":"8648:2:52"},"src":"8616:35:52"},{"documentation":{"id":5092,"nodeType":"StructuredDocumentation","src":"8657:70:52","text":" @notice Thrown when the address is the zero address"},"errorSelector":"c2d78882","id":5094,"name":"DisputeManagerInvalidZeroAddress","nameLocation":"8738:32:52","nodeType":"ErrorDefinition","parameters":{"id":5093,"nodeType":"ParameterList","parameters":[],"src":"8770:2:52"},"src":"8732:41:52"},{"documentation":{"id":5095,"nodeType":"StructuredDocumentation","src":"8779:65:52","text":" @notice Thrown when the dispute period is zero"},"errorSelector":"c4411f11","id":5097,"name":"DisputeManagerDisputePeriodZero","nameLocation":"8855:31:52","nodeType":"ErrorDefinition","parameters":{"id":5096,"nodeType":"ParameterList","parameters":[],"src":"8886:2:52"},"src":"8849:40:52"},{"documentation":{"id":5098,"nodeType":"StructuredDocumentation","src":"8895:91:52","text":" @notice Thrown when the indexer being disputed has no provisioned tokens"},"errorSelector":"60fdfb6e","id":5100,"name":"DisputeManagerZeroTokens","nameLocation":"8997:24:52","nodeType":"ErrorDefinition","parameters":{"id":5099,"nodeType":"ParameterList","parameters":[],"src":"9021:2:52"},"src":"8991:33:52"},{"documentation":{"id":5101,"nodeType":"StructuredDocumentation","src":"9030:103:52","text":" @notice Thrown when the dispute id is invalid\n @param disputeId The dispute id"},"errorSelector":"5280eef4","id":5105,"name":"DisputeManagerInvalidDispute","nameLocation":"9144:28:52","nodeType":"ErrorDefinition","parameters":{"id":5104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5103,"mutability":"mutable","name":"disputeId","nameLocation":"9181:9:52","nodeType":"VariableDeclaration","scope":5105,"src":"9173:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5102,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9173:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9172:19:52"},"src":"9138:54:52"},{"documentation":{"id":5106,"nodeType":"StructuredDocumentation","src":"9198:158:52","text":" @notice Thrown when the dispute deposit is invalid - less than the minimum dispute deposit\n @param disputeDeposit The dispute deposit"},"errorSelector":"033f4e05","id":5110,"name":"DisputeManagerInvalidDisputeDeposit","nameLocation":"9367:35:52","nodeType":"ErrorDefinition","parameters":{"id":5109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5108,"mutability":"mutable","name":"disputeDeposit","nameLocation":"9411:14:52","nodeType":"VariableDeclaration","scope":5110,"src":"9403:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5107,"name":"uint256","nodeType":"ElementaryTypeName","src":"9403:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9402:24:52"},"src":"9361:66:52"},{"documentation":{"id":5111,"nodeType":"StructuredDocumentation","src":"9433:117:52","text":" @notice Thrown when the fisherman reward cut is invalid\n @param cut The fisherman reward cut"},"errorSelector":"865ccc86","id":5115,"name":"DisputeManagerInvalidFishermanReward","nameLocation":"9561:36:52","nodeType":"ErrorDefinition","parameters":{"id":5114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5113,"mutability":"mutable","name":"cut","nameLocation":"9605:3:52","nodeType":"VariableDeclaration","scope":5115,"src":"9598:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5112,"name":"uint32","nodeType":"ElementaryTypeName","src":"9598:6:52","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"9597:12:52"},"src":"9555:55:52"},{"documentation":{"id":5116,"nodeType":"StructuredDocumentation","src":"9616:120:52","text":" @notice Thrown when the max slashing cut is invalid\n @param maxSlashingCut The max slashing cut"},"errorSelector":"9d26e9f6","id":5120,"name":"DisputeManagerInvalidMaxSlashingCut","nameLocation":"9747:35:52","nodeType":"ErrorDefinition","parameters":{"id":5119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5118,"mutability":"mutable","name":"maxSlashingCut","nameLocation":"9790:14:52","nodeType":"VariableDeclaration","scope":5120,"src":"9783:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5117,"name":"uint32","nodeType":"ElementaryTypeName","src":"9783:6:52","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"9782:23:52"},"src":"9741:65:52"},{"documentation":{"id":5121,"nodeType":"StructuredDocumentation","src":"9812:159:52","text":" @notice Thrown when the tokens slash is invalid\n @param tokensSlash The tokens slash\n @param maxTokensSlash The max tokens slash"},"errorSelector":"cc6b7c41","id":5127,"name":"DisputeManagerInvalidTokensSlash","nameLocation":"9982:32:52","nodeType":"ErrorDefinition","parameters":{"id":5126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5123,"mutability":"mutable","name":"tokensSlash","nameLocation":"10023:11:52","nodeType":"VariableDeclaration","scope":5127,"src":"10015:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5122,"name":"uint256","nodeType":"ElementaryTypeName","src":"10015:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5125,"mutability":"mutable","name":"maxTokensSlash","nameLocation":"10044:14:52","nodeType":"VariableDeclaration","scope":5127,"src":"10036:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5124,"name":"uint256","nodeType":"ElementaryTypeName","src":"10036:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10014:45:52"},"src":"9976:84:52"},{"documentation":{"id":5128,"nodeType":"StructuredDocumentation","src":"10066:112:52","text":" @notice Thrown when the dispute is not pending\n @param status The status of the dispute"},"errorSelector":"51b9503c","id":5133,"name":"DisputeManagerDisputeNotPending","nameLocation":"10189:31:52","nodeType":"ErrorDefinition","parameters":{"id":5132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5131,"mutability":"mutable","name":"status","nameLocation":"10251:6:52","nodeType":"VariableDeclaration","scope":5133,"src":"10221:36:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DisputeStatus_$4927","typeString":"enum IDisputeManager.DisputeStatus"},"typeName":{"id":5130,"nodeType":"UserDefinedTypeName","pathNode":{"id":5129,"name":"IDisputeManager.DisputeStatus","nameLocations":["10221:15:52","10237:13:52"],"nodeType":"IdentifierPath","referencedDeclaration":4927,"src":"10221:29:52"},"referencedDeclaration":4927,"src":"10221:29:52","typeDescriptions":{"typeIdentifier":"t_enum$_DisputeStatus_$4927","typeString":"enum IDisputeManager.DisputeStatus"}},"visibility":"internal"}],"src":"10220:38:52"},"src":"10183:76:52"},{"documentation":{"id":5134,"nodeType":"StructuredDocumentation","src":"10265:108:52","text":" @notice Thrown when the dispute is already created\n @param disputeId The dispute id"},"errorSelector":"249447e2","id":5138,"name":"DisputeManagerDisputeAlreadyCreated","nameLocation":"10384:35:52","nodeType":"ErrorDefinition","parameters":{"id":5137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5136,"mutability":"mutable","name":"disputeId","nameLocation":"10428:9:52","nodeType":"VariableDeclaration","scope":5138,"src":"10420:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5135,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10420:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10419:19:52"},"src":"10378:61:52"},{"documentation":{"id":5139,"nodeType":"StructuredDocumentation","src":"10445:73:52","text":" @notice Thrown when the dispute period is not finished"},"errorSelector":"3aeea7aa","id":5141,"name":"DisputeManagerDisputePeriodNotFinished","nameLocation":"10529:38:52","nodeType":"ErrorDefinition","parameters":{"id":5140,"nodeType":"ParameterList","parameters":[],"src":"10567:2:52"},"src":"10523:47:52"},{"documentation":{"id":5142,"nodeType":"StructuredDocumentation","src":"10576:104:52","text":" @notice Thrown when the dispute is in conflict\n @param disputeId The dispute id"},"errorSelector":"64d0c32b","id":5146,"name":"DisputeManagerDisputeInConflict","nameLocation":"10691:31:52","nodeType":"ErrorDefinition","parameters":{"id":5145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5144,"mutability":"mutable","name":"disputeId","nameLocation":"10731:9:52","nodeType":"VariableDeclaration","scope":5146,"src":"10723:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5143,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10723:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10722:19:52"},"src":"10685:57:52"},{"documentation":{"id":5147,"nodeType":"StructuredDocumentation","src":"10748:108:52","text":" @notice Thrown when the dispute is not in conflict\n @param disputeId The dispute id"},"errorSelector":"ff29d3f9","id":5151,"name":"DisputeManagerDisputeNotInConflict","nameLocation":"10867:34:52","nodeType":"ErrorDefinition","parameters":{"id":5150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5149,"mutability":"mutable","name":"disputeId","nameLocation":"10910:9:52","nodeType":"VariableDeclaration","scope":5151,"src":"10902:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5148,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10902:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10901:19:52"},"src":"10861:60:52"},{"documentation":{"id":5152,"nodeType":"StructuredDocumentation","src":"10927:160:52","text":" @notice Thrown when the dispute must be accepted\n @param disputeId The dispute id\n @param relatedDisputeId The related dispute id"},"errorSelector":"826e2b26","id":5158,"name":"DisputeManagerMustAcceptRelatedDispute","nameLocation":"11098:38:52","nodeType":"ErrorDefinition","parameters":{"id":5157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5154,"mutability":"mutable","name":"disputeId","nameLocation":"11145:9:52","nodeType":"VariableDeclaration","scope":5158,"src":"11137:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5153,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11137:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5156,"mutability":"mutable","name":"relatedDisputeId","nameLocation":"11164:16:52","nodeType":"VariableDeclaration","scope":5158,"src":"11156:24:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5155,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11156:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11136:45:52"},"src":"11092:90:52"},{"documentation":{"id":5159,"nodeType":"StructuredDocumentation","src":"11188:108:52","text":" @notice Thrown when the indexer is not found\n @param allocationId The allocation id"},"errorSelector":"d1e2762c","id":5163,"name":"DisputeManagerIndexerNotFound","nameLocation":"11307:29:52","nodeType":"ErrorDefinition","parameters":{"id":5162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5161,"mutability":"mutable","name":"allocationId","nameLocation":"11345:12:52","nodeType":"VariableDeclaration","scope":5163,"src":"11337:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5160,"name":"address","nodeType":"ElementaryTypeName","src":"11337:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11336:22:52"},"src":"11301:58:52"},{"documentation":{"id":5164,"nodeType":"StructuredDocumentation","src":"11365:255:52","text":" @notice Thrown when the subgraph deployment is not matching\n @param subgraphDeploymentId1 The subgraph deployment id of the first attestation\n @param subgraphDeploymentId2 The subgraph deployment id of the second attestation"},"errorSelector":"28933f94","id":5170,"name":"DisputeManagerNonMatchingSubgraphDeployment","nameLocation":"11631:43:52","nodeType":"ErrorDefinition","parameters":{"id":5169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5166,"mutability":"mutable","name":"subgraphDeploymentId1","nameLocation":"11683:21:52","nodeType":"VariableDeclaration","scope":5170,"src":"11675:29:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5165,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11675:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5168,"mutability":"mutable","name":"subgraphDeploymentId2","nameLocation":"11714:21:52","nodeType":"VariableDeclaration","scope":5170,"src":"11706:29:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5167,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11706:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11674:62:52"},"src":"11625:112:52"},{"documentation":{"id":5171,"nodeType":"StructuredDocumentation","src":"11743:526:52","text":" @notice Thrown when the attestations are not conflicting\n @param requestCID1 The request CID of the first attestation\n @param responseCID1 The response CID of the first attestation\n @param subgraphDeploymentId1 The subgraph deployment id of the first attestation\n @param requestCID2 The request CID of the second attestation\n @param responseCID2 The response CID of the second attestation\n @param subgraphDeploymentId2 The subgraph deployment id of the second attestation"},"errorSelector":"d574a52e","id":5185,"name":"DisputeManagerNonConflictingAttestations","nameLocation":"12280:40:52","nodeType":"ErrorDefinition","parameters":{"id":5184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5173,"mutability":"mutable","name":"requestCID1","nameLocation":"12338:11:52","nodeType":"VariableDeclaration","scope":5185,"src":"12330:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5172,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12330:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5175,"mutability":"mutable","name":"responseCID1","nameLocation":"12367:12:52","nodeType":"VariableDeclaration","scope":5185,"src":"12359:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5174,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12359:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5177,"mutability":"mutable","name":"subgraphDeploymentId1","nameLocation":"12397:21:52","nodeType":"VariableDeclaration","scope":5185,"src":"12389:29:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5176,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12389:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5179,"mutability":"mutable","name":"requestCID2","nameLocation":"12436:11:52","nodeType":"VariableDeclaration","scope":5185,"src":"12428:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5178,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12428:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5181,"mutability":"mutable","name":"responseCID2","nameLocation":"12465:12:52","nodeType":"VariableDeclaration","scope":5185,"src":"12457:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5180,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12457:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5183,"mutability":"mutable","name":"subgraphDeploymentId2","nameLocation":"12495:21:52","nodeType":"VariableDeclaration","scope":5185,"src":"12487:29:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5182,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12487:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12320:202:52"},"src":"12274:249:52"},{"documentation":{"id":5186,"nodeType":"StructuredDocumentation","src":"12529:94:52","text":" @notice Thrown when attempting to get the subgraph service before it is set"},"errorSelector":"bd088b4f","id":5188,"name":"DisputeManagerSubgraphServiceNotSet","nameLocation":"12634:35:52","nodeType":"ErrorDefinition","parameters":{"id":5187,"nodeType":"ParameterList","parameters":[],"src":"12669:2:52"},"src":"12628:44:52"},{"documentation":{"id":5189,"nodeType":"StructuredDocumentation","src":"12678:430:52","text":" @notice Initialize this contract.\n @param owner The owner of the 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":"0bc7344b","id":5204,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"13122:10:52","nodeType":"FunctionDefinition","parameters":{"id":5202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5191,"mutability":"mutable","name":"owner","nameLocation":"13150:5:52","nodeType":"VariableDeclaration","scope":5204,"src":"13142:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5190,"name":"address","nodeType":"ElementaryTypeName","src":"13142:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5193,"mutability":"mutable","name":"arbitrator","nameLocation":"13173:10:52","nodeType":"VariableDeclaration","scope":5204,"src":"13165:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5192,"name":"address","nodeType":"ElementaryTypeName","src":"13165:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5195,"mutability":"mutable","name":"disputePeriod","nameLocation":"13200:13:52","nodeType":"VariableDeclaration","scope":5204,"src":"13193:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":5194,"name":"uint64","nodeType":"ElementaryTypeName","src":"13193:6:52","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":5197,"mutability":"mutable","name":"disputeDeposit","nameLocation":"13231:14:52","nodeType":"VariableDeclaration","scope":5204,"src":"13223:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5196,"name":"uint256","nodeType":"ElementaryTypeName","src":"13223:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5199,"mutability":"mutable","name":"fishermanRewardCut_","nameLocation":"13262:19:52","nodeType":"VariableDeclaration","scope":5204,"src":"13255:26:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5198,"name":"uint32","nodeType":"ElementaryTypeName","src":"13255:6:52","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":5201,"mutability":"mutable","name":"maxSlashingCut_","nameLocation":"13298:15:52","nodeType":"VariableDeclaration","scope":5204,"src":"13291:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5200,"name":"uint32","nodeType":"ElementaryTypeName","src":"13291:6:52","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"13132:187:52"},"returnParameters":{"id":5203,"nodeType":"ParameterList","parameters":[],"src":"13328:0:52"},"scope":5383,"src":"13113:216:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5205,"nodeType":"StructuredDocumentation","src":"13335:173:52","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":5210,"implemented":false,"kind":"function","modifiers":[],"name":"setDisputePeriod","nameLocation":"13522:16:52","nodeType":"FunctionDefinition","parameters":{"id":5208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5207,"mutability":"mutable","name":"disputePeriod","nameLocation":"13546:13:52","nodeType":"VariableDeclaration","scope":5210,"src":"13539:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":5206,"name":"uint64","nodeType":"ElementaryTypeName","src":"13539:6:52","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13538:22:52"},"returnParameters":{"id":5209,"nodeType":"ParameterList","parameters":[],"src":"13569:0:52"},"scope":5383,"src":"13513:57:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5211,"nodeType":"StructuredDocumentation","src":"13576:179:52","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":5216,"implemented":false,"kind":"function","modifiers":[],"name":"setArbitrator","nameLocation":"13769:13:52","nodeType":"FunctionDefinition","parameters":{"id":5214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5213,"mutability":"mutable","name":"arbitrator","nameLocation":"13791:10:52","nodeType":"VariableDeclaration","scope":5216,"src":"13783:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5212,"name":"address","nodeType":"ElementaryTypeName","src":"13783:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13782:20:52"},"returnParameters":{"id":5215,"nodeType":"ParameterList","parameters":[],"src":"13811:0:52"},"scope":5383,"src":"13760:52:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5217,"nodeType":"StructuredDocumentation","src":"13818:218:52","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":5222,"implemented":false,"kind":"function","modifiers":[],"name":"setDisputeDeposit","nameLocation":"14050:17:52","nodeType":"FunctionDefinition","parameters":{"id":5220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5219,"mutability":"mutable","name":"disputeDeposit","nameLocation":"14076:14:52","nodeType":"VariableDeclaration","scope":5222,"src":"14068:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5218,"name":"uint256","nodeType":"ElementaryTypeName","src":"14068:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14067:24:52"},"returnParameters":{"id":5221,"nodeType":"ParameterList","parameters":[],"src":"14100:0:52"},"scope":5383,"src":"14041:60:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5223,"nodeType":"StructuredDocumentation","src":"14107:227:52","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":5228,"implemented":false,"kind":"function","modifiers":[],"name":"setFishermanRewardCut","nameLocation":"14348:21:52","nodeType":"FunctionDefinition","parameters":{"id":5226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5225,"mutability":"mutable","name":"fishermanRewardCut_","nameLocation":"14377:19:52","nodeType":"VariableDeclaration","scope":5228,"src":"14370:26:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5224,"name":"uint32","nodeType":"ElementaryTypeName","src":"14370:6:52","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"14369:28:52"},"returnParameters":{"id":5227,"nodeType":"ParameterList","parameters":[],"src":"14406:0:52"},"scope":5383,"src":"14339:68:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5229,"nodeType":"StructuredDocumentation","src":"14413:160:52","text":" @notice Set the maximum percentage that can be used for slashing indexers.\n @param maxSlashingCut_ Max percentage slashing for disputes"},"functionSelector":"9f81a7cf","id":5234,"implemented":false,"kind":"function","modifiers":[],"name":"setMaxSlashingCut","nameLocation":"14587:17:52","nodeType":"FunctionDefinition","parameters":{"id":5232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5231,"mutability":"mutable","name":"maxSlashingCut_","nameLocation":"14612:15:52","nodeType":"VariableDeclaration","scope":5234,"src":"14605:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5230,"name":"uint32","nodeType":"ElementaryTypeName","src":"14605:6:52","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"14604:24:52"},"returnParameters":{"id":5233,"nodeType":"ParameterList","parameters":[],"src":"14637:0:52"},"scope":5383,"src":"14578:60:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5235,"nodeType":"StructuredDocumentation","src":"14644:197:52","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":5240,"implemented":false,"kind":"function","modifiers":[],"name":"setSubgraphService","nameLocation":"14855:18:52","nodeType":"FunctionDefinition","parameters":{"id":5238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5237,"mutability":"mutable","name":"subgraphService","nameLocation":"14882:15:52","nodeType":"VariableDeclaration","scope":5240,"src":"14874:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5236,"name":"address","nodeType":"ElementaryTypeName","src":"14874:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14873:25:52"},"returnParameters":{"id":5239,"nodeType":"ParameterList","parameters":[],"src":"14907:0:52"},"scope":5383,"src":"14846:62:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5241,"nodeType":"StructuredDocumentation","src":"14936:448:52","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\n @return The dispute id"},"functionSelector":"c50a77b1","id":5248,"implemented":false,"kind":"function","modifiers":[],"name":"createQueryDispute","nameLocation":"15398:18:52","nodeType":"FunctionDefinition","parameters":{"id":5244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5243,"mutability":"mutable","name":"attestationData","nameLocation":"15432:15:52","nodeType":"VariableDeclaration","scope":5248,"src":"15417:30:52","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":5242,"name":"bytes","nodeType":"ElementaryTypeName","src":"15417:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15416:32:52"},"returnParameters":{"id":5247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5246,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5248,"src":"15467:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15467:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15466:9:52"},"scope":5383,"src":"15389:87:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5249,"nodeType":"StructuredDocumentation","src":"15482:974:52","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 Two linked disputes will be created and if the arbitrator resolve one, the other\n one will be automatically resolved. Note that:\n - it's not possible to reject a conflicting query dispute as by definition at least one\n of the attestations is incorrect.\n - if both attestations are proven to be incorrect, the arbitrator can slash the indexer twice.\n Requirements:\n - fisherman must have previously approved this contract to pull `disputeDeposit` amount\n   of tokens from their balance.\n @param attestationData1 First attestation data submitted\n @param attestationData2 Second attestation data submitted\n @return The first dispute id\n @return The second dispute id"},"functionSelector":"c894222e","id":5260,"implemented":false,"kind":"function","modifiers":[],"name":"createQueryDisputeConflict","nameLocation":"16470:26:52","nodeType":"FunctionDefinition","parameters":{"id":5254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5251,"mutability":"mutable","name":"attestationData1","nameLocation":"16521:16:52","nodeType":"VariableDeclaration","scope":5260,"src":"16506:31:52","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":5250,"name":"bytes","nodeType":"ElementaryTypeName","src":"16506:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5253,"mutability":"mutable","name":"attestationData2","nameLocation":"16562:16:52","nodeType":"VariableDeclaration","scope":5260,"src":"16547:31:52","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":5252,"name":"bytes","nodeType":"ElementaryTypeName","src":"16547:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16496:88:52"},"returnParameters":{"id":5259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5256,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5260,"src":"16603:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5255,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16603:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5260,"src":"16612:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5257,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16612:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16602:18:52"},"scope":5383,"src":"16461:160:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5261,"nodeType":"StructuredDocumentation","src":"16627:680:52","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\n @param blockNumber The block number for which the POI was calculated\n @return The dispute id"},"functionSelector":"417c10fd","id":5272,"implemented":false,"kind":"function","modifiers":[],"name":"createIndexingDispute","nameLocation":"17321:21:52","nodeType":"FunctionDefinition","parameters":{"id":5268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5263,"mutability":"mutable","name":"allocationId","nameLocation":"17351:12:52","nodeType":"VariableDeclaration","scope":5272,"src":"17343:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5262,"name":"address","nodeType":"ElementaryTypeName","src":"17343:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5265,"mutability":"mutable","name":"poi","nameLocation":"17373:3:52","nodeType":"VariableDeclaration","scope":5272,"src":"17365:11:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5264,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17365:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5267,"mutability":"mutable","name":"blockNumber","nameLocation":"17386:11:52","nodeType":"VariableDeclaration","scope":5272,"src":"17378:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5266,"name":"uint256","nodeType":"ElementaryTypeName","src":"17378:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17342:56:52"},"returnParameters":{"id":5271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5270,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5272,"src":"17417:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5269,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17417:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17416:9:52"},"scope":5383,"src":"17312:114:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5273,"nodeType":"StructuredDocumentation","src":"17432:1363:52","text":" @notice Creates and auto-accepts a legacy dispute.\n This disputes can be created to settle outstanding slashing amounts with an indexer that has been\n \"legacy slashed\" during or shortly after the transition period. See {HorizonStakingExtension.legacySlash}\n for more details.\n Note that this type of dispute:\n - can only be created by the arbitrator\n - does not require a bond\n - is automatically accepted when created\n Additionally, note that this type of disputes allow the arbitrator to directly set the slash and rewards\n amounts, bypassing the usual mechanisms that impose restrictions on those. This is done to give arbitrators\n maximum flexibility to ensure outstanding slashing amounts are settled fairly. This function needs to be removed\n after the transition period.\n Requirements:\n - Indexer must have been legacy slashed during or shortly after the transition period\n - Indexer must have provisioned funds to the Subgraph Service\n @param allocationId The allocation to dispute\n @param fisherman The fisherman address to be credited with the rewards\n @param tokensSlash The amount of tokens to slash\n @param tokensRewards The amount of tokens to reward the fisherman\n @return The dispute id"},"functionSelector":"8d4e9008","id":5286,"implemented":false,"kind":"function","modifiers":[],"name":"createAndAcceptLegacyDispute","nameLocation":"18809:28:52","nodeType":"FunctionDefinition","parameters":{"id":5282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5275,"mutability":"mutable","name":"allocationId","nameLocation":"18855:12:52","nodeType":"VariableDeclaration","scope":5286,"src":"18847:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5274,"name":"address","nodeType":"ElementaryTypeName","src":"18847:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5277,"mutability":"mutable","name":"fisherman","nameLocation":"18885:9:52","nodeType":"VariableDeclaration","scope":5286,"src":"18877:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5276,"name":"address","nodeType":"ElementaryTypeName","src":"18877:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5279,"mutability":"mutable","name":"tokensSlash","nameLocation":"18912:11:52","nodeType":"VariableDeclaration","scope":5286,"src":"18904:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5278,"name":"uint256","nodeType":"ElementaryTypeName","src":"18904:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5281,"mutability":"mutable","name":"tokensRewards","nameLocation":"18941:13:52","nodeType":"VariableDeclaration","scope":5286,"src":"18933:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5280,"name":"uint256","nodeType":"ElementaryTypeName","src":"18933:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18837:123:52"},"returnParameters":{"id":5285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5284,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5286,"src":"18979:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5283,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18979:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"18978:9:52"},"scope":5383,"src":"18800:188:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5287,"nodeType":"StructuredDocumentation","src":"19019:649:52","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 This function will also revert if the dispute is in conflict, to accept a conflicting dispute\n use acceptDisputeConflict.\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":5294,"implemented":false,"kind":"function","modifiers":[],"name":"acceptDispute","nameLocation":"19682:13:52","nodeType":"FunctionDefinition","parameters":{"id":5292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5289,"mutability":"mutable","name":"disputeId","nameLocation":"19704:9:52","nodeType":"VariableDeclaration","scope":5294,"src":"19696:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5288,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19696:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5291,"mutability":"mutable","name":"tokensSlash","nameLocation":"19723:11:52","nodeType":"VariableDeclaration","scope":5294,"src":"19715:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5290,"name":"uint256","nodeType":"ElementaryTypeName","src":"19715:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19695:40:52"},"returnParameters":{"id":5293,"nodeType":"ParameterList","parameters":[],"src":"19744:0:52"},"scope":5383,"src":"19673:72:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5295,"nodeType":"StructuredDocumentation","src":"19751:770:52","text":" @notice The arbitrator accepts a conflicting 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.\n @param disputeId Id of the dispute to be accepted\n @param tokensSlash Amount of tokens to slash from the indexer for the first dispute\n @param acceptDisputeInConflict Accept the conflicting dispute. Otherwise it will be drawn automatically\n @param tokensSlashRelated Amount of tokens to slash from the indexer for the related dispute in case\n acceptDisputeInConflict is true, otherwise it will be ignored"},"functionSelector":"b0e2f7e9","id":5306,"implemented":false,"kind":"function","modifiers":[],"name":"acceptDisputeConflict","nameLocation":"20535:21:52","nodeType":"FunctionDefinition","parameters":{"id":5304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5297,"mutability":"mutable","name":"disputeId","nameLocation":"20574:9:52","nodeType":"VariableDeclaration","scope":5306,"src":"20566:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5296,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20566:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5299,"mutability":"mutable","name":"tokensSlash","nameLocation":"20601:11:52","nodeType":"VariableDeclaration","scope":5306,"src":"20593:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5298,"name":"uint256","nodeType":"ElementaryTypeName","src":"20593:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5301,"mutability":"mutable","name":"acceptDisputeInConflict","nameLocation":"20627:23:52","nodeType":"VariableDeclaration","scope":5306,"src":"20622:28:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5300,"name":"bool","nodeType":"ElementaryTypeName","src":"20622:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5303,"mutability":"mutable","name":"tokensSlashRelated","nameLocation":"20668:18:52","nodeType":"VariableDeclaration","scope":5306,"src":"20660:26:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5302,"name":"uint256","nodeType":"ElementaryTypeName","src":"20660:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20556:136:52"},"returnParameters":{"id":5305,"nodeType":"ParameterList","parameters":[],"src":"20701:0:52"},"scope":5383,"src":"20526:176:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5307,"nodeType":"StructuredDocumentation","src":"20708:247:52","text":" @notice The arbitrator rejects a dispute as being invalid.\n Note that conflicting query disputes cannot be rejected.\n @dev Reject a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be rejected"},"functionSelector":"36167e03","id":5312,"implemented":false,"kind":"function","modifiers":[],"name":"rejectDispute","nameLocation":"20969:13:52","nodeType":"FunctionDefinition","parameters":{"id":5310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5309,"mutability":"mutable","name":"disputeId","nameLocation":"20991:9:52","nodeType":"VariableDeclaration","scope":5312,"src":"20983:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5308,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20983:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"20982:19:52"},"returnParameters":{"id":5311,"nodeType":"ParameterList","parameters":[],"src":"21010:0:52"},"scope":5383,"src":"20960:51:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5313,"nodeType":"StructuredDocumentation","src":"21017:335:52","text":" @notice The arbitrator draws dispute.\n Note that drawing a conflicting query dispute should not be possible however it is allowed\n to give arbitrators greater flexibility when resolving disputes.\n @dev Ignore a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be disregarded"},"functionSelector":"9334ea52","id":5318,"implemented":false,"kind":"function","modifiers":[],"name":"drawDispute","nameLocation":"21366:11:52","nodeType":"FunctionDefinition","parameters":{"id":5316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5315,"mutability":"mutable","name":"disputeId","nameLocation":"21386:9:52","nodeType":"VariableDeclaration","scope":5318,"src":"21378:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5314,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21378:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"21377:19:52"},"returnParameters":{"id":5317,"nodeType":"ParameterList","parameters":[],"src":"21405:0:52"},"scope":5383,"src":"21357:49:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5319,"nodeType":"StructuredDocumentation","src":"21412:376:52","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 Note that cancelling a conflicting query dispute will also cancel the related dispute.\n @dev Cancel a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be cancelled"},"functionSelector":"1792f194","id":5324,"implemented":false,"kind":"function","modifiers":[],"name":"cancelDispute","nameLocation":"21802:13:52","nodeType":"FunctionDefinition","parameters":{"id":5322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5321,"mutability":"mutable","name":"disputeId","nameLocation":"21824:9:52","nodeType":"VariableDeclaration","scope":5324,"src":"21816:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5320,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21816:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"21815:19:52"},"returnParameters":{"id":5323,"nodeType":"ParameterList","parameters":[],"src":"21843:0:52"},"scope":5383,"src":"21793:51:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5325,"nodeType":"StructuredDocumentation","src":"21872:112:52","text":" @notice Get the fisherman reward cut.\n @return Fisherman reward cut in percentage (ppm)"},"functionSelector":"bb2a2b47","id":5330,"implemented":false,"kind":"function","modifiers":[],"name":"getFishermanRewardCut","nameLocation":"21998:21:52","nodeType":"FunctionDefinition","parameters":{"id":5326,"nodeType":"ParameterList","parameters":[],"src":"22019:2:52"},"returnParameters":{"id":5329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5328,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5330,"src":"22045:6:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5327,"name":"uint32","nodeType":"ElementaryTypeName","src":"22045:6:52","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"22044:8:52"},"scope":5383,"src":"21989:64:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5331,"nodeType":"StructuredDocumentation","src":"22059:91:52","text":" @notice Get the dispute period.\n @return Dispute period in seconds"},"functionSelector":"5aea0ec4","id":5336,"implemented":false,"kind":"function","modifiers":[],"name":"getDisputePeriod","nameLocation":"22164:16:52","nodeType":"FunctionDefinition","parameters":{"id":5332,"nodeType":"ParameterList","parameters":[],"src":"22180:2:52"},"returnParameters":{"id":5335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5336,"src":"22206:6:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":5333,"name":"uint64","nodeType":"ElementaryTypeName","src":"22206:6:52","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"22205:8:52"},"scope":5383,"src":"22155:59:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5337,"nodeType":"StructuredDocumentation","src":"22220:224:52","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\n @return True if dispute already exists"},"functionSelector":"be41f384","id":5344,"implemented":false,"kind":"function","modifiers":[],"name":"isDisputeCreated","nameLocation":"22458:16:52","nodeType":"FunctionDefinition","parameters":{"id":5340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5339,"mutability":"mutable","name":"disputeId","nameLocation":"22483:9:52","nodeType":"VariableDeclaration","scope":5344,"src":"22475:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5338,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22475:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"22474:19:52"},"returnParameters":{"id":5343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5344,"src":"22517:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5341,"name":"bool","nodeType":"ElementaryTypeName","src":"22517:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22516:6:52"},"scope":5383,"src":"22449:74:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5345,"nodeType":"StructuredDocumentation","src":"22529:429:52","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":5353,"implemented":false,"kind":"function","modifiers":[],"name":"encodeReceipt","nameLocation":"22972:13:52","nodeType":"FunctionDefinition","parameters":{"id":5349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5348,"mutability":"mutable","name":"receipt","nameLocation":"23014:7:52","nodeType":"VariableDeclaration","scope":5353,"src":"22986:35:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$5691_memory_ptr","typeString":"struct IAttestation.Receipt"},"typeName":{"id":5347,"nodeType":"UserDefinedTypeName","pathNode":{"id":5346,"name":"IAttestation.Receipt","nameLocations":["22986:12:52","22999:7:52"],"nodeType":"IdentifierPath","referencedDeclaration":5691,"src":"22986:20:52"},"referencedDeclaration":5691,"src":"22986:20:52","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$5691_storage_ptr","typeString":"struct IAttestation.Receipt"}},"visibility":"internal"}],"src":"22985:37:52"},"returnParameters":{"id":5352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5353,"src":"23046:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5350,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23046:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"23045:9:52"},"scope":5383,"src":"22963:92:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5354,"nodeType":"StructuredDocumentation","src":"23061:143:52","text":" @notice Returns the indexer that signed an attestation.\n @param attestation Attestation\n @return indexer address"},"functionSelector":"c9747f51","id":5362,"implemented":false,"kind":"function","modifiers":[],"name":"getAttestationIndexer","nameLocation":"23218:21:52","nodeType":"FunctionDefinition","parameters":{"id":5358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5357,"mutability":"mutable","name":"attestation","nameLocation":"23266:11:52","nodeType":"VariableDeclaration","scope":5362,"src":"23240:37:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_State_$5705_memory_ptr","typeString":"struct IAttestation.State"},"typeName":{"id":5356,"nodeType":"UserDefinedTypeName","pathNode":{"id":5355,"name":"IAttestation.State","nameLocations":["23240:12:52","23253:5:52"],"nodeType":"IdentifierPath","referencedDeclaration":5705,"src":"23240:18:52"},"referencedDeclaration":5705,"src":"23240:18:52","typeDescriptions":{"typeIdentifier":"t_struct$_State_$5705_storage_ptr","typeString":"struct IAttestation.State"}},"visibility":"internal"}],"src":"23239:39:52"},"returnParameters":{"id":5361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5360,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5362,"src":"23302:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5359,"name":"address","nodeType":"ElementaryTypeName","src":"23302:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23301:9:52"},"scope":5383,"src":"23209:102:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5363,"nodeType":"StructuredDocumentation","src":"23317:141:52","text":" @notice Get the stake snapshot for an indexer.\n @param indexer The indexer address\n @return The stake snapshot"},"functionSelector":"c133b429","id":5370,"implemented":false,"kind":"function","modifiers":[],"name":"getStakeSnapshot","nameLocation":"23472:16:52","nodeType":"FunctionDefinition","parameters":{"id":5366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5365,"mutability":"mutable","name":"indexer","nameLocation":"23497:7:52","nodeType":"VariableDeclaration","scope":5370,"src":"23489:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5364,"name":"address","nodeType":"ElementaryTypeName","src":"23489:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23488:17:52"},"returnParameters":{"id":5369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5368,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5370,"src":"23529:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5367,"name":"uint256","nodeType":"ElementaryTypeName","src":"23529:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23528:9:52"},"scope":5383,"src":"23463:75:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5371,"nodeType":"StructuredDocumentation","src":"23544:224:52","text":" @notice Checks if two attestations are conflicting\n @param attestation1 The first attestation\n @param attestation2 The second attestation\n @return Whether the attestations are conflicting"},"functionSelector":"d36fc9d4","id":5382,"implemented":false,"kind":"function","modifiers":[],"name":"areConflictingAttestations","nameLocation":"23782:26:52","nodeType":"FunctionDefinition","parameters":{"id":5378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5374,"mutability":"mutable","name":"attestation1","nameLocation":"23844:12:52","nodeType":"VariableDeclaration","scope":5382,"src":"23818:38:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_State_$5705_memory_ptr","typeString":"struct IAttestation.State"},"typeName":{"id":5373,"nodeType":"UserDefinedTypeName","pathNode":{"id":5372,"name":"IAttestation.State","nameLocations":["23818:12:52","23831:5:52"],"nodeType":"IdentifierPath","referencedDeclaration":5705,"src":"23818:18:52"},"referencedDeclaration":5705,"src":"23818:18:52","typeDescriptions":{"typeIdentifier":"t_struct$_State_$5705_storage_ptr","typeString":"struct IAttestation.State"}},"visibility":"internal"},{"constant":false,"id":5377,"mutability":"mutable","name":"attestation2","nameLocation":"23892:12:52","nodeType":"VariableDeclaration","scope":5382,"src":"23866:38:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_State_$5705_memory_ptr","typeString":"struct IAttestation.State"},"typeName":{"id":5376,"nodeType":"UserDefinedTypeName","pathNode":{"id":5375,"name":"IAttestation.State","nameLocations":["23866:12:52","23879:5:52"],"nodeType":"IdentifierPath","referencedDeclaration":5705,"src":"23866:18:52"},"referencedDeclaration":5705,"src":"23866:18:52","typeDescriptions":{"typeIdentifier":"t_struct$_State_$5705_storage_ptr","typeString":"struct IAttestation.State"}},"visibility":"internal"}],"src":"23808:102:52"},"returnParameters":{"id":5381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5380,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5382,"src":"23934:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5379,"name":"bool","nodeType":"ElementaryTypeName","src":"23934:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"23933:6:52"},"scope":5383,"src":"23773:167:52","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":5384,"src":"490:23452:52","usedErrors":[5088,5091,5094,5097,5100,5105,5110,5115,5120,5127,5133,5138,5141,5146,5151,5158,5163,5170,5185,5188],"usedEvents":[4954,4959,4964,4969,4974,4979,4998,5019,5034,5045,5056,5067,5074,5085]}],"src":"46:23897:52"},"id":52},"contracts/subgraph-service/ISubgraphService.sol":{"ast":{"absolutePath":"contracts/subgraph-service/ISubgraphService.sol","exportedSymbols":{"IAllocation":[5680],"IDataServiceFees":[2997],"IGraphPayments":[3286],"ILegacyAllocation":[5733],"ISubgraphService":[5639]},"id":5640,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5385,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:53"},{"absolutePath":"contracts/data-service/IDataServiceFees.sol","file":"../data-service/IDataServiceFees.sol","id":5387,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5640,"sourceUnit":2998,"src":"174:72:53","symbolAliases":[{"foreign":{"id":5386,"name":"IDataServiceFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2997,"src":"183:16:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/horizon/IGraphPayments.sol","file":"../horizon/IGraphPayments.sol","id":5389,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5640,"sourceUnit":3287,"src":"247:63:53","symbolAliases":[{"foreign":{"id":5388,"name":"IGraphPayments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"256:14:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/subgraph-service/internal/IAllocation.sol","file":"./internal/IAllocation.sol","id":5391,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5640,"sourceUnit":5681,"src":"312:57:53","symbolAliases":[{"foreign":{"id":5390,"name":"IAllocation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5680,"src":"321:11:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/subgraph-service/internal/ILegacyAllocation.sol","file":"./internal/ILegacyAllocation.sol","id":5393,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5640,"sourceUnit":5734,"src":"370:69:53","symbolAliases":[{"foreign":{"id":5392,"name":"ILegacyAllocation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5733,"src":"379:17:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5395,"name":"IDataServiceFees","nameLocations":["1191:16:53"],"nodeType":"IdentifierPath","referencedDeclaration":2997,"src":"1191:16:53"},"id":5396,"nodeType":"InheritanceSpecifier","src":"1191:16:53"}],"canonicalName":"ISubgraphService","contractDependencies":[],"contractKind":"interface","documentation":{"id":5394,"nodeType":"StructuredDocumentation","src":"441:719:53","text":" @title Interface for the {SubgraphService} contract\n @author Edge & Node\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 @custom:security-contact Please email security+contracts@thegraph.com if you find any\n bugs. We may have an active bug bounty program."},"fullyImplemented":false,"id":5639,"linearizedBaseContracts":[5639,2997,2934],"name":"ISubgraphService","nameLocation":"1171:16:53","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ISubgraphService.Indexer","documentation":{"id":5397,"nodeType":"StructuredDocumentation","src":"1214:190:53","text":" @notice Indexer details\n @param url The URL where the indexer can be reached at for queries\n @param geoHash The indexer's geo location, expressed as a geo hash"},"id":5402,"members":[{"constant":false,"id":5399,"mutability":"mutable","name":"url","nameLocation":"1441:3:53","nodeType":"VariableDeclaration","scope":5402,"src":"1434:10:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":5398,"name":"string","nodeType":"ElementaryTypeName","src":"1434:6:53","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5401,"mutability":"mutable","name":"geoHash","nameLocation":"1461:7:53","nodeType":"VariableDeclaration","scope":5402,"src":"1454:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":5400,"name":"string","nodeType":"ElementaryTypeName","src":"1454:6:53","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"Indexer","nameLocation":"1416:7:53","nodeType":"StructDefinition","scope":5639,"src":"1409:66:53","visibility":"public"},{"anonymous":false,"documentation":{"id":5403,"nodeType":"StructuredDocumentation","src":"1481:471: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 payer The address paying for the query fees\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment\n @param tokensCollected The amount of tokens collected\n @param tokensCurators The amount of tokens curators receive"},"eventSelector":"184c452047299395d4f7f147eb8e823458a450798539be54aeed978f13d87ba2","id":5417,"name":"QueryFeesCollected","nameLocation":"1963:18:53","nodeType":"EventDefinition","parameters":{"id":5416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5405,"indexed":true,"mutability":"mutable","name":"serviceProvider","nameLocation":"2007:15:53","nodeType":"VariableDeclaration","scope":5417,"src":"1991:31:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5404,"name":"address","nodeType":"ElementaryTypeName","src":"1991:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5407,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"2048:5:53","nodeType":"VariableDeclaration","scope":5417,"src":"2032:21:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5406,"name":"address","nodeType":"ElementaryTypeName","src":"2032:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5409,"indexed":true,"mutability":"mutable","name":"allocationId","nameLocation":"2079:12:53","nodeType":"VariableDeclaration","scope":5417,"src":"2063:28:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5408,"name":"address","nodeType":"ElementaryTypeName","src":"2063:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5411,"indexed":false,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"2109:20:53","nodeType":"VariableDeclaration","scope":5417,"src":"2101:28:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5410,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2101:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5413,"indexed":false,"mutability":"mutable","name":"tokensCollected","nameLocation":"2147:15:53","nodeType":"VariableDeclaration","scope":5417,"src":"2139:23:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5412,"name":"uint256","nodeType":"ElementaryTypeName","src":"2139:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5415,"indexed":false,"mutability":"mutable","name":"tokensCurators","nameLocation":"2180:14:53","nodeType":"VariableDeclaration","scope":5417,"src":"2172:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5414,"name":"uint256","nodeType":"ElementaryTypeName","src":"2172:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1981:219:53"},"src":"1957:244:53"},{"anonymous":false,"documentation":{"id":5418,"nodeType":"StructuredDocumentation","src":"2207:207:53","text":" @notice Emitted when an indexer sets a new payments destination\n @param indexer The address of the indexer\n @param paymentsDestination The address where payments should be sent"},"eventSelector":"003215dc05a2fc4e6a1e2c2776311d207c730ee51085aae221acc5cbe6fb55c1","id":5424,"name":"PaymentsDestinationSet","nameLocation":"2425:22:53","nodeType":"EventDefinition","parameters":{"id":5423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5420,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"2464:7:53","nodeType":"VariableDeclaration","scope":5424,"src":"2448:23:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5419,"name":"address","nodeType":"ElementaryTypeName","src":"2448:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5422,"indexed":true,"mutability":"mutable","name":"paymentsDestination","nameLocation":"2489:19:53","nodeType":"VariableDeclaration","scope":5424,"src":"2473:35:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5421,"name":"address","nodeType":"ElementaryTypeName","src":"2473:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2447:62:53"},"src":"2419:91:53"},{"anonymous":false,"documentation":{"id":5425,"nodeType":"StructuredDocumentation","src":"2516:115:53","text":" @notice Emitted when the stake to fees ratio is set.\n @param ratio The stake to fees ratio"},"eventSelector":"2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23","id":5429,"name":"StakeToFeesRatioSet","nameLocation":"2642:19:53","nodeType":"EventDefinition","parameters":{"id":5428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5427,"indexed":false,"mutability":"mutable","name":"ratio","nameLocation":"2670:5:53","nodeType":"VariableDeclaration","scope":5429,"src":"2662:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5426,"name":"uint256","nodeType":"ElementaryTypeName","src":"2662:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2661:15:53"},"src":"2636:41:53"},{"anonymous":false,"documentation":{"id":5430,"nodeType":"StructuredDocumentation","src":"2683:103:53","text":" @notice Emitted when curator cuts are set\n @param curationCut The curation cut"},"eventSelector":"6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9","id":5434,"name":"CurationCutSet","nameLocation":"2797:14:53","nodeType":"EventDefinition","parameters":{"id":5433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5432,"indexed":false,"mutability":"mutable","name":"curationCut","nameLocation":"2820:11:53","nodeType":"VariableDeclaration","scope":5434,"src":"2812:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5431,"name":"uint256","nodeType":"ElementaryTypeName","src":"2812:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2811:21:53"},"src":"2791:42:53"},{"documentation":{"id":5435,"nodeType":"StructuredDocumentation","src":"2839:146:53","text":" @notice 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":5439,"name":"SubgraphServiceInvalidCurationCut","nameLocation":"2996:33:53","nodeType":"ErrorDefinition","parameters":{"id":5438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5437,"mutability":"mutable","name":"curationCut","nameLocation":"3038:11:53","nodeType":"VariableDeclaration","scope":5439,"src":"3030:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5436,"name":"uint256","nodeType":"ElementaryTypeName","src":"3030:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3029:21:53"},"src":"2990:61:53"},{"documentation":{"id":5440,"nodeType":"StructuredDocumentation","src":"3057:85:53","text":" @notice Thrown when an indexer tries to register with an empty URL"},"errorSelector":"f0708720","id":5442,"name":"SubgraphServiceEmptyUrl","nameLocation":"3153:23:53","nodeType":"ErrorDefinition","parameters":{"id":5441,"nodeType":"ParameterList","parameters":[],"src":"3176:2:53"},"src":"3147:32:53"},{"documentation":{"id":5443,"nodeType":"StructuredDocumentation","src":"3185:89:53","text":" @notice Thrown when an indexer tries to register with an empty geohash"},"errorSelector":"798ef654","id":5445,"name":"SubgraphServiceEmptyGeohash","nameLocation":"3285:27:53","nodeType":"ErrorDefinition","parameters":{"id":5444,"nodeType":"ParameterList","parameters":[],"src":"3312:2:53"},"src":"3279:36:53"},{"documentation":{"id":5446,"nodeType":"StructuredDocumentation","src":"3321: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":5450,"name":"SubgraphServiceIndexerNotRegistered","nameLocation":"3511:35:53","nodeType":"ErrorDefinition","parameters":{"id":5449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5448,"mutability":"mutable","name":"indexer","nameLocation":"3555:7:53","nodeType":"VariableDeclaration","scope":5450,"src":"3547:15:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5447,"name":"address","nodeType":"ElementaryTypeName","src":"3547:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3546:17:53"},"src":"3505:59:53"},{"documentation":{"id":5451,"nodeType":"StructuredDocumentation","src":"3570: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":5456,"name":"SubgraphServiceInvalidPaymentType","nameLocation":"3749:33:53","nodeType":"ErrorDefinition","parameters":{"id":5455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5454,"mutability":"mutable","name":"paymentType","nameLocation":"3811:11:53","nodeType":"VariableDeclaration","scope":5456,"src":"3783:39:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":5453,"nodeType":"UserDefinedTypeName","pathNode":{"id":5452,"name":"IGraphPayments.PaymentTypes","nameLocations":["3783:14:53","3798:12:53"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"3783:27:53"},"referencedDeclaration":3224,"src":"3783:27:53","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"}],"src":"3782:41:53"},"src":"3743:81:53"},{"documentation":{"id":5457,"nodeType":"StructuredDocumentation","src":"3830:264:53","text":" @notice Thrown when the contract GRT balance is inconsistent after collecting from Graph Payments\n @param balanceBefore The contract GRT balance before the collection\n @param balanceAfter The contract GRT balance after the collection"},"errorSelector":"9db8bc95","id":5463,"name":"SubgraphServiceInconsistentCollection","nameLocation":"4105:37:53","nodeType":"ErrorDefinition","parameters":{"id":5462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5459,"mutability":"mutable","name":"balanceBefore","nameLocation":"4151:13:53","nodeType":"VariableDeclaration","scope":5463,"src":"4143:21:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5458,"name":"uint256","nodeType":"ElementaryTypeName","src":"4143:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5461,"mutability":"mutable","name":"balanceAfter","nameLocation":"4174:12:53","nodeType":"VariableDeclaration","scope":5463,"src":"4166:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5460,"name":"uint256","nodeType":"ElementaryTypeName","src":"4166:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4142:45:53"},"src":"4099:89:53"},{"documentation":{"id":5464,"nodeType":"StructuredDocumentation","src":"4194: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":5470,"name":"SubgraphServiceIndexerMismatch","nameLocation":"4454:30:53","nodeType":"ErrorDefinition","parameters":{"id":5469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5466,"mutability":"mutable","name":"providedIndexer","nameLocation":"4493:15:53","nodeType":"VariableDeclaration","scope":5470,"src":"4485:23:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5465,"name":"address","nodeType":"ElementaryTypeName","src":"4485:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5468,"mutability":"mutable","name":"expectedIndexer","nameLocation":"4518:15:53","nodeType":"VariableDeclaration","scope":5470,"src":"4510:23:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5467,"name":"address","nodeType":"ElementaryTypeName","src":"4510:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4484:50:53"},"src":"4448:87:53"},{"documentation":{"id":5471,"nodeType":"StructuredDocumentation","src":"4541: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":5477,"name":"SubgraphServiceAllocationNotAuthorized","nameLocation":"4775:38:53","nodeType":"ErrorDefinition","parameters":{"id":5476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5473,"mutability":"mutable","name":"indexer","nameLocation":"4822:7:53","nodeType":"VariableDeclaration","scope":5477,"src":"4814:15:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5472,"name":"address","nodeType":"ElementaryTypeName","src":"4814:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5475,"mutability":"mutable","name":"allocationId","nameLocation":"4839:12:53","nodeType":"VariableDeclaration","scope":5477,"src":"4831:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5474,"name":"address","nodeType":"ElementaryTypeName","src":"4831:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4813:39:53"},"src":"4769:84:53"},{"documentation":{"id":5478,"nodeType":"StructuredDocumentation","src":"4859: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":5484,"name":"SubgraphServiceInvalidRAV","nameLocation":"5115:25:53","nodeType":"ErrorDefinition","parameters":{"id":5483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5480,"mutability":"mutable","name":"ravIndexer","nameLocation":"5149:10:53","nodeType":"VariableDeclaration","scope":5484,"src":"5141:18:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5479,"name":"address","nodeType":"ElementaryTypeName","src":"5141:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5482,"mutability":"mutable","name":"allocationIndexer","nameLocation":"5169:17:53","nodeType":"VariableDeclaration","scope":5484,"src":"5161:25:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5481,"name":"address","nodeType":"ElementaryTypeName","src":"5161:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5140:47:53"},"src":"5109:79:53"},{"documentation":{"id":5485,"nodeType":"StructuredDocumentation","src":"5194: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":5489,"name":"SubgraphServiceCannotForceCloseAllocation","nameLocation":"5387:41:53","nodeType":"ErrorDefinition","parameters":{"id":5488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5487,"mutability":"mutable","name":"allocationId","nameLocation":"5437:12:53","nodeType":"VariableDeclaration","scope":5489,"src":"5429:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5486,"name":"address","nodeType":"ElementaryTypeName","src":"5429:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5428:22:53"},"src":"5381:70:53"},{"documentation":{"id":5490,"nodeType":"StructuredDocumentation","src":"5457:137:53","text":" @notice Thrown when trying to force close an altruistic allocation\n @param allocationId The id of the allocation"},"errorSelector":"be3d9ae8","id":5494,"name":"SubgraphServiceAllocationIsAltruistic","nameLocation":"5605:37:53","nodeType":"ErrorDefinition","parameters":{"id":5493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5492,"mutability":"mutable","name":"allocationId","nameLocation":"5651:12:53","nodeType":"VariableDeclaration","scope":5494,"src":"5643:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5491,"name":"address","nodeType":"ElementaryTypeName","src":"5643:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5642:22:53"},"src":"5599:66:53"},{"documentation":{"id":5495,"nodeType":"StructuredDocumentation","src":"5671:80:53","text":" @notice Thrown when trying to set stake to fees ratio to zero"},"errorSelector":"bc71a043","id":5497,"name":"SubgraphServiceInvalidZeroStakeToFeesRatio","nameLocation":"5762:42:53","nodeType":"ErrorDefinition","parameters":{"id":5496,"nodeType":"ParameterList","parameters":[],"src":"5804:2:53"},"src":"5756:51:53"},{"documentation":{"id":5498,"nodeType":"StructuredDocumentation","src":"5813:118:53","text":" @notice Thrown when collectionId is not a valid address\n @param collectionId The collectionId"},"errorSelector":"fa4ac7a7","id":5502,"name":"SubgraphServiceInvalidCollectionId","nameLocation":"5942:34:53","nodeType":"ErrorDefinition","parameters":{"id":5501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5500,"mutability":"mutable","name":"collectionId","nameLocation":"5985:12:53","nodeType":"VariableDeclaration","scope":5502,"src":"5977:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5499,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5977:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5976:22:53"},"src":"5936:63:53"},{"documentation":{"id":5503,"nodeType":"StructuredDocumentation","src":"6005:589:53","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 owner The owner of the contract\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":"c84a5ef3","id":5514,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"6608:10:53","nodeType":"FunctionDefinition","parameters":{"id":5512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5505,"mutability":"mutable","name":"owner","nameLocation":"6636:5:53","nodeType":"VariableDeclaration","scope":5514,"src":"6628:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5504,"name":"address","nodeType":"ElementaryTypeName","src":"6628:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5507,"mutability":"mutable","name":"minimumProvisionTokens","nameLocation":"6659:22:53","nodeType":"VariableDeclaration","scope":5514,"src":"6651:30:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5506,"name":"uint256","nodeType":"ElementaryTypeName","src":"6651:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5509,"mutability":"mutable","name":"maximumDelegationRatio","nameLocation":"6698:22:53","nodeType":"VariableDeclaration","scope":5514,"src":"6691:29:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5508,"name":"uint32","nodeType":"ElementaryTypeName","src":"6691:6:53","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":5511,"mutability":"mutable","name":"stakeToFeesRatio","nameLocation":"6738:16:53","nodeType":"VariableDeclaration","scope":5514,"src":"6730:24:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5510,"name":"uint256","nodeType":"ElementaryTypeName","src":"6730:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6618:142:53"},"returnParameters":{"id":5513,"nodeType":"ParameterList","parameters":[],"src":"6769:0:53"},"scope":5639,"src":"6599:171:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5515,"nodeType":"StructuredDocumentation","src":"6776:495:53","text":" @notice Force close a stale allocation\n @dev This function can be permissionlessly called when the allocation is stale. This\n ensures that rewards for other allocations are not diluted by an inactive allocation.\n Requirements:\n - Allocation must exist and be open\n - Allocation must be stale\n - Allocation cannot be altruistic\n Emits a {AllocationClosed} event.\n @param allocationId The id of the allocation"},"functionSelector":"ec9c218d","id":5520,"implemented":false,"kind":"function","modifiers":[],"name":"closeStaleAllocation","nameLocation":"7285:20:53","nodeType":"FunctionDefinition","parameters":{"id":5518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5517,"mutability":"mutable","name":"allocationId","nameLocation":"7314:12:53","nodeType":"VariableDeclaration","scope":5520,"src":"7306:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5516,"name":"address","nodeType":"ElementaryTypeName","src":"7306:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7305:22:53"},"returnParameters":{"id":5519,"nodeType":"ParameterList","parameters":[],"src":"7336:0:53"},"scope":5639,"src":"7276:61:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5521,"nodeType":"StructuredDocumentation","src":"7343: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":5530,"implemented":false,"kind":"function","modifiers":[],"name":"resizeAllocation","nameLocation":"8038:16:53","nodeType":"FunctionDefinition","parameters":{"id":5528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5523,"mutability":"mutable","name":"indexer","nameLocation":"8063:7:53","nodeType":"VariableDeclaration","scope":5530,"src":"8055:15:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5522,"name":"address","nodeType":"ElementaryTypeName","src":"8055:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5525,"mutability":"mutable","name":"allocationId","nameLocation":"8080:12:53","nodeType":"VariableDeclaration","scope":5530,"src":"8072:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5524,"name":"address","nodeType":"ElementaryTypeName","src":"8072:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5527,"mutability":"mutable","name":"tokens","nameLocation":"8102:6:53","nodeType":"VariableDeclaration","scope":5530,"src":"8094:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5526,"name":"uint256","nodeType":"ElementaryTypeName","src":"8094:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8054:55:53"},"returnParameters":{"id":5529,"nodeType":"ParameterList","parameters":[],"src":"8118:0:53"},"scope":5639,"src":"8029:90:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5531,"nodeType":"StructuredDocumentation","src":"8125: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":5540,"implemented":false,"kind":"function","modifiers":[],"name":"migrateLegacyAllocation","nameLocation":"8537:23:53","nodeType":"FunctionDefinition","parameters":{"id":5538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5533,"mutability":"mutable","name":"indexer","nameLocation":"8569:7:53","nodeType":"VariableDeclaration","scope":5540,"src":"8561:15:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5532,"name":"address","nodeType":"ElementaryTypeName","src":"8561:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5535,"mutability":"mutable","name":"allocationId","nameLocation":"8586:12:53","nodeType":"VariableDeclaration","scope":5540,"src":"8578:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5534,"name":"address","nodeType":"ElementaryTypeName","src":"8578:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5537,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"8608:20:53","nodeType":"VariableDeclaration","scope":5540,"src":"8600:28:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5536,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8600:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8560:69:53"},"returnParameters":{"id":5539,"nodeType":"ParameterList","parameters":[],"src":"8638:0:53"},"scope":5639,"src":"8528:111:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5541,"nodeType":"StructuredDocumentation","src":"8645: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":5548,"implemented":false,"kind":"function","modifiers":[],"name":"setPauseGuardian","nameLocation":"8868:16:53","nodeType":"FunctionDefinition","parameters":{"id":5546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5543,"mutability":"mutable","name":"pauseGuardian","nameLocation":"8893:13:53","nodeType":"VariableDeclaration","scope":5548,"src":"8885:21:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5542,"name":"address","nodeType":"ElementaryTypeName","src":"8885:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5545,"mutability":"mutable","name":"allowed","nameLocation":"8913:7:53","nodeType":"VariableDeclaration","scope":5548,"src":"8908:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5544,"name":"bool","nodeType":"ElementaryTypeName","src":"8908:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8884:37:53"},"returnParameters":{"id":5547,"nodeType":"ParameterList","parameters":[],"src":"8930:0:53"},"scope":5639,"src":"8859:72:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5549,"nodeType":"StructuredDocumentation","src":"8937: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":5554,"implemented":false,"kind":"function","modifiers":[],"name":"setMinimumProvisionTokens","nameLocation":"9167:25:53","nodeType":"FunctionDefinition","parameters":{"id":5552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5551,"mutability":"mutable","name":"minimumProvisionTokens","nameLocation":"9201:22:53","nodeType":"VariableDeclaration","scope":5554,"src":"9193:30:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5550,"name":"uint256","nodeType":"ElementaryTypeName","src":"9193:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9192:32:53"},"returnParameters":{"id":5553,"nodeType":"ParameterList","parameters":[],"src":"9233:0:53"},"scope":5639,"src":"9158:76:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5555,"nodeType":"StructuredDocumentation","src":"9240:103:53","text":" @notice Sets the delegation ratio\n @param delegationRatio The delegation ratio"},"functionSelector":"1dd42f60","id":5560,"implemented":false,"kind":"function","modifiers":[],"name":"setDelegationRatio","nameLocation":"9357:18:53","nodeType":"FunctionDefinition","parameters":{"id":5558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5557,"mutability":"mutable","name":"delegationRatio","nameLocation":"9383:15:53","nodeType":"VariableDeclaration","scope":5560,"src":"9376:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5556,"name":"uint32","nodeType":"ElementaryTypeName","src":"9376:6:53","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"9375:24:53"},"returnParameters":{"id":5559,"nodeType":"ParameterList","parameters":[],"src":"9408:0:53"},"scope":5639,"src":"9348:61:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5561,"nodeType":"StructuredDocumentation","src":"9415:110:53","text":" @notice Sets the stake to fees ratio\n @param stakeToFeesRatio The stake to fees ratio"},"functionSelector":"e6f50054","id":5566,"implemented":false,"kind":"function","modifiers":[],"name":"setStakeToFeesRatio","nameLocation":"9539:19:53","nodeType":"FunctionDefinition","parameters":{"id":5564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5563,"mutability":"mutable","name":"stakeToFeesRatio","nameLocation":"9567:16:53","nodeType":"VariableDeclaration","scope":5566,"src":"9559:24:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5562,"name":"uint256","nodeType":"ElementaryTypeName","src":"9559:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9558:26:53"},"returnParameters":{"id":5565,"nodeType":"ParameterList","parameters":[],"src":"9593:0:53"},"scope":5639,"src":"9530:64:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5567,"nodeType":"StructuredDocumentation","src":"9600: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":5572,"implemented":false,"kind":"function","modifiers":[],"name":"setMaxPOIStaleness","nameLocation":"9804:18:53","nodeType":"FunctionDefinition","parameters":{"id":5570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5569,"mutability":"mutable","name":"maxPOIStaleness","nameLocation":"9831:15:53","nodeType":"VariableDeclaration","scope":5572,"src":"9823:23:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5568,"name":"uint256","nodeType":"ElementaryTypeName","src":"9823:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9822:25:53"},"returnParameters":{"id":5571,"nodeType":"ParameterList","parameters":[],"src":"9856:0:53"},"scope":5639,"src":"9795:62:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5573,"nodeType":"StructuredDocumentation","src":"9863: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":5578,"implemented":false,"kind":"function","modifiers":[],"name":"setCurationCut","nameLocation":"10054:14:53","nodeType":"FunctionDefinition","parameters":{"id":5576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5575,"mutability":"mutable","name":"curationCut","nameLocation":"10077:11:53","nodeType":"VariableDeclaration","scope":5578,"src":"10069:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5574,"name":"uint256","nodeType":"ElementaryTypeName","src":"10069:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10068:21:53"},"returnParameters":{"id":5577,"nodeType":"ParameterList","parameters":[],"src":"10098:0:53"},"scope":5639,"src":"10045:54:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5579,"nodeType":"StructuredDocumentation","src":"10105:218:53","text":" @notice Sets the payments destination for an indexer to receive payments\n @dev Emits a {PaymentsDestinationSet} event\n @param paymentsDestination The address where payments should be sent"},"functionSelector":"6ccec5b8","id":5584,"implemented":false,"kind":"function","modifiers":[],"name":"setPaymentsDestination","nameLocation":"10337:22:53","nodeType":"FunctionDefinition","parameters":{"id":5582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5581,"mutability":"mutable","name":"paymentsDestination","nameLocation":"10368:19:53","nodeType":"VariableDeclaration","scope":5584,"src":"10360:27:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5580,"name":"address","nodeType":"ElementaryTypeName","src":"10360:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10359:29:53"},"returnParameters":{"id":5583,"nodeType":"ParameterList","parameters":[],"src":"10397:0:53"},"scope":5639,"src":"10328:70:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5585,"nodeType":"StructuredDocumentation","src":"10404:206:53","text":" @notice Gets the details of an allocation\n For legacy allocations use {getLegacyAllocation}\n @param allocationId The id of the allocation\n @return The allocation details"},"functionSelector":"0e022923","id":5593,"implemented":false,"kind":"function","modifiers":[],"name":"getAllocation","nameLocation":"10624:13:53","nodeType":"FunctionDefinition","parameters":{"id":5588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5587,"mutability":"mutable","name":"allocationId","nameLocation":"10646:12:53","nodeType":"VariableDeclaration","scope":5593,"src":"10638:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5586,"name":"address","nodeType":"ElementaryTypeName","src":"10638:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10637:22:53"},"returnParameters":{"id":5592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5591,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5593,"src":"10683:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_State_$5662_memory_ptr","typeString":"struct IAllocation.State"},"typeName":{"id":5590,"nodeType":"UserDefinedTypeName","pathNode":{"id":5589,"name":"IAllocation.State","nameLocations":["10683:11:53","10695:5:53"],"nodeType":"IdentifierPath","referencedDeclaration":5662,"src":"10683:17:53"},"referencedDeclaration":5662,"src":"10683:17:53","typeDescriptions":{"typeIdentifier":"t_struct$_State_$5662_storage_ptr","typeString":"struct IAllocation.State"}},"visibility":"internal"}],"src":"10682:26:53"},"scope":5639,"src":"10615:94:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5594,"nodeType":"StructuredDocumentation","src":"10715:217: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\n @return The legacy allocation details"},"functionSelector":"6d9a3951","id":5602,"implemented":false,"kind":"function","modifiers":[],"name":"getLegacyAllocation","nameLocation":"10946:19:53","nodeType":"FunctionDefinition","parameters":{"id":5597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5596,"mutability":"mutable","name":"allocationId","nameLocation":"10974:12:53","nodeType":"VariableDeclaration","scope":5602,"src":"10966:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5595,"name":"address","nodeType":"ElementaryTypeName","src":"10966:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10965:22:53"},"returnParameters":{"id":5601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5602,"src":"11011:30:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_State_$5722_memory_ptr","typeString":"struct ILegacyAllocation.State"},"typeName":{"id":5599,"nodeType":"UserDefinedTypeName","pathNode":{"id":5598,"name":"ILegacyAllocation.State","nameLocations":["11011:17:53","11029:5:53"],"nodeType":"IdentifierPath","referencedDeclaration":5722,"src":"11011:23:53"},"referencedDeclaration":5722,"src":"11011:23:53","typeDescriptions":{"typeIdentifier":"t_struct$_State_$5722_storage_ptr","typeString":"struct ILegacyAllocation.State"}},"visibility":"internal"}],"src":"11010:32:53"},"scope":5639,"src":"10937:106:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5603,"nodeType":"StructuredDocumentation","src":"11049:219: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\n @return The encoded allocation proof"},"functionSelector":"ce56c98b","id":5612,"implemented":false,"kind":"function","modifiers":[],"name":"encodeAllocationProof","nameLocation":"11282:21:53","nodeType":"FunctionDefinition","parameters":{"id":5608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5605,"mutability":"mutable","name":"indexer","nameLocation":"11312:7:53","nodeType":"VariableDeclaration","scope":5612,"src":"11304:15:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5604,"name":"address","nodeType":"ElementaryTypeName","src":"11304:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5607,"mutability":"mutable","name":"allocationId","nameLocation":"11329:12:53","nodeType":"VariableDeclaration","scope":5612,"src":"11321:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5606,"name":"address","nodeType":"ElementaryTypeName","src":"11321:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11303:39:53"},"returnParameters":{"id":5611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5610,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5612,"src":"11366:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5609,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11366:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11365:9:53"},"scope":5639,"src":"11273:102:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5613,"nodeType":"StructuredDocumentation","src":"11381: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":5620,"implemented":false,"kind":"function","modifiers":[],"name":"isOverAllocated","nameLocation":"11582:15:53","nodeType":"FunctionDefinition","parameters":{"id":5616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5615,"mutability":"mutable","name":"allocationId","nameLocation":"11606:12:53","nodeType":"VariableDeclaration","scope":5620,"src":"11598:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5614,"name":"address","nodeType":"ElementaryTypeName","src":"11598:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11597:22:53"},"returnParameters":{"id":5619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5618,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5620,"src":"11643:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5617,"name":"bool","nodeType":"ElementaryTypeName","src":"11643:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11642:6:53"},"scope":5639,"src":"11573:76:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5621,"nodeType":"StructuredDocumentation","src":"11655:116:53","text":" @notice Gets the address of the dispute manager\n @return The address of the dispute manager"},"functionSelector":"db9bee46","id":5626,"implemented":false,"kind":"function","modifiers":[],"name":"getDisputeManager","nameLocation":"11785:17:53","nodeType":"FunctionDefinition","parameters":{"id":5622,"nodeType":"ParameterList","parameters":[],"src":"11802:2:53"},"returnParameters":{"id":5625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5624,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5626,"src":"11828:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5623,"name":"address","nodeType":"ElementaryTypeName","src":"11828:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11827:9:53"},"scope":5639,"src":"11776:61:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5627,"nodeType":"StructuredDocumentation","src":"11843:128:53","text":" @notice Gets the address of the graph tally collector\n @return The address of the graph tally collector"},"functionSelector":"ebf6ddaf","id":5632,"implemented":false,"kind":"function","modifiers":[],"name":"getGraphTallyCollector","nameLocation":"11985:22:53","nodeType":"FunctionDefinition","parameters":{"id":5628,"nodeType":"ParameterList","parameters":[],"src":"12007:2:53"},"returnParameters":{"id":5631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5630,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5632,"src":"12033:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5629,"name":"address","nodeType":"ElementaryTypeName","src":"12033:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12032:9:53"},"scope":5639,"src":"11976:66:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5633,"nodeType":"StructuredDocumentation","src":"12048:120:53","text":" @notice Gets the address of the curation contract\n @return The address of the curation contract"},"functionSelector":"c0f47497","id":5638,"implemented":false,"kind":"function","modifiers":[],"name":"getCuration","nameLocation":"12182:11:53","nodeType":"FunctionDefinition","parameters":{"id":5634,"nodeType":"ParameterList","parameters":[],"src":"12193:2:53"},"returnParameters":{"id":5637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5636,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5638,"src":"12219:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5635,"name":"address","nodeType":"ElementaryTypeName","src":"12219:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12218:9:53"},"scope":5639,"src":"12173:55:53","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5640,"src":"1161:11069:53","usedErrors":[2987,2990,5439,5442,5445,5450,5456,5463,5470,5477,5484,5489,5494,5497,5502],"usedEvents":[2814,2819,2826,2833,2843,2850,2962,2973,2982,5417,5424,5429,5434]}],"src":"45:12186:53"},"id":53},"contracts/subgraph-service/internal/IAllocation.sol":{"ast":{"absolutePath":"contracts/subgraph-service/internal/IAllocation.sol","exportedSymbols":{"IAllocation":[5680]},"id":5681,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5641,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:54"},{"abstract":false,"baseContracts":[],"canonicalName":"IAllocation","contractDependencies":[],"contractKind":"interface","documentation":{"id":5642,"nodeType":"StructuredDocumentation","src":"72:294:54","text":" @title Interface for the {Allocation} library contract.\n @author Edge & Node\n @notice Interface for managing allocation data and operations\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":5680,"linearizedBaseContracts":[5680],"name":"IAllocation","nameLocation":"377:11:54","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IAllocation.State","documentation":{"id":5643,"nodeType":"StructuredDocumentation","src":"395:723:54","text":" @notice Allocation details\n @param indexer The indexer that owns the allocation\n @param subgraphDeploymentId The subgraph deployment id the allocation is for\n @param tokens The number of tokens allocated\n @param createdAt The timestamp when the allocation was created\n @param closedAt The timestamp when the allocation was closed\n @param lastPOIPresentedAt The timestamp when the last POI was presented\n @param accRewardsPerAllocatedToken The accumulated rewards per allocated token\n @param accRewardsPending The accumulated rewards that are pending to be claimed due allocation resize\n @param createdAtEpoch The epoch when the allocation was created"},"id":5662,"members":[{"constant":false,"id":5645,"mutability":"mutable","name":"indexer","nameLocation":"1154:7:54","nodeType":"VariableDeclaration","scope":5662,"src":"1146:15:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5644,"name":"address","nodeType":"ElementaryTypeName","src":"1146:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5647,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"1179:20:54","nodeType":"VariableDeclaration","scope":5662,"src":"1171:28:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5646,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1171:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5649,"mutability":"mutable","name":"tokens","nameLocation":"1217:6:54","nodeType":"VariableDeclaration","scope":5662,"src":"1209:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5648,"name":"uint256","nodeType":"ElementaryTypeName","src":"1209:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5651,"mutability":"mutable","name":"createdAt","nameLocation":"1241:9:54","nodeType":"VariableDeclaration","scope":5662,"src":"1233:17:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5650,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5653,"mutability":"mutable","name":"closedAt","nameLocation":"1268:8:54","nodeType":"VariableDeclaration","scope":5662,"src":"1260:16:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5652,"name":"uint256","nodeType":"ElementaryTypeName","src":"1260:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5655,"mutability":"mutable","name":"lastPOIPresentedAt","nameLocation":"1294:18:54","nodeType":"VariableDeclaration","scope":5662,"src":"1286:26:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5654,"name":"uint256","nodeType":"ElementaryTypeName","src":"1286:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5657,"mutability":"mutable","name":"accRewardsPerAllocatedToken","nameLocation":"1330:27:54","nodeType":"VariableDeclaration","scope":5662,"src":"1322:35:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5656,"name":"uint256","nodeType":"ElementaryTypeName","src":"1322:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5659,"mutability":"mutable","name":"accRewardsPending","nameLocation":"1375:17:54","nodeType":"VariableDeclaration","scope":5662,"src":"1367:25:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5658,"name":"uint256","nodeType":"ElementaryTypeName","src":"1367:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5661,"mutability":"mutable","name":"createdAtEpoch","nameLocation":"1410:14:54","nodeType":"VariableDeclaration","scope":5662,"src":"1402:22:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5660,"name":"uint256","nodeType":"ElementaryTypeName","src":"1402:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"State","nameLocation":"1130:5:54","nodeType":"StructDefinition","scope":5680,"src":"1123:308:54","visibility":"public"},{"documentation":{"id":5663,"nodeType":"StructuredDocumentation","src":"1437:138:54","text":" @notice Thrown when attempting to create an allocation with an existing id\n @param allocationId The allocation id"},"errorSelector":"0bc4def5","id":5667,"name":"AllocationAlreadyExists","nameLocation":"1586:23:54","nodeType":"ErrorDefinition","parameters":{"id":5666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5665,"mutability":"mutable","name":"allocationId","nameLocation":"1618:12:54","nodeType":"VariableDeclaration","scope":5667,"src":"1610:20:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5664,"name":"address","nodeType":"ElementaryTypeName","src":"1610:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1609:22:54"},"src":"1580:52:54"},{"documentation":{"id":5668,"nodeType":"StructuredDocumentation","src":"1638: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":5672,"name":"AllocationDoesNotExist","nameLocation":"1792:22:54","nodeType":"ErrorDefinition","parameters":{"id":5671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5670,"mutability":"mutable","name":"allocationId","nameLocation":"1823:12:54","nodeType":"VariableDeclaration","scope":5672,"src":"1815:20:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5669,"name":"address","nodeType":"ElementaryTypeName","src":"1815:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1814:22:54"},"src":"1786:51:54"},{"documentation":{"id":5673,"nodeType":"StructuredDocumentation","src":"1843: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":5679,"name":"AllocationClosed","nameLocation":"2059:16:54","nodeType":"ErrorDefinition","parameters":{"id":5678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5675,"mutability":"mutable","name":"allocationId","nameLocation":"2084:12:54","nodeType":"VariableDeclaration","scope":5679,"src":"2076:20:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5674,"name":"address","nodeType":"ElementaryTypeName","src":"2076:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5677,"mutability":"mutable","name":"closedAt","nameLocation":"2106:8:54","nodeType":"VariableDeclaration","scope":5679,"src":"2098:16:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5676,"name":"uint256","nodeType":"ElementaryTypeName","src":"2098:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2075:40:54"},"src":"2053:63:54"}],"scope":5681,"src":"367:1751:54","usedErrors":[5667,5672,5679],"usedEvents":[]}],"src":"46:2073:54"},"id":54},"contracts/subgraph-service/internal/IAttestation.sol":{"ast":{"absolutePath":"contracts/subgraph-service/internal/IAttestation.sol","exportedSymbols":{"IAttestation":[5713]},"id":5714,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5682,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:55"},{"abstract":false,"baseContracts":[],"canonicalName":"IAttestation","contractDependencies":[],"contractKind":"interface","documentation":{"id":5683,"nodeType":"StructuredDocumentation","src":"72:298:55","text":" @title Interface for the {Attestation} library contract.\n @author Edge & Node\n @notice Interface for managing attestation data and verification\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":5713,"linearizedBaseContracts":[5713],"name":"IAttestation","nameLocation":"381:12:55","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IAttestation.Receipt","documentation":{"id":5684,"nodeType":"StructuredDocumentation","src":"400:242:55","text":" @notice Receipt content sent from the service provider in response to request\n @param requestCID The request CID\n @param responseCID The response CID\n @param subgraphDeploymentId The subgraph deployment id"},"id":5691,"members":[{"constant":false,"id":5686,"mutability":"mutable","name":"requestCID","nameLocation":"680:10:55","nodeType":"VariableDeclaration","scope":5691,"src":"672:18:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5685,"name":"bytes32","nodeType":"ElementaryTypeName","src":"672:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5688,"mutability":"mutable","name":"responseCID","nameLocation":"708:11:55","nodeType":"VariableDeclaration","scope":5691,"src":"700:19:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5687,"name":"bytes32","nodeType":"ElementaryTypeName","src":"700:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5690,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"737:20:55","nodeType":"VariableDeclaration","scope":5691,"src":"729:28:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5689,"name":"bytes32","nodeType":"ElementaryTypeName","src":"729:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Receipt","nameLocation":"654:7:55","nodeType":"StructDefinition","scope":5713,"src":"647:117:55","visibility":"public"},{"canonicalName":"IAttestation.State","documentation":{"id":5692,"nodeType":"StructuredDocumentation","src":"770:375:55","text":" @notice Attestation sent from the service provider in response to a request\n @param requestCID The request CID\n @param responseCID The response CID\n @param subgraphDeploymentId The subgraph deployment id\n @param r The r value of the signature\n @param s The s value of the signature\n @param v The v value of the signature"},"id":5705,"members":[{"constant":false,"id":5694,"mutability":"mutable","name":"requestCID","nameLocation":"1181:10:55","nodeType":"VariableDeclaration","scope":5705,"src":"1173:18:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5693,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1173:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5696,"mutability":"mutable","name":"responseCID","nameLocation":"1209:11:55","nodeType":"VariableDeclaration","scope":5705,"src":"1201:19:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5695,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1201:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5698,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"1238:20:55","nodeType":"VariableDeclaration","scope":5705,"src":"1230:28:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5697,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1230:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5700,"mutability":"mutable","name":"r","nameLocation":"1276:1:55","nodeType":"VariableDeclaration","scope":5705,"src":"1268:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5699,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1268:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5702,"mutability":"mutable","name":"s","nameLocation":"1295:1:55","nodeType":"VariableDeclaration","scope":5705,"src":"1287:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5701,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1287:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5704,"mutability":"mutable","name":"v","nameLocation":"1312:1:55","nodeType":"VariableDeclaration","scope":5705,"src":"1306:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5703,"name":"uint8","nodeType":"ElementaryTypeName","src":"1306:5:55","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"State","nameLocation":"1157:5:55","nodeType":"StructDefinition","scope":5713,"src":"1150:170:55","visibility":"public"},{"documentation":{"id":5706,"nodeType":"StructuredDocumentation","src":"1326:216:55","text":" @notice The error thrown when the attestation data length is invalid\n @param length The length of the attestation data\n @param expectedLength The expected length of the attestation data"},"errorSelector":"3fdf3423","id":5712,"name":"AttestationInvalidBytesLength","nameLocation":"1553:29:55","nodeType":"ErrorDefinition","parameters":{"id":5711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5708,"mutability":"mutable","name":"length","nameLocation":"1591:6:55","nodeType":"VariableDeclaration","scope":5712,"src":"1583:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5707,"name":"uint256","nodeType":"ElementaryTypeName","src":"1583:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5710,"mutability":"mutable","name":"expectedLength","nameLocation":"1607:14:55","nodeType":"VariableDeclaration","scope":5712,"src":"1599:22:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5709,"name":"uint256","nodeType":"ElementaryTypeName","src":"1599:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1582:40:55"},"src":"1547:76:55"}],"scope":5714,"src":"371:1254:55","usedErrors":[5712],"usedEvents":[]}],"src":"46:1580:55"},"id":55},"contracts/subgraph-service/internal/ILegacyAllocation.sol":{"ast":{"absolutePath":"contracts/subgraph-service/internal/ILegacyAllocation.sol","exportedSymbols":{"ILegacyAllocation":[5733]},"id":5734,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5715,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"46:24:56"},{"abstract":false,"baseContracts":[],"canonicalName":"ILegacyAllocation","contractDependencies":[],"contractKind":"interface","documentation":{"id":5716,"nodeType":"StructuredDocumentation","src":"72:292:56","text":" @title Interface for the {LegacyAllocation} library contract.\n @author Edge & Node\n @notice Interface for managing legacy allocation data\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":5733,"linearizedBaseContracts":[5733],"name":"ILegacyAllocation","nameLocation":"375:17:56","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ILegacyAllocation.State","documentation":{"id":5717,"nodeType":"StructuredDocumentation","src":"399:450: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.\n @param indexer The indexer that owns the allocation\n @param subgraphDeploymentId The subgraph deployment id the allocation is for"},"id":5722,"members":[{"constant":false,"id":5719,"mutability":"mutable","name":"indexer","nameLocation":"885:7:56","nodeType":"VariableDeclaration","scope":5722,"src":"877:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5718,"name":"address","nodeType":"ElementaryTypeName","src":"877:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5721,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"910:20:56","nodeType":"VariableDeclaration","scope":5722,"src":"902:28:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5720,"name":"bytes32","nodeType":"ElementaryTypeName","src":"902:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"State","nameLocation":"861:5:56","nodeType":"StructDefinition","scope":5733,"src":"854:83:56","visibility":"public"},{"documentation":{"id":5723,"nodeType":"StructuredDocumentation","src":"943:139:56","text":" @notice Thrown when attempting to migrate an allocation with an existing id\n @param allocationId The allocation id"},"errorSelector":"b5f497c4","id":5727,"name":"LegacyAllocationAlreadyExists","nameLocation":"1093:29:56","nodeType":"ErrorDefinition","parameters":{"id":5726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5725,"mutability":"mutable","name":"allocationId","nameLocation":"1131:12:56","nodeType":"VariableDeclaration","scope":5727,"src":"1123:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5724,"name":"address","nodeType":"ElementaryTypeName","src":"1123:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1122:22:56"},"src":"1087:58:56"},{"documentation":{"id":5728,"nodeType":"StructuredDocumentation","src":"1151:123:56","text":" @notice Thrown when trying to get a non-existent allocation\n @param allocationId The allocation id"},"errorSelector":"40e1fd4a","id":5732,"name":"LegacyAllocationDoesNotExist","nameLocation":"1285:28:56","nodeType":"ErrorDefinition","parameters":{"id":5731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5730,"mutability":"mutable","name":"allocationId","nameLocation":"1322:12:56","nodeType":"VariableDeclaration","scope":5732,"src":"1314:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5729,"name":"address","nodeType":"ElementaryTypeName","src":"1314:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1313:22:56"},"src":"1279:57:56"}],"scope":5734,"src":"365:973:56","usedErrors":[5727,5732],"usedEvents":[]}],"src":"46:1293:56"},"id":56},"contracts/token-distribution/IGraphTokenLockWallet.sol":{"ast":{"absolutePath":"contracts/token-distribution/IGraphTokenLockWallet.sol","exportedSymbols":{"IGraphTokenLockWallet":[5950]},"id":5951,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5735,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:57"},{"abstract":false,"baseContracts":[],"canonicalName":"IGraphTokenLockWallet","contractDependencies":[],"contractKind":"interface","documentation":{"id":5736,"nodeType":"StructuredDocumentation","src":"183:299:57","text":" @title IGraphTokenLockWallet\n @author Edge & Node\n @notice Interface for the GraphTokenLockWallet contract that manages locked tokens with vesting schedules\n @dev This interface includes core vesting functionality. Protocol interaction functions are in IGraphTokenLockWalletToolshed"},"fullyImplemented":false,"id":5950,"linearizedBaseContracts":[5950],"name":"IGraphTokenLockWallet","nameLocation":"493:21:57","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IGraphTokenLockWallet.Revocability","documentation":{"id":5737,"nodeType":"StructuredDocumentation","src":"521:69:57","text":" @notice Revocability status for a vesting contract"},"id":5741,"members":[{"id":5738,"name":"NotSet","nameLocation":"623:6:57","nodeType":"EnumValue","src":"623:6:57"},{"id":5739,"name":"Enabled","nameLocation":"639:7:57","nodeType":"EnumValue","src":"639:7:57"},{"id":5740,"name":"Disabled","nameLocation":"656:8:57","nodeType":"EnumValue","src":"656:8:57"}],"name":"Revocability","nameLocation":"600:12:57","nodeType":"EnumDefinition","src":"595:75:57"},{"anonymous":false,"documentation":{"id":5742,"nodeType":"StructuredDocumentation","src":"691:154:57","text":"@notice Emitted when the manager is updated\n @param _oldManager The previous manager address\n @param _newManager The new manager address"},"eventSelector":"dac3632743b879638fd2d51c4d3c1dd796615b4758a55b50b0c19b971ba9fbc7","id":5748,"name":"ManagerUpdated","nameLocation":"856:14:57","nodeType":"EventDefinition","parameters":{"id":5747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5744,"indexed":true,"mutability":"mutable","name":"_oldManager","nameLocation":"887:11:57","nodeType":"VariableDeclaration","scope":5748,"src":"871:27:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5743,"name":"address","nodeType":"ElementaryTypeName","src":"871:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5746,"indexed":true,"mutability":"mutable","name":"_newManager","nameLocation":"916:11:57","nodeType":"VariableDeclaration","scope":5748,"src":"900:27:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5745,"name":"address","nodeType":"ElementaryTypeName","src":"900:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"870:58:57"},"src":"850:79:57"},{"anonymous":false,"documentation":{"id":5749,"nodeType":"StructuredDocumentation","src":"935:151:57","text":"@notice Emitted when ownership is transferred\n @param previousOwner The previous owner address\n @param newOwner The new owner address"},"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":5755,"name":"OwnershipTransferred","nameLocation":"1097:20:57","nodeType":"EventDefinition","parameters":{"id":5754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5751,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1134:13:57","nodeType":"VariableDeclaration","scope":5755,"src":"1118:29:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5750,"name":"address","nodeType":"ElementaryTypeName","src":"1118:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5753,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1165:8:57","nodeType":"VariableDeclaration","scope":5755,"src":"1149:24:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5752,"name":"address","nodeType":"ElementaryTypeName","src":"1149:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1117:57:57"},"src":"1091:84:57"},{"anonymous":false,"documentation":{"id":5756,"nodeType":"StructuredDocumentation","src":"1181:56:57","text":"@notice Emitted when token destinations are approved"},"eventSelector":"b837fd51506ba3cc623a37c78ed22fd521f2f6e9f69a34d5c2a4a9474f275793","id":5758,"name":"TokenDestinationsApproved","nameLocation":"1248:25:57","nodeType":"EventDefinition","parameters":{"id":5757,"nodeType":"ParameterList","parameters":[],"src":"1273:2:57"},"src":"1242:34:57"},{"anonymous":false,"documentation":{"id":5759,"nodeType":"StructuredDocumentation","src":"1282:55:57","text":"@notice Emitted when token destinations are revoked"},"eventSelector":"6d317a20ba9d790014284bef285283cd61fde92e0f2711050f563a9d2cf41711","id":5761,"name":"TokenDestinationsRevoked","nameLocation":"1348:24:57","nodeType":"EventDefinition","parameters":{"id":5760,"nodeType":"ParameterList","parameters":[],"src":"1372:2:57"},"src":"1342:33:57"},{"anonymous":false,"documentation":{"id":5762,"nodeType":"StructuredDocumentation","src":"1381:162:57","text":"@notice Emitted when tokens are released to beneficiary\n @param beneficiary The beneficiary address\n @param amount The amount of tokens released"},"eventSelector":"c7798891864187665ac6dd119286e44ec13f014527aeeb2b8eb3fd413df93179","id":5768,"name":"TokensReleased","nameLocation":"1554:14:57","nodeType":"EventDefinition","parameters":{"id":5767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5764,"indexed":true,"mutability":"mutable","name":"beneficiary","nameLocation":"1585:11:57","nodeType":"VariableDeclaration","scope":5768,"src":"1569:27:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5763,"name":"address","nodeType":"ElementaryTypeName","src":"1569:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5766,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1606:6:57","nodeType":"VariableDeclaration","scope":5768,"src":"1598:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5765,"name":"uint256","nodeType":"ElementaryTypeName","src":"1598:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1568:45:57"},"src":"1548:66:57"},{"anonymous":false,"documentation":{"id":5769,"nodeType":"StructuredDocumentation","src":"1620:145:57","text":"@notice Emitted when tokens are revoked\n @param beneficiary The beneficiary address\n @param amount The amount of tokens revoked"},"eventSelector":"b73c49a3a37a7aca291ba0ceaa41657012def406106a7fc386888f0f66e941cf","id":5775,"name":"TokensRevoked","nameLocation":"1776:13:57","nodeType":"EventDefinition","parameters":{"id":5774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5771,"indexed":true,"mutability":"mutable","name":"beneficiary","nameLocation":"1806:11:57","nodeType":"VariableDeclaration","scope":5775,"src":"1790:27:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5770,"name":"address","nodeType":"ElementaryTypeName","src":"1790:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5773,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1827:6:57","nodeType":"VariableDeclaration","scope":5775,"src":"1819:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5772,"name":"uint256","nodeType":"ElementaryTypeName","src":"1819:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1789:45:57"},"src":"1770:65:57"},{"anonymous":false,"documentation":{"id":5776,"nodeType":"StructuredDocumentation","src":"1841:149:57","text":"@notice Emitted when tokens are withdrawn\n @param beneficiary The beneficiary address\n @param amount The amount of tokens withdrawn"},"eventSelector":"6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b","id":5782,"name":"TokensWithdrawn","nameLocation":"2001:15:57","nodeType":"EventDefinition","parameters":{"id":5781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5778,"indexed":true,"mutability":"mutable","name":"beneficiary","nameLocation":"2033:11:57","nodeType":"VariableDeclaration","scope":5782,"src":"2017:27:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5777,"name":"address","nodeType":"ElementaryTypeName","src":"2017:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5780,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2054:6:57","nodeType":"VariableDeclaration","scope":5782,"src":"2046:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5779,"name":"uint256","nodeType":"ElementaryTypeName","src":"2046:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2016:45:57"},"src":"1995:67:57"},{"documentation":{"id":5783,"nodeType":"StructuredDocumentation","src":"2109:79:57","text":"@notice Get the beneficiary address\n @return The beneficiary address"},"functionSelector":"38af3eed","id":5788,"implemented":false,"kind":"function","modifiers":[],"name":"beneficiary","nameLocation":"2202:11:57","nodeType":"FunctionDefinition","parameters":{"id":5784,"nodeType":"ParameterList","parameters":[],"src":"2213:2:57"},"returnParameters":{"id":5787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5788,"src":"2239:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5785,"name":"address","nodeType":"ElementaryTypeName","src":"2239:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2238:9:57"},"scope":5950,"src":"2193:55:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5789,"nodeType":"StructuredDocumentation","src":"2254:85:57","text":"@notice Get the token contract address\n @return The token contract address"},"functionSelector":"fc0c546a","id":5794,"implemented":false,"kind":"function","modifiers":[],"name":"token","nameLocation":"2353:5:57","nodeType":"FunctionDefinition","parameters":{"id":5790,"nodeType":"ParameterList","parameters":[],"src":"2358:2:57"},"returnParameters":{"id":5793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5792,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5794,"src":"2384:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5791,"name":"address","nodeType":"ElementaryTypeName","src":"2384:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2383:9:57"},"scope":5950,"src":"2344:49:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5795,"nodeType":"StructuredDocumentation","src":"2399:108:57","text":"@notice Get the total amount of tokens managed by this contract\n @return The managed token amount"},"functionSelector":"398057a3","id":5800,"implemented":false,"kind":"function","modifiers":[],"name":"managedAmount","nameLocation":"2521:13:57","nodeType":"FunctionDefinition","parameters":{"id":5796,"nodeType":"ParameterList","parameters":[],"src":"2534:2:57"},"returnParameters":{"id":5799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5798,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5800,"src":"2560:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5797,"name":"uint256","nodeType":"ElementaryTypeName","src":"2560:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2559:9:57"},"scope":5950,"src":"2512:57:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5801,"nodeType":"StructuredDocumentation","src":"2575:79:57","text":"@notice Get the vesting start time\n @return The start time timestamp"},"functionSelector":"78e97925","id":5806,"implemented":false,"kind":"function","modifiers":[],"name":"startTime","nameLocation":"2668:9:57","nodeType":"FunctionDefinition","parameters":{"id":5802,"nodeType":"ParameterList","parameters":[],"src":"2677:2:57"},"returnParameters":{"id":5805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5804,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5806,"src":"2703:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5803,"name":"uint256","nodeType":"ElementaryTypeName","src":"2703:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2702:9:57"},"scope":5950,"src":"2659:53:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5807,"nodeType":"StructuredDocumentation","src":"2718:75:57","text":"@notice Get the vesting end time\n @return The end time timestamp"},"functionSelector":"3197cbb6","id":5812,"implemented":false,"kind":"function","modifiers":[],"name":"endTime","nameLocation":"2807:7:57","nodeType":"FunctionDefinition","parameters":{"id":5808,"nodeType":"ParameterList","parameters":[],"src":"2814:2:57"},"returnParameters":{"id":5811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5810,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5812,"src":"2840:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5809,"name":"uint256","nodeType":"ElementaryTypeName","src":"2840:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2839:9:57"},"scope":5950,"src":"2798:51:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5813,"nodeType":"StructuredDocumentation","src":"2855:83:57","text":"@notice Get the number of vesting periods\n @return The number of periods"},"functionSelector":"a4caeb42","id":5818,"implemented":false,"kind":"function","modifiers":[],"name":"periods","nameLocation":"2952:7:57","nodeType":"FunctionDefinition","parameters":{"id":5814,"nodeType":"ParameterList","parameters":[],"src":"2959:2:57"},"returnParameters":{"id":5817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5816,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5818,"src":"2985:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5815,"name":"uint256","nodeType":"ElementaryTypeName","src":"2985:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2984:9:57"},"scope":5950,"src":"2943:51:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5819,"nodeType":"StructuredDocumentation","src":"3000:87:57","text":"@notice Get the release start time\n @return The release start time timestamp"},"functionSelector":"e97d87d5","id":5824,"implemented":false,"kind":"function","modifiers":[],"name":"releaseStartTime","nameLocation":"3101:16:57","nodeType":"FunctionDefinition","parameters":{"id":5820,"nodeType":"ParameterList","parameters":[],"src":"3117:2:57"},"returnParameters":{"id":5823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5824,"src":"3143:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5821,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:9:57"},"scope":5950,"src":"3092:60:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5825,"nodeType":"StructuredDocumentation","src":"3158:79:57","text":"@notice Get the vesting cliff time\n @return The cliff time timestamp"},"functionSelector":"86d00e02","id":5830,"implemented":false,"kind":"function","modifiers":[],"name":"vestingCliffTime","nameLocation":"3251:16:57","nodeType":"FunctionDefinition","parameters":{"id":5826,"nodeType":"ParameterList","parameters":[],"src":"3267:2:57"},"returnParameters":{"id":5829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5828,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5830,"src":"3293:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5827,"name":"uint256","nodeType":"ElementaryTypeName","src":"3293:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3292:9:57"},"scope":5950,"src":"3242:60:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5831,"nodeType":"StructuredDocumentation","src":"3308:79:57","text":"@notice Get the revocability status\n @return The revocability status"},"functionSelector":"872a7810","id":5837,"implemented":false,"kind":"function","modifiers":[],"name":"revocable","nameLocation":"3401:9:57","nodeType":"FunctionDefinition","parameters":{"id":5832,"nodeType":"ParameterList","parameters":[],"src":"3410:2:57"},"returnParameters":{"id":5836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5835,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5837,"src":"3436:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Revocability_$5741","typeString":"enum IGraphTokenLockWallet.Revocability"},"typeName":{"id":5834,"nodeType":"UserDefinedTypeName","pathNode":{"id":5833,"name":"Revocability","nameLocations":["3436:12:57"],"nodeType":"IdentifierPath","referencedDeclaration":5741,"src":"3436:12:57"},"referencedDeclaration":5741,"src":"3436:12:57","typeDescriptions":{"typeIdentifier":"t_enum$_Revocability_$5741","typeString":"enum IGraphTokenLockWallet.Revocability"}},"visibility":"internal"}],"src":"3435:14:57"},"scope":5950,"src":"3392:58:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5838,"nodeType":"StructuredDocumentation","src":"3456:98:57","text":"@notice Check if the vesting has been revoked\n @return True if revoked, false otherwise"},"functionSelector":"2bc9ed02","id":5843,"implemented":false,"kind":"function","modifiers":[],"name":"isRevoked","nameLocation":"3568:9:57","nodeType":"FunctionDefinition","parameters":{"id":5839,"nodeType":"ParameterList","parameters":[],"src":"3577:2:57"},"returnParameters":{"id":5842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5841,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5843,"src":"3603:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5840,"name":"bool","nodeType":"ElementaryTypeName","src":"3603:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3602:6:57"},"scope":5950,"src":"3559:50:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5844,"nodeType":"StructuredDocumentation","src":"3661:75:57","text":"@notice Get the current timestamp\n @return The current timestamp"},"functionSelector":"d18e81b3","id":5849,"implemented":false,"kind":"function","modifiers":[],"name":"currentTime","nameLocation":"3750:11:57","nodeType":"FunctionDefinition","parameters":{"id":5845,"nodeType":"ParameterList","parameters":[],"src":"3761:2:57"},"returnParameters":{"id":5848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5847,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5849,"src":"3787:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5846,"name":"uint256","nodeType":"ElementaryTypeName","src":"3787:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3786:9:57"},"scope":5950,"src":"3741:55:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5850,"nodeType":"StructuredDocumentation","src":"3802:82:57","text":"@notice Get the total vesting duration\n @return The duration in seconds"},"functionSelector":"0fb5a6b4","id":5855,"implemented":false,"kind":"function","modifiers":[],"name":"duration","nameLocation":"3898:8:57","nodeType":"FunctionDefinition","parameters":{"id":5851,"nodeType":"ParameterList","parameters":[],"src":"3906:2:57"},"returnParameters":{"id":5854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5853,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5855,"src":"3932:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5852,"name":"uint256","nodeType":"ElementaryTypeName","src":"3932:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3931:9:57"},"scope":5950,"src":"3889:52:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5856,"nodeType":"StructuredDocumentation","src":"3947:96:57","text":"@notice Get the time elapsed since vesting start\n @return The elapsed time in seconds"},"functionSelector":"7bdf05af","id":5861,"implemented":false,"kind":"function","modifiers":[],"name":"sinceStartTime","nameLocation":"4057:14:57","nodeType":"FunctionDefinition","parameters":{"id":5857,"nodeType":"ParameterList","parameters":[],"src":"4071:2:57"},"returnParameters":{"id":5860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5861,"src":"4097:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5858,"name":"uint256","nodeType":"ElementaryTypeName","src":"4097:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4096:9:57"},"scope":5950,"src":"4048:58:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5862,"nodeType":"StructuredDocumentation","src":"4112:94:57","text":"@notice Get the amount of tokens released per period\n @return The amount per period"},"functionSelector":"029c6c9f","id":5867,"implemented":false,"kind":"function","modifiers":[],"name":"amountPerPeriod","nameLocation":"4220:15:57","nodeType":"FunctionDefinition","parameters":{"id":5863,"nodeType":"ParameterList","parameters":[],"src":"4235:2:57"},"returnParameters":{"id":5866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5865,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5867,"src":"4261:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5864,"name":"uint256","nodeType":"ElementaryTypeName","src":"4261:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4260:9:57"},"scope":5950,"src":"4211:59:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5868,"nodeType":"StructuredDocumentation","src":"4276:98:57","text":"@notice Get the duration of each vesting period\n @return The period duration in seconds"},"functionSelector":"b470aade","id":5873,"implemented":false,"kind":"function","modifiers":[],"name":"periodDuration","nameLocation":"4388:14:57","nodeType":"FunctionDefinition","parameters":{"id":5869,"nodeType":"ParameterList","parameters":[],"src":"4402:2:57"},"returnParameters":{"id":5872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5871,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5873,"src":"4428:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5870,"name":"uint256","nodeType":"ElementaryTypeName","src":"4428:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4427:9:57"},"scope":5950,"src":"4379:58:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5874,"nodeType":"StructuredDocumentation","src":"4443:84:57","text":"@notice Get the current vesting period\n @return The current period number"},"functionSelector":"06040618","id":5879,"implemented":false,"kind":"function","modifiers":[],"name":"currentPeriod","nameLocation":"4541:13:57","nodeType":"FunctionDefinition","parameters":{"id":5875,"nodeType":"ParameterList","parameters":[],"src":"4554:2:57"},"returnParameters":{"id":5878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5877,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5879,"src":"4580:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5876,"name":"uint256","nodeType":"ElementaryTypeName","src":"4580:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4579:9:57"},"scope":5950,"src":"4532:57:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5880,"nodeType":"StructuredDocumentation","src":"4595:99:57","text":"@notice Get the number of periods that have passed\n @return The number of passed periods"},"functionSelector":"ebbab992","id":5885,"implemented":false,"kind":"function","modifiers":[],"name":"passedPeriods","nameLocation":"4708:13:57","nodeType":"FunctionDefinition","parameters":{"id":5881,"nodeType":"ParameterList","parameters":[],"src":"4721:2:57"},"returnParameters":{"id":5884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5883,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5885,"src":"4747:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5882,"name":"uint256","nodeType":"ElementaryTypeName","src":"4747:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4746:9:57"},"scope":5950,"src":"4699:57:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5886,"nodeType":"StructuredDocumentation","src":"4801:101:57","text":"@notice Get the amount of tokens that can be released\n @return The releasable token amount"},"functionSelector":"5b940081","id":5891,"implemented":false,"kind":"function","modifiers":[],"name":"releasableAmount","nameLocation":"4916:16:57","nodeType":"FunctionDefinition","parameters":{"id":5887,"nodeType":"ParameterList","parameters":[],"src":"4932:2:57"},"returnParameters":{"id":5890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5889,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5891,"src":"4958:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5888,"name":"uint256","nodeType":"ElementaryTypeName","src":"4958:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4957:9:57"},"scope":5950,"src":"4907:60:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5892,"nodeType":"StructuredDocumentation","src":"4973:93:57","text":"@notice Get the amount of tokens that have vested\n @return The vested token amount"},"functionSelector":"44b1231f","id":5897,"implemented":false,"kind":"function","modifiers":[],"name":"vestedAmount","nameLocation":"5080:12:57","nodeType":"FunctionDefinition","parameters":{"id":5893,"nodeType":"ParameterList","parameters":[],"src":"5092:2:57"},"returnParameters":{"id":5896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5895,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5897,"src":"5118:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5894,"name":"uint256","nodeType":"ElementaryTypeName","src":"5118:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5117:9:57"},"scope":5950,"src":"5071:56:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5898,"nodeType":"StructuredDocumentation","src":"5133:102:57","text":"@notice Get the amount of tokens that have been released\n @return The released token amount"},"functionSelector":"45d30a17","id":5903,"implemented":false,"kind":"function","modifiers":[],"name":"releasedAmount","nameLocation":"5249:14:57","nodeType":"FunctionDefinition","parameters":{"id":5899,"nodeType":"ParameterList","parameters":[],"src":"5263:2:57"},"returnParameters":{"id":5902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5901,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5903,"src":"5289:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5900,"name":"uint256","nodeType":"ElementaryTypeName","src":"5289:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5288:9:57"},"scope":5950,"src":"5240:58:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5904,"nodeType":"StructuredDocumentation","src":"5304:94:57","text":"@notice Get the amount of tokens that have been used\n @return The used token amount"},"functionSelector":"e8dda6f5","id":5909,"implemented":false,"kind":"function","modifiers":[],"name":"usedAmount","nameLocation":"5412:10:57","nodeType":"FunctionDefinition","parameters":{"id":5905,"nodeType":"ParameterList","parameters":[],"src":"5422:2:57"},"returnParameters":{"id":5908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5907,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5909,"src":"5448:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5906,"name":"uint256","nodeType":"ElementaryTypeName","src":"5448:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5447:9:57"},"scope":5950,"src":"5403:54:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5910,"nodeType":"StructuredDocumentation","src":"5463:93:57","text":"@notice Get the current token balance of the contract\n @return The current balance"},"functionSelector":"ce845d1d","id":5915,"implemented":false,"kind":"function","modifiers":[],"name":"currentBalance","nameLocation":"5570:14:57","nodeType":"FunctionDefinition","parameters":{"id":5911,"nodeType":"ParameterList","parameters":[],"src":"5584:2:57"},"returnParameters":{"id":5914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5913,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5915,"src":"5610:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5912,"name":"uint256","nodeType":"ElementaryTypeName","src":"5610:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5609:9:57"},"scope":5950,"src":"5561:58:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5916,"nodeType":"StructuredDocumentation","src":"5625:85:57","text":"@notice Get the surplus amount of tokens\n @return The surplus token amount"},"functionSelector":"0dff24d5","id":5921,"implemented":false,"kind":"function","modifiers":[],"name":"surplusAmount","nameLocation":"5724:13:57","nodeType":"FunctionDefinition","parameters":{"id":5917,"nodeType":"ParameterList","parameters":[],"src":"5737:2:57"},"returnParameters":{"id":5920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5919,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5921,"src":"5763:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5918,"name":"uint256","nodeType":"ElementaryTypeName","src":"5763:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5762:9:57"},"scope":5950,"src":"5715:57:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5922,"nodeType":"StructuredDocumentation","src":"5778:95:57","text":"@notice Get the total outstanding token amount\n @return The total outstanding amount"},"functionSelector":"bc0163c1","id":5927,"implemented":false,"kind":"function","modifiers":[],"name":"totalOutstandingAmount","nameLocation":"5887:22:57","nodeType":"FunctionDefinition","parameters":{"id":5923,"nodeType":"ParameterList","parameters":[],"src":"5909:2:57"},"returnParameters":{"id":5926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5925,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5927,"src":"5935:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5924,"name":"uint256","nodeType":"ElementaryTypeName","src":"5935:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5934:9:57"},"scope":5950,"src":"5878:66:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5928,"nodeType":"StructuredDocumentation","src":"5983:52:57","text":"@notice Release vested tokens to the beneficiary"},"functionSelector":"86d1a69f","id":5931,"implemented":false,"kind":"function","modifiers":[],"name":"release","nameLocation":"6049:7:57","nodeType":"FunctionDefinition","parameters":{"id":5929,"nodeType":"ParameterList","parameters":[],"src":"6056:2:57"},"returnParameters":{"id":5930,"nodeType":"ParameterList","parameters":[],"src":"6067:0:57"},"scope":5950,"src":"6040:28:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5932,"nodeType":"StructuredDocumentation","src":"6074:99:57","text":"@notice Withdraw surplus tokens\n @param _amount The amount of surplus tokens to withdraw"},"functionSelector":"b0d1818c","id":5937,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawSurplus","nameLocation":"6187:15:57","nodeType":"FunctionDefinition","parameters":{"id":5935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5934,"mutability":"mutable","name":"_amount","nameLocation":"6211:7:57","nodeType":"VariableDeclaration","scope":5937,"src":"6203:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5933,"name":"uint256","nodeType":"ElementaryTypeName","src":"6203:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6202:17:57"},"returnParameters":{"id":5936,"nodeType":"ParameterList","parameters":[],"src":"6228:0:57"},"scope":5950,"src":"6178:51:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5938,"nodeType":"StructuredDocumentation","src":"6235:41:57","text":"@notice Approve protocol interactions"},"functionSelector":"2a627814","id":5941,"implemented":false,"kind":"function","modifiers":[],"name":"approveProtocol","nameLocation":"6290:15:57","nodeType":"FunctionDefinition","parameters":{"id":5939,"nodeType":"ParameterList","parameters":[],"src":"6305:2:57"},"returnParameters":{"id":5940,"nodeType":"ParameterList","parameters":[],"src":"6316:0:57"},"scope":5950,"src":"6281:36:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5942,"nodeType":"StructuredDocumentation","src":"6323:40:57","text":"@notice Revoke protocol interactions"},"functionSelector":"60e79944","id":5945,"implemented":false,"kind":"function","modifiers":[],"name":"revokeProtocol","nameLocation":"6377:14:57","nodeType":"FunctionDefinition","parameters":{"id":5943,"nodeType":"ParameterList","parameters":[],"src":"6391:2:57"},"returnParameters":{"id":5944,"nodeType":"ParameterList","parameters":[],"src":"6402:0:57"},"scope":5950,"src":"6368:35:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5946,"nodeType":"StructuredDocumentation","src":"6447:50:57","text":"@notice Fallback function for forwarding calls"},"id":5949,"implemented":false,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":5947,"nodeType":"ParameterList","parameters":[],"src":"6510:2:57"},"returnParameters":{"id":5948,"nodeType":"ParameterList","parameters":[],"src":"6529:0:57"},"scope":5950,"src":"6502:28:57","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":5951,"src":"483:6049:57","usedErrors":[],"usedEvents":[5748,5755,5758,5761,5768,5775,5782]}],"src":"45:6488:57"},"id":57},"contracts/toolshed/IControllerToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IControllerToolshed.sol","exportedSymbols":{"IController":[1193],"IControllerToolshed":[5961],"IGoverned":[1233]},"id":5962,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5952,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:58"},{"absolutePath":"contracts/contracts/governance/IController.sol","file":"../contracts/governance/IController.sol","id":5954,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5962,"sourceUnit":1194,"src":"112:70:58","symbolAliases":[{"foreign":{"id":5953,"name":"IController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1193,"src":"121:11:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/governance/IGoverned.sol","file":"../contracts/governance/IGoverned.sol","id":5956,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5962,"sourceUnit":1234,"src":"183:66:58","symbolAliases":[{"foreign":{"id":5955,"name":"IGoverned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1233,"src":"192:9:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5957,"name":"IController","nameLocations":["284:11:58"],"nodeType":"IdentifierPath","referencedDeclaration":1193,"src":"284:11:58"},"id":5958,"nodeType":"InheritanceSpecifier","src":"284:11:58"},{"baseName":{"id":5959,"name":"IGoverned","nameLocations":["297:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":1233,"src":"297:9:58"},"id":5960,"nodeType":"InheritanceSpecifier","src":"297:9:58"}],"canonicalName":"IControllerToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":5961,"linearizedBaseContracts":[5961,1233,1193],"name":"IControllerToolshed","nameLocation":"261:19:58","nodeType":"ContractDefinition","nodes":[],"scope":5962,"src":"251:58:58","usedErrors":[],"usedEvents":[1225,1232]}],"src":"45:265:58"},"id":58},"contracts/toolshed/IDisputeManagerToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IDisputeManagerToolshed.sol","exportedSymbols":{"IDisputeManager":[5383],"IDisputeManagerToolshed":[6017],"IOwnable":[6524]},"id":6018,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5963,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:59"},{"absolutePath":"contracts/subgraph-service/IDisputeManager.sol","file":"../subgraph-service/IDisputeManager.sol","id":5965,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6018,"sourceUnit":5384,"src":"103:74:59","symbolAliases":[{"foreign":{"id":5964,"name":"IDisputeManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5383,"src":"112:15:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/toolshed/internal/IOwnable.sol","file":"./internal/IOwnable.sol","id":5967,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6018,"sourceUnit":6525,"src":"178:51:59","symbolAliases":[{"foreign":{"id":5966,"name":"IOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6524,"src":"187:8:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5968,"name":"IDisputeManager","nameLocations":["268:15:59"],"nodeType":"IdentifierPath","referencedDeclaration":5383,"src":"268:15:59"},"id":5969,"nodeType":"InheritanceSpecifier","src":"268:15:59"},{"baseName":{"id":5970,"name":"IOwnable","nameLocations":["285:8:59"],"nodeType":"IdentifierPath","referencedDeclaration":6524,"src":"285:8:59"},"id":5971,"nodeType":"InheritanceSpecifier","src":"285:8:59"}],"canonicalName":"IDisputeManagerToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6017,"linearizedBaseContracts":[6017,6524,5383],"name":"IDisputeManagerToolshed","nameLocation":"241:23:59","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5972,"nodeType":"StructuredDocumentation","src":"300:91:59","text":" @notice Get the dispute period.\n @return Dispute period in seconds"},"functionSelector":"5bf31d4d","id":5977,"implemented":false,"kind":"function","modifiers":[],"name":"disputePeriod","nameLocation":"405:13:59","nodeType":"FunctionDefinition","parameters":{"id":5973,"nodeType":"ParameterList","parameters":[],"src":"418:2:59"},"returnParameters":{"id":5976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5975,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5977,"src":"444:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":5974,"name":"uint64","nodeType":"ElementaryTypeName","src":"444:6:59","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"443:8:59"},"scope":6017,"src":"396:56:59","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5978,"nodeType":"StructuredDocumentation","src":"458:112:59","text":" @notice Get the fisherman reward cut.\n @return Fisherman reward cut in percentage (ppm)"},"functionSelector":"902a4938","id":5983,"implemented":false,"kind":"function","modifiers":[],"name":"fishermanRewardCut","nameLocation":"584:18:59","nodeType":"FunctionDefinition","parameters":{"id":5979,"nodeType":"ParameterList","parameters":[],"src":"602:2:59"},"returnParameters":{"id":5982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5983,"src":"628:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5980,"name":"uint32","nodeType":"ElementaryTypeName","src":"628:6:59","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"627:8:59"},"scope":6017,"src":"575:61:59","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5984,"nodeType":"StructuredDocumentation","src":"642:145:59","text":" @notice Get the maximum percentage that can be used for slashing indexers.\n @return Max percentage slashing for disputes"},"functionSelector":"0533e1ba","id":5989,"implemented":false,"kind":"function","modifiers":[],"name":"maxSlashingCut","nameLocation":"801:14:59","nodeType":"FunctionDefinition","parameters":{"id":5985,"nodeType":"ParameterList","parameters":[],"src":"815:2:59"},"returnParameters":{"id":5988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5987,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5989,"src":"841:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5986,"name":"uint32","nodeType":"ElementaryTypeName","src":"841:6:59","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"840:8:59"},"scope":6017,"src":"792:57:59","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5990,"nodeType":"StructuredDocumentation","src":"855:82:59","text":" @notice Get the dispute deposit.\n @return Dispute deposit"},"functionSelector":"29e03ff1","id":5995,"implemented":false,"kind":"function","modifiers":[],"name":"disputeDeposit","nameLocation":"951:14:59","nodeType":"FunctionDefinition","parameters":{"id":5991,"nodeType":"ParameterList","parameters":[],"src":"965:2:59"},"returnParameters":{"id":5994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5993,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5995,"src":"991:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5992,"name":"uint256","nodeType":"ElementaryTypeName","src":"991:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"990:9:59"},"scope":6017,"src":"942:58:59","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5996,"nodeType":"StructuredDocumentation","src":"1006:100:59","text":" @notice Get the subgraph service address.\n @return Subgraph service address"},"functionSelector":"26058249","id":6001,"implemented":false,"kind":"function","modifiers":[],"name":"subgraphService","nameLocation":"1120:15:59","nodeType":"FunctionDefinition","parameters":{"id":5997,"nodeType":"ParameterList","parameters":[],"src":"1135:2:59"},"returnParameters":{"id":6000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5999,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6001,"src":"1161:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5998,"name":"address","nodeType":"ElementaryTypeName","src":"1161:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1160:9:59"},"scope":6017,"src":"1111:59:59","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6002,"nodeType":"StructuredDocumentation","src":"1176:88:59","text":" @notice Get the arbitrator address.\n @return Arbitrator address"},"functionSelector":"6cc6cde1","id":6007,"implemented":false,"kind":"function","modifiers":[],"name":"arbitrator","nameLocation":"1278:10:59","nodeType":"FunctionDefinition","parameters":{"id":6003,"nodeType":"ParameterList","parameters":[],"src":"1288:2:59"},"returnParameters":{"id":6006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6005,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6007,"src":"1314:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6004,"name":"address","nodeType":"ElementaryTypeName","src":"1314:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1313:9:59"},"scope":6017,"src":"1269:54:59","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6008,"nodeType":"StructuredDocumentation","src":"1329:119:59","text":" @notice Get the dispute status.\n @param disputeId The dispute ID\n @return Dispute status"},"functionSelector":"11be1997","id":6016,"implemented":false,"kind":"function","modifiers":[],"name":"disputes","nameLocation":"1462:8:59","nodeType":"FunctionDefinition","parameters":{"id":6011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6010,"mutability":"mutable","name":"disputeId","nameLocation":"1479:9:59","nodeType":"VariableDeclaration","scope":6016,"src":"1471:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6009,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1471:7:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1470:19:59"},"returnParameters":{"id":6015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6014,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6016,"src":"1513:30:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Dispute_$4949_memory_ptr","typeString":"struct IDisputeManager.Dispute"},"typeName":{"id":6013,"nodeType":"UserDefinedTypeName","pathNode":{"id":6012,"name":"IDisputeManager.Dispute","nameLocations":["1513:15:59","1529:7:59"],"nodeType":"IdentifierPath","referencedDeclaration":4949,"src":"1513:23:59"},"referencedDeclaration":4949,"src":"1513:23:59","typeDescriptions":{"typeIdentifier":"t_struct$_Dispute_$4949_storage_ptr","typeString":"struct IDisputeManager.Dispute"}},"visibility":"internal"}],"src":"1512:32:59"},"scope":6017,"src":"1453:92:59","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6018,"src":"231:1316:59","usedErrors":[5088,5091,5094,5097,5100,5105,5110,5115,5120,5127,5133,5138,5141,5146,5151,5158,5163,5170,5185,5188,6507],"usedEvents":[4954,4959,4964,4969,4974,4979,4998,5019,5034,5045,5056,5067,5074,5085]}],"src":"45:1503:59"},"id":59},"contracts/toolshed/IEpochManagerToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IEpochManagerToolshed.sol","exportedSymbols":{"IEpochManager":[1109],"IEpochManagerToolshed":[6029]},"id":6030,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6019,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:60"},{"absolutePath":"contracts/contracts/epochs/IEpochManager.sol","file":"../contracts/epochs/IEpochManager.sol","id":6021,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6030,"sourceUnit":1110,"src":"112:70:60","symbolAliases":[{"foreign":{"id":6020,"name":"IEpochManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1109,"src":"121:13:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6022,"name":"IEpochManager","nameLocations":["219:13:60"],"nodeType":"IdentifierPath","referencedDeclaration":1109,"src":"219:13:60"},"id":6023,"nodeType":"InheritanceSpecifier","src":"219:13:60"}],"canonicalName":"IEpochManagerToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6029,"linearizedBaseContracts":[6029,1109],"name":"IEpochManagerToolshed","nameLocation":"194:21:60","nodeType":"ContractDefinition","nodes":[{"functionSelector":"57d775f8","id":6028,"implemented":false,"kind":"function","modifiers":[],"name":"epochLength","nameLocation":"248:11:60","nodeType":"FunctionDefinition","parameters":{"id":6024,"nodeType":"ParameterList","parameters":[],"src":"259:2:60"},"returnParameters":{"id":6027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6026,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6028,"src":"285:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6025,"name":"uint256","nodeType":"ElementaryTypeName","src":"285:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"284:9:60"},"scope":6029,"src":"239:55:60","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6030,"src":"184:112:60","usedErrors":[],"usedEvents":[]}],"src":"45:252:60"},"id":60},"contracts/toolshed/IGraphTallyCollectorToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IGraphTallyCollectorToolshed.sol","exportedSymbols":{"IGraphTallyCollector":[3402],"IGraphTallyCollectorToolshed":[6057]},"id":6058,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6031,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:61"},{"absolutePath":"contracts/horizon/IGraphTallyCollector.sol","file":"../horizon/IGraphTallyCollector.sol","id":6033,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6058,"sourceUnit":3403,"src":"103:75:61","symbolAliases":[{"foreign":{"id":6032,"name":"IGraphTallyCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3402,"src":"112:20:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6034,"name":"IGraphTallyCollector","nameLocations":["222:20:61"],"nodeType":"IdentifierPath","referencedDeclaration":3402,"src":"222:20:61"},"id":6035,"nodeType":"InheritanceSpecifier","src":"222:20:61"}],"canonicalName":"IGraphTallyCollectorToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6057,"linearizedBaseContracts":[6057,3402,3216,3455],"name":"IGraphTallyCollectorToolshed","nameLocation":"190:28:61","nodeType":"ContractDefinition","nodes":[{"functionSelector":"3a13e1af","id":6043,"implemented":false,"kind":"function","modifiers":[],"name":"authorizations","nameLocation":"258:14:61","nodeType":"FunctionDefinition","parameters":{"id":6038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6037,"mutability":"mutable","name":"signer","nameLocation":"281:6:61","nodeType":"VariableDeclaration","scope":6043,"src":"273:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6036,"name":"address","nodeType":"ElementaryTypeName","src":"273:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"272:16:61"},"returnParameters":{"id":6042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6041,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6043,"src":"312:20:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Authorization_$3093_memory_ptr","typeString":"struct IAuthorizable.Authorization"},"typeName":{"id":6040,"nodeType":"UserDefinedTypeName","pathNode":{"id":6039,"name":"Authorization","nameLocations":["312:13:61"],"nodeType":"IdentifierPath","referencedDeclaration":3093,"src":"312:13:61"},"referencedDeclaration":3093,"src":"312:13:61","typeDescriptions":{"typeIdentifier":"t_struct$_Authorization_$3093_storage_ptr","typeString":"struct IAuthorizable.Authorization"}},"visibility":"internal"}],"src":"311:22:61"},"scope":6057,"src":"249:85:61","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"181250ff","id":6056,"implemented":false,"kind":"function","modifiers":[],"name":"tokensCollected","nameLocation":"348:15:61","nodeType":"FunctionDefinition","parameters":{"id":6052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6045,"mutability":"mutable","name":"serviceProvider","nameLocation":"381:15:61","nodeType":"VariableDeclaration","scope":6056,"src":"373:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6044,"name":"address","nodeType":"ElementaryTypeName","src":"373:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6047,"mutability":"mutable","name":"collectionId","nameLocation":"414:12:61","nodeType":"VariableDeclaration","scope":6056,"src":"406:20:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6046,"name":"bytes32","nodeType":"ElementaryTypeName","src":"406:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6049,"mutability":"mutable","name":"receiver","nameLocation":"444:8:61","nodeType":"VariableDeclaration","scope":6056,"src":"436:16:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6048,"name":"address","nodeType":"ElementaryTypeName","src":"436:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6051,"mutability":"mutable","name":"payer","nameLocation":"470:5:61","nodeType":"VariableDeclaration","scope":6056,"src":"462:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6050,"name":"address","nodeType":"ElementaryTypeName","src":"462:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"363:118:61"},"returnParameters":{"id":6055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6054,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6056,"src":"505:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6053,"name":"uint256","nodeType":"ElementaryTypeName","src":"505:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"504:9:61"},"scope":6057,"src":"339:175:61","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6058,"src":"180:336:61","usedErrors":[3134,3141,3144,3151,3156,3163,3344,3349,3356,3363,3370],"usedEvents":[3100,3109,3118,3125,3341,3443]}],"src":"45:472:61"},"id":61},"contracts/toolshed/IGraphTokenLockWalletToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IGraphTokenLockWalletToolshed.sol","exportedSymbols":{"IGraphPayments":[3286],"IGraphTokenLockWallet":[5950],"IGraphTokenLockWalletToolshed":[6169]},"id":6170,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6059,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:62"},{"absolutePath":"contracts/token-distribution/IGraphTokenLockWallet.sol","file":"../token-distribution/IGraphTokenLockWallet.sol","id":6061,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6170,"sourceUnit":5951,"src":"112:88:62","symbolAliases":[{"foreign":{"id":6060,"name":"IGraphTokenLockWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5950,"src":"121:21:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/horizon/IGraphPayments.sol","file":"../horizon/IGraphPayments.sol","id":6063,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6170,"sourceUnit":3287,"src":"201:63:62","symbolAliases":[{"foreign":{"id":6062,"name":"IGraphPayments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"210:14:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6065,"name":"IGraphTokenLockWallet","nameLocations":["597:21:62"],"nodeType":"IdentifierPath","referencedDeclaration":5950,"src":"597:21:62"},"id":6066,"nodeType":"InheritanceSpecifier","src":"597:21:62"}],"canonicalName":"IGraphTokenLockWalletToolshed","contractDependencies":[],"contractKind":"interface","documentation":{"id":6064,"nodeType":"StructuredDocumentation","src":"266:287:62","text":" @title IGraphTokenLockWalletToolshed\n @author Edge & Node\n @notice Extended interface for GraphTokenLockWallet that includes Horizon protocol interaction functions\n @dev Functions included are based on the GraphTokenLockManager whitelist for vesting contracts on Horizon"},"fullyImplemented":false,"id":6169,"linearizedBaseContracts":[6169,5950],"name":"IGraphTokenLockWalletToolshed","nameLocation":"564:29:62","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a694fc3a","id":6071,"implemented":false,"kind":"function","modifiers":[],"name":"stake","nameLocation":"666:5:62","nodeType":"FunctionDefinition","parameters":{"id":6069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6068,"mutability":"mutable","name":"tokens","nameLocation":"680:6:62","nodeType":"VariableDeclaration","scope":6071,"src":"672:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6067,"name":"uint256","nodeType":"ElementaryTypeName","src":"672:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"671:16:62"},"returnParameters":{"id":6070,"nodeType":"ParameterList","parameters":[],"src":"696:0:62"},"scope":6169,"src":"657:40:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"2e17de78","id":6076,"implemented":false,"kind":"function","modifiers":[],"name":"unstake","nameLocation":"711:7:62","nodeType":"FunctionDefinition","parameters":{"id":6074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6073,"mutability":"mutable","name":"tokens","nameLocation":"727:6:62","nodeType":"VariableDeclaration","scope":6076,"src":"719:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6072,"name":"uint256","nodeType":"ElementaryTypeName","src":"719:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"718:16:62"},"returnParameters":{"id":6075,"nodeType":"ParameterList","parameters":[],"src":"743:0:62"},"scope":6169,"src":"702:42:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"3ccfd60b","id":6079,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"758:8:62","nodeType":"FunctionDefinition","parameters":{"id":6077,"nodeType":"ParameterList","parameters":[],"src":"766:2:62"},"returnParameters":{"id":6078,"nodeType":"ParameterList","parameters":[],"src":"777:0:62"},"scope":6169,"src":"749:29:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"82d66cb8","id":6092,"implemented":false,"kind":"function","modifiers":[],"name":"provisionLocked","nameLocation":"829:15:62","nodeType":"FunctionDefinition","parameters":{"id":6090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6081,"mutability":"mutable","name":"serviceProvider","nameLocation":"862:15:62","nodeType":"VariableDeclaration","scope":6092,"src":"854:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6080,"name":"address","nodeType":"ElementaryTypeName","src":"854:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6083,"mutability":"mutable","name":"verifier","nameLocation":"895:8:62","nodeType":"VariableDeclaration","scope":6092,"src":"887:16:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6082,"name":"address","nodeType":"ElementaryTypeName","src":"887:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6085,"mutability":"mutable","name":"tokens","nameLocation":"921:6:62","nodeType":"VariableDeclaration","scope":6092,"src":"913:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6084,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6087,"mutability":"mutable","name":"maxVerifierCut","nameLocation":"944:14:62","nodeType":"VariableDeclaration","scope":6092,"src":"937:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":6086,"name":"uint32","nodeType":"ElementaryTypeName","src":"937:6:62","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":6089,"mutability":"mutable","name":"thawingPeriod","nameLocation":"975:13:62","nodeType":"VariableDeclaration","scope":6092,"src":"968:20:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":6088,"name":"uint64","nodeType":"ElementaryTypeName","src":"968:6:62","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"844:150:62"},"returnParameters":{"id":6091,"nodeType":"ParameterList","parameters":[],"src":"1003:0:62"},"scope":6169,"src":"820:184:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"f93f1cd0","id":6101,"implemented":false,"kind":"function","modifiers":[],"name":"thaw","nameLocation":"1018:4:62","nodeType":"FunctionDefinition","parameters":{"id":6099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6094,"mutability":"mutable","name":"serviceProvider","nameLocation":"1031:15:62","nodeType":"VariableDeclaration","scope":6101,"src":"1023:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6093,"name":"address","nodeType":"ElementaryTypeName","src":"1023:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6096,"mutability":"mutable","name":"verifier","nameLocation":"1056:8:62","nodeType":"VariableDeclaration","scope":6101,"src":"1048:16:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6095,"name":"address","nodeType":"ElementaryTypeName","src":"1048:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6098,"mutability":"mutable","name":"tokens","nameLocation":"1074:6:62","nodeType":"VariableDeclaration","scope":6101,"src":"1066:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6097,"name":"uint256","nodeType":"ElementaryTypeName","src":"1066:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1022:59:62"},"returnParameters":{"id":6100,"nodeType":"ParameterList","parameters":[],"src":"1090:0:62"},"scope":6169,"src":"1009:82:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"21195373","id":6110,"implemented":false,"kind":"function","modifiers":[],"name":"deprovision","nameLocation":"1105:11:62","nodeType":"FunctionDefinition","parameters":{"id":6108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6103,"mutability":"mutable","name":"serviceProvider","nameLocation":"1125:15:62","nodeType":"VariableDeclaration","scope":6110,"src":"1117:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6102,"name":"address","nodeType":"ElementaryTypeName","src":"1117:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6105,"mutability":"mutable","name":"verifier","nameLocation":"1150:8:62","nodeType":"VariableDeclaration","scope":6110,"src":"1142:16:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6104,"name":"address","nodeType":"ElementaryTypeName","src":"1142:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6107,"mutability":"mutable","name":"nThawRequests","nameLocation":"1168:13:62","nodeType":"VariableDeclaration","scope":6110,"src":"1160:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6106,"name":"uint256","nodeType":"ElementaryTypeName","src":"1160:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1116:66:62"},"returnParameters":{"id":6109,"nodeType":"ParameterList","parameters":[],"src":"1191:0:62"},"scope":6169,"src":"1096:96:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"ad4d35b5","id":6119,"implemented":false,"kind":"function","modifiers":[],"name":"setOperatorLocked","nameLocation":"1246:17:62","nodeType":"FunctionDefinition","parameters":{"id":6117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6112,"mutability":"mutable","name":"verifier","nameLocation":"1272:8:62","nodeType":"VariableDeclaration","scope":6119,"src":"1264:16:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6111,"name":"address","nodeType":"ElementaryTypeName","src":"1264:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6114,"mutability":"mutable","name":"operator","nameLocation":"1290:8:62","nodeType":"VariableDeclaration","scope":6119,"src":"1282:16:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6113,"name":"address","nodeType":"ElementaryTypeName","src":"1282:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6116,"mutability":"mutable","name":"allowed","nameLocation":"1305:7:62","nodeType":"VariableDeclaration","scope":6119,"src":"1300:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6115,"name":"bool","nodeType":"ElementaryTypeName","src":"1300:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1263:50:62"},"returnParameters":{"id":6118,"nodeType":"ParameterList","parameters":[],"src":"1322:0:62"},"scope":6169,"src":"1237:86:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"42c51693","id":6131,"implemented":false,"kind":"function","modifiers":[],"name":"setDelegationFeeCut","nameLocation":"1337:19:62","nodeType":"FunctionDefinition","parameters":{"id":6129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6121,"mutability":"mutable","name":"serviceProvider","nameLocation":"1374:15:62","nodeType":"VariableDeclaration","scope":6131,"src":"1366:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6120,"name":"address","nodeType":"ElementaryTypeName","src":"1366:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6123,"mutability":"mutable","name":"verifier","nameLocation":"1407:8:62","nodeType":"VariableDeclaration","scope":6131,"src":"1399:16:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6122,"name":"address","nodeType":"ElementaryTypeName","src":"1399:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6126,"mutability":"mutable","name":"paymentType","nameLocation":"1453:11:62","nodeType":"VariableDeclaration","scope":6131,"src":"1425:39:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"},"typeName":{"id":6125,"nodeType":"UserDefinedTypeName","pathNode":{"id":6124,"name":"IGraphPayments.PaymentTypes","nameLocations":["1425:14:62","1440:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":3224,"src":"1425:27:62"},"referencedDeclaration":3224,"src":"1425:27:62","typeDescriptions":{"typeIdentifier":"t_enum$_PaymentTypes_$3224","typeString":"enum IGraphPayments.PaymentTypes"}},"visibility":"internal"},{"constant":false,"id":6128,"mutability":"mutable","name":"feeCut","nameLocation":"1482:6:62","nodeType":"VariableDeclaration","scope":6131,"src":"1474:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6127,"name":"uint256","nodeType":"ElementaryTypeName","src":"1474:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1356:138:62"},"returnParameters":{"id":6130,"nodeType":"ParameterList","parameters":[],"src":"1503:0:62"},"scope":6169,"src":"1328:176:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"e9de3180","id":6138,"implemented":false,"kind":"function","modifiers":[],"name":"setRewardsDestination","nameLocation":"1518:21:62","nodeType":"FunctionDefinition","parameters":{"id":6136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6133,"mutability":"mutable","name":"serviceProvider","nameLocation":"1548:15:62","nodeType":"VariableDeclaration","scope":6138,"src":"1540:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6132,"name":"address","nodeType":"ElementaryTypeName","src":"1540:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6135,"mutability":"mutable","name":"rewardsDestination","nameLocation":"1573:18:62","nodeType":"VariableDeclaration","scope":6138,"src":"1565:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6134,"name":"address","nodeType":"ElementaryTypeName","src":"1565:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1539:53:62"},"returnParameters":{"id":6137,"nodeType":"ParameterList","parameters":[],"src":"1601:0:62"},"scope":6169,"src":"1509:93:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"026e402b","id":6145,"implemented":false,"kind":"function","modifiers":[],"name":"delegate","nameLocation":"1654:8:62","nodeType":"FunctionDefinition","parameters":{"id":6143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6140,"mutability":"mutable","name":"serviceProvider","nameLocation":"1671:15:62","nodeType":"VariableDeclaration","scope":6145,"src":"1663:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6139,"name":"address","nodeType":"ElementaryTypeName","src":"1663:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6142,"mutability":"mutable","name":"tokens","nameLocation":"1696:6:62","nodeType":"VariableDeclaration","scope":6145,"src":"1688:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6141,"name":"uint256","nodeType":"ElementaryTypeName","src":"1688:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1662:41:62"},"returnParameters":{"id":6144,"nodeType":"ParameterList","parameters":[],"src":"1712:0:62"},"scope":6169,"src":"1645:68:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"4d99dd16","id":6152,"implemented":false,"kind":"function","modifiers":[],"name":"undelegate","nameLocation":"1727:10:62","nodeType":"FunctionDefinition","parameters":{"id":6150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6147,"mutability":"mutable","name":"serviceProvider","nameLocation":"1746:15:62","nodeType":"VariableDeclaration","scope":6152,"src":"1738:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6146,"name":"address","nodeType":"ElementaryTypeName","src":"1738:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6149,"mutability":"mutable","name":"shares","nameLocation":"1771:6:62","nodeType":"VariableDeclaration","scope":6152,"src":"1763:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6148,"name":"uint256","nodeType":"ElementaryTypeName","src":"1763:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1737:41:62"},"returnParameters":{"id":6151,"nodeType":"ParameterList","parameters":[],"src":"1787:0:62"},"scope":6169,"src":"1718:70:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"3993d849","id":6161,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawDelegated","nameLocation":"1802:17:62","nodeType":"FunctionDefinition","parameters":{"id":6159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6154,"mutability":"mutable","name":"serviceProvider","nameLocation":"1828:15:62","nodeType":"VariableDeclaration","scope":6161,"src":"1820:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6153,"name":"address","nodeType":"ElementaryTypeName","src":"1820:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6156,"mutability":"mutable","name":"verifier","nameLocation":"1853:8:62","nodeType":"VariableDeclaration","scope":6161,"src":"1845:16:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6155,"name":"address","nodeType":"ElementaryTypeName","src":"1845:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6158,"mutability":"mutable","name":"nThawRequests","nameLocation":"1871:13:62","nodeType":"VariableDeclaration","scope":6161,"src":"1863:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6157,"name":"uint256","nodeType":"ElementaryTypeName","src":"1863:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1819:66:62"},"returnParameters":{"id":6160,"nodeType":"ParameterList","parameters":[],"src":"1894:0:62"},"scope":6169,"src":"1793:102:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"51a60b02","id":6168,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawDelegated","nameLocation":"1954:17:62","nodeType":"FunctionDefinition","parameters":{"id":6166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6163,"mutability":"mutable","name":"indexer","nameLocation":"1980:7:62","nodeType":"VariableDeclaration","scope":6168,"src":"1972:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6162,"name":"address","nodeType":"ElementaryTypeName","src":"1972:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6165,"mutability":"mutable","name":"__DEPRECATED_delegateToIndexer","nameLocation":"1997:30:62","nodeType":"VariableDeclaration","scope":6168,"src":"1989:38:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6164,"name":"address","nodeType":"ElementaryTypeName","src":"1989:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1971:57:62"},"returnParameters":{"id":6167,"nodeType":"ParameterList","parameters":[],"src":"2037:0:62"},"scope":6169,"src":"1945:93:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6170,"src":"554:1486:62","usedErrors":[],"usedEvents":[5748,5755,5758,5761,5768,5775,5782]}],"src":"45:1996:62"},"id":62},"contracts/toolshed/IHorizonStakingToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IHorizonStakingToolshed.sol","exportedSymbols":{"IHorizonStaking":[3422],"IHorizonStakingToolshed":[6180],"IMulticall":[436]},"id":6181,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6171,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:63"},{"absolutePath":"contracts/horizon/IHorizonStaking.sol","file":"../horizon/IHorizonStaking.sol","id":6173,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6181,"sourceUnit":3423,"src":"112:65:63","symbolAliases":[{"foreign":{"id":6172,"name":"IHorizonStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3422,"src":"121:15:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/base/IMulticall.sol","file":"../contracts/base/IMulticall.sol","id":6175,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6181,"sourceUnit":437,"src":"178:62:63","symbolAliases":[{"foreign":{"id":6174,"name":"IMulticall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":436,"src":"187:10:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6176,"name":"IHorizonStaking","nameLocations":["279:15:63"],"nodeType":"IdentifierPath","referencedDeclaration":3422,"src":"279:15:63"},"id":6177,"nodeType":"InheritanceSpecifier","src":"279:15:63"},{"baseName":{"id":6178,"name":"IMulticall","nameLocations":["296:10:63"],"nodeType":"IdentifierPath","referencedDeclaration":436,"src":"296:10:63"},"id":6179,"nodeType":"InheritanceSpecifier","src":"296:10:63"}],"canonicalName":"IHorizonStakingToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6180,"linearizedBaseContracts":[6180,436,3422,4035,1587,4746,3855,4882],"name":"IHorizonStakingToolshed","nameLocation":"252:23:63","nodeType":"ContractDefinition","nodes":[],"scope":6181,"src":"242:67:63","usedErrors":[3686,4309,4316,4323,4330,4339,4344,4349,4356,4359,4366,4373,4380,4383,4390,4397,4404,4411,4414,4417,4420,4423,4426,4431,4436,4439,4444,4447,4450],"usedEvents":[3683,3906,3931,3942,4051,4058,4071,4080,4089,4098,4109,4120,4131,4140,4149,4158,4169,4182,4195,4206,4215,4224,4236,4256,4272,4288,4293,4300,4303,4306]}],"src":"45:265:63"},"id":63},"contracts/toolshed/IL2CurationToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IL2CurationToolshed.sol","exportedSymbols":{"ICuration":[560],"IL2Curation":[1296],"IL2CurationToolshed":[6196]},"id":6197,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6182,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:64"},{"absolutePath":"contracts/contracts/curation/ICuration.sol","file":"../contracts/curation/ICuration.sol","id":6184,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6197,"sourceUnit":561,"src":"112:64:64","symbolAliases":[{"foreign":{"id":6183,"name":"ICuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":560,"src":"121:9:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/l2/curation/IL2Curation.sol","file":"../contracts/l2/curation/IL2Curation.sol","id":6186,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6197,"sourceUnit":1297,"src":"177:71:64","symbolAliases":[{"foreign":{"id":6185,"name":"IL2Curation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1296,"src":"186:11:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6187,"name":"ICuration","nameLocations":["283:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":560,"src":"283:9:64"},"id":6188,"nodeType":"InheritanceSpecifier","src":"283:9:64"},{"baseName":{"id":6189,"name":"IL2Curation","nameLocations":["294:11:64"],"nodeType":"IdentifierPath","referencedDeclaration":1296,"src":"294:11:64"},"id":6190,"nodeType":"InheritanceSpecifier","src":"294:11:64"}],"canonicalName":"IL2CurationToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6196,"linearizedBaseContracts":[6196,1296,560],"name":"IL2CurationToolshed","nameLocation":"260:19:64","nodeType":"ContractDefinition","nodes":[{"functionSelector":"26058249","id":6195,"implemented":false,"kind":"function","modifiers":[],"name":"subgraphService","nameLocation":"321:15:64","nodeType":"FunctionDefinition","parameters":{"id":6191,"nodeType":"ParameterList","parameters":[],"src":"336:2:64"},"returnParameters":{"id":6194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6193,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6195,"src":"362:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6192,"name":"address","nodeType":"ElementaryTypeName","src":"362:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"361:9:64"},"scope":6196,"src":"312:59:64","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6197,"src":"250:123:64","usedErrors":[],"usedEvents":[]}],"src":"45:329:64"},"id":64},"contracts/toolshed/IL2GNSToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IL2GNSToolshed.sol","exportedSymbols":{"IGNS":[786],"IL2GNS":[1348],"IL2GNSToolshed":[6224],"IMulticall":[436]},"id":6225,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6198,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:65"},{"id":6199,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"79:19:65"},{"absolutePath":"contracts/contracts/discovery/IGNS.sol","file":"../contracts/discovery/IGNS.sol","id":6201,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6225,"sourceUnit":787,"src":"132:55:65","symbolAliases":[{"foreign":{"id":6200,"name":"IGNS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":786,"src":"141:4:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/l2/discovery/IL2GNS.sol","file":"../contracts/l2/discovery/IL2GNS.sol","id":6203,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6225,"sourceUnit":1349,"src":"188:62:65","symbolAliases":[{"foreign":{"id":6202,"name":"IL2GNS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1348,"src":"197:6:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/base/IMulticall.sol","file":"../contracts/base/IMulticall.sol","id":6205,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6225,"sourceUnit":437,"src":"251:62:65","symbolAliases":[{"foreign":{"id":6204,"name":"IMulticall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":436,"src":"260:10:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6206,"name":"IGNS","nameLocations":["343:4:65"],"nodeType":"IdentifierPath","referencedDeclaration":786,"src":"343:4:65"},"id":6207,"nodeType":"InheritanceSpecifier","src":"343:4:65"},{"baseName":{"id":6208,"name":"IL2GNS","nameLocations":["349:6:65"],"nodeType":"IdentifierPath","referencedDeclaration":1348,"src":"349:6:65"},"id":6209,"nodeType":"InheritanceSpecifier","src":"349:6:65"},{"baseName":{"id":6210,"name":"IMulticall","nameLocations":["357:10:65"],"nodeType":"IdentifierPath","referencedDeclaration":436,"src":"357:10:65"},"id":6211,"nodeType":"InheritanceSpecifier","src":"357:10:65"}],"canonicalName":"IL2GNSToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6224,"linearizedBaseContracts":[6224,436,1348,1123,786],"name":"IL2GNSToolshed","nameLocation":"325:14:65","nodeType":"ContractDefinition","nodes":[{"functionSelector":"b2235056","id":6218,"implemented":false,"kind":"function","modifiers":[],"name":"nextAccountSeqID","nameLocation":"383:16:65","nodeType":"FunctionDefinition","parameters":{"id":6214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6213,"mutability":"mutable","name":"account","nameLocation":"408:7:65","nodeType":"VariableDeclaration","scope":6218,"src":"400:15:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6212,"name":"address","nodeType":"ElementaryTypeName","src":"400:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"399:17:65"},"returnParameters":{"id":6217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6216,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6218,"src":"440:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6215,"name":"uint256","nodeType":"ElementaryTypeName","src":"440:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"439:9:65"},"scope":6224,"src":"374:75:65","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"eec16b0e","id":6223,"implemented":false,"kind":"function","modifiers":[],"name":"subgraphNFT","nameLocation":"463:11:65","nodeType":"FunctionDefinition","parameters":{"id":6219,"nodeType":"ParameterList","parameters":[],"src":"474:2:65"},"returnParameters":{"id":6222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6221,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6223,"src":"500:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6220,"name":"address","nodeType":"ElementaryTypeName","src":"500:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"499:9:65"},"scope":6224,"src":"454:55:65","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6225,"src":"315:196:65","usedErrors":[],"usedEvents":[]}],"src":"45:467:65"},"id":65},"contracts/toolshed/IPaymentsEscrowToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IPaymentsEscrowToolshed.sol","exportedSymbols":{"IPaymentsEscrow":[3667],"IPaymentsEscrowToolshed":[6243]},"id":6244,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6226,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:66"},{"absolutePath":"contracts/horizon/IPaymentsEscrow.sol","file":"../horizon/IPaymentsEscrow.sol","id":6228,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6244,"sourceUnit":3668,"src":"103:65:66","symbolAliases":[{"foreign":{"id":6227,"name":"IPaymentsEscrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3667,"src":"112:15:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6229,"name":"IPaymentsEscrow","nameLocations":["207:15:66"],"nodeType":"IdentifierPath","referencedDeclaration":3667,"src":"207:15:66"},"id":6230,"nodeType":"InheritanceSpecifier","src":"207:15:66"}],"canonicalName":"IPaymentsEscrowToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6243,"linearizedBaseContracts":[6243,3667],"name":"IPaymentsEscrowToolshed","nameLocation":"180:23:66","nodeType":"ContractDefinition","nodes":[{"functionSelector":"7a8df28b","id":6242,"implemented":false,"kind":"function","modifiers":[],"name":"escrowAccounts","nameLocation":"238:14:66","nodeType":"FunctionDefinition","parameters":{"id":6237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6232,"mutability":"mutable","name":"payer","nameLocation":"270:5:66","nodeType":"VariableDeclaration","scope":6242,"src":"262:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6231,"name":"address","nodeType":"ElementaryTypeName","src":"262:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6234,"mutability":"mutable","name":"collector","nameLocation":"293:9:66","nodeType":"VariableDeclaration","scope":6242,"src":"285:17:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6233,"name":"address","nodeType":"ElementaryTypeName","src":"285:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6236,"mutability":"mutable","name":"receiver","nameLocation":"320:8:66","nodeType":"VariableDeclaration","scope":6242,"src":"312:16:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6235,"name":"address","nodeType":"ElementaryTypeName","src":"312:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"252:82:66"},"returnParameters":{"id":6241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6240,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6242,"src":"358:20:66","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EscrowAccount_$3468_memory_ptr","typeString":"struct IPaymentsEscrow.EscrowAccount"},"typeName":{"id":6239,"nodeType":"UserDefinedTypeName","pathNode":{"id":6238,"name":"EscrowAccount","nameLocations":["358:13:66"],"nodeType":"IdentifierPath","referencedDeclaration":3468,"src":"358:13:66"},"referencedDeclaration":3468,"src":"358:13:66","typeDescriptions":{"typeIdentifier":"t_struct$_EscrowAccount_$3468_storage_ptr","typeString":"struct IPaymentsEscrow.EscrowAccount"}},"visibility":"internal"}],"src":"357:22:66"},"scope":6243,"src":"229:151:66","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6244,"src":"170:212:66","usedErrors":[3535,3542,3545,3552,3559,3568,3571],"usedEvents":[3479,3492,3505,3516,3532]}],"src":"45:338:66"},"id":66},"contracts/toolshed/IRewardsManagerToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IRewardsManagerToolshed.sol","exportedSymbols":{"IRewardsManager":[1721],"IRewardsManagerToolshed":[6294]},"id":6295,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6245,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:67"},{"absolutePath":"contracts/contracts/rewards/IRewardsManager.sol","file":"../contracts/rewards/IRewardsManager.sol","id":6247,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6295,"sourceUnit":1722,"src":"215:75:67","symbolAliases":[{"foreign":{"id":6246,"name":"IRewardsManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1721,"src":"224:15:67","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6248,"name":"IRewardsManager","nameLocations":["329:15:67"],"nodeType":"IdentifierPath","referencedDeclaration":1721,"src":"329:15:67"},"id":6249,"nodeType":"InheritanceSpecifier","src":"329:15:67"}],"canonicalName":"IRewardsManagerToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6294,"linearizedBaseContracts":[6294,1721],"name":"IRewardsManagerToolshed","nameLocation":"302:23:67","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":6250,"nodeType":"StructuredDocumentation","src":"351:72:67","text":" @dev Emitted when rewards are assigned to an indexer."},"eventSelector":"bf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace64","id":6258,"name":"RewardsAssigned","nameLocation":"434:15:67","nodeType":"EventDefinition","parameters":{"id":6257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6252,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"466:7:67","nodeType":"VariableDeclaration","scope":6258,"src":"450:23:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6251,"name":"address","nodeType":"ElementaryTypeName","src":"450:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6254,"indexed":true,"mutability":"mutable","name":"allocationID","nameLocation":"491:12:67","nodeType":"VariableDeclaration","scope":6258,"src":"475:28:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6253,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6256,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"513:6:67","nodeType":"VariableDeclaration","scope":6258,"src":"505:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6255,"name":"uint256","nodeType":"ElementaryTypeName","src":"505:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"449:71:67"},"src":"428:93:67"},{"anonymous":false,"documentation":{"id":6259,"nodeType":"StructuredDocumentation","src":"527:213:67","text":" @notice Emitted when rewards are assigned to an indexer (Horizon version)\n @dev We use the Horizon prefix to change the event signature which makes network subgraph development much easier"},"eventSelector":"a111914d7f2ea8beca61d12f1a1f38c5533de5f1823c3936422df4404ac2ec68","id":6267,"name":"HorizonRewardsAssigned","nameLocation":"751:22:67","nodeType":"EventDefinition","parameters":{"id":6266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6261,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"790:7:67","nodeType":"VariableDeclaration","scope":6267,"src":"774:23:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6260,"name":"address","nodeType":"ElementaryTypeName","src":"774:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6263,"indexed":true,"mutability":"mutable","name":"allocationID","nameLocation":"815:12:67","nodeType":"VariableDeclaration","scope":6267,"src":"799:28:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6262,"name":"address","nodeType":"ElementaryTypeName","src":"799:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6265,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"837:6:67","nodeType":"VariableDeclaration","scope":6267,"src":"829:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6264,"name":"uint256","nodeType":"ElementaryTypeName","src":"829:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"773:71:67"},"src":"745:100:67"},{"anonymous":false,"documentation":{"id":6268,"nodeType":"StructuredDocumentation","src":"851:72:67","text":" @notice Emitted when rewards are denied to an indexer"},"eventSelector":"9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac8043","id":6274,"name":"RewardsDenied","nameLocation":"934:13:67","nodeType":"EventDefinition","parameters":{"id":6273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6270,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"964:7:67","nodeType":"VariableDeclaration","scope":6274,"src":"948:23:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6269,"name":"address","nodeType":"ElementaryTypeName","src":"948:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6272,"indexed":true,"mutability":"mutable","name":"allocationID","nameLocation":"989:12:67","nodeType":"VariableDeclaration","scope":6274,"src":"973:28:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6271,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"947:55:67"},"src":"928:75:67"},{"anonymous":false,"documentation":{"id":6275,"nodeType":"StructuredDocumentation","src":"1009:81:67","text":" @notice Emitted when a subgraph is denied for claiming rewards"},"eventSelector":"e016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a","id":6281,"name":"RewardsDenylistUpdated","nameLocation":"1101:22:67","nodeType":"EventDefinition","parameters":{"id":6280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6277,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentID","nameLocation":"1140:20:67","nodeType":"VariableDeclaration","scope":6281,"src":"1124:36:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6276,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1124:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6279,"indexed":false,"mutability":"mutable","name":"sinceBlock","nameLocation":"1170:10:67","nodeType":"VariableDeclaration","scope":6281,"src":"1162:18:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6278,"name":"uint256","nodeType":"ElementaryTypeName","src":"1162:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1123:58:67"},"src":"1095:87:67"},{"anonymous":false,"documentation":{"id":6282,"nodeType":"StructuredDocumentation","src":"1188:67:67","text":" @notice Emitted when the subgraph service is set"},"eventSelector":"97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede","id":6288,"name":"SubgraphServiceSet","nameLocation":"1266:18:67","nodeType":"EventDefinition","parameters":{"id":6287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6284,"indexed":true,"mutability":"mutable","name":"oldSubgraphService","nameLocation":"1301:18:67","nodeType":"VariableDeclaration","scope":6288,"src":"1285:34:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6283,"name":"address","nodeType":"ElementaryTypeName","src":"1285:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6286,"indexed":true,"mutability":"mutable","name":"newSubgraphService","nameLocation":"1337:18:67","nodeType":"VariableDeclaration","scope":6288,"src":"1321:34:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6285,"name":"address","nodeType":"ElementaryTypeName","src":"1321:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1284:72:67"},"src":"1260:97:67"},{"functionSelector":"26058249","id":6293,"implemented":false,"kind":"function","modifiers":[],"name":"subgraphService","nameLocation":"1372:15:67","nodeType":"FunctionDefinition","parameters":{"id":6289,"nodeType":"ParameterList","parameters":[],"src":"1387:2:67"},"returnParameters":{"id":6292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6291,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6293,"src":"1413:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6290,"name":"address","nodeType":"ElementaryTypeName","src":"1413:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1412:9:67"},"scope":6294,"src":"1363:59:67","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6295,"src":"292:1132:67","usedErrors":[],"usedEvents":[6258,6267,6274,6281,6288]}],"src":"45:1380:67"},"id":67},"contracts/toolshed/IServiceRegistryToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/IServiceRegistryToolshed.sol","exportedSymbols":{"IServiceRegistry":[832],"IServiceRegistryToolshed":[6319]},"id":6320,"license":"GPL-2.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6296,"literals":["solidity","^","0.7",".6","||","^","0.8",".0"],"nodeType":"PragmaDirective","src":"45:33:68"},{"absolutePath":"contracts/contracts/discovery/IServiceRegistry.sol","file":"../contracts/discovery/IServiceRegistry.sol","id":6298,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6320,"sourceUnit":833,"src":"112:79:68","symbolAliases":[{"foreign":{"id":6297,"name":"IServiceRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":832,"src":"121:16:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6299,"name":"IServiceRegistry","nameLocations":["231:16:68"],"nodeType":"IdentifierPath","referencedDeclaration":832,"src":"231:16:68"},"id":6300,"nodeType":"InheritanceSpecifier","src":"231:16:68"}],"canonicalName":"IServiceRegistryToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6319,"linearizedBaseContracts":[6319,832],"name":"IServiceRegistryToolshed","nameLocation":"203:24:68","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"d0306c1da0ed1d7b7d56ac9ef91ed1f717e3d2d63a55ebe8dc2891056687f300","id":6308,"name":"ServiceRegistered","nameLocation":"260:17:68","nodeType":"EventDefinition","parameters":{"id":6307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6302,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"294:7:68","nodeType":"VariableDeclaration","scope":6308,"src":"278:23:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6301,"name":"address","nodeType":"ElementaryTypeName","src":"278:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6304,"indexed":false,"mutability":"mutable","name":"url","nameLocation":"310:3:68","nodeType":"VariableDeclaration","scope":6308,"src":"303:10:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6303,"name":"string","nodeType":"ElementaryTypeName","src":"303:6:68","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":6306,"indexed":false,"mutability":"mutable","name":"geohash","nameLocation":"322:7:68","nodeType":"VariableDeclaration","scope":6308,"src":"315:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6305,"name":"string","nodeType":"ElementaryTypeName","src":"315:6:68","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"277:53:68"},"src":"254:77:68"},{"documentation":{"id":6309,"nodeType":"StructuredDocumentation","src":"337:449:68","text":" @notice Gets the indexer registrationdetails\n @dev Note that this storage getter actually returns a ISubgraphService.IndexerService struct, but ethers v6 is not\n      good at dealing with dynamic types on return values.\n @param indexer The address of the indexer\n @return url The URL where the indexer can be reached at for queries\n @return geoHash The indexer's geo location, expressed as a geo hash"},"functionSelector":"6d966d01","id":6318,"implemented":false,"kind":"function","modifiers":[],"name":"services","nameLocation":"800:8:68","nodeType":"FunctionDefinition","parameters":{"id":6312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6311,"mutability":"mutable","name":"indexer","nameLocation":"817:7:68","nodeType":"VariableDeclaration","scope":6318,"src":"809:15:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6310,"name":"address","nodeType":"ElementaryTypeName","src":"809:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"808:17:68"},"returnParameters":{"id":6317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6314,"mutability":"mutable","name":"url","nameLocation":"863:3:68","nodeType":"VariableDeclaration","scope":6318,"src":"849:17:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6313,"name":"string","nodeType":"ElementaryTypeName","src":"849:6:68","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":6316,"mutability":"mutable","name":"geoHash","nameLocation":"882:7:68","nodeType":"VariableDeclaration","scope":6318,"src":"868:21:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6315,"name":"string","nodeType":"ElementaryTypeName","src":"868:6:68","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"848:42:68"},"scope":6319,"src":"791:100:68","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6320,"src":"193:700:68","usedErrors":[],"usedEvents":[6308]}],"src":"45:849:68"},"id":68},"contracts/toolshed/ISubgraphServiceToolshed.sol":{"ast":{"absolutePath":"contracts/toolshed/ISubgraphServiceToolshed.sol","exportedSymbols":{"IAllocationManager":[6499],"IDataServicePausable":[3032],"ILegacyAllocation":[5733],"IMulticall":[436],"IOwnable":[6524],"IPausable":[6540],"IProvisionManager":[6591],"IProvisionTracker":[6608],"ISubgraphService":[5639],"ISubgraphServiceToolshed":[6410]},"id":6411,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6321,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:69"},{"absolutePath":"contracts/subgraph-service/ISubgraphService.sol","file":"../subgraph-service/ISubgraphService.sol","id":6323,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6411,"sourceUnit":5640,"src":"103:76:69","symbolAliases":[{"foreign":{"id":6322,"name":"ISubgraphService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"112:16:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/toolshed/internal/IOwnable.sol","file":"./internal/IOwnable.sol","id":6325,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6411,"sourceUnit":6525,"src":"180:51:69","symbolAliases":[{"foreign":{"id":6324,"name":"IOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6524,"src":"189:8:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/toolshed/internal/IPausable.sol","file":"./internal/IPausable.sol","id":6327,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6411,"sourceUnit":6541,"src":"232:53:69","symbolAliases":[{"foreign":{"id":6326,"name":"IPausable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6540,"src":"241:9:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/subgraph-service/internal/ILegacyAllocation.sol","file":"../subgraph-service/internal/ILegacyAllocation.sol","id":6329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6411,"sourceUnit":5734,"src":"286:87:69","symbolAliases":[{"foreign":{"id":6328,"name":"ILegacyAllocation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5733,"src":"295:17:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/toolshed/internal/IProvisionManager.sol","file":"./internal/IProvisionManager.sol","id":6331,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6411,"sourceUnit":6592,"src":"374:69:69","symbolAliases":[{"foreign":{"id":6330,"name":"IProvisionManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"383:17:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/toolshed/internal/IProvisionTracker.sol","file":"./internal/IProvisionTracker.sol","id":6333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6411,"sourceUnit":6609,"src":"444:69:69","symbolAliases":[{"foreign":{"id":6332,"name":"IProvisionTracker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"453:17:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/data-service/IDataServicePausable.sol","file":"../data-service/IDataServicePausable.sol","id":6335,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6411,"sourceUnit":3033,"src":"514:80:69","symbolAliases":[{"foreign":{"id":6334,"name":"IDataServicePausable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"523:20:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/contracts/base/IMulticall.sol","file":"../contracts/base/IMulticall.sol","id":6337,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6411,"sourceUnit":437,"src":"595:62:69","symbolAliases":[{"foreign":{"id":6336,"name":"IMulticall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":436,"src":"604:10:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/toolshed/internal/IAllocationManager.sol","file":"./internal/IAllocationManager.sol","id":6339,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6411,"sourceUnit":6500,"src":"658:71:69","symbolAliases":[{"foreign":{"id":6338,"name":"IAllocationManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6499,"src":"667:18:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6340,"name":"ISubgraphService","nameLocations":["773:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":5639,"src":"773:16:69"},"id":6341,"nodeType":"InheritanceSpecifier","src":"773:16:69"},{"baseName":{"id":6342,"name":"IAllocationManager","nameLocations":["795:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":6499,"src":"795:18:69"},"id":6343,"nodeType":"InheritanceSpecifier","src":"795:18:69"},{"baseName":{"id":6344,"name":"IOwnable","nameLocations":["819:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":6524,"src":"819:8:69"},"id":6345,"nodeType":"InheritanceSpecifier","src":"819:8:69"},{"baseName":{"id":6346,"name":"IPausable","nameLocations":["833:9:69"],"nodeType":"IdentifierPath","referencedDeclaration":6540,"src":"833:9:69"},"id":6347,"nodeType":"InheritanceSpecifier","src":"833:9:69"},{"baseName":{"id":6348,"name":"IDataServicePausable","nameLocations":["848:20:69"],"nodeType":"IdentifierPath","referencedDeclaration":3032,"src":"848:20:69"},"id":6349,"nodeType":"InheritanceSpecifier","src":"848:20:69"},{"baseName":{"id":6350,"name":"ILegacyAllocation","nameLocations":["874:17:69"],"nodeType":"IdentifierPath","referencedDeclaration":5733,"src":"874:17:69"},"id":6351,"nodeType":"InheritanceSpecifier","src":"874:17:69"},{"baseName":{"id":6352,"name":"IProvisionManager","nameLocations":["897:17:69"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"897:17:69"},"id":6353,"nodeType":"InheritanceSpecifier","src":"897:17:69"},{"baseName":{"id":6354,"name":"IProvisionTracker","nameLocations":["920:17:69"],"nodeType":"IdentifierPath","referencedDeclaration":6608,"src":"920:17:69"},"id":6355,"nodeType":"InheritanceSpecifier","src":"920:17:69"},{"baseName":{"id":6356,"name":"IMulticall","nameLocations":["943:10:69"],"nodeType":"IdentifierPath","referencedDeclaration":436,"src":"943:10:69"},"id":6357,"nodeType":"InheritanceSpecifier","src":"943:10:69"}],"canonicalName":"ISubgraphServiceToolshed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6410,"linearizedBaseContracts":[6410,436,6608,6591,5733,3032,6540,6524,6499,5639,2997,2934],"name":"ISubgraphServiceToolshed","nameLocation":"741:24:69","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6358,"nodeType":"StructuredDocumentation","src":"960:430:69","text":" @notice Gets the indexer details\n @dev Note that this storage getter actually returns a ISubgraphService.Indexer struct, but ethers v6 is not\n      good at dealing with dynamic types on return values.\n @param indexer The address of the indexer\n @return url The URL where the indexer can be reached at for queries\n @return geoHash The indexer's geo location, expressed as a geo hash"},"functionSelector":"4f793cdc","id":6367,"implemented":false,"kind":"function","modifiers":[],"name":"indexers","nameLocation":"1404:8:69","nodeType":"FunctionDefinition","parameters":{"id":6361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6360,"mutability":"mutable","name":"indexer","nameLocation":"1421:7:69","nodeType":"VariableDeclaration","scope":6367,"src":"1413:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6359,"name":"address","nodeType":"ElementaryTypeName","src":"1413:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1412:17:69"},"returnParameters":{"id":6366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6363,"mutability":"mutable","name":"url","nameLocation":"1467:3:69","nodeType":"VariableDeclaration","scope":6367,"src":"1453:17:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6362,"name":"string","nodeType":"ElementaryTypeName","src":"1453:6:69","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":6365,"mutability":"mutable","name":"geoHash","nameLocation":"1486:7:69","nodeType":"VariableDeclaration","scope":6367,"src":"1472:21:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6364,"name":"string","nodeType":"ElementaryTypeName","src":"1472:6:69","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1452:42:69"},"scope":6410,"src":"1395:100:69","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6368,"nodeType":"StructuredDocumentation","src":"1501:161:69","text":" @notice Gets the allocation provision tracker\n @param indexer The address of the indexer\n @return The allocation provision tracker"},"functionSelector":"6234e216","id":6375,"implemented":false,"kind":"function","modifiers":[],"name":"allocationProvisionTracker","nameLocation":"1676:26:69","nodeType":"FunctionDefinition","parameters":{"id":6371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6370,"mutability":"mutable","name":"indexer","nameLocation":"1711:7:69","nodeType":"VariableDeclaration","scope":6375,"src":"1703:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6369,"name":"address","nodeType":"ElementaryTypeName","src":"1703:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1702:17:69"},"returnParameters":{"id":6374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6373,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6375,"src":"1743:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6372,"name":"uint256","nodeType":"ElementaryTypeName","src":"1743:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1742:9:69"},"scope":6410,"src":"1667:85:69","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6376,"nodeType":"StructuredDocumentation","src":"1758:94:69","text":" @notice Gets the stake to fees ratio\n @return The stake to fees ratio"},"functionSelector":"d07a7a84","id":6381,"implemented":false,"kind":"function","modifiers":[],"name":"stakeToFeesRatio","nameLocation":"1866:16:69","nodeType":"FunctionDefinition","parameters":{"id":6377,"nodeType":"ParameterList","parameters":[],"src":"1882:2:69"},"returnParameters":{"id":6380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6379,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6381,"src":"1908:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6378,"name":"uint256","nodeType":"ElementaryTypeName","src":"1908:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1907:9:69"},"scope":6410,"src":"1857:60:69","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6382,"nodeType":"StructuredDocumentation","src":"1923:90:69","text":" @notice Gets the max POI staleness\n @return The max POI staleness"},"functionSelector":"85e82baf","id":6387,"implemented":false,"kind":"function","modifiers":[],"name":"maxPOIStaleness","nameLocation":"2027:15:69","nodeType":"FunctionDefinition","parameters":{"id":6383,"nodeType":"ParameterList","parameters":[],"src":"2042:2:69"},"returnParameters":{"id":6386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6387,"src":"2068:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6384,"name":"uint256","nodeType":"ElementaryTypeName","src":"2068:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2067:9:69"},"scope":6410,"src":"2018:59:69","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6388,"nodeType":"StructuredDocumentation","src":"2083:90:69","text":" @notice Gets the curation fees cut\n @return The curation fees cut"},"functionSelector":"138dea08","id":6393,"implemented":false,"kind":"function","modifiers":[],"name":"curationFeesCut","nameLocation":"2187:15:69","nodeType":"FunctionDefinition","parameters":{"id":6389,"nodeType":"ParameterList","parameters":[],"src":"2202:2:69"},"returnParameters":{"id":6392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6393,"src":"2228:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6390,"name":"uint256","nodeType":"ElementaryTypeName","src":"2228:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2227:9:69"},"scope":6410,"src":"2178:59:69","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6394,"nodeType":"StructuredDocumentation","src":"2243:169:69","text":" @notice Gets the pause guardians\n @param pauseGuardian The address of the pause guardian\n @return The allowed status of the pause guardian"},"functionSelector":"9384e078","id":6401,"implemented":false,"kind":"function","modifiers":[],"name":"pauseGuardians","nameLocation":"2426:14:69","nodeType":"FunctionDefinition","parameters":{"id":6397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6396,"mutability":"mutable","name":"pauseGuardian","nameLocation":"2449:13:69","nodeType":"VariableDeclaration","scope":6401,"src":"2441:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6395,"name":"address","nodeType":"ElementaryTypeName","src":"2441:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2440:23:69"},"returnParameters":{"id":6400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6399,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6401,"src":"2487:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6398,"name":"bool","nodeType":"ElementaryTypeName","src":"2487:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2486:6:69"},"scope":6410,"src":"2417:76:69","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6402,"nodeType":"StructuredDocumentation","src":"2499:145:69","text":" @notice Gets the payments destination\n @param indexer The address of the indexer\n @return The payments destination"},"functionSelector":"07e736d8","id":6409,"implemented":false,"kind":"function","modifiers":[],"name":"paymentsDestination","nameLocation":"2658:19:69","nodeType":"FunctionDefinition","parameters":{"id":6405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6404,"mutability":"mutable","name":"indexer","nameLocation":"2686:7:69","nodeType":"VariableDeclaration","scope":6409,"src":"2678:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6403,"name":"address","nodeType":"ElementaryTypeName","src":"2678:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2677:17:69"},"returnParameters":{"id":6408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6407,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6409,"src":"2718:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6406,"name":"address","nodeType":"ElementaryTypeName","src":"2718:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2717:9:69"},"scope":6410,"src":"2649:78:69","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6411,"src":"731:1998:69","usedErrors":[2987,2990,3016,3023,5439,5442,5445,5450,5456,5463,5470,5477,5484,5489,5494,5497,5502,5727,5732,6486,6488,6492,6498,6507,6530,6533,6574,6580,6586,6590,6599],"usedEvents":[2814,2819,2826,2833,2843,2850,2962,2973,2982,3011,5417,5424,5429,5434,6424,6444,6456,6468,6476,6480,6548,6552,6558,6564]}],"src":"45:2685:69"},"id":69},"contracts/toolshed/internal/IAllocationManager.sol":{"ast":{"absolutePath":"contracts/toolshed/internal/IAllocationManager.sol","exportedSymbols":{"IAllocationManager":[6499]},"id":6500,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6412,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:70"},{"abstract":false,"baseContracts":[],"canonicalName":"IAllocationManager","contractDependencies":[],"contractKind":"interface","fullyImplemented":true,"id":6499,"linearizedBaseContracts":[6499],"name":"IAllocationManager","nameLocation":"216:18:70","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"e5e185fab2b992c4727ff702a867d78b15fb176dbaa20c9c312a1c351d3f7f83","id":6424,"name":"AllocationCreated","nameLocation":"261:17:70","nodeType":"EventDefinition","parameters":{"id":6423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6414,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"304:7:70","nodeType":"VariableDeclaration","scope":6424,"src":"288:23:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6413,"name":"address","nodeType":"ElementaryTypeName","src":"288:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6416,"indexed":true,"mutability":"mutable","name":"allocationId","nameLocation":"337:12:70","nodeType":"VariableDeclaration","scope":6424,"src":"321:28:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6415,"name":"address","nodeType":"ElementaryTypeName","src":"321:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6418,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"375:20:70","nodeType":"VariableDeclaration","scope":6424,"src":"359:36:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6417,"name":"bytes32","nodeType":"ElementaryTypeName","src":"359:7:70","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6420,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"413:6:70","nodeType":"VariableDeclaration","scope":6424,"src":"405:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6419,"name":"uint256","nodeType":"ElementaryTypeName","src":"405:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6422,"indexed":false,"mutability":"mutable","name":"currentEpoch","nameLocation":"437:12:70","nodeType":"VariableDeclaration","scope":6424,"src":"429:20:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6421,"name":"uint256","nodeType":"ElementaryTypeName","src":"429:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"278:177:70"},"src":"255:201:70"},{"anonymous":false,"eventSelector":"443f56bd2098d273b8c8120398789a41da5925db4ba2f656813fc5299ac57b1f","id":6444,"name":"IndexingRewardsCollected","nameLocation":"468:24:70","nodeType":"EventDefinition","parameters":{"id":6443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6426,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"518:7:70","nodeType":"VariableDeclaration","scope":6444,"src":"502:23:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6425,"name":"address","nodeType":"ElementaryTypeName","src":"502:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6428,"indexed":true,"mutability":"mutable","name":"allocationId","nameLocation":"551:12:70","nodeType":"VariableDeclaration","scope":6444,"src":"535:28:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6427,"name":"address","nodeType":"ElementaryTypeName","src":"535:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6430,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"589:20:70","nodeType":"VariableDeclaration","scope":6444,"src":"573:36:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6429,"name":"bytes32","nodeType":"ElementaryTypeName","src":"573:7:70","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6432,"indexed":false,"mutability":"mutable","name":"tokensRewards","nameLocation":"627:13:70","nodeType":"VariableDeclaration","scope":6444,"src":"619:21:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6431,"name":"uint256","nodeType":"ElementaryTypeName","src":"619:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6434,"indexed":false,"mutability":"mutable","name":"tokensIndexerRewards","nameLocation":"658:20:70","nodeType":"VariableDeclaration","scope":6444,"src":"650:28:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6433,"name":"uint256","nodeType":"ElementaryTypeName","src":"650:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6436,"indexed":false,"mutability":"mutable","name":"tokensDelegationRewards","nameLocation":"696:23:70","nodeType":"VariableDeclaration","scope":6444,"src":"688:31:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6435,"name":"uint256","nodeType":"ElementaryTypeName","src":"688:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6438,"indexed":false,"mutability":"mutable","name":"poi","nameLocation":"737:3:70","nodeType":"VariableDeclaration","scope":6444,"src":"729:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6437,"name":"bytes32","nodeType":"ElementaryTypeName","src":"729:7:70","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6440,"indexed":false,"mutability":"mutable","name":"poiMetadata","nameLocation":"756:11:70","nodeType":"VariableDeclaration","scope":6444,"src":"750:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6439,"name":"bytes","nodeType":"ElementaryTypeName","src":"750:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6442,"indexed":false,"mutability":"mutable","name":"currentEpoch","nameLocation":"785:12:70","nodeType":"VariableDeclaration","scope":6444,"src":"777:20:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6441,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"492:311:70"},"src":"462:342:70"},{"anonymous":false,"eventSelector":"6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f","id":6456,"name":"AllocationResized","nameLocation":"816:17:70","nodeType":"EventDefinition","parameters":{"id":6455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6446,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"859:7:70","nodeType":"VariableDeclaration","scope":6456,"src":"843:23:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6445,"name":"address","nodeType":"ElementaryTypeName","src":"843:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6448,"indexed":true,"mutability":"mutable","name":"allocationId","nameLocation":"892:12:70","nodeType":"VariableDeclaration","scope":6456,"src":"876:28:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6447,"name":"address","nodeType":"ElementaryTypeName","src":"876:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6450,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"930:20:70","nodeType":"VariableDeclaration","scope":6456,"src":"914:36:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6449,"name":"bytes32","nodeType":"ElementaryTypeName","src":"914:7:70","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6452,"indexed":false,"mutability":"mutable","name":"newTokens","nameLocation":"968:9:70","nodeType":"VariableDeclaration","scope":6456,"src":"960:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6451,"name":"uint256","nodeType":"ElementaryTypeName","src":"960:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6454,"indexed":false,"mutability":"mutable","name":"oldTokens","nameLocation":"995:9:70","nodeType":"VariableDeclaration","scope":6456,"src":"987:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6453,"name":"uint256","nodeType":"ElementaryTypeName","src":"987:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"833:177:70"},"src":"810:201:70"},{"anonymous":false,"eventSelector":"08f2f865e0fb62d722a51e4d9873199bf6bf52e7d8ee5a2ee2896c9ef719f545","id":6468,"name":"AllocationClosed","nameLocation":"1023:16:70","nodeType":"EventDefinition","parameters":{"id":6467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6458,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"1065:7:70","nodeType":"VariableDeclaration","scope":6468,"src":"1049:23:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6457,"name":"address","nodeType":"ElementaryTypeName","src":"1049:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6460,"indexed":true,"mutability":"mutable","name":"allocationId","nameLocation":"1098:12:70","nodeType":"VariableDeclaration","scope":6468,"src":"1082:28:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6459,"name":"address","nodeType":"ElementaryTypeName","src":"1082:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6462,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"1136:20:70","nodeType":"VariableDeclaration","scope":6468,"src":"1120:36:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6461,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1120:7:70","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6464,"indexed":false,"mutability":"mutable","name":"tokens","nameLocation":"1174:6:70","nodeType":"VariableDeclaration","scope":6468,"src":"1166:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6463,"name":"uint256","nodeType":"ElementaryTypeName","src":"1166:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6466,"indexed":false,"mutability":"mutable","name":"forceClosed","nameLocation":"1195:11:70","nodeType":"VariableDeclaration","scope":6468,"src":"1190:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6465,"name":"bool","nodeType":"ElementaryTypeName","src":"1190:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1039:173:70"},"src":"1017:196:70"},{"anonymous":false,"eventSelector":"d54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e19","id":6476,"name":"LegacyAllocationMigrated","nameLocation":"1225:24:70","nodeType":"EventDefinition","parameters":{"id":6475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6470,"indexed":true,"mutability":"mutable","name":"indexer","nameLocation":"1275:7:70","nodeType":"VariableDeclaration","scope":6476,"src":"1259:23:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6469,"name":"address","nodeType":"ElementaryTypeName","src":"1259:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6472,"indexed":true,"mutability":"mutable","name":"allocationId","nameLocation":"1308:12:70","nodeType":"VariableDeclaration","scope":6476,"src":"1292:28:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6471,"name":"address","nodeType":"ElementaryTypeName","src":"1292:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6474,"indexed":true,"mutability":"mutable","name":"subgraphDeploymentId","nameLocation":"1346:20:70","nodeType":"VariableDeclaration","scope":6476,"src":"1330:36:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6473,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1330:7:70","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1249:123:70"},"src":"1219:154:70"},{"anonymous":false,"eventSelector":"21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba","id":6480,"name":"MaxPOIStalenessSet","nameLocation":"1385:18:70","nodeType":"EventDefinition","parameters":{"id":6479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6478,"indexed":false,"mutability":"mutable","name":"maxPOIStaleness","nameLocation":"1412:15:70","nodeType":"VariableDeclaration","scope":6480,"src":"1404:23:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6477,"name":"uint256","nodeType":"ElementaryTypeName","src":"1404:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1403:25:70"},"src":"1379:50:70"},{"errorSelector":"8c5b935d","id":6486,"name":"AllocationManagerInvalidAllocationProof","nameLocation":"1455:39:70","nodeType":"ErrorDefinition","parameters":{"id":6485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6482,"mutability":"mutable","name":"signer","nameLocation":"1503:6:70","nodeType":"VariableDeclaration","scope":6486,"src":"1495:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6481,"name":"address","nodeType":"ElementaryTypeName","src":"1495:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6484,"mutability":"mutable","name":"allocationId","nameLocation":"1519:12:70","nodeType":"VariableDeclaration","scope":6486,"src":"1511:20:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6483,"name":"address","nodeType":"ElementaryTypeName","src":"1511:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1494:38:70"},"src":"1449:84:70"},{"errorSelector":"9ffbebde","id":6488,"name":"AllocationManagerInvalidZeroAllocationId","nameLocation":"1544:40:70","nodeType":"ErrorDefinition","parameters":{"id":6487,"nodeType":"ParameterList","parameters":[],"src":"1584:2:70"},"src":"1538:49:70"},{"errorSelector":"1eb5ff95","id":6492,"name":"AllocationManagerAllocationClosed","nameLocation":"1598:33:70","nodeType":"ErrorDefinition","parameters":{"id":6491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6490,"mutability":"mutable","name":"allocationId","nameLocation":"1640:12:70","nodeType":"VariableDeclaration","scope":6492,"src":"1632:20:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6489,"name":"address","nodeType":"ElementaryTypeName","src":"1632:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1631:22:70"},"src":"1592:62:70"},{"errorSelector":"f32518cd","id":6498,"name":"AllocationManagerAllocationSameSize","nameLocation":"1665:35:70","nodeType":"ErrorDefinition","parameters":{"id":6497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6494,"mutability":"mutable","name":"allocationId","nameLocation":"1709:12:70","nodeType":"VariableDeclaration","scope":6498,"src":"1701:20:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6493,"name":"address","nodeType":"ElementaryTypeName","src":"1701:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6496,"mutability":"mutable","name":"tokens","nameLocation":"1731:6:70","nodeType":"VariableDeclaration","scope":6498,"src":"1723:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6495,"name":"uint256","nodeType":"ElementaryTypeName","src":"1723:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1700:38:70"},"src":"1659:80:70"}],"scope":6500,"src":"206:1535:70","usedErrors":[6486,6488,6492,6498],"usedEvents":[6424,6444,6456,6468,6476,6480]}],"src":"45:1697:70"},"id":70},"contracts/toolshed/internal/IOwnable.sol":{"ast":{"absolutePath":"contracts/toolshed/internal/IOwnable.sol","exportedSymbols":{"IOwnable":[6524]},"id":6525,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6501,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"64:24:71"},{"abstract":false,"baseContracts":[],"canonicalName":"IOwnable","contractDependencies":[],"contractKind":"interface","documentation":{"id":6502,"nodeType":"StructuredDocumentation","src":"90:64:71","text":"@title IOwnable\n @notice Interface for Ownable contracts"},"fullyImplemented":false,"id":6524,"linearizedBaseContracts":[6524],"name":"IOwnable","nameLocation":"164:8:71","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6503,"nodeType":"StructuredDocumentation","src":"179:85:71","text":" @dev The caller account is not authorized to perform an operation."},"errorSelector":"118cdaa7","id":6507,"name":"OwnableUnauthorizedAccount","nameLocation":"275:26:71","nodeType":"ErrorDefinition","parameters":{"id":6506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6505,"mutability":"mutable","name":"account","nameLocation":"310:7:71","nodeType":"VariableDeclaration","scope":6507,"src":"302:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6504,"name":"address","nodeType":"ElementaryTypeName","src":"302:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"301:17:71"},"src":"269:50:71"},{"documentation":{"id":6508,"nodeType":"StructuredDocumentation","src":"325:52:71","text":"@notice Returns the address of the current owner"},"functionSelector":"8da5cb5b","id":6513,"implemented":false,"kind":"function","modifiers":[],"name":"owner","nameLocation":"391:5:71","nodeType":"FunctionDefinition","parameters":{"id":6509,"nodeType":"ParameterList","parameters":[],"src":"396:2:71"},"returnParameters":{"id":6512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6511,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6513,"src":"422:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6510,"name":"address","nodeType":"ElementaryTypeName","src":"422:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"421:9:71"},"scope":6524,"src":"382:49:71","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6514,"nodeType":"StructuredDocumentation","src":"437:48:71","text":"@notice Leaves the contract without an owner"},"functionSelector":"715018a6","id":6517,"implemented":false,"kind":"function","modifiers":[],"name":"renounceOwnership","nameLocation":"499:17:71","nodeType":"FunctionDefinition","parameters":{"id":6515,"nodeType":"ParameterList","parameters":[],"src":"516:2:71"},"returnParameters":{"id":6516,"nodeType":"ParameterList","parameters":[],"src":"527:0:71"},"scope":6524,"src":"490:38:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6518,"nodeType":"StructuredDocumentation","src":"534:117:71","text":"@notice Transfers ownership of the contract to a new account\n @param newOwner The address of the new owner"},"functionSelector":"f2fde38b","id":6523,"implemented":false,"kind":"function","modifiers":[],"name":"transferOwnership","nameLocation":"665:17:71","nodeType":"FunctionDefinition","parameters":{"id":6521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6520,"mutability":"mutable","name":"newOwner","nameLocation":"691:8:71","nodeType":"VariableDeclaration","scope":6523,"src":"683:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6519,"name":"address","nodeType":"ElementaryTypeName","src":"683:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"682:18:71"},"returnParameters":{"id":6522,"nodeType":"ParameterList","parameters":[],"src":"709:0:71"},"scope":6524,"src":"656:54:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6525,"src":"154:558:71","usedErrors":[6507],"usedEvents":[]}],"src":"64:649:71"},"id":71},"contracts/toolshed/internal/IPausable.sol":{"ast":{"absolutePath":"contracts/toolshed/internal/IPausable.sol","exportedSymbols":{"IPausable":[6540]},"id":6541,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6526,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"32:24:72"},{"abstract":false,"baseContracts":[],"canonicalName":"IPausable","contractDependencies":[],"contractKind":"interface","documentation":{"id":6527,"nodeType":"StructuredDocumentation","src":"90:65:72","text":"@title IPausable\n @notice Interface for Pausable contract"},"fullyImplemented":false,"id":6540,"linearizedBaseContracts":[6540],"name":"IPausable","nameLocation":"165:9:72","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6528,"nodeType":"StructuredDocumentation","src":"181:76:72","text":" @dev The operation failed because the contract is paused."},"errorSelector":"d93c0665","id":6530,"name":"EnforcedPause","nameLocation":"268:13:72","nodeType":"ErrorDefinition","parameters":{"id":6529,"nodeType":"ParameterList","parameters":[],"src":"281:2:72"},"src":"262:22:72"},{"documentation":{"id":6531,"nodeType":"StructuredDocumentation","src":"290:80:72","text":" @dev The operation failed because the contract is not paused."},"errorSelector":"8dfc202b","id":6533,"name":"ExpectedPause","nameLocation":"381:13:72","nodeType":"ErrorDefinition","parameters":{"id":6532,"nodeType":"ParameterList","parameters":[],"src":"394:2:72"},"src":"375:22:72"},{"documentation":{"id":6534,"nodeType":"StructuredDocumentation","src":"403:71:72","text":"@notice Returns true if the contract is paused, and false otherwise"},"functionSelector":"5c975abb","id":6539,"implemented":false,"kind":"function","modifiers":[],"name":"paused","nameLocation":"488:6:72","nodeType":"FunctionDefinition","parameters":{"id":6535,"nodeType":"ParameterList","parameters":[],"src":"494:2:72"},"returnParameters":{"id":6538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6537,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6539,"src":"520:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6536,"name":"bool","nodeType":"ElementaryTypeName","src":"520:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"519:6:72"},"scope":6540,"src":"479:47:72","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6541,"src":"155:373:72","usedErrors":[6530,6533],"usedEvents":[]}],"src":"32:497:72"},"id":72},"contracts/toolshed/internal/IProvisionManager.sol":{"ast":{"absolutePath":"contracts/toolshed/internal/IProvisionManager.sol","exportedSymbols":{"IProvisionManager":[6591]},"id":6592,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6542,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"45:24:73"},{"abstract":false,"baseContracts":[],"canonicalName":"IProvisionManager","contractDependencies":[],"contractKind":"interface","fullyImplemented":true,"id":6591,"linearizedBaseContracts":[6591],"name":"IProvisionManager","nameLocation":"216:17:73","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f568849","id":6548,"name":"ProvisionTokensRangeSet","nameLocation":"260:23:73","nodeType":"EventDefinition","parameters":{"id":6547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6544,"indexed":false,"mutability":"mutable","name":"min","nameLocation":"292:3:73","nodeType":"VariableDeclaration","scope":6548,"src":"284:11:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6543,"name":"uint256","nodeType":"ElementaryTypeName","src":"284:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6546,"indexed":false,"mutability":"mutable","name":"max","nameLocation":"305:3:73","nodeType":"VariableDeclaration","scope":6548,"src":"297:11:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6545,"name":"uint256","nodeType":"ElementaryTypeName","src":"297:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"283:26:73"},"src":"254:56:73"},{"anonymous":false,"eventSelector":"472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f","id":6552,"name":"DelegationRatioSet","nameLocation":"321:18:73","nodeType":"EventDefinition","parameters":{"id":6551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6550,"indexed":false,"mutability":"mutable","name":"ratio","nameLocation":"347:5:73","nodeType":"VariableDeclaration","scope":6552,"src":"340:12:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":6549,"name":"uint32","nodeType":"ElementaryTypeName","src":"340:6:73","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"339:14:73"},"src":"315:39:73"},{"anonymous":false,"eventSelector":"2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a36","id":6558,"name":"VerifierCutRangeSet","nameLocation":"365:19:73","nodeType":"EventDefinition","parameters":{"id":6557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6554,"indexed":false,"mutability":"mutable","name":"min","nameLocation":"392:3:73","nodeType":"VariableDeclaration","scope":6558,"src":"385:10:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":6553,"name":"uint32","nodeType":"ElementaryTypeName","src":"385:6:73","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":6556,"indexed":false,"mutability":"mutable","name":"max","nameLocation":"404:3:73","nodeType":"VariableDeclaration","scope":6558,"src":"397:10:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":6555,"name":"uint32","nodeType":"ElementaryTypeName","src":"397:6:73","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"384:24:73"},"src":"359:50:73"},{"anonymous":false,"eventSelector":"2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d1","id":6564,"name":"ThawingPeriodRangeSet","nameLocation":"420:21:73","nodeType":"EventDefinition","parameters":{"id":6563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6560,"indexed":false,"mutability":"mutable","name":"min","nameLocation":"449:3:73","nodeType":"VariableDeclaration","scope":6564,"src":"442:10:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":6559,"name":"uint64","nodeType":"ElementaryTypeName","src":"442:6:73","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":6562,"indexed":false,"mutability":"mutable","name":"max","nameLocation":"461:3:73","nodeType":"VariableDeclaration","scope":6564,"src":"454:10:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":6561,"name":"uint64","nodeType":"ElementaryTypeName","src":"454:6:73","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"441:24:73"},"src":"414:52:73"},{"errorSelector":"0871e13d","id":6574,"name":"ProvisionManagerInvalidValue","nameLocation":"492:28:73","nodeType":"ErrorDefinition","parameters":{"id":6573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6566,"mutability":"mutable","name":"message","nameLocation":"527:7:73","nodeType":"VariableDeclaration","scope":6574,"src":"521:13:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6565,"name":"bytes","nodeType":"ElementaryTypeName","src":"521:5:73","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6568,"mutability":"mutable","name":"value","nameLocation":"544:5:73","nodeType":"VariableDeclaration","scope":6574,"src":"536:13:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6567,"name":"uint256","nodeType":"ElementaryTypeName","src":"536:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6570,"mutability":"mutable","name":"min","nameLocation":"559:3:73","nodeType":"VariableDeclaration","scope":6574,"src":"551:11:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6569,"name":"uint256","nodeType":"ElementaryTypeName","src":"551:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6572,"mutability":"mutable","name":"max","nameLocation":"572:3:73","nodeType":"VariableDeclaration","scope":6574,"src":"564:11:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6571,"name":"uint256","nodeType":"ElementaryTypeName","src":"564:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"520:56:73"},"src":"486:91:73"},{"errorSelector":"ccccdafb","id":6580,"name":"ProvisionManagerInvalidRange","nameLocation":"588:28:73","nodeType":"ErrorDefinition","parameters":{"id":6579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6576,"mutability":"mutable","name":"min","nameLocation":"625:3:73","nodeType":"VariableDeclaration","scope":6580,"src":"617:11:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6575,"name":"uint256","nodeType":"ElementaryTypeName","src":"617:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6578,"mutability":"mutable","name":"max","nameLocation":"638:3:73","nodeType":"VariableDeclaration","scope":6580,"src":"630:11:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6577,"name":"uint256","nodeType":"ElementaryTypeName","src":"630:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"616:26:73"},"src":"582:61:73"},{"errorSelector":"cc5d3c8b","id":6586,"name":"ProvisionManagerNotAuthorized","nameLocation":"654:29:73","nodeType":"ErrorDefinition","parameters":{"id":6585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6582,"mutability":"mutable","name":"serviceProvider","nameLocation":"692:15:73","nodeType":"VariableDeclaration","scope":6586,"src":"684:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6581,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6584,"mutability":"mutable","name":"caller","nameLocation":"717:6:73","nodeType":"VariableDeclaration","scope":6586,"src":"709:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6583,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"683:41:73"},"src":"648:77:73"},{"errorSelector":"7b3c09bf","id":6590,"name":"ProvisionManagerProvisionNotFound","nameLocation":"736:33:73","nodeType":"ErrorDefinition","parameters":{"id":6589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6588,"mutability":"mutable","name":"serviceProvider","nameLocation":"778:15:73","nodeType":"VariableDeclaration","scope":6590,"src":"770:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6587,"name":"address","nodeType":"ElementaryTypeName","src":"770:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"769:25:73"},"src":"730:65:73"}],"scope":6592,"src":"206:591:73","usedErrors":[6574,6580,6586,6590],"usedEvents":[6548,6552,6558,6564]}],"src":"45:753:73"},"id":73},"contracts/toolshed/internal/IProvisionTracker.sol":{"ast":{"absolutePath":"contracts/toolshed/internal/IProvisionTracker.sol","exportedSymbols":{"IProvisionTracker":[6608]},"id":6609,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6593,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"77:24:74"},{"abstract":false,"baseContracts":[],"canonicalName":"IProvisionTracker","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6608,"linearizedBaseContracts":[6608],"name":"IProvisionTracker","nameLocation":"113:17:74","nodeType":"ContractDefinition","nodes":[{"errorSelector":"5f8ec709","id":6599,"name":"ProvisionTrackerInsufficientTokens","nameLocation":"157:34:74","nodeType":"ErrorDefinition","parameters":{"id":6598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6595,"mutability":"mutable","name":"tokensAvailable","nameLocation":"200:15:74","nodeType":"VariableDeclaration","scope":6599,"src":"192:23:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6594,"name":"uint256","nodeType":"ElementaryTypeName","src":"192:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6597,"mutability":"mutable","name":"tokensRequired","nameLocation":"225:14:74","nodeType":"VariableDeclaration","scope":6599,"src":"217:22:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6596,"name":"uint256","nodeType":"ElementaryTypeName","src":"217:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"191:49:74"},"src":"151:90:74"},{"documentation":{"id":6600,"nodeType":"StructuredDocumentation","src":"247:149:74","text":" @notice Gets the fees provision tracker\n @param indexer The address of the indexer\n @return The fees provision tracker"},"functionSelector":"cbe5f3f2","id":6607,"implemented":false,"kind":"function","modifiers":[],"name":"feesProvisionTracker","nameLocation":"410:20:74","nodeType":"FunctionDefinition","parameters":{"id":6603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6602,"mutability":"mutable","name":"indexer","nameLocation":"439:7:74","nodeType":"VariableDeclaration","scope":6607,"src":"431:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6601,"name":"address","nodeType":"ElementaryTypeName","src":"431:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"430:17:74"},"returnParameters":{"id":6606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6605,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6607,"src":"471:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6604,"name":"uint256","nodeType":"ElementaryTypeName","src":"471:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"470:9:74"},"scope":6608,"src":"401:79:74","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6609,"src":"103:379:74","usedErrors":[6599],"usedEvents":[]}],"src":"77:406:74"},"id":74}},"contracts":{"contracts/contracts/arbitrum/IArbToken.sol":{"IArbToken":{"abi":[{"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":[],"name":"l1Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"bridgeBurn(address,uint256)":"74f4f547","bridgeMint(address,uint256)":"8c2a993e","l1Address()":"c2eeeebd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":[],\"name\":\"l1Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"bridgeBurn(address,uint256)\":{\"params\":{\"account\":\"Account to burn tokens from\",\"amount\":\"Amount of tokens to burn\"}},\"bridgeMint(address,uint256)\":{\"params\":{\"account\":\"Account to mint tokens to\",\"amount\":\"Amount of tokens to mint\"}},\"l1Address()\":{\"returns\":{\"_0\":\"address of layer 1 token\"}}},\"title\":\"Arbitrum Token Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"bridgeBurn(address,uint256)\":{\"notice\":\"should decrease token supply by amount, and should (probably) only be callable by the L1 bridge.\"},\"bridgeMint(address,uint256)\":{\"notice\":\"should increase token supply by amount, and should (probably) only be callable by the L1 bridge.\"},\"l1Address()\":{\"notice\":\"Get the L1 token address\"}},\"notice\":\"Interface for tokens that can be minted and burned on Arbitrum L2\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/arbitrum/IArbToken.sol\":\"IArbToken\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/arbitrum/IArbToken.sol\":{\"keccak256\":\"0x46db1f7f9137550de8617c963a142323c74edf82b2a78b552193a40f2122bfc3\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b6bf64a6ca3845677ff28472642c3acfaca693503af2689e1afa0029d67dc213\",\"dweb:/ipfs/QmU7c9mNgLpTfhE3HJ2yx4FykZLNzPRs8Evz1tELPVi4uv\"]}},\"version\":1}"}},"contracts/contracts/arbitrum/IBridge.sol":{"IBridge":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"outbox","type":"address"},{"indexed":true,"internalType":"address","name":"destAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"BridgeCallTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"inbox","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"InboxToggle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"messageIndex","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"beforeInboxAcc","type":"bytes32"},{"indexed":false,"internalType":"address","name":"inbox","type":"address"},{"indexed":false,"internalType":"uint8","name":"kind","type":"uint8"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bytes32","name":"messageDataHash","type":"bytes32"}],"name":"MessageDelivered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"outbox","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"OutboxToggle","type":"event"},{"inputs":[],"name":"activeOutbox","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"inbox","type":"address"}],"name":"allowedInboxes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"outbox","type":"address"}],"name":"allowedOutboxes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"messageDataHash","type":"bytes32"}],"name":"deliverMessageToInbox","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeCall","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"inboxAccs","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messageCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"inbox","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setInbox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inbox","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setOutbox","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"activeOutbox()":"ab5d8943","allowedInboxes(address)":"c29372de","allowedOutboxes(address)":"413b35bd","deliverMessageToInbox(uint8,address,bytes32)":"02bbfad1","executeCall(address,uint256,bytes)":"9e5d4c49","inboxAccs(uint256)":"d9dd67ab","messageCount()":"3dbcc8d1","setInbox(address,bool)":"e45b7ce6","setOutbox(address,bool)":"cee3d728"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destAddr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"deliverMessageToInbox\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"inboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"events\":{\"BridgeCallTriggered(address,address,uint256,bytes)\":{\"params\":{\"amount\":\"ETH amount sent with the call\",\"data\":\"Calldata for the function call\",\"destAddr\":\"Destination address for the call\",\"outbox\":\"Address of the outbox\"}},\"InboxToggle(address,bool)\":{\"params\":{\"enabled\":\"Whether the inbox is enabled\",\"inbox\":\"Address of the inbox\"}},\"MessageDelivered(uint256,bytes32,address,uint8,address,bytes32)\":{\"params\":{\"beforeInboxAcc\":\"Inbox accumulator before this message\",\"inbox\":\"Address of the inbox\",\"kind\":\"Type of the message\",\"messageDataHash\":\"Hash of the message data\",\"messageIndex\":\"Index of the message\",\"sender\":\"Address that sent the message\"}},\"OutboxToggle(address,bool)\":{\"params\":{\"enabled\":\"Whether the outbox is enabled\",\"outbox\":\"Address of the outbox\"}}},\"kind\":\"dev\",\"methods\":{\"activeOutbox()\":{\"returns\":{\"_0\":\"The active outbox address\"}},\"allowedInboxes(address)\":{\"params\":{\"inbox\":\"Address to check\"},\"returns\":{\"_0\":\"True if the address is an allowed inbox, false otherwise\"}},\"allowedOutboxes(address)\":{\"params\":{\"outbox\":\"Address to check\"},\"returns\":{\"_0\":\"True if the address is an allowed outbox, false otherwise\"}},\"deliverMessageToInbox(uint8,address,bytes32)\":{\"params\":{\"kind\":\"Type of the message\",\"messageDataHash\":\"keccak256 hash of the message data\",\"sender\":\"Address that is sending the message\"},\"returns\":{\"_0\":\"The message index\"}},\"executeCall(address,uint256,bytes)\":{\"params\":{\"amount\":\"ETH value to send\",\"data\":\"Calldata for the function call\",\"destAddr\":\"Contract to call\"},\"returns\":{\"returnData\":\"Return data from the call\",\"success\":\"True if the call was successful, false otherwise\"}},\"inboxAccs(uint256)\":{\"params\":{\"index\":\"Index to query\"},\"returns\":{\"_0\":\"The inbox accumulator at the given index\"}},\"messageCount()\":{\"returns\":{\"_0\":\"Number of messages in the inbox\"}},\"setInbox(address,bool)\":{\"params\":{\"enabled\":\"Whether to enable the inbox\",\"inbox\":\"Address of the inbox\"}},\"setOutbox(address,bool)\":{\"params\":{\"enabled\":\"Whether to enable the outbox\",\"inbox\":\"Address of the outbox\"}}},\"title\":\"Bridge Interface\",\"version\":1},\"userdoc\":{\"events\":{\"BridgeCallTriggered(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a bridge call is triggered\"},\"InboxToggle(address,bool)\":{\"notice\":\"Emitted when an inbox is enabled or disabled\"},\"MessageDelivered(uint256,bytes32,address,uint8,address,bytes32)\":{\"notice\":\"Emitted when a message is delivered to the inbox\"},\"OutboxToggle(address,bool)\":{\"notice\":\"Emitted when an outbox is enabled or disabled\"}},\"kind\":\"user\",\"methods\":{\"activeOutbox()\":{\"notice\":\"Get the active outbox address\"},\"allowedInboxes(address)\":{\"notice\":\"Check if an address is an allowed inbox\"},\"allowedOutboxes(address)\":{\"notice\":\"Check if an address is an allowed outbox\"},\"deliverMessageToInbox(uint8,address,bytes32)\":{\"notice\":\"Deliver a message to the inbox\"},\"executeCall(address,uint256,bytes)\":{\"notice\":\"Execute a call from L2 to L1\"},\"inboxAccs(uint256)\":{\"notice\":\"Get the inbox accumulator at a specific index\"},\"messageCount()\":{\"notice\":\"Get the count of messages in the inbox\"},\"setInbox(address,bool)\":{\"notice\":\"Set the address of an inbox\"},\"setOutbox(address,bool)\":{\"notice\":\"Set the address of an outbox\"}},\"notice\":\"Interface for the Arbitrum Bridge contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/arbitrum/IBridge.sol\":\"IBridge\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/arbitrum/IBridge.sol\":{\"keccak256\":\"0x6415b397c81a4ef6e4a52164f7d1b8ae062ba06e1f333a8998f5b137a4feadd3\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e4e12c9bf0e7c5bd39fd1092a624d6e0a6a896a18a7e904b012f693caf902d35\",\"dweb:/ipfs/QmaayQdBF1AwV52VSbb9tyZN6cSzX1aX3VkmwMGwD8kRkD\"]}},\"version\":1}"}},"contracts/contracts/arbitrum/IInbox.sol":{"IInbox":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"messageNum","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"InboxMessageDelivered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"messageNum","type":"uint256"}],"name":"InboxMessageDeliveredFromOrigin","type":"event"},{"inputs":[],"name":"bridge","outputs":[{"internalType":"contract IBridge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"uint256","name":"arbTxCallValue","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"},{"internalType":"address","name":"submissionRefundAddress","type":"address"},{"internalType":"address","name":"valueRefundAddress","type":"address"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"createRetryableTicket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"name":"depositEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"pauseCreateRetryables","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"sendContractTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"sendL1FundedContractTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"sendL1FundedUnsignedTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"messageData","type":"bytes"}],"name":"sendL2Message","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"sendUnsignedTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startRewriteAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopRewriteAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseCreateRetryables","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"bridge()":"e78cea92","createRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,bytes)":"679b6ded","depositEth(uint256)":"0f4d14e9","pauseCreateRetryables()":"2b40609a","sendContractTransaction(uint256,uint256,address,uint256,bytes)":"8a631aa6","sendL1FundedContractTransaction(uint256,uint256,address,bytes)":"5e916758","sendL1FundedUnsignedTransaction(uint256,uint256,uint256,address,bytes)":"67ef3ab8","sendL2Message(bytes)":"b75436bb","sendUnsignedTransaction(uint256,uint256,uint256,address,uint256,bytes)":"5075788b","startRewriteAddress()":"7ae8d8b3","stopRewriteAddress()":"794cfd51","unpauseCreateRetryables()":"9fe12da5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contract IBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"arbTxCallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"submissionRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"valueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"name\":\"depositEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseCreateRetryables\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"destAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"destAddr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"destAddr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"destAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startRewriteAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopRewriteAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseCreateRetryables\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"events\":{\"InboxMessageDelivered(uint256,bytes)\":{\"params\":{\"data\":\"Message data\",\"messageNum\":\"Message number\"}},\"InboxMessageDeliveredFromOrigin(uint256)\":{\"params\":{\"messageNum\":\"Message number\"}}},\"kind\":\"dev\",\"methods\":{\"bridge()\":{\"returns\":{\"_0\":\"The bridge contract address\"}},\"createRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,bytes)\":{\"params\":{\"arbTxCallValue\":\"Call value for the L2 transaction\",\"data\":\"Transaction data\",\"destAddr\":\"Destination address on L2\",\"gasPriceBid\":\"Gas price bid for the L2 transaction\",\"maxGas\":\"Maximum gas for the L2 transaction\",\"maxSubmissionCost\":\"Maximum cost for submitting the ticket\",\"submissionRefundAddress\":\"Address to refund submission cost to\",\"valueRefundAddress\":\"Address to refund excess value to\"},\"returns\":{\"_0\":\"Message number returned by the inbox\"}},\"depositEth(uint256)\":{\"params\":{\"maxSubmissionCost\":\"Maximum cost for submitting the deposit\"},\"returns\":{\"_0\":\"Message number returned by the inbox\"}},\"sendContractTransaction(uint256,uint256,address,uint256,bytes)\":{\"params\":{\"amount\":\"Amount of ETH to send\",\"data\":\"Transaction data\",\"destAddr\":\"Destination address on L2\",\"gasPriceBid\":\"Gas price bid for the L2 transaction\",\"maxGas\":\"Maximum gas for the L2 transaction\"},\"returns\":{\"_0\":\"Message number returned by the inbox\"}},\"sendL1FundedContractTransaction(uint256,uint256,address,bytes)\":{\"params\":{\"data\":\"Transaction data\",\"destAddr\":\"Destination address on L2\",\"gasPriceBid\":\"Gas price bid for the L2 transaction\",\"maxGas\":\"Maximum gas for the L2 transaction\"},\"returns\":{\"_0\":\"Message number returned by the inbox\"}},\"sendL1FundedUnsignedTransaction(uint256,uint256,uint256,address,bytes)\":{\"params\":{\"data\":\"Transaction data\",\"destAddr\":\"Destination address on L2\",\"gasPriceBid\":\"Gas price bid for the L2 transaction\",\"maxGas\":\"Maximum gas for the L2 transaction\",\"nonce\":\"Nonce for the transaction\"},\"returns\":{\"_0\":\"Message number returned by the inbox\"}},\"sendL2Message(bytes)\":{\"params\":{\"messageData\":\"Encoded data to send in the message\"},\"returns\":{\"_0\":\"Message number returned by the inbox\"}},\"sendUnsignedTransaction(uint256,uint256,uint256,address,uint256,bytes)\":{\"params\":{\"amount\":\"Amount of ETH to send\",\"data\":\"Transaction data\",\"destAddr\":\"Destination address on L2\",\"gasPriceBid\":\"Gas price bid for the L2 transaction\",\"maxGas\":\"Maximum gas for the L2 transaction\",\"nonce\":\"Nonce for the transaction\"},\"returns\":{\"_0\":\"Message number returned by the inbox\"}}},\"title\":\"Inbox Interface\",\"version\":1},\"userdoc\":{\"events\":{\"InboxMessageDelivered(uint256,bytes)\":{\"notice\":\"Emitted when a message is delivered to the inbox\"},\"InboxMessageDeliveredFromOrigin(uint256)\":{\"notice\":\"Emitted when a message is delivered from origin\"}},\"kind\":\"user\",\"methods\":{\"bridge()\":{\"notice\":\"Get the bridge contract\"},\"createRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,bytes)\":{\"notice\":\"Create a retryable ticket for an L2 transaction\"},\"depositEth(uint256)\":{\"notice\":\"Deposit ETH to L2\"},\"pauseCreateRetryables()\":{\"notice\":\"Pause the creation of retryable tickets\"},\"sendContractTransaction(uint256,uint256,address,uint256,bytes)\":{\"notice\":\"Send a contract transaction to L2\"},\"sendL1FundedContractTransaction(uint256,uint256,address,bytes)\":{\"notice\":\"Send an L1-funded contract transaction to L2\"},\"sendL1FundedUnsignedTransaction(uint256,uint256,uint256,address,bytes)\":{\"notice\":\"Send an L1-funded unsigned transaction to L2\"},\"sendL2Message(bytes)\":{\"notice\":\"Send a message to L2\"},\"sendUnsignedTransaction(uint256,uint256,uint256,address,uint256,bytes)\":{\"notice\":\"Send an unsigned transaction to L2\"},\"startRewriteAddress()\":{\"notice\":\"Start rewriting addresses\"},\"stopRewriteAddress()\":{\"notice\":\"Stop rewriting addresses\"},\"unpauseCreateRetryables()\":{\"notice\":\"Unpause the creation of retryable tickets\"}},\"notice\":\"Interface for the Arbitrum Inbox contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/arbitrum/IInbox.sol\":\"IInbox\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/arbitrum/IBridge.sol\":{\"keccak256\":\"0x6415b397c81a4ef6e4a52164f7d1b8ae062ba06e1f333a8998f5b137a4feadd3\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e4e12c9bf0e7c5bd39fd1092a624d6e0a6a896a18a7e904b012f693caf902d35\",\"dweb:/ipfs/QmaayQdBF1AwV52VSbb9tyZN6cSzX1aX3VkmwMGwD8kRkD\"]},\"contracts/contracts/arbitrum/IInbox.sol\":{\"keccak256\":\"0xc217fcade8354b2de81693b50793d842b601f091d93e205ee0b7e503bfb2c50c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ab7f34cce02f23440f8f520ccb1269ee0e4fe06e9665e5d8d3e9e94c3e609664\",\"dweb:/ipfs/QmehLXkBgqWHo5wEGCgP7TKhwcBXL8hy8apJWst8xe57uX\"]},\"contracts/contracts/arbitrum/IMessageProvider.sol\":{\"keccak256\":\"0xf6300141c070694ab1a7595ae9b3fbe1bd0073f17d8a6ffb7f639b0084993239\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0dd253d90bfc87dcde98e40929b6964dd43206b755f1002eeff1948004f9e53c\",\"dweb:/ipfs/QmeP7ZtAZFaqAybH5AQAhPeWbBSBRAsbSBgdg4Zj7tb6Rh\"]}},\"version\":1}"}},"contracts/contracts/arbitrum/IMessageProvider.sol":{"IMessageProvider":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"messageNum","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"InboxMessageDelivered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"messageNum","type":"uint256"}],"name":"InboxMessageDeliveredFromOrigin","type":"event"}],"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\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"events\":{\"InboxMessageDelivered(uint256,bytes)\":{\"params\":{\"data\":\"Message data\",\"messageNum\":\"Message number\"}},\"InboxMessageDeliveredFromOrigin(uint256)\":{\"params\":{\"messageNum\":\"Message number\"}}},\"kind\":\"dev\",\"methods\":{},\"title\":\"Message Provider Interface\",\"version\":1},\"userdoc\":{\"events\":{\"InboxMessageDelivered(uint256,bytes)\":{\"notice\":\"Emitted when a message is delivered to the inbox\"},\"InboxMessageDeliveredFromOrigin(uint256)\":{\"notice\":\"Emitted when a message is delivered from origin\"}},\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface for Arbitrum message providers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/arbitrum/IMessageProvider.sol\":\"IMessageProvider\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/arbitrum/IMessageProvider.sol\":{\"keccak256\":\"0xf6300141c070694ab1a7595ae9b3fbe1bd0073f17d8a6ffb7f639b0084993239\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0dd253d90bfc87dcde98e40929b6964dd43206b755f1002eeff1948004f9e53c\",\"dweb:/ipfs/QmeP7ZtAZFaqAybH5AQAhPeWbBSBRAsbSBgdg4Zj7tb6Rh\"]}},\"version\":1}"}},"contracts/contracts/arbitrum/IOutbox.sol":{"IOutbox":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"destAddr","type":"address"},{"indexed":true,"internalType":"address","name":"l2Sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"outboxEntryIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transactionIndex","type":"uint256"}],"name":"OutBoxTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"batchNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outboxEntryIndex","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"outputRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"numInBatch","type":"uint256"}],"name":"OutboxEntryCreated","type":"event"},{"inputs":[],"name":"l2ToL1BatchNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1Block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1EthBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1OutputId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1Sender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1Timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batchNum","type":"uint256"}],"name":"outboxEntryExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"sendsData","type":"bytes"},{"internalType":"uint256[]","name":"sendLengths","type":"uint256[]"}],"name":"processOutgoingMessages","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"l2ToL1BatchNum()":"11985271","l2ToL1Block()":"46547790","l2ToL1EthBlock()":"8515bc6a","l2ToL1OutputId()":"72f2a8c7","l2ToL1Sender()":"80648b02","l2ToL1Timestamp()":"b0f30537","outboxEntryExists(uint256)":"f1fd3a39","processOutgoingMessages(bytes,uint256[])":"0c726847"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destAddr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"outboxEntryIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"outboxEntryIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numInBatch\",\"type\":\"uint256\"}],\"name\":\"OutboxEntryCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"l2ToL1BatchNum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchNum\",\"type\":\"uint256\"}],\"name\":\"outboxEntryExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sendsData\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"sendLengths\",\"type\":\"uint256[]\"}],\"name\":\"processOutgoingMessages\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"events\":{\"OutBoxTransactionExecuted(address,address,uint256,uint256)\":{\"params\":{\"destAddr\":\"Destination address\",\"l2Sender\":\"L2 sender address\",\"outboxEntryIndex\":\"Index of the outbox entry\",\"transactionIndex\":\"Index of the transaction\"}},\"OutboxEntryCreated(uint256,uint256,bytes32,uint256)\":{\"params\":{\"batchNum\":\"Batch number\",\"numInBatch\":\"Number of messages in the batch\",\"outboxEntryIndex\":\"Index of the outbox entry\",\"outputRoot\":\"Output root hash\"}}},\"kind\":\"dev\",\"methods\":{\"l2ToL1BatchNum()\":{\"returns\":{\"_0\":\"The batch number\"}},\"l2ToL1Block()\":{\"returns\":{\"_0\":\"The block number\"}},\"l2ToL1EthBlock()\":{\"returns\":{\"_0\":\"The Ethereum block number\"}},\"l2ToL1OutputId()\":{\"returns\":{\"_0\":\"The output ID\"}},\"l2ToL1Sender()\":{\"returns\":{\"_0\":\"The sender address\"}},\"l2ToL1Timestamp()\":{\"returns\":{\"_0\":\"The timestamp\"}},\"outboxEntryExists(uint256)\":{\"params\":{\"batchNum\":\"Batch number to check\"},\"returns\":{\"_0\":\"True if the entry exists\"}},\"processOutgoingMessages(bytes,uint256[])\":{\"params\":{\"sendLengths\":\"Array of message lengths\",\"sendsData\":\"Encoded message data\"}}},\"title\":\"Arbitrum Outbox Interface\",\"version\":1},\"userdoc\":{\"events\":{\"OutBoxTransactionExecuted(address,address,uint256,uint256)\":{\"notice\":\"Emitted when an outbox transaction is executed\"},\"OutboxEntryCreated(uint256,uint256,bytes32,uint256)\":{\"notice\":\"Emitted when an outbox entry is created\"}},\"kind\":\"user\",\"methods\":{\"l2ToL1BatchNum()\":{\"notice\":\"Get the L2 to L1 batch number\"},\"l2ToL1Block()\":{\"notice\":\"Get the L2 to L1 block number\"},\"l2ToL1EthBlock()\":{\"notice\":\"Get the L2 to L1 Ethereum block number\"},\"l2ToL1OutputId()\":{\"notice\":\"Get the L2 to L1 output ID\"},\"l2ToL1Sender()\":{\"notice\":\"Get the L2 to L1 sender address\"},\"l2ToL1Timestamp()\":{\"notice\":\"Get the L2 to L1 timestamp\"},\"outboxEntryExists(uint256)\":{\"notice\":\"Check if an outbox entry exists\"},\"processOutgoingMessages(bytes,uint256[])\":{\"notice\":\"Process outgoing messages\"}},\"notice\":\"Interface for the Arbitrum outbox contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/arbitrum/IOutbox.sol\":\"IOutbox\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/arbitrum/IOutbox.sol\":{\"keccak256\":\"0x1afd6fbd57aa8322c9da3f1e73947ca7dd5f82e2e57ad3ed8b65fa267a21d995\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d812c7e27b59303ea8afeba9f0c9f9f714a1a2247a5cfcba6384310036bcf83a\",\"dweb:/ipfs/QmNrVsqijrjkQeHuUbgyqxciszEhqo41e7g1j1VxMBTTJ3\"]}},\"version\":1}"}},"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":"amount","type":"uint256"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","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\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"outboundTransfer\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"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\"}},\"finalizeInboundTransfer(address,address,address,uint256,bytes)\":{\"params\":{\"amount\":\"Amount of tokens being transferred\",\"data\":\"Additional data for the transfer\",\"from\":\"Sender address on the source chain\",\"to\":\"Recipient address on the destination chain\",\"token\":\"Address of the token being transferred\"}},\"outboundTransfer(address,address,uint256,uint256,uint256,bytes)\":{\"params\":{\"amount\":\"Amount of tokens to transfer\",\"data\":\"Additional data for the transfer\",\"gasPriceBid\":\"Gas price bid for the transaction\",\"maxGas\":\"Maximum gas for the transaction\",\"to\":\"Recipient address on the destination chain\",\"token\":\"Address of the token being transferred\"},\"returns\":{\"_0\":\"Transaction data\"}}},\"title\":\"Token Gateway Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"calculateL2TokenAddress(address)\":{\"notice\":\"Calculate the address used when bridging an ERC20 token\"},\"finalizeInboundTransfer(address,address,address,uint256,bytes)\":{\"notice\":\"Finalize an inbound token transfer\"},\"outboundTransfer(address,address,uint256,uint256,uint256,bytes)\":{\"notice\":\"Transfer tokens from L1 to L2 or L2 to L1\"}},\"notice\":\"Interface for token gateways that handle cross-chain token transfers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/arbitrum/ITokenGateway.sol\":\"ITokenGateway\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x6ce96e8afc64503305d68976323e1f03f5061a60f1a4224fcb7e559c0aab6cf5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ece42c9283a6380edd1f36d702d0e65cf9b8d460b4ca3ae865d1e416922dbe88\",\"dweb:/ipfs/QmZEuJ5LzAZbgRtNqEvjfzdcXpUvqVe2DEHbtGKR35tUJz\"]}},\"version\":1}"}},"contracts/contracts/base/IMulticall.sol":{"IMulticall":{"abi":[{"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\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"multicall(bytes[])\":{\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}}},\"title\":\"Multicall interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"}},\"notice\":\"Enables calling multiple methods in a single call to the contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/base/IMulticall.sol\":\"IMulticall\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/base/IMulticall.sol\":{\"keccak256\":\"0x229a773eba322776fd11fa9ef4d256f5405d4243a7eee9c776e9cc3943d5712a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c55cfe4a3ada03e97f5bf18d42e0a35504386617b2e7481b8c54c241aae9a5e9\",\"dweb:/ipfs/QmehvFTHm6BNPQZt5KMVttifEwfLZ3snWDdCx4PFEoAVoP\"]}},\"version\":1}"}},"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\":{\"author\":\"Edge & Node\",\"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.\"}},\"notice\":\"Interface for the Curation contract (and L2Curation too)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/curation/ICuration.sol\":\"ICuration\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0xe558980540bf81b04ffd780ca1f03d0fbd7217b1eab4d5c3d4c0bae2f9fcc1dd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://67390fd1633e569da7a7cbcd4f518dab06184a28f11db72484520ed40878f98c\",\"dweb:/ipfs/QmNSmNVUT9b4YyU2oa1ecWBMFz7yo4ADdUt27ZaBHZVMEz\"]}},\"version\":1}"}},"contracts/contracts/discovery/IGNS.sol":{"IGNS":{"abi":[{"inputs":[],"name":"approveAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"nSignal","type":"uint256"},{"internalType":"uint256","name":"tokensOutMin","type":"uint256"}],"name":"burnSignal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"deprecateSubgraph","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"address","name":"curator","type":"address"}],"name":"getCuratorSignal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"getLegacySubgraphKey","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"seqID","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"isLegacySubgraph","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"isPublished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"tokensIn","type":"uint256"},{"internalType":"uint256","name":"nSignalOutMin","type":"uint256"}],"name":"mintSignal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"nSignalIn","type":"uint256"}],"name":"nSignalToTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"nSignalIn","type":"uint256"}],"name":"nSignalToVSignal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"bytes32","name":"versionMetadata","type":"bytes32"},{"internalType":"bytes32","name":"subgraphMetadata","type":"bytes32"}],"name":"publishNewSubgraph","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"bytes32","name":"versionMetadata","type":"bytes32"}],"name":"publishNewVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"graphAccount","type":"address"},{"internalType":"uint8","name":"nameSystem","type":"uint8"},{"internalType":"bytes32","name":"nameIdentifier","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setDefaultName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"ownerTaxPercentage","type":"uint32"}],"name":"setOwnerTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"subgraphSignal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"subgraphTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"tokensIn","type":"uint256"}],"name":"tokensToNSignal","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferSignal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"bytes32","name":"subgraphMetadata","type":"bytes32"}],"name":"updateSubgraphMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"vSignalIn","type":"uint256"}],"name":"vSignalToNSignal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"approveAll()":"380d0c08","burnSignal(uint256,uint256,uint256)":"7bd1b0bf","deprecateSubgraph(uint256)":"56ee0a85","getCuratorSignal(uint256,address)":"186722fa","getLegacySubgraphKey(uint256)":"14a76fdb","isLegacySubgraph(uint256)":"d797f4bb","isPublished(uint256)":"7b156fb5","mintSignal(uint256,uint256,uint256)":"d8825386","nSignalToTokens(uint256,uint256)":"b43f6a02","nSignalToVSignal(uint256,uint256)":"d495f9a7","ownerOf(uint256)":"6352211e","publishNewSubgraph(bytes32,bytes32,bytes32)":"7ba95862","publishNewVersion(uint256,bytes32,bytes32)":"e1329732","setDefaultName(address,uint8,bytes32,string)":"cc2d23c7","setOwnerTaxPercentage(uint32)":"b78edf70","subgraphSignal(uint256)":"be8f4920","subgraphTokens(uint256)":"4dbecf2f","tokensToNSignal(uint256,uint256)":"53f615c9","transferSignal(uint256,address,uint256)":"63bd3abe","updateSubgraphMetadata(uint256,bytes32)":"d916f277","vSignalToNSignal(uint256,uint256)":"a49a15f1","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"approveAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nSignal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensOutMin\",\"type\":\"uint256\"}],\"name\":\"burnSignal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"deprecateSubgraph\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"curator\",\"type\":\"address\"}],\"name\":\"getCuratorSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"getLegacySubgraphKey\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"seqID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"isLegacySubgraph\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"isPublished\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nSignalOutMin\",\"type\":\"uint256\"}],\"name\":\"mintSignal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nSignalIn\",\"type\":\"uint256\"}],\"name\":\"nSignalToTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nSignalIn\",\"type\":\"uint256\"}],\"name\":\"nSignalToVSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"versionMetadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphMetadata\",\"type\":\"bytes32\"}],\"name\":\"publishNewSubgraph\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"versionMetadata\",\"type\":\"bytes32\"}],\"name\":\"publishNewVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"graphAccount\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"nameSystem\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"nameIdentifier\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setDefaultName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"ownerTaxPercentage\",\"type\":\"uint32\"}],\"name\":\"setOwnerTaxPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"subgraphSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"subgraphTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensIn\",\"type\":\"uint256\"}],\"name\":\"tokensToNSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferSignal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphMetadata\",\"type\":\"bytes32\"}],\"name\":\"updateSubgraphMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vSignalIn\",\"type\":\"uint256\"}],\"name\":\"vSignalToNSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"burnSignal(uint256,uint256,uint256)\":{\"params\":{\"nSignal\":\"The amount of nSignal the nameCurator wants to burn\",\"subgraphID\":\"Subgraph ID\",\"tokensOutMin\":\"Expected minimum amount of tokens to receive\"}},\"deprecateSubgraph(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"}},\"getCuratorSignal(uint256,address)\":{\"params\":{\"curator\":\"Curator address\",\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Amount of subgraph signal owned by a curator\"}},\"getLegacySubgraphKey(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"account\":\"Account that created the subgraph (or 0 if it's not a legacy subgraph)\",\"seqID\":\"Sequence number for the subgraph\"}},\"isLegacySubgraph(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Return true if subgraph is a legacy subgraph\"}},\"isPublished(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Return true if subgraph is currently published\"}},\"mintSignal(uint256,uint256,uint256)\":{\"params\":{\"nSignalOutMin\":\"Expected minimum amount of name signal to receive\",\"subgraphID\":\"Subgraph ID\",\"tokensIn\":\"The amount of tokens the nameCurator wants to deposit\"}},\"nSignalToTokens(uint256,uint256)\":{\"params\":{\"nSignalIn\":\"Subgraph signal being exchanged for tokens\",\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Amount of tokens returned for an amount of subgraph signal\",\"_1\":\"Amount of version signal returned\"}},\"nSignalToVSignal(uint256,uint256)\":{\"params\":{\"nSignalIn\":\"Subgraph signal being exchanged for subgraph deployment signal\",\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Amount of subgraph deployment signal that can be returned\"}},\"ownerOf(uint256)\":{\"params\":{\"tokenID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Owner address\"}},\"publishNewSubgraph(bytes32,bytes32,bytes32)\":{\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment for the subgraph\",\"subgraphMetadata\":\"IPFS hash for the subgraph metadata\",\"versionMetadata\":\"IPFS hash for the subgraph version metadata\"}},\"publishNewVersion(uint256,bytes32,bytes32)\":{\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment ID of the new version\",\"subgraphID\":\"Subgraph ID\",\"versionMetadata\":\"IPFS hash for the subgraph version metadata\"}},\"setDefaultName(address,uint8,bytes32,string)\":{\"params\":{\"graphAccount\":\"Account that is setting its name\",\"name\":\"The name being set as default\",\"nameIdentifier\":\"The unique identifier that is used to identify the name in the system\",\"nameSystem\":\"Name system account already has ownership of a name in\"}},\"setOwnerTaxPercentage(uint32)\":{\"params\":{\"ownerTaxPercentage\":\"Owner tax percentage\"}},\"subgraphSignal(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Total signal on the subgraph\"}},\"subgraphTokens(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Total tokens on the subgraph\"}},\"tokensToNSignal(uint256,uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\",\"tokensIn\":\"Tokens being exchanged for subgraph signal\"},\"returns\":{\"_0\":\"Amount of subgraph signal that can be bought\",\"_1\":\"Amount of version signal that can be bought\",\"_2\":\"Amount of curation tax\"}},\"transferSignal(uint256,address,uint256)\":{\"params\":{\"amount\":\"The amount of nSignal to transfer\",\"recipient\":\"Address to send the signal to\",\"subgraphID\":\"Subgraph ID\"}},\"updateSubgraphMetadata(uint256,bytes32)\":{\"params\":{\"subgraphID\":\"Subgraph ID\",\"subgraphMetadata\":\"IPFS hash for the subgraph metadata\"}},\"vSignalToNSignal(uint256,uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\",\"vSignalIn\":\"Amount of subgraph deployment signal to exchange for subgraph signal\"},\"returns\":{\"_0\":\"Amount of subgraph signal that can be bought\"}},\"withdraw(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"}}},\"title\":\"Interface for GNS\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveAll()\":{\"notice\":\"Approve curation contract to pull funds.\"},\"burnSignal(uint256,uint256,uint256)\":{\"notice\":\"Burn signal for a subgraph and return the GRT.\"},\"deprecateSubgraph(uint256)\":{\"notice\":\"Deprecate a subgraph. The bonding curve is destroyed, the vSignal is burned, and the GNS contract holds the GRT from burning the vSignal, which all curators can withdraw manually. Can only be done by the subgraph owner.\"},\"getCuratorSignal(uint256,address)\":{\"notice\":\"Get the amount of subgraph signal a curator has.\"},\"getLegacySubgraphKey(uint256)\":{\"notice\":\"Returns account and sequence ID for a legacy subgraph (created before subgraph NFTs).\"},\"isLegacySubgraph(uint256)\":{\"notice\":\"Return whether a subgraph is a legacy subgraph (created before subgraph NFTs).\"},\"isPublished(uint256)\":{\"notice\":\"Return whether a subgraph is published.\"},\"mintSignal(uint256,uint256,uint256)\":{\"notice\":\"Deposit GRT into a subgraph and mint signal.\"},\"nSignalToTokens(uint256,uint256)\":{\"notice\":\"Calculate tokens returned for an amount of subgraph signal.\"},\"nSignalToVSignal(uint256,uint256)\":{\"notice\":\"Calculate subgraph deployment signal to be returned for an amount of subgraph signal.\"},\"ownerOf(uint256)\":{\"notice\":\"Return the owner of a subgraph.\"},\"publishNewSubgraph(bytes32,bytes32,bytes32)\":{\"notice\":\"Publish a new subgraph.\"},\"publishNewVersion(uint256,bytes32,bytes32)\":{\"notice\":\"Publish a new version of an existing subgraph.\"},\"setDefaultName(address,uint8,bytes32,string)\":{\"notice\":\"Allows a graph account to set a default name\"},\"setOwnerTaxPercentage(uint32)\":{\"notice\":\"Set the owner fee percentage. This is used to prevent a subgraph owner to drain all the name curators tokens while upgrading or deprecating and is configurable in parts per million.\"},\"subgraphSignal(uint256)\":{\"notice\":\"Return the total signal on the subgraph.\"},\"subgraphTokens(uint256)\":{\"notice\":\"Return the total tokens on the subgraph at current value.\"},\"tokensToNSignal(uint256,uint256)\":{\"notice\":\"Calculate subgraph signal to be returned for an amount of tokens.\"},\"transferSignal(uint256,address,uint256)\":{\"notice\":\"Move subgraph signal from sender to `recipient`\"},\"updateSubgraphMetadata(uint256,bytes32)\":{\"notice\":\"Allows a subgraph owner to update the metadata of a subgraph they have published\"},\"vSignalToNSignal(uint256,uint256)\":{\"notice\":\"Calculate subgraph signal to be returned for an amount of subgraph deployment signal.\"},\"withdraw(uint256)\":{\"notice\":\"Withdraw tokens from a deprecated subgraph. When the subgraph is deprecated, any curator can call this function and withdraw the GRT they are entitled for its original deposit\"}},\"notice\":\"Interface for the Graph Name System (GNS) contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/discovery/IGNS.sol\":\"IGNS\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/discovery/IGNS.sol\":{\"keccak256\":\"0x0472e68aa20aa0d4eb6b3264bb8cc781ff00b5a8abd66532d4482b6dc754ba07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3f8d4fbef50c936591abbd75af563381b9c6b34b4d0b50b83b445b964affddb9\",\"dweb:/ipfs/QmYRnLX3pBQCwQ8LwowZybvV6tAwaiNJbkp991RRAKXBTJ\"]}},\"version\":1}"}},"contracts/contracts/discovery/IServiceRegistry.sol":{"IServiceRegistry":{"abi":[{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"isRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"url","type":"string"},{"internalType":"string","name":"geohash","type":"string"}],"name":"register","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"string","name":"url","type":"string"},{"internalType":"string","name":"geohash","type":"string"}],"name":"registerFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unregister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"unregisterFor","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"isRegistered(address)":"c3c5a547","register(string,string)":"3ffbd47f","registerFor(address,string,string)":"cc02d54e","unregister()":"e79a198f","unregisterFor(address)":"4d2e54a8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"geohash\",\"type\":\"string\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"geohash\",\"type\":\"string\"}],\"name\":\"registerFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unregister\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"unregisterFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"isRegistered(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"True if the indexer service is registered\"}},\"register(string,string)\":{\"params\":{\"geohash\":\"Geohash of the indexer service location\",\"url\":\"URL of the indexer service\"}},\"registerFor(address,string,string)\":{\"params\":{\"geohash\":\"Geohash of the indexer service location\",\"indexer\":\"Address of the indexer\",\"url\":\"URL of the indexer service\"}},\"unregisterFor(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"}}},\"title\":\"Service Registry Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isRegistered(address)\":{\"notice\":\"Return the registration status of an indexer service\"},\"register(string,string)\":{\"notice\":\"Register an indexer service\"},\"registerFor(address,string,string)\":{\"notice\":\"Register an indexer service\"},\"unregister()\":{\"notice\":\"Unregister an indexer service\"},\"unregisterFor(address)\":{\"notice\":\"Unregister an indexer service\"}},\"notice\":\"Interface for the Service Registry contract that manages indexer service information\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/discovery/IServiceRegistry.sol\":\"IServiceRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/discovery/IServiceRegistry.sol\":{\"keccak256\":\"0x54adff0a57ef9c2185bf5a0c59318b9f6f06a5c59734ab22d337d87d460e1bb3\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ab6cc88217d13b8f1110160fb23a24d2bc651aaffedc42c516128b70ec101fda\",\"dweb:/ipfs/QmZTCknP8nSw4vpuDeV8bCXhQERzhqJ5VvVNacdgGc3QJx\"]}},\"version\":1}"}},"contracts/contracts/discovery/ISubgraphNFTDescriptor.sol":{"ISubgraphNFTDescriptor":{"abi":[{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"bytes32","name":"subgraphMetadata","type":"bytes32"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"tokenURI(address,uint256,string,bytes32)":"bacc1fc5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphMetadata\",\"type\":\"bytes32\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"tokenURI(address,uint256,string,bytes32)\":{\"details\":\"Note this URI may be data: URI with the JSON contents directly inlined\",\"params\":{\"baseURI\":\"The base URI that could be prefixed to the final URI\",\"minter\":\"Address of the allowed minter\",\"subgraphMetadata\":\"Subgraph metadata set for the subgraph\",\"tokenId\":\"The ID of the subgraph NFT for which to produce a description, which may not be valid\"},\"returns\":{\"_0\":\"The URI of the ERC721-compliant metadata\"}}},\"title\":\"Describes subgraph NFT tokens via URI\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"tokenURI(address,uint256,string,bytes32)\":{\"notice\":\"Produces the URI describing a particular token ID for a Subgraph\"}},\"notice\":\"Interface for describing subgraph NFT tokens via URI\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/discovery/ISubgraphNFTDescriptor.sol\":\"ISubgraphNFTDescriptor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/discovery/ISubgraphNFTDescriptor.sol\":{\"keccak256\":\"0xd5487b651718582e9c03bdeea794ee3f285cf01bb31a84e0acef4904079a0202\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://27155dcacd8625714d31df2f1e9914eb6923ab723bcc4942edc0e6f57a29c49b\",\"dweb:/ipfs/QmbBC63zhD5wwDaebFcuShyXYwGkzQycu6gmUcjiTD9BjW\"]}},\"version\":1}"}},"contracts/contracts/discovery/erc1056/IEthereumDIDRegistry.sol":{"IEthereumDIDRegistry":{"abi":[{"inputs":[{"internalType":"address","name":"identity","type":"address"}],"name":"identityOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"identity","type":"address"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"bytes","name":"value","type":"bytes"},{"internalType":"uint256","name":"validity","type":"uint256"}],"name":"setAttribute","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"identityOwner(address)":"8733d4e8","setAttribute(address,bytes32,bytes,uint256)":"7ad4b0a4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"identity\",\"type\":\"address\"}],\"name\":\"identityOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"identity\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"validity\",\"type\":\"uint256\"}],\"name\":\"setAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"identityOwner(address)\":{\"params\":{\"identity\":\"The identity address\"},\"returns\":{\"_0\":\"The address of the identity owner\"}},\"setAttribute(address,bytes32,bytes,uint256)\":{\"params\":{\"identity\":\"The identity address\",\"name\":\"The attribute name\",\"validity\":\"The validity period in seconds\",\"value\":\"The attribute value\"}}},\"title\":\"Ethereum DID Registry Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"identityOwner(address)\":{\"notice\":\"Get the owner of an identity\"},\"setAttribute(address,bytes32,bytes,uint256)\":{\"notice\":\"Set an attribute for an identity\"}},\"notice\":\"Interface for the Ethereum DID Registry contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/discovery/erc1056/IEthereumDIDRegistry.sol\":\"IEthereumDIDRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/discovery/erc1056/IEthereumDIDRegistry.sol\":{\"keccak256\":\"0x07dbb1f1167395f33a1735d0e33418e544b7c72ead8b08822f8aefad8047ea0a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://32f044aa8dd88ed7d6cc4fdcdfe95b916dd1044c5539f47b51d69c75f9cc0376\",\"dweb:/ipfs/QmavK7koHLQYTvGMkt1AHjCRnJ2LFGaS8dYghcbici9ikr\"]}},\"version\":1}"}},"contracts/contracts/disputes/IDisputeManager.sol":{"IDisputeManager":{"abi":[{"inputs":[{"internalType":"bytes32","name":"disputeID","type":"bytes32"}],"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 IDisputeManager.Attestation","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 IDisputeManager.Attestation","name":"attestation2","type":"tuple"}],"name":"areConflictingAttestations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"allocationID","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"}],"name":"createIndexingDispute","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"attestationData","type":"bytes"},{"internalType":"uint256","name":"deposit","type":"uint256"}],"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 IDisputeManager.Receipt","name":"receipt","type":"tuple"}],"name":"encodeHashReceipt","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 IDisputeManager.Attestation","name":"attestation","type":"tuple"}],"name":"getAttestationIndexer","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint32","name":"percentage","type":"uint32"}],"name":"setFishermanRewardPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minimumDeposit","type":"uint256"}],"name":"setMinimumDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"qryPercentage","type":"uint32"},{"internalType":"uint32","name":"idxPercentage","type":"uint32"}],"name":"setSlashingPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptDispute(bytes32)":"11b42611","areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))":"d36fc9d4","createIndexingDispute(address,uint256)":"c8792217","createQueryDispute(bytes,uint256)":"131610b1","createQueryDisputeConflict(bytes,bytes)":"c894222e","drawDispute(bytes32)":"9334ea52","encodeHashReceipt((bytes32,bytes32,bytes32))":"460967df","getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))":"c9747f51","isDisputeCreated(bytes32)":"be41f384","rejectDispute(bytes32)":"36167e03","setArbitrator(address)":"b0eefabe","setFishermanRewardPercentage(uint32)":"991a8355","setMinimumDeposit(uint256)":"e78ec42e","setSlashingPercentage(uint32,uint32)":"8bbb33b4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeID\",\"type\":\"bytes32\"}],\"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 IDisputeManager.Attestation\",\"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 IDisputeManager.Attestation\",\"name\":\"attestation2\",\"type\":\"tuple\"}],\"name\":\"areConflictingAttestations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"}],\"name\":\"createIndexingDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"attestationData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"}],\"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 IDisputeManager.Receipt\",\"name\":\"receipt\",\"type\":\"tuple\"}],\"name\":\"encodeHashReceipt\",\"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 IDisputeManager.Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"getAttestationIndexer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setFishermanRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumDeposit\",\"type\":\"uint256\"}],\"name\":\"setMinimumDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"qryPercentage\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"idxPercentage\",\"type\":\"uint32\"}],\"name\":\"setSlashingPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"acceptDispute(bytes32)\":{\"params\":{\"disputeID\":\"ID of the dispute to accept\"}},\"areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"params\":{\"attestation1\":\"First attestation\",\"attestation2\":\"Second attestation\"},\"returns\":{\"_0\":\"True if attestations are conflicting\"}},\"createIndexingDispute(address,uint256)\":{\"params\":{\"allocationID\":\"Allocation ID being disputed\",\"deposit\":\"Deposit amount for the dispute\"},\"returns\":{\"_0\":\"The dispute ID\"}},\"createQueryDispute(bytes,uint256)\":{\"params\":{\"attestationData\":\"Attestation bytes submitted by the fisherman\",\"deposit\":\"Amount of tokens staked as deposit\"},\"returns\":{\"_0\":\"The dispute ID\"}},\"createQueryDisputeConflict(bytes,bytes)\":{\"params\":{\"attestationData1\":\"First attestation data submitted\",\"attestationData2\":\"Second attestation data submitted\"},\"returns\":{\"_0\":\"First dispute ID\",\"_1\":\"Second dispute ID\"}},\"drawDispute(bytes32)\":{\"params\":{\"disputeID\":\"ID of the dispute to draw\"}},\"encodeHashReceipt((bytes32,bytes32,bytes32))\":{\"params\":{\"receipt\":\"The receipt to encode\"},\"returns\":{\"_0\":\"The encoded hash\"}},\"getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"params\":{\"attestation\":\"The attestation to extract indexer from\"},\"returns\":{\"_0\":\"The indexer address\"}},\"isDisputeCreated(bytes32)\":{\"params\":{\"disputeID\":\"Dispute identifier\"},\"returns\":{\"_0\":\"True if the dispute exists\"}},\"rejectDispute(bytes32)\":{\"params\":{\"disputeID\":\"ID of the dispute to reject\"}},\"setArbitrator(address)\":{\"details\":\"Set the arbitrator address.\",\"params\":{\"arbitrator\":\"The address of the arbitration contract or party\"}},\"setFishermanRewardPercentage(uint32)\":{\"details\":\"Set the percent reward that the fisherman gets when slashing occurs.\",\"params\":{\"percentage\":\"Reward as a percentage of indexer stake\"}},\"setMinimumDeposit(uint256)\":{\"details\":\"Set the minimum deposit required to create a dispute.\",\"params\":{\"minimumDeposit\":\"The minimum deposit in Graph Tokens\"}},\"setSlashingPercentage(uint32,uint32)\":{\"params\":{\"idxPercentage\":\"Percentage slashing for indexing disputes\",\"qryPercentage\":\"Percentage slashing for query disputes\"}}},\"title\":\"Dispute Manager Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptDispute(bytes32)\":{\"notice\":\"Accept a dispute (arbitrator only)\"},\"areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"notice\":\"Check if two attestations are conflicting\"},\"createIndexingDispute(address,uint256)\":{\"notice\":\"Create an indexing dispute\"},\"createQueryDispute(bytes,uint256)\":{\"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.\"},\"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 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.\"},\"drawDispute(bytes32)\":{\"notice\":\"Draw a dispute (arbitrator only)\"},\"encodeHashReceipt((bytes32,bytes32,bytes32))\":{\"notice\":\"Encode a receipt into a hash for EIP-712 signature verification\"},\"getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"notice\":\"Get the indexer address from an attestation\"},\"isDisputeCreated(bytes32)\":{\"notice\":\"Check if a dispute has been created\"},\"rejectDispute(bytes32)\":{\"notice\":\"Reject a dispute (arbitrator only)\"},\"setArbitrator(address)\":{\"notice\":\"Update the arbitrator to `arbitrator`\"},\"setFishermanRewardPercentage(uint32)\":{\"notice\":\"Update the reward percentage to `percentage`\"},\"setMinimumDeposit(uint256)\":{\"notice\":\"Update the minimum deposit to `minimumDeposit` Graph Tokens\"},\"setSlashingPercentage(uint32,uint32)\":{\"notice\":\"Set the percentage used for slashing indexers.\"}},\"notice\":\"Interface for the Dispute Manager contract that handles indexing and query disputes\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/disputes/IDisputeManager.sol\":\"IDisputeManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/disputes/IDisputeManager.sol\":{\"keccak256\":\"0x2f9e5ff55c92b97b7c69f86ba3be1a22fd0ba824e47b22bc0d69c6d16b62d2f1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3b01284d3c8eecc4d9d9144dc461ed11c1e1f3875e74fa475f8a7e2546c4ad7d\",\"dweb:/ipfs/Qmbsxc5shVr1XjhsXBjXraXZBqopzaZ8PX4L5puXqZ2XP8\"]}},\"version\":1}"}},"contracts/contracts/epochs/IEpochManager.sol":{"IEpochManager":{"abi":[{"inputs":[{"internalType":"uint256","name":"blockNumber","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\":\"blockNumber\",\"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\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"blockHash(uint256)\":{\"params\":{\"blockNumber\":\"Block number to get hash for\"},\"returns\":{\"_0\":\"Block hash\"}},\"blockNum()\":{\"returns\":{\"_0\":\"Current block number\"}},\"currentEpoch()\":{\"returns\":{\"_0\":\"Current epoch number\"}},\"currentEpochBlock()\":{\"returns\":{\"_0\":\"Block number of current epoch start\"}},\"currentEpochBlockSinceStart()\":{\"returns\":{\"_0\":\"Number of blocks since current epoch start\"}},\"epochsSince(uint256)\":{\"params\":{\"epoch\":\"Epoch to calculate from\"},\"returns\":{\"_0\":\"Number of epochs since the given epoch\"}},\"epochsSinceUpdate()\":{\"returns\":{\"_0\":\"Number of epochs since last update\"}},\"isCurrentEpochRun()\":{\"returns\":{\"_0\":\"True if current epoch has been run, false otherwise\"}},\"runEpoch()\":{\"details\":\"Run a new epoch, should be called once at the start of any epoch.\"},\"setEpochLength(uint256)\":{\"params\":{\"epochLength\":\"Epoch length in blocks\"}}},\"title\":\"Epoch Manager Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"blockHash(uint256)\":{\"notice\":\"Get the hash of a specific block\"},\"blockNum()\":{\"notice\":\"Get the current block number\"},\"currentEpoch()\":{\"notice\":\"Get the current epoch number\"},\"currentEpochBlock()\":{\"notice\":\"Get the block number when the current epoch started\"},\"currentEpochBlockSinceStart()\":{\"notice\":\"Get the number of blocks since the current epoch started\"},\"epochsSince(uint256)\":{\"notice\":\"Get the number of epochs since a given epoch\"},\"epochsSinceUpdate()\":{\"notice\":\"Get the number of epochs since the last epoch length update\"},\"isCurrentEpochRun()\":{\"notice\":\"Check if the current epoch has been run\"},\"runEpoch()\":{\"notice\":\"Perform state changes for the current epoch\"},\"setEpochLength(uint256)\":{\"notice\":\"Set epoch length to `epochLength` blocks\"}},\"notice\":\"Interface for the Epoch Manager contract that handles protocol epochs\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/epochs/IEpochManager.sol\":\"IEpochManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x5bb333cb1f88982a5a4d3197639d8f3b08cff627405ae87a273d06d20e86f1cf\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f9d9a04ec87d7f3acf00fd343970a4f61d51689450a56a1b19b69a67f7ccb818\",\"dweb:/ipfs/QmUvqyVcF51hvaipgNLsNeBYcwr4Upm8aWM6CM6D96QFfA\"]}},\"version\":1}"}},"contracts/contracts/gateway/ICallhookReceiver.sol":{"ICallhookReceiver":{"abi":[{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"onTokenTransfer(address,uint256,bytes)":"a4c0ed36"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"onTokenTransfer(address,uint256,bytes)\":{\"params\":{\"amount\":\"Amount of tokens that were transferred\",\"data\":\"ABI-encoded callhook data\",\"from\":\"Token sender in L1\"}}},\"title\":\"Callhook Receiver Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onTokenTransfer(address,uint256,bytes)\":{\"notice\":\"Receive tokens with a callhook from the bridge\"}},\"notice\":\"Interface for contracts that can receive tokens with callhook from the bridge\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/gateway/ICallhookReceiver.sol\":\"ICallhookReceiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/gateway/ICallhookReceiver.sol\":{\"keccak256\":\"0x28a1eb7c540b648665b036dfb17d4b19264a23e2e34b6d3888763a826e19fcfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://96de7cf683662f68d2e5105a8f322c06c2a71e6fe5d7d5e47b41fb98be55aef7\",\"dweb:/ipfs/QmPkaFVtohPWBMgwNcQriQgPGWNxQY774HjY73zDDKeKMM\"]}},\"version\":1}"}},"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":"partialPause","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":"pause","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\":\"partialPause\",\"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\":\"pause\",\"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\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"getContractProxy(bytes32)\":{\"params\":{\"id\":\"Contract id\"},\"returns\":{\"_0\":\"Address of the proxy contract for the provided id\"}},\"getGovernor()\":{\"returns\":{\"_0\":\"The governor address\"}},\"partialPaused()\":{\"returns\":{\"_0\":\"True if the protocol is partially paused\"}},\"paused()\":{\"returns\":{\"_0\":\"True if the protocol is paused\"}},\"setContractProxy(bytes32,address)\":{\"params\":{\"contractAddress\":\"Contract address\",\"id\":\"Contract id (keccak256 hash of contract name)\"}},\"setPartialPaused(bool)\":{\"params\":{\"partialPause\":\"True if the contracts should be (partially) paused, false otherwise\"}},\"setPauseGuardian(address)\":{\"params\":{\"newPauseGuardian\":\"The address of the new Pause Guardian\"}},\"setPaused(bool)\":{\"params\":{\"pause\":\"True if the contracts should be paused, false otherwise\"}},\"unsetContractProxy(bytes32)\":{\"params\":{\"id\":\"Contract id (keccak256 hash of contract name)\"}},\"updateController(bytes32,address)\":{\"params\":{\"controller\":\"Controller address\",\"id\":\"Contract id (keccak256 hash of contract name)\"}}},\"title\":\"Controller Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getContractProxy(bytes32)\":{\"notice\":\"Get contract proxy address by its id\"},\"getGovernor()\":{\"notice\":\"Return the governor address\"},\"partialPaused()\":{\"notice\":\"Return whether the protocol is partially paused\"},\"paused()\":{\"notice\":\"Return whether the protocol is paused\"},\"setContractProxy(bytes32,address)\":{\"notice\":\"Register contract id and mapped address\"},\"setPartialPaused(bool)\":{\"notice\":\"Change the partial paused state of the contract Partial pause is intended as a partial pause of the protocol\"},\"setPauseGuardian(address)\":{\"notice\":\"Change the Pause Guardian\"},\"setPaused(bool)\":{\"notice\":\"Change the paused state of the contract Full pause most of protocol functions\"},\"unsetContractProxy(bytes32)\":{\"notice\":\"Unregister a contract address\"},\"updateController(bytes32,address)\":{\"notice\":\"Update contract's controller\"}},\"notice\":\"Interface for the Controller contract that manages protocol governance and contract registry\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/governance/IController.sol\":\"IController\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0x8bcf3c80d81f5dc6dab2dae12ba244af44d688d7f4e25659398ccc253b3b36ce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f4098877f5d5bcdd725333dfb56a1e6a4a7be63c62b76b385589c17290b615a3\",\"dweb:/ipfs/QmXxATjrLJd3J9V7ZLpP3aY4sJH1suQU7jZqxV2dFzBLsV\"]}},\"version\":1}"}},"contracts/contracts/governance/IGoverned.sol":{"IGoverned":{"abi":[{"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":[],"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"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","governor()":"0c340a24","pendingGovernor()":"e3056a34","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":[],\"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\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"events\":{\"NewOwnership(address,address)\":{\"params\":{\"from\":\"The address of the previous governor\",\"to\":\"The address of the new governor\"}},\"NewPendingOwnership(address,address)\":{\"params\":{\"from\":\"The address of the current governor\",\"to\":\"The address of the new pending governor\"}}},\"kind\":\"dev\",\"methods\":{\"governor()\":{\"returns\":{\"_0\":\"The address of the current governor\"}},\"pendingGovernor()\":{\"returns\":{\"_0\":\"The address of the pending governor\"}},\"transferOwnership(address)\":{\"params\":{\"newGovernor\":\"Address of new `governor`\"}}},\"title\":\"IGoverned\",\"version\":1},\"userdoc\":{\"events\":{\"NewOwnership(address,address)\":{\"notice\":\"Emitted when governance is transferred to a new governor\"},\"NewPendingOwnership(address,address)\":{\"notice\":\"Emitted when a new pending governor is set\"}},\"kind\":\"user\",\"methods\":{\"acceptOwnership()\":{\"notice\":\"Admin function for pending governor to accept role and update governor.\"},\"governor()\":{\"notice\":\"Get the current governor address\"},\"pendingGovernor()\":{\"notice\":\"Get the pending governor address\"},\"transferOwnership(address)\":{\"notice\":\"Admin function to begin change of governor.\"}},\"notice\":\"Interface for governed contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/governance/IGoverned.sol\":\"IGoverned\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/governance/IGoverned.sol\":{\"keccak256\":\"0xd8f3bbcc2c8841065f3ebdd9fc6154936b6f074c7b4390b29e22ac65109261f6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5951d9821182f082d2c9eb2012ac2b8cdc391ff8b295fe9f7fe8b4d5ccc84f57\",\"dweb:/ipfs/QmUJufm4387fqYRicC1gJZwxmBxKDEKhzAVVYQNMpr8L1w\"]}},\"version\":1}"}},"contracts/contracts/governance/IManaged.sol":{"IManaged":{"abi":[{"inputs":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newController","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"syncAllContracts","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"controller()":"f77c4791","setController(address)":"92eefe9b","syncAllContracts()":"d6866ea5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"controller\",\"outputs\":[{\"internalType\":\"contract IController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newController\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"syncAllContracts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"controller()\":{\"returns\":{\"_0\":\"The Controller as an IController interface\"}},\"setController(address)\":{\"details\":\"Only the current controller can set a new controller\",\"params\":{\"newController\":\"Address of the new controller\"}},\"syncAllContracts()\":{\"details\":\"This function will cache all the contracts using the latest addresses. Anyone can call the function whenever a Proxy contract change in the controller to ensure the protocol is using the latest version.\"}},\"title\":\"Managed Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"controller()\":{\"notice\":\"Get the Controller that manages this contract\"},\"setController(address)\":{\"notice\":\"Set the controller that manages this contract\"},\"syncAllContracts()\":{\"notice\":\"Sync protocol contract addresses from the Controller registry\"}},\"notice\":\"Interface for contracts that can be managed by a controller.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/governance/IManaged.sol\":\"IManaged\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0x8bcf3c80d81f5dc6dab2dae12ba244af44d688d7f4e25659398ccc253b3b36ce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f4098877f5d5bcdd725333dfb56a1e6a4a7be63c62b76b385589c17290b615a3\",\"dweb:/ipfs/QmXxATjrLJd3J9V7ZLpP3aY4sJH1suQU7jZqxV2dFzBLsV\"]},\"contracts/contracts/governance/IManaged.sol\":{\"keccak256\":\"0x3fa95c1be98ab78c3b45b4b090e88584e68c65c15822a96c9f3c2563a0b866ab\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e4ffae922866649d8cc0159078e9a6a15ba4b9b254bd3aa9fcaa63a80c33f469\",\"dweb:/ipfs/QmWozzUTcRDsHTeEBzLRVdbS6nBq8bxyknCPUFVjem3Zqg\"]}},\"version\":1}"}},"contracts/contracts/l2/curation/IL2Curation.sol":{"IL2Curation":{"abi":[{"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":"address","name":"subgraphService","type":"address"}],"name":"setSubgraphService","outputs":[],"stateMutability":"nonpayable","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"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"mintTaxFree(bytes32,uint256)":"3718896d","setSubgraphService(address)":"93a90a1e","tokensToSignalNoTax(bytes32,uint256)":"7a2a45b8","tokensToSignalToTokensNoTax(bytes32,uint256)":"69db11a1"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"}],\"name\":\"setSubgraphService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"mintTaxFree(bytes32,uint256)\":{\"details\":\"This function charges no tax and can only be called by GNS in specific scenarios (for now only during an L1-L2 transfer).\",\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment pool from where to mint signal\",\"tokensIn\":\"Amount of Graph Tokens to deposit\"},\"returns\":{\"_0\":\"Signal minted\"}},\"setSubgraphService(address)\":{\"params\":{\"subgraphService\":\"Address of the SubgraphService contract\"}},\"tokensToSignalNoTax(bytes32,uint256)\":{\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment for which to mint signal\",\"tokensIn\":\"Amount of tokens used to mint signal\"},\"returns\":{\"_0\":\"Amount of signal that can be bought\"}},\"tokensToSignalToTokensNoTax(bytes32,uint256)\":{\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment for which to mint signal\",\"tokensIn\":\"Amount of tokens used to mint signal\"},\"returns\":{\"_0\":\"Amount of tokens that would be recovered after minting and burning signal\"}}},\"title\":\"Interface of the L2 Curation contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"mintTaxFree(bytes32,uint256)\":{\"notice\":\"Deposit Graph Tokens in exchange for signal of a SubgraphDeployment curation pool.\"},\"setSubgraphService(address)\":{\"notice\":\"Set the subgraph service address.\"},\"tokensToSignalNoTax(bytes32,uint256)\":{\"notice\":\"Calculate amount of signal that can be bought with tokens in a curation pool, without accounting for curation tax.\"},\"tokensToSignalToTokensNoTax(bytes32,uint256)\":{\"notice\":\"Calculate the amount of tokens that would be recovered if minting signal with the input tokens and then burning it. This can be used to compute rounding error. This function does not account for curation tax.\"}},\"notice\":\"Interface for the L2 Curation contract that handles curation on Layer 2\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/l2/curation/IL2Curation.sol\":\"IL2Curation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/l2/curation/IL2Curation.sol\":{\"keccak256\":\"0x95c4c0ba2c00e6540bdc253fd6163a11ab75782ac34c1ad275877a88e7d87bf8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c09d37672d49e4ca7dfe9b29fa9cb58b00448f0443c4a975c511498265a218e9\",\"dweb:/ipfs/QmPMUEcYXR2p8bBwaVMKF9uXWo16xX2fhh5FfgsFB3cStw\"]}},\"version\":1}"}},"contracts/contracts/l2/discovery/IL2GNS.sol":{"IL2GNS":{"abi":[{"inputs":[{"internalType":"uint256","name":"l2SubgraphID","type":"uint256"},{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"bytes32","name":"subgraphMetadata","type":"bytes32"},{"internalType":"bytes32","name":"versionMetadata","type":"bytes32"}],"name":"finishSubgraphTransferFromL1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"l1SubgraphID","type":"uint256"}],"name":"getAliasedL2SubgraphID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"l2SubgraphID","type":"uint256"}],"name":"getUnaliasedL1SubgraphID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"finishSubgraphTransferFromL1(uint256,bytes32,bytes32,bytes32)":"d1a80612","getAliasedL2SubgraphID(uint256)":"ea0f2eba","getUnaliasedL1SubgraphID(uint256)":"9c6c022b","onTokenTransfer(address,uint256,bytes)":"a4c0ed36"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2SubgraphID\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphMetadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"versionMetadata\",\"type\":\"bytes32\"}],\"name\":\"finishSubgraphTransferFromL1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l1SubgraphID\",\"type\":\"uint256\"}],\"name\":\"getAliasedL2SubgraphID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2SubgraphID\",\"type\":\"uint256\"}],\"name\":\"getUnaliasedL1SubgraphID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"finishSubgraphTransferFromL1(uint256,bytes32,bytes32,bytes32)\":{\"params\":{\"l2SubgraphID\":\"Subgraph ID in L2 (aliased from the L1 subgraph ID)\",\"subgraphDeploymentID\":\"Latest subgraph deployment to assign to the subgraph\",\"subgraphMetadata\":\"IPFS hash of the subgraph metadata\",\"versionMetadata\":\"IPFS hash of the version metadata\"}},\"getAliasedL2SubgraphID(uint256)\":{\"params\":{\"l1SubgraphID\":\"L1 subgraph ID\"},\"returns\":{\"_0\":\"L2 subgraph ID\"}},\"getUnaliasedL1SubgraphID(uint256)\":{\"params\":{\"l2SubgraphID\":\"L2 subgraph ID\"},\"returns\":{\"_0\":\"L1subgraph ID\"}},\"onTokenTransfer(address,uint256,bytes)\":{\"params\":{\"amount\":\"Amount of tokens that were transferred\",\"data\":\"ABI-encoded callhook data\",\"from\":\"Token sender in L1\"}}},\"title\":\"Interface for the L2GNS contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"finishSubgraphTransferFromL1(uint256,bytes32,bytes32,bytes32)\":{\"notice\":\"Finish a subgraph transfer from L1. The subgraph must have been previously sent through the bridge using the sendSubgraphToL2 function on L1GNS.\"},\"getAliasedL2SubgraphID(uint256)\":{\"notice\":\"Return the aliased L2 subgraph ID from a transferred L1 subgraph ID\"},\"getUnaliasedL1SubgraphID(uint256)\":{\"notice\":\"Return the unaliased L1 subgraph ID from a transferred L2 subgraph ID\"},\"onTokenTransfer(address,uint256,bytes)\":{\"notice\":\"Receive tokens with a callhook from the bridge\"}},\"notice\":\"Interface for the L2 Graph Name System (GNS) contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/l2/discovery/IL2GNS.sol\":\"IL2GNS\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/gateway/ICallhookReceiver.sol\":{\"keccak256\":\"0x28a1eb7c540b648665b036dfb17d4b19264a23e2e34b6d3888763a826e19fcfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://96de7cf683662f68d2e5105a8f322c06c2a71e6fe5d7d5e47b41fb98be55aef7\",\"dweb:/ipfs/QmPkaFVtohPWBMgwNcQriQgPGWNxQY774HjY73zDDKeKMM\"]},\"contracts/contracts/l2/discovery/IL2GNS.sol\":{\"keccak256\":\"0x0fcf26a637479514eeda41ef1af880463748c47ca199f78aa4645ec0aee0da73\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://319aca57d9a55921874b9573ed45d0b557cdb6f176ceafdd700545c6cba72300\",\"dweb:/ipfs/QmRHta1XaFDYqnyN5BmJpdmaHiJgRFe9cqepFcEphdbu4X\"]}},\"version\":1}"}},"contracts/contracts/l2/gateway/IL2GraphTokenGateway.sol":{"IL2GraphTokenGateway":{"abi":[{"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":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":"address","name":"l1ERC20","type":"address"}],"name":"calculateL2TokenAddress","outputs":[{"internalType":"address","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":[{"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":"unused1","type":"uint256"},{"internalType":"uint256","name":"unused2","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"outboundTransfer","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","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"}],"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","getOutboundCalldata(address,address,address,uint256,bytes)":"a0c76a96","initialize(address)":"c4d66de8","outboundTransfer(address,address,uint256,bytes)":"7b3a3c8b","outboundTransfer(address,address,uint256,uint256,uint256,bytes)":"d2ce7d65","setL1CounterpartAddress(address)":"d685c0b2","setL1TokenAddress(address)":"69bc8cd4","setL2Router(address)":"0252fec1"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":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\":\"address\",\"name\":\"l1ERC20\",\"type\":\"address\"}],\"name\":\"calculateL2TokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"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\":[{\"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\":\"unused1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unused2\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"outboundTransfer\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"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\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"events\":{\"DepositFinalized(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens deposited\",\"from\":\"The sender address on L1\",\"l1Token\":\"The L1 token address\",\"to\":\"The recipient address on L2\"}},\"L1CounterpartAddressSet(address)\":{\"params\":{\"l1Counterpart\":\"The L1 counterpart gateway address\"}},\"L1TokenAddressSet(address)\":{\"params\":{\"l1GRT\":\"The L1 GRT token address\"}},\"L2RouterSet(address)\":{\"params\":{\"l2Router\":\"The new L2 router address\"}},\"WithdrawalInitiated(address,address,address,uint256,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens withdrawn\",\"exitNum\":\"The exit number\",\"from\":\"The sender address on L2\",\"l1Token\":\"The L1 token address\",\"l2ToL1Id\":\"The L2 to L1 message ID\",\"to\":\"The recipient address on L1\"}}},\"kind\":\"dev\",\"methods\":{\"calculateL2TokenAddress(address)\":{\"params\":{\"l1ERC20\":\"The L1 token address\"},\"returns\":{\"_0\":\"The corresponding L2 token address\"}},\"finalizeInboundTransfer(address,address,address,uint256,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer\",\"data\":\"Additional data for the transfer\",\"from\":\"The sender address on L1\",\"l1Token\":\"The L1 token address\",\"to\":\"The recipient address on L2\"}},\"getOutboundCalldata(address,address,address,uint256,bytes)\":{\"params\":{\"amount\":\"The amount of tokens\",\"data\":\"Additional transfer data\",\"from\":\"The sender address\",\"to\":\"The recipient address\",\"token\":\"The token address\"},\"returns\":{\"_0\":\"The encoded calldata\"}},\"initialize(address)\":{\"params\":{\"controller\":\"The controller contract address\"}},\"outboundTransfer(address,address,uint256,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer\",\"data\":\"Additional data for the transfer\",\"l1Token\":\"The L1 token address\",\"to\":\"The recipient address on L1\"},\"returns\":{\"_0\":\"The encoded outbound transfer data\"}},\"outboundTransfer(address,address,uint256,uint256,uint256,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer\",\"data\":\"Additional data for the transfer\",\"l1Token\":\"The L1 token address\",\"to\":\"The recipient address on L1\",\"unused1\":\"Unused parameter for compatibility\",\"unused2\":\"Unused parameter for compatibility\"},\"returns\":{\"_0\":\"The encoded outbound transfer data\"}},\"setL1CounterpartAddress(address)\":{\"params\":{\"l1Counterpart\":\"The L1 counterpart gateway contract address\"}},\"setL1TokenAddress(address)\":{\"params\":{\"l1GRT\":\"The L1 GRT token contract address\"}},\"setL2Router(address)\":{\"params\":{\"l2Router\":\"The L2 router contract address\"}}},\"title\":\"IL2GraphTokenGateway\",\"version\":1},\"userdoc\":{\"events\":{\"DepositFinalized(address,address,address,uint256)\":{\"notice\":\"Emitted when a deposit from L1 is finalized on L2\"},\"L1CounterpartAddressSet(address)\":{\"notice\":\"Emitted when the L1 counterpart address is set\"},\"L1TokenAddressSet(address)\":{\"notice\":\"Emitted when the L1 token address is set\"},\"L2RouterSet(address)\":{\"notice\":\"Emitted when the L2 router address is set\"},\"WithdrawalInitiated(address,address,address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when a withdrawal from L2 to L1 is initiated\"}},\"kind\":\"user\",\"methods\":{\"calculateL2TokenAddress(address)\":{\"notice\":\"Calculate the L2 token address for a given L1 token\"},\"finalizeInboundTransfer(address,address,address,uint256,bytes)\":{\"notice\":\"Finalize an inbound transfer from L1 to L2\"},\"getOutboundCalldata(address,address,address,uint256,bytes)\":{\"notice\":\"Get the encoded calldata for an outbound transfer\"},\"initialize(address)\":{\"notice\":\"Initialize the gateway contract\"},\"outboundTransfer(address,address,uint256,bytes)\":{\"notice\":\"Transfer tokens from L2 to L1\"},\"outboundTransfer(address,address,uint256,uint256,uint256,bytes)\":{\"notice\":\"Transfer tokens from L2 to L1 (overloaded version with unused parameters)\"},\"setL1CounterpartAddress(address)\":{\"notice\":\"Set the L1 counterpart gateway address\"},\"setL1TokenAddress(address)\":{\"notice\":\"Set the L1 token address\"},\"setL2Router(address)\":{\"notice\":\"Set the L2 router address\"}},\"notice\":\"Interface for the L2 Graph Token Gateway contract that handles token bridging on L2\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/l2/gateway/IL2GraphTokenGateway.sol\":\"IL2GraphTokenGateway\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/l2/gateway/IL2GraphTokenGateway.sol\":{\"keccak256\":\"0xc7a9d1cf6324eb9ae51628d39cc753de2a56498869ac7215d03f21b06fd92169\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0d4ed303bc68b15043fff9336731b4cbf7bf228d1bae274c7e6aadb754660f3\",\"dweb:/ipfs/QmRmDoq7ZuyfUxAkJiGrzQsJukAYKVayWCGUPt1NtScZXM\"]}},\"version\":1}"}},"contracts/contracts/l2/staking/IL2Staking.sol":{"IL2Staking":{"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":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":"bytes32","name":"metadata","type":"bytes32"}],"name":"AllocationCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"__DEPRECATED_cooldownBlocks","type":"uint32"}],"name":"DelegationParametersUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"extensionImpl","type":"address"}],"name":"ExtensionImplementationSet","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":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"SetOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"destination","type":"address"}],"name":"SetRewardsDestination","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"slasher","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"SlasherUpdate","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":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"StakeDelegated","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":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"until","type":"uint256"}],"name":"StakeDelegatedLocked","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":"tokens","type":"uint256"}],"name":"StakeDelegatedWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","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":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":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"}],"name":"StakeSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"StakeWithdrawn","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":[{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"allocationID","type":"address"},{"internalType":"bytes32","name":"metadata","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"allocate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"allocationID","type":"address"},{"internalType":"bytes32","name":"metadata","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"allocateFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"allocationID","type":"address"}],"name":"allocations","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 IStakingData.Allocation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaDenominator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curationPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"delegate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"delegationPools","outputs":[{"components":[{"internalType":"uint32","name":"__DEPRECATED_cooldownBlocks","type":"uint32"},{"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"internalType":"uint256","name":"updatedAtBlock","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"}],"internalType":"struct IStakingExtension.DelegationPoolReturn","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationRatio","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationTaxPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationUnbondingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","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 IStakingData.Allocation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"allocationID","type":"address"}],"name":"getAllocationData","outputs":[{"internalType":"bool","name":"","type":"bool"},{"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 IStakingBase.AllocationState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"delegator","type":"address"}],"name":"getDelegation","outputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakingData.Delegation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"getIndexerCapacity","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":[{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"}],"name":"getSubgraphAllocatedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakingData.Delegation","name":"delegation","type":"tuple"}],"name":"getWithdraweableDelegatedTokens","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":"controller","type":"address"},{"internalType":"uint256","name":"minimumIndexerStake","type":"uint256"},{"internalType":"uint32","name":"thawingPeriod","type":"uint32"},{"internalType":"uint32","name":"protocolPercentage","type":"uint32"},{"internalType":"uint32","name":"curationPercentage","type":"uint32"},{"internalType":"uint32","name":"maxAllocationEpochs","type":"uint32"},{"internalType":"uint32","name":"delegationUnbondingPeriod","type":"uint32"},{"internalType":"uint32","name":"delegationRatio","type":"uint32"},{"components":[{"internalType":"uint32","name":"alphaNumerator","type":"uint32"},{"internalType":"uint32","name":"alphaDenominator","type":"uint32"},{"internalType":"uint32","name":"lambdaNumerator","type":"uint32"},{"internalType":"uint32","name":"lambdaDenominator","type":"uint32"}],"internalType":"struct IStakingData.RebatesParameters","name":"rebatesParameters","type":"tuple"},{"internalType":"address","name":"extensionImpl","type":"address"}],"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":"allocationID","type":"address"}],"name":"isAllocation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"delegator","type":"address"}],"name":"isDelegator","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":[],"name":"lambdaDenominator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lambdaNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAllocationEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumIndexerStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"maybeOperator","type":"address"}],"name":"operatorAuth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"rewardsDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newController","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"counterpart","type":"address"}],"name":"setCounterpartStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setCurationPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"internalType":"uint32","name":"cooldownBlocks","type":"uint32"}],"name":"setDelegationParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newDelegationRatio","type":"uint32"}],"name":"setDelegationRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setDelegationTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newDelegationUnbondingPeriod","type":"uint32"}],"name":"setDelegationUnbondingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"extensionImpl","type":"address"}],"name":"setExtensionImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"maxAllocationEpochs","type":"uint32"}],"name":"setMaxAllocationEpochs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minimumIndexerStake","type":"uint256"}],"name":"setMinimumIndexerStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setProtocolPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"setRebateParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"name":"setRewardsDestination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"slasher","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setSlasher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"thawingPeriod","type":"uint32"}],"name":"setThawingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"slash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"maybeSlasher","type":"address"}],"name":"slashers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"stakeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"stakes","outputs":[{"components":[{"internalType":"uint256","name":"tokensStaked","type":"uint256"},{"internalType":"uint256","name":"tokensAllocated","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakes.Indexer","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"subgraphDeploymentId","type":"bytes32"}],"name":"subgraphAllocations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"syncAllContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thawingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"undelegate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"indexer","type":"address"},{"internalType":"address","name":"newIndexer","type":"address"}],"name":"withdrawDelegated","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":{"allocate(bytes32,uint256,address,bytes32,bytes)":"a6fe292b","allocateFrom(address,bytes32,uint256,address,bytes32,bytes)":"23477e48","allocations(address)":"52a9039c","alphaDenominator()":"ce853613","alphaNumerator()":"7ef82070","closeAllocation(address,bytes32)":"44c32a61","collect(uint256,address)":"8d3c100a","controller()":"f77c4791","curationPercentage()":"85b52ad0","delegate(address,uint256)":"026e402b","delegationPools(address)":"92511c8f","delegationRatio()":"bfdfa7af","delegationTaxPercentage()":"e6aeb796","delegationUnbondingPeriod()":"b6846e47","getAllocation(address)":"0e022923","getAllocationData(address)":"55c85269","getAllocationState(address)":"98c657dc","getDelegation(address,address)":"15049a5a","getIndexerCapacity(address)":"a510be20","getIndexerStakedTokens(address)":"1787e69f","getSubgraphAllocatedTokens(bytes32)":"e2e1e8e9","getWithdraweableDelegatedTokens((uint256,uint256,uint256))":"130bea57","hasStake(address)":"e73e14bf","initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)":"687fe40e","isActiveAllocation(address)":"6a3ca383","isAllocation(address)":"f1d60d66","isDelegator(address,address)":"a0e11929","isOperator(address,address)":"b6363cf2","lambdaDenominator()":"4b8a9b8e","lambdaNumerator()":"09da07f7","maxAllocationEpochs()":"fb765938","minimumIndexerStake()":"f2485bf2","multicall(bytes[])":"ac9650d8","onTokenTransfer(address,uint256,bytes)":"a4c0ed36","operatorAuth(address,address)":"e2e94656","protocolPercentage()":"a26b90f2","rewardsDestination(address)":"7203ca78","setController(address)":"92eefe9b","setCounterpartStakingAddress(address)":"1ae72045","setCurationPercentage(uint32)":"39dcf476","setDelegationParameters(uint32,uint32,uint32)":"9dcaa6c9","setDelegationRatio(uint32)":"1dd42f60","setDelegationTaxPercentage(uint32)":"e6dc5a1c","setDelegationUnbondingPeriod(uint32)":"5e9a6392","setExtensionImpl(address)":"6948a78c","setMaxAllocationEpochs(uint32)":"2652d75e","setMinimumIndexerStake(uint256)":"ddb8b131","setOperator(address,bool)":"558a7297","setProtocolPercentage(uint32)":"9a48bf83","setRebateParameters(uint32,uint32,uint32,uint32)":"69286e47","setRewardsDestination(address)":"772495c3","setSlasher(address,bool)":"52348080","setThawingPeriod(uint32)":"32bc9108","slash(address,uint256,uint256,address)":"e76fede6","slashers(address)":"b87fcbff","stake(uint256)":"a694fc3a","stakeTo(address,uint256)":"a2a31722","stakes(address)":"16934fc4","subgraphAllocations(bytes32)":"b1468f52","syncAllContracts()":"d6866ea5","thawingPeriod()":"cdc747dd","undelegate(address,uint256)":"4d99dd16","unstake(uint256)":"2e17de78","withdraw()":"3ccfd60b","withdrawDelegated(address,address)":"51a60b02"}},"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\":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\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"}],\"name\":\"AllocationCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"__DEPRECATED_cooldownBlocks\",\"type\":\"uint32\"}],\"name\":\"DelegationParametersUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"name\":\"ExtensionImplementationSet\",\"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\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"SetOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"SetRewardsDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"SlasherUpdate\",\"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\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"StakeDelegated\",\"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\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedLocked\",\"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\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"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\":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\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"StakeSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"allocate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"allocateFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"allocations\",\"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 IStakingData.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alphaDenominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alphaNumerator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"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\":[],\"name\":\"controller\",\"outputs\":[{\"internalType\":\"contract IController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"curationPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"delegationPools\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"__DEPRECATED_cooldownBlocks\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"updatedAtBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingExtension.DelegationPoolReturn\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationTaxPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"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 IStakingData.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"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 IStakingBase.AllocationState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"getDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingData.Delegation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getIndexerCapacity\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingData.Delegation\",\"name\":\"delegation\",\"type\":\"tuple\"}],\"name\":\"getWithdraweableDelegatedTokens\",\"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\":\"controller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minimumIndexerStake\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"thawingPeriod\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"protocolPercentage\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"curationPercentage\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxAllocationEpochs\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"delegationUnbondingPeriod\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"alphaNumerator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"alphaDenominator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lambdaNumerator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lambdaDenominator\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakingData.RebatesParameters\",\"name\":\"rebatesParameters\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"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\":\"allocationID\",\"type\":\"address\"}],\"name\":\"isAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"isDelegator\",\"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\":[],\"name\":\"lambdaDenominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lambdaNumerator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAllocationEpochs\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumIndexerStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"maybeOperator\",\"type\":\"address\"}],\"name\":\"operatorAuth\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"rewardsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newController\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpart\",\"type\":\"address\"}],\"name\":\"setCounterpartStakingAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setCurationPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"cooldownBlocks\",\"type\":\"uint32\"}],\"name\":\"setDelegationParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDelegationRatio\",\"type\":\"uint32\"}],\"name\":\"setDelegationRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setDelegationTaxPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDelegationUnbondingPeriod\",\"type\":\"uint32\"}],\"name\":\"setDelegationUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"name\":\"setExtensionImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxAllocationEpochs\",\"type\":\"uint32\"}],\"name\":\"setMaxAllocationEpochs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumIndexerStake\",\"type\":\"uint256\"}],\"name\":\"setMinimumIndexerStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setProtocolPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"setRebateParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"setRewardsDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"slasher\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"thawingPeriod\",\"type\":\"uint32\"}],\"name\":\"setThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"maybeSlasher\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"stakes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokensStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensAllocated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakes.Indexer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"subgraphAllocations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"syncAllContracts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"thawingPeriod\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newIndexer\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"details\":\"Note that L2Staking doesn't actually inherit this interface. This is because of 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.\",\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"epoch\":\"Epoch when allocation was closed\",\"indexer\":\"Address of the indexer\",\"isPublic\":\"True if closed by someone other than the indexer\",\"poi\":\"Proof of indexing submitted\",\"sender\":\"Address that closed the allocation\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Amount of tokens unallocated\"}},\"AllocationCreated(address,bytes32,uint256,uint256,address,bytes32)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"epoch\":\"Epoch when allocation was created\",\"indexer\":\"Address of the indexer\",\"metadata\":\"IPFS hash for additional allocation information\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Amount of tokens allocated\"}},\"DelegationParametersUpdated(address,uint32,uint32,uint32)\":{\"params\":{\"__DEPRECATED_cooldownBlocks\":\"Deprecated parameter (no longer used)\",\"indexer\":\"Address of the indexer\",\"indexingRewardCut\":\"Percentage of indexing rewards left for the indexer\",\"queryFeeCut\":\"Percentage of query fees left for the indexer\"}},\"ExtensionImplementationSet(address)\":{\"params\":{\"extensionImpl\":\"Address of the StakingExtension implementation\"}},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"assetHolder\":\"Address providing the rebate tokens\",\"curationFees\":\"Amount distributed to curators\",\"delegationRewards\":\"Amount distributed to delegators\",\"epoch\":\"Epoch when rebate was collected\",\"indexer\":\"Address of the indexer collecting the rebate\",\"protocolTax\":\"Amount burned as protocol tax\",\"queryFees\":\"Amount available for rebate after fees\",\"queryRebates\":\"Amount distributed to the indexer\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Total amount of tokens in the rebate\"}},\"SetOperator(address,address,bool)\":{\"params\":{\"allowed\":\"Whether the operator is authorized\",\"indexer\":\"Address of the indexer\",\"operator\":\"Address of the operator\"}},\"SetRewardsDestination(address,address)\":{\"params\":{\"destination\":\"Address to receive rewards\",\"indexer\":\"Address of the indexer\"}},\"SlasherUpdate(address,address,bool)\":{\"params\":{\"allowed\":\"Whether the slasher is allowed to slash\",\"caller\":\"Address that updated the slasher status\",\"slasher\":\"Address of the slasher\"}},\"StakeDelegated(address,address,uint256,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer receiving the delegation\",\"shares\":\"Amount of shares issued to the delegator\",\"tokens\":\"Amount of tokens delegated\"}},\"StakeDelegatedLocked(address,address,uint256,uint256,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer from which tokens are undelegated\",\"shares\":\"Amount of shares returned\",\"tokens\":\"Amount of tokens undelegated\",\"until\":\"Epoch until which tokens are locked\"}},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer from which tokens are withdrawn\",\"tokens\":\"Amount of tokens withdrawn\"}},\"StakeDeposited(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens staked\"}},\"StakeLocked(address,uint256,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens locked\",\"until\":\"Block number until which tokens are locked\"}},\"StakeSlashed(address,uint256,uint256,address)\":{\"params\":{\"beneficiary\":\"Address receiving the reward\",\"indexer\":\"Address of the indexer that was slashed\",\"reward\":\"Amount of tokens given as reward\",\"tokens\":\"Total amount of tokens slashed\"}},\"StakeWithdrawn(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens withdrawn\"}},\"TransferredDelegationReturnedToDelegator(address,address,uint256)\":{\"params\":{\"amount\":\"Amount of delegation returned\",\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer\"}}},\"kind\":\"dev\",\"methods\":{\"allocate(bytes32,uint256,address,bytes32,bytes)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"metadata\":\"IPFS hash for additional information about the allocation\",\"proof\":\"A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`\",\"subgraphDeploymentID\":\"ID of the SubgraphDeployment where tokens will be allocated\",\"tokens\":\"Amount of tokens to allocate\"}},\"allocateFrom(address,bytes32,uint256,address,bytes32,bytes)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"indexer\":\"Indexer address to allocate funds from.\",\"metadata\":\"IPFS hash for additional information about the allocation\",\"proof\":\"A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`\",\"subgraphDeploymentID\":\"ID of the SubgraphDeployment where tokens will be allocated\",\"tokens\":\"Amount of tokens to allocate\"}},\"allocations(address)\":{\"params\":{\"allocationID\":\"Allocation ID for which to query the allocation information\"},\"returns\":{\"_0\":\"The specified allocation, as an IStakingData.Allocation struct\"}},\"alphaDenominator()\":{\"returns\":{\"_0\":\"Alpha denominator\"}},\"alphaNumerator()\":{\"returns\":{\"_0\":\"Alpha numerator\"}},\"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\"}},\"controller()\":{\"returns\":{\"_0\":\"The Controller as an IController interface\"}},\"curationPercentage()\":{\"returns\":{\"_0\":\"Curation percentage in parts per million\"}},\"delegate(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer to which tokens are delegated\",\"tokens\":\"Amount of tokens to delegate\"},\"returns\":{\"_0\":\"Amount of shares issued from the delegation pool\"}},\"delegationPools(address)\":{\"params\":{\"indexer\":\"Address of the indexer for which to query the delegation pool\"},\"returns\":{\"_0\":\"Delegation pool as a DelegationPoolReturn struct\"}},\"delegationRatio()\":{\"returns\":{\"_0\":\"Delegation ratio\"}},\"delegationTaxPercentage()\":{\"returns\":{\"_0\":\"Delegation tax percentage in parts per million\"}},\"delegationUnbondingPeriod()\":{\"returns\":{\"_0\":\"Delegation unbonding period in epochs\"}},\"getAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as allocation identifier\"},\"returns\":{\"_0\":\"Allocation data\"}},\"getAllocationData(address)\":{\"details\":\"New function to get the allocation data for the rewards managerNote 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.\",\"params\":{\"allocationID\":\"The allocation ID\"},\"returns\":{\"_0\":\"active Whether the allocation is active\",\"_1\":\"indexer The indexer address\",\"_2\":\"subgraphDeploymentID The subgraph deployment ID\",\"_3\":\"tokens The allocated tokens\",\"_4\":\"createdAtEpoch The epoch when allocation was created\",\"_5\":\"closedAtEpoch The epoch when allocation was closed\"}},\"getAllocationState(address)\":{\"params\":{\"allocationID\":\"Allocation identifier\"},\"returns\":{\"_0\":\"AllocationState enum with the state of the allocation\"}},\"getDelegation(address,address)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer where funds have been delegated\"},\"returns\":{\"_0\":\"Delegation data\"}},\"getIndexerCapacity(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"Amount of tokens available to allocate including delegation\"}},\"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\"}},\"getWithdraweableDelegatedTokens((uint256,uint256,uint256))\":{\"params\":{\"delegation\":\"Delegation of tokens from delegator to indexer\"},\"returns\":{\"_0\":\"Amount of tokens to withdraw\"}},\"hasStake(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"True if indexer has staked tokens\"}},\"initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)\":{\"params\":{\"controller\":\"Address of the controller that manages this contract\",\"curationPercentage\":\"Percentage of query fees that are given to curators (in PPM)\",\"delegationRatio\":\"The ratio between an indexer's own stake and the delegation they can use\",\"delegationUnbondingPeriod\":\"The period in epochs that tokens get locked after undelegating\",\"extensionImpl\":\"Address of the StakingExtension implementation\",\"maxAllocationEpochs\":\"The maximum number of epochs that an allocation can be active\",\"minimumIndexerStake\":\"Minimum amount of tokens that an indexer must stake\",\"protocolPercentage\":\"Percentage of query fees that are burned as protocol fee (in PPM)\",\"rebatesParameters\":\"Alpha and lambda parameters for rebates function\",\"thawingPeriod\":\"Number of blocks that tokens get locked after unstaking\"}},\"isActiveAllocation(address)\":{\"details\":\"New function to get the allocation active status for the rewards managerNote 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.\",\"params\":{\"allocationID\":\"The allocation identifier\"},\"returns\":{\"_0\":\"True if the allocation is active, false otherwise\"}},\"isAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as signer by the indexer for an allocation\"},\"returns\":{\"_0\":\"True if allocationID already used\"}},\"isDelegator(address,address)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer where funds have been delegated\"},\"returns\":{\"_0\":\"True if delegator has tokens delegated to the indexer\"}},\"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\"}},\"lambdaDenominator()\":{\"returns\":{\"_0\":\"Lambda denominator\"}},\"lambdaNumerator()\":{\"returns\":{\"_0\":\"Lambda numerator\"}},\"maxAllocationEpochs()\":{\"returns\":{\"_0\":\"Maximum allocation period in epochs\"}},\"minimumIndexerStake()\":{\"returns\":{\"_0\":\"Minimum indexer stake in GRT\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"onTokenTransfer(address,uint256,bytes)\":{\"params\":{\"amount\":\"Amount of tokens that were transferred\",\"data\":\"ABI-encoded callhook data\",\"from\":\"Token sender in L1\"}},\"operatorAuth(address,address)\":{\"params\":{\"indexer\":\"The indexer address for which to query authorization\",\"maybeOperator\":\"The address that may or may not be an operator\"},\"returns\":{\"_0\":\"True if the operator is authorized to operate on behalf of the indexer\"}},\"protocolPercentage()\":{\"returns\":{\"_0\":\"Protocol percentage in parts per million\"}},\"rewardsDestination(address)\":{\"params\":{\"indexer\":\"The indexer address for which to query the rewards destination\"},\"returns\":{\"_0\":\"The address where the indexer's rewards are sent, zero if none is set in which case rewards are re-staked\"}},\"setController(address)\":{\"details\":\"Only the current controller can set a new controller\",\"params\":{\"newController\":\"Address of the new controller\"}},\"setCounterpartStakingAddress(address)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"counterpart\":\"Address of the counterpart staking contract in the other chain, without any aliasing.\"}},\"setCurationPercentage(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"percentage\":\"Percentage of query fees sent to curators\"}},\"setDelegationParameters(uint32,uint32,uint32)\":{\"params\":{\"cooldownBlocks\":\"Deprecated cooldown blocks parameter (no longer used)\",\"indexingRewardCut\":\"Percentage of indexing rewards left for the indexer\",\"queryFeeCut\":\"Percentage of query fees left for the indexer\"}},\"setDelegationRatio(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"newDelegationRatio\":\"Delegation capacity multiplier\"}},\"setDelegationTaxPercentage(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"percentage\":\"Percentage of delegated tokens to burn as delegation tax, expressed in parts per million\"}},\"setDelegationUnbondingPeriod(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"newDelegationUnbondingPeriod\":\"Period in epochs to wait for token withdrawals after undelegating\"}},\"setExtensionImpl(address)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"extensionImpl\":\"Address of the StakingExtension implementation\"}},\"setMaxAllocationEpochs(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"maxAllocationEpochs\":\"Allocation duration limit in epochs\"}},\"setMinimumIndexerStake(uint256)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"minimumIndexerStake\":\"Minimum amount of tokens that an indexer must stake\"}},\"setOperator(address,bool)\":{\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\"}},\"setProtocolPercentage(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"percentage\":\"Percentage of query fees to burn as protocol fee\"}},\"setRebateParameters(uint32,uint32,uint32,uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"alphaDenominator\":\"Denominator of `alpha`\",\"alphaNumerator\":\"Numerator of `alpha`\",\"lambdaDenominator\":\"Denominator of `lambda`\",\"lambdaNumerator\":\"Numerator of `lambda`\"}},\"setRewardsDestination(address)\":{\"params\":{\"destination\":\"Rewards destination address. If set to zero, rewards will be restaked\"}},\"setSlasher(address,bool)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"allowed\":\"True if slasher is allowed\",\"slasher\":\"Address of the party allowed to slash indexers\"}},\"setThawingPeriod(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"thawingPeriod\":\"Number of blocks that tokens get locked after unstaking\"}},\"slash(address,uint256,uint256,address)\":{\"details\":\"Can only be called by the slasher role.\",\"params\":{\"beneficiary\":\"Address of a beneficiary to receive a reward for the slashing\",\"indexer\":\"Address of indexer to slash\",\"reward\":\"Amount of reward tokens to send to a beneficiary\",\"tokens\":\"Amount of tokens to slash from the indexer stake\"}},\"slashers(address)\":{\"params\":{\"maybeSlasher\":\"Address for which to check the slasher role\"},\"returns\":{\"_0\":\"True if the address is a slasher\"}},\"stake(uint256)\":{\"params\":{\"tokens\":\"Amount of tokens to stake\"}},\"stakeTo(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens to stake\"}},\"stakes(address)\":{\"params\":{\"indexer\":\"Indexer address for which to query the stake information\"},\"returns\":{\"_0\":\"Stake information for the specified indexer, as a IStakes.Indexer struct\"}},\"subgraphAllocations(bytes32)\":{\"params\":{\"subgraphDeploymentId\":\"The subgraph deployment for which to query the allocations\"},\"returns\":{\"_0\":\"The amount of tokens allocated to the subgraph deployment\"}},\"syncAllContracts()\":{\"details\":\"This function will cache all the contracts using the latest addresses. Anyone can call the function whenever a Proxy contract change in the controller to ensure the protocol is using the latest version.\"},\"thawingPeriod()\":{\"returns\":{\"_0\":\"Thawing period in blocks\"}},\"undelegate(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer to which tokens had been delegated\",\"shares\":\"Amount of shares to return and undelegate tokens\"},\"returns\":{\"_0\":\"Amount of tokens returned for the shares of the delegation pool\"}},\"unstake(uint256)\":{\"details\":\"NOTE: The function accepts an amount greater than the currently staked tokens. If that happens, it will try to unstake the max amount of tokens it can. The reason for this behaviour is to avoid time conditions while the transaction is in flight.\",\"params\":{\"tokens\":\"Amount of tokens to unstake\"}},\"withdrawDelegated(address,address)\":{\"params\":{\"indexer\":\"Withdraw available tokens delegated to indexer\",\"newIndexer\":\"Re-delegate to indexer address if non-zero, withdraw if zero address\"},\"returns\":{\"_0\":\"Amount of tokens withdrawn\"}}},\"title\":\"Interface for the L2 Staking contract\",\"version\":1},\"userdoc\":{\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"notice\":\"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.\"},\"AllocationCreated(address,bytes32,uint256,uint256,address,bytes32)\":{\"notice\":\"Emitted when `indexer` allocated `tokens` amount to `subgraphDeploymentID` during `epoch`. `allocationID` indexer derived address used to identify the allocation. `metadata` additional information related to the allocation.\"},\"DelegationParametersUpdated(address,uint32,uint32,uint32)\":{\"notice\":\"Emitted when `indexer` update the delegation parameters for its delegation pool.\"},\"ExtensionImplementationSet(address)\":{\"notice\":\"Emitted when `extensionImpl` was set as the address of the StakingExtension contract to which extended functionality is delegated.\"},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"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.\"},\"SetOperator(address,address,bool)\":{\"notice\":\"Emitted when `indexer` set `operator` access.\"},\"SetRewardsDestination(address,address)\":{\"notice\":\"Emitted when `indexer` set an address to receive rewards.\"},\"SlasherUpdate(address,address,bool)\":{\"notice\":\"Emitted when `caller` set `slasher` address as `allowed` to slash stakes.\"},\"StakeDelegated(address,address,uint256,uint256)\":{\"notice\":\"Emitted when `delegator` delegated `tokens` to the `indexer`, the delegator gets `shares` for the delegation pool proportionally to the tokens staked.\"},\"StakeDelegatedLocked(address,address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when `delegator` undelegated `tokens` from `indexer`. Tokens get locked for withdrawal after a period of time.\"},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"notice\":\"Emitted when `delegator` withdrew delegated `tokens` from `indexer`.\"},\"StakeDeposited(address,uint256)\":{\"notice\":\"Emitted when `indexer` stakes `tokens` amount.\"},\"StakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when `indexer` unstaked and locked `tokens` amount until `until` block.\"},\"StakeSlashed(address,uint256,uint256,address)\":{\"notice\":\"Emitted when `indexer` was slashed for a total of `tokens` amount. Tracks `reward` amount of tokens given to `beneficiary`.\"},\"StakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when `indexer` withdrew `tokens` staked.\"},\"TransferredDelegationReturnedToDelegator(address,address,uint256)\":{\"notice\":\"Emitted when transferred delegation is returned to a delegator\"}},\"kind\":\"user\",\"methods\":{\"allocate(bytes32,uint256,address,bytes32,bytes)\":{\"notice\":\"Allocate available tokens to a subgraph deployment.\"},\"allocateFrom(address,bytes32,uint256,address,bytes32,bytes)\":{\"notice\":\"Allocate available tokens to a subgraph deployment from and indexer's stake. The caller must be the indexer or the indexer's operator.\"},\"allocations(address)\":{\"notice\":\"Getter for allocations[_allocationID]: gets an allocation's information as an IStakingData.Allocation struct.\"},\"alphaDenominator()\":{\"notice\":\"Getter for the denominator of the rebates alpha parameter\"},\"alphaNumerator()\":{\"notice\":\"Getter for the numerator of the rebates alpha parameter\"},\"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.\"},\"controller()\":{\"notice\":\"Get the Controller that manages this contract\"},\"curationPercentage()\":{\"notice\":\"Getter for curationPercentage: the percentage of query fees that are distributed to curators.\"},\"delegate(address,uint256)\":{\"notice\":\"Delegate tokens to an indexer.\"},\"delegationPools(address)\":{\"notice\":\"Getter for delegationPools[_indexer]: gets the delegation pool structure for a particular indexer.\"},\"delegationRatio()\":{\"notice\":\"Getter for the delegationRatio, i.e. the delegation capacity multiplier: If delegation ratio is 100, and an Indexer has staked 5 GRT, then they can use up to 500 GRT from the delegated stake\"},\"delegationTaxPercentage()\":{\"notice\":\"Getter for delegationTaxPercentage: Percentage of tokens to tax a delegation deposit, expressed in parts per million\"},\"delegationUnbondingPeriod()\":{\"notice\":\"Getter for delegationUnbondingPeriod: Time in epochs a delegator needs to wait to withdraw delegated stake\"},\"getAllocation(address)\":{\"notice\":\"Return the allocation by ID.\"},\"getAllocationData(address)\":{\"notice\":\"Get the allocation data for the rewards manager\"},\"getAllocationState(address)\":{\"notice\":\"Return the current state of an allocation\"},\"getDelegation(address,address)\":{\"notice\":\"Return the delegation from a delegator to an indexer.\"},\"getIndexerCapacity(address)\":{\"notice\":\"Get the total amount of tokens available to use in allocations. This considers the indexer stake and delegated tokens according to delegation ratio\"},\"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.\"},\"getWithdraweableDelegatedTokens((uint256,uint256,uint256))\":{\"notice\":\"Returns amount of delegated tokens ready to be withdrawn after unbonding period.\"},\"hasStake(address)\":{\"notice\":\"Getter that returns if an indexer has any stake.\"},\"initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)\":{\"notice\":\"Initialize this contract.\"},\"isActiveAllocation(address)\":{\"notice\":\"Get the allocation active status for the rewards manager\"},\"isAllocation(address)\":{\"notice\":\"Return if allocationID is used.\"},\"isDelegator(address,address)\":{\"notice\":\"Return whether the delegator has delegated to the indexer.\"},\"isOperator(address,address)\":{\"notice\":\"Return true if operator is allowed for indexer.\"},\"lambdaDenominator()\":{\"notice\":\"Getter for the denominator of the rebates lambda parameter\"},\"lambdaNumerator()\":{\"notice\":\"Getter for the numerator of the rebates lambda parameter\"},\"maxAllocationEpochs()\":{\"notice\":\"Getter for maxAllocationEpochs: the maximum time in epochs that an allocation can be open before anyone is allowed to close it. This also caps the effective allocation when sending the allocation's query fees to the rebate pool.\"},\"minimumIndexerStake()\":{\"notice\":\"Getter for minimumIndexerStake: the minimum amount of GRT that an indexer needs to stake.\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"onTokenTransfer(address,uint256,bytes)\":{\"notice\":\"Receive tokens with a callhook from the bridge\"},\"operatorAuth(address,address)\":{\"notice\":\"Getter for operatorAuth[_indexer][_maybeOperator]: returns true if the operator is authorized to operate on behalf of the indexer.\"},\"protocolPercentage()\":{\"notice\":\"Getter for protocolPercentage: the percentage of query fees that are burned as protocol fees.\"},\"rewardsDestination(address)\":{\"notice\":\"Getter for rewardsDestination[_indexer]: returns the address where the indexer's rewards are sent.\"},\"setController(address)\":{\"notice\":\"Set the controller that manages this contract\"},\"setCounterpartStakingAddress(address)\":{\"notice\":\"Set the address of the counterpart (L1 or L2) staking contract.\"},\"setCurationPercentage(uint32)\":{\"notice\":\"Set the curation percentage of query fees sent to curators.\"},\"setDelegationParameters(uint32,uint32,uint32)\":{\"notice\":\"Set the delegation parameters for the caller.\"},\"setDelegationRatio(uint32)\":{\"notice\":\"Set the delegation ratio. If set to 10 it means the indexer can use up to 10x the indexer staked amount from their delegated tokens\"},\"setDelegationTaxPercentage(uint32)\":{\"notice\":\"Set a delegation tax percentage to burn when delegated funds are deposited.\"},\"setDelegationUnbondingPeriod(uint32)\":{\"notice\":\"Set the time, in epochs, a Delegator needs to wait to withdraw tokens after undelegating.\"},\"setExtensionImpl(address)\":{\"notice\":\"Set the address of the StakingExtension implementation.\"},\"setMaxAllocationEpochs(uint32)\":{\"notice\":\"Set the max time allowed for indexers to allocate on a subgraph before others are allowed to close the allocation.\"},\"setMinimumIndexerStake(uint256)\":{\"notice\":\"Set the minimum stake needed to be an Indexer\"},\"setOperator(address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller.\"},\"setProtocolPercentage(uint32)\":{\"notice\":\"Set a protocol percentage to burn when collecting query fees.\"},\"setRebateParameters(uint32,uint32,uint32,uint32)\":{\"notice\":\"Set the rebate parameters\"},\"setRewardsDestination(address)\":{\"notice\":\"Set the destination where to send rewards for an indexer.\"},\"setSlasher(address,bool)\":{\"notice\":\"Set or unset an address as allowed slasher.\"},\"setThawingPeriod(uint32)\":{\"notice\":\"Set the number of blocks that tokens get locked after unstaking\"},\"slash(address,uint256,uint256,address)\":{\"notice\":\"Slash the indexer stake. Delegated tokens are not subject to slashing.\"},\"slashers(address)\":{\"notice\":\"Getter for slashers[_maybeSlasher]: returns true if the address is a slasher, i.e. an entity that can slash indexers\"},\"stake(uint256)\":{\"notice\":\"Deposit tokens on the indexer's stake. The amount staked must be over the minimumIndexerStake.\"},\"stakeTo(address,uint256)\":{\"notice\":\"Deposit tokens on the Indexer stake, on behalf of the Indexer. The amount staked must be over the minimumIndexerStake.\"},\"stakes(address)\":{\"notice\":\"Getter for stakes[_indexer]: gets the stake information for an indexer as a IStakes.Indexer struct.\"},\"subgraphAllocations(bytes32)\":{\"notice\":\"Getter for subgraphAllocations[_subgraphDeploymentId]: returns the amount of tokens allocated to a subgraph deployment.\"},\"syncAllContracts()\":{\"notice\":\"Sync protocol contract addresses from the Controller registry\"},\"thawingPeriod()\":{\"notice\":\"Getter for thawingPeriod: the time in blocks an indexer needs to wait to unstake tokens.\"},\"undelegate(address,uint256)\":{\"notice\":\"Undelegate tokens from an indexer. Tokens will be locked for the unbonding period.\"},\"unstake(uint256)\":{\"notice\":\"Unstake tokens from the indexer stake, lock them until the thawing period expires.\"},\"withdraw()\":{\"notice\":\"Withdraw indexer tokens once the thawing period has passed.\"},\"withdrawDelegated(address,address)\":{\"notice\":\"Withdraw undelegated tokens once the unbonding period has passed, and optionally re-delegate to a new indexer.\"}},\"notice\":\"This is the interface that should be used when interacting with the L2 Staking contract. It extends the IStaking interface with the functions that are specific to L2, adding the callhook receiver to receive transferred stake and delegation from L1.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/l2/staking/IL2Staking.sol\":\"IL2Staking\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/base/IMulticall.sol\":{\"keccak256\":\"0x229a773eba322776fd11fa9ef4d256f5405d4243a7eee9c776e9cc3943d5712a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c55cfe4a3ada03e97f5bf18d42e0a35504386617b2e7481b8c54c241aae9a5e9\",\"dweb:/ipfs/QmehvFTHm6BNPQZt5KMVttifEwfLZ3snWDdCx4PFEoAVoP\"]},\"contracts/contracts/gateway/ICallhookReceiver.sol\":{\"keccak256\":\"0x28a1eb7c540b648665b036dfb17d4b19264a23e2e34b6d3888763a826e19fcfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://96de7cf683662f68d2e5105a8f322c06c2a71e6fe5d7d5e47b41fb98be55aef7\",\"dweb:/ipfs/QmPkaFVtohPWBMgwNcQriQgPGWNxQY774HjY73zDDKeKMM\"]},\"contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0x8bcf3c80d81f5dc6dab2dae12ba244af44d688d7f4e25659398ccc253b3b36ce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f4098877f5d5bcdd725333dfb56a1e6a4a7be63c62b76b385589c17290b615a3\",\"dweb:/ipfs/QmXxATjrLJd3J9V7ZLpP3aY4sJH1suQU7jZqxV2dFzBLsV\"]},\"contracts/contracts/governance/IManaged.sol\":{\"keccak256\":\"0x3fa95c1be98ab78c3b45b4b090e88584e68c65c15822a96c9f3c2563a0b866ab\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e4ffae922866649d8cc0159078e9a6a15ba4b9b254bd3aa9fcaa63a80c33f469\",\"dweb:/ipfs/QmWozzUTcRDsHTeEBzLRVdbS6nBq8bxyknCPUFVjem3Zqg\"]},\"contracts/contracts/l2/staking/IL2Staking.sol\":{\"keccak256\":\"0x720202a6bd427a1d8cf9593966964977d7335dfcc796888cf2f12deaf119ca28\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://46da52da02ef8bb2ccf5384d6704ff0d7056339ac6ceb9ad50bd9271dfd96813\",\"dweb:/ipfs/QmWfjwzrzLcrvVgMcBhxrp9ViBj9F4uUDas81AzZ3M8G83\"]},\"contracts/contracts/l2/staking/IL2StakingBase.sol\":{\"keccak256\":\"0xdb8e58971bfc40f26ecb1fed5c74ca1b2142bac5b745eb2a06a571495f509d1d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://297d06970b830abc08c05d98584e8e75d75b0608d0f164626c93c9599f2f90e2\",\"dweb:/ipfs/QmSajnGaYN86guAAU5hLPgDikQHWrHf4wDcXqMovWYmhNA\"]},\"contracts/contracts/l2/staking/IL2StakingTypes.sol\":{\"keccak256\":\"0x650d0ed818c484f150d5f3e9e660e49e389a015614be3a7600d2dd9736f3553f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e62ce598c051ed3db4d8223c9aecda20c75e461f7fd353deb23b22a0d40e6653\",\"dweb:/ipfs/QmX4fDajYjZrg4zv9SSAMRXCycKQkyhuiYByvNyBKGRFMv\"]},\"contracts/contracts/staking/IStaking.sol\":{\"keccak256\":\"0x03722c5a476d36d265097d307576f49cacb7ada011d3bc4fbf3451d238c3b17b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5aa002cb6b88cfc397b05eaf3dccacf625ae022756673a6646c8a8601878b577\",\"dweb:/ipfs/QmdQotqPKcxfm1aguH1S482am9KTqXXxWGEiY9ew7zmS5D\"]},\"contracts/contracts/staking/IStakingBase.sol\":{\"keccak256\":\"0xb7feff377d26ccba1d8f010af6d1697812409d39161206832284d1815ff67f25\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://606a67e762e9897af74615f60fb71b8ced316be996a690fb76e0cf063611765f\",\"dweb:/ipfs/QmaAB2yFQAW2qhF6Rb9r4R2Qo1NvKnpnW2Xrb58byWybMS\"]},\"contracts/contracts/staking/IStakingData.sol\":{\"keccak256\":\"0x538d86b0f64b89bfaa1257a38b38e94bf24c4314793fb15c0d078fb0c6e5a0b5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4e76933e6d57b778dfec8f8154c940dbbc217432fdfc2bd4aa0506f359d31509\",\"dweb:/ipfs/QmT9BhCaD4yGiYWo6ZCKY2mVEFp3XwMFS3HkhRU55BQBRa\"]},\"contracts/contracts/staking/IStakingExtension.sol\":{\"keccak256\":\"0x002814ddee1a132e0dd32a13db8a8722a3e02bc73c10f99b542fb0e518d8e562\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1dfe0ac4eb1aff4859416ae11725e6eb5b1b91fcf1156b4bcfb0242178262536\",\"dweb:/ipfs/QmcLRgfzy58cvDjrkdC3u9KV9jS2WyLFAnUQnLNmtUunSG\"]},\"contracts/contracts/staking/libs/IStakes.sol\":{\"keccak256\":\"0x8f1f7b3b8d8a4018223ecdf200d8cb48d31cf055e1b6ed20fb035e226ab4c376\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1fa5cf676a93c23dd0a380908940fe51b22297681b06fd06045a387824b1ba77\",\"dweb:/ipfs/QmUJ6Buv42R5KLVpZE9Bo5YwxoVk7URJERfQindABstWbk\"]}},\"version\":1}"}},"contracts/contracts/l2/staking/IL2StakingBase.sol":{"IL2StakingBase":{"abi":[{"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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"onTokenTransfer(address,uint256,bytes)":"a4c0ed36"}},"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\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredDelegationReturnedToDelegator\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"details\":\"Note it includes only the L2-specific functionality, not the full IStaking interface.\",\"events\":{\"TransferredDelegationReturnedToDelegator(address,address,uint256)\":{\"params\":{\"amount\":\"Amount of delegation returned\",\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer\"}}},\"kind\":\"dev\",\"methods\":{\"onTokenTransfer(address,uint256,bytes)\":{\"params\":{\"amount\":\"Amount of tokens that were transferred\",\"data\":\"ABI-encoded callhook data\",\"from\":\"Token sender in L1\"}}},\"title\":\"Base interface for the L2Staking contract.\",\"version\":1},\"userdoc\":{\"events\":{\"TransferredDelegationReturnedToDelegator(address,address,uint256)\":{\"notice\":\"Emitted when transferred delegation is returned to a delegator\"}},\"kind\":\"user\",\"methods\":{\"onTokenTransfer(address,uint256,bytes)\":{\"notice\":\"Receive tokens with a callhook from the bridge\"}},\"notice\":\"This interface is used to define the callhook receiver interface that is implemented by L2Staking.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/l2/staking/IL2StakingBase.sol\":\"IL2StakingBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/gateway/ICallhookReceiver.sol\":{\"keccak256\":\"0x28a1eb7c540b648665b036dfb17d4b19264a23e2e34b6d3888763a826e19fcfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://96de7cf683662f68d2e5105a8f322c06c2a71e6fe5d7d5e47b41fb98be55aef7\",\"dweb:/ipfs/QmPkaFVtohPWBMgwNcQriQgPGWNxQY774HjY73zDDKeKMM\"]},\"contracts/contracts/l2/staking/IL2StakingBase.sol\":{\"keccak256\":\"0xdb8e58971bfc40f26ecb1fed5c74ca1b2142bac5b745eb2a06a571495f509d1d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://297d06970b830abc08c05d98584e8e75d75b0608d0f164626c93c9599f2f90e2\",\"dweb:/ipfs/QmSajnGaYN86guAAU5hLPgDikQHWrHf4wDcXqMovWYmhNA\"]}},\"version\":1}"}},"contracts/contracts/l2/staking/IL2StakingTypes.sol":{"IL2StakingTypes":{"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\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{},\"title\":\"IL2StakingTypes\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface defining types and enums used by L2 staking contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/l2/staking/IL2StakingTypes.sol\":\"IL2StakingTypes\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/l2/staking/IL2StakingTypes.sol\":{\"keccak256\":\"0x650d0ed818c484f150d5f3e9e660e49e389a015614be3a7600d2dd9736f3553f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e62ce598c051ed3db4d8223c9aecda20c75e461f7fd353deb23b22a0d40e6653\",\"dweb:/ipfs/QmX4fDajYjZrg4zv9SSAMRXCycKQkyhuiYByvNyBKGRFMv\"]}},\"version\":1}"}},"contracts/contracts/rewards/ILegacyRewardsManager.sol":{"ILegacyRewardsManager":{"abi":[{"inputs":[{"internalType":"address","name":"allocationID","type":"address"}],"name":"getRewards","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":{"getRewards(address)":"79ee54f7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"getRewards(address)\":{\"params\":{\"allocationID\":\"The allocation identifier\"},\"returns\":{\"_0\":\"The amount of accumulated rewards\"}}},\"title\":\"ILegacyRewardsManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRewards(address)\":{\"notice\":\"Get the accumulated rewards for a given allocation\"}},\"notice\":\"Interface for the legacy rewards manager contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/rewards/ILegacyRewardsManager.sol\":\"ILegacyRewardsManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/rewards/ILegacyRewardsManager.sol\":{\"keccak256\":\"0x3d458b35f37419f61901714431550d2a21987c9e4d7c19a6257cf53b7b7db35c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://53992786889d9785077771252d65707025c7aa67f7ed6dcb5dab78f6c03f394e\",\"dweb:/ipfs/Qmd6Wky9F2bdAUSFR3wpc8N1YMdf7Ns4Lr4arLPrk6v4Aq\"]}},\"version\":1}"}},"contracts/contracts/rewards/IRewardsIssuer.sol":{"IRewardsIssuer":{"abi":[{"inputs":[{"internalType":"address","name":"allocationId","type":"address"}],"name":"getAllocationData","outputs":[{"internalType":"bool","name":"isActive","type":"bool"},{"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"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getAllocationData(address)":"55c85269","getSubgraphAllocatedTokens(bytes32)":"e2e1e8e9"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"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\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"getAllocationData(address)\":{\"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\",\"isActive\":\"Whether the allocation is active or not\",\"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\"}}},\"title\":\"Rewards Issuer Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAllocationData(address)\":{\"notice\":\"Get allocation data to calculate rewards issuance\"},\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"}},\"notice\":\"Interface for contracts that issue rewards based on allocation data\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/rewards/IRewardsIssuer.sol\":\"IRewardsIssuer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0xd937edb011bce015702a25c6841a8dc3ffb47b4de56bc45f82af965b7e578ccc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e95d49c3e91a0f21b17a34bc85d29b56a1fcc6ed8d3a72db3d9a5baee94ecc10\",\"dweb:/ipfs/QmQAxear764tqcaSyXP7BQgxDk5GpazL4wZKdHzt1asWpm\"]}},\"version\":1}"}},"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":"rewardsIssuer","type":"address"},{"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":"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,address)":"779bcb9b","isDenied(bytes32)":"e820e284","onSubgraphAllocationUpdate(bytes32)":"eeac3e0e","onSubgraphSignalUpdate(bytes32)":"1d1c2fec","setDenied(bytes32,bool)":"1324a506","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\":\"rewardsIssuer\",\"type\":\"address\"},{\"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\":\"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\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"calcRewards(uint256,uint256)\":{\"params\":{\"accRewardsPerAllocatedToken\":\"The accumulated rewards per allocated token\",\"tokens\":\"The number of tokens allocated\"},\"returns\":{\"_0\":\"The calculated rewards amount\"}},\"getAccRewardsForSubgraph(bytes32)\":{\"params\":{\"subgraphDeploymentID\":\"The subgraph deployment ID\"},\"returns\":{\"_0\":\"The accumulated rewards for the subgraph\"}},\"getAccRewardsPerAllocatedToken(bytes32)\":{\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment\"},\"returns\":{\"_0\":\"Accumulated rewards per allocated token for the subgraph\",\"_1\":\"Accumulated rewards for subgraph\"}},\"getAccRewardsPerSignal()\":{\"returns\":{\"_0\":\"Currently accumulated rewards per signal\"}},\"getNewRewardsPerSignal()\":{\"returns\":{\"_0\":\"newly accrued rewards per signal since last update\"}},\"getRewards(address,address)\":{\"params\":{\"allocationID\":\"Allocation\",\"rewardsIssuer\":\"The rewards issuer contract\"},\"returns\":{\"_0\":\"Rewards amount for an allocation\"}},\"isDenied(bytes32)\":{\"params\":{\"subgraphDeploymentID\":\"The subgraph deployment ID to check\"},\"returns\":{\"_0\":\"True if the subgraph is denied, false otherwise\"}},\"onSubgraphAllocationUpdate(bytes32)\":{\"details\":\"Must be called before allocation on a subgraph changes. Hook called from the Staking contract on allocate() and close()\",\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment\"},\"returns\":{\"_0\":\"Accumulated rewards per allocated token for a subgraph\"}},\"onSubgraphSignalUpdate(bytes32)\":{\"details\":\"Must be called before `signalled GRT` on a subgraph changes. Hook called from the Curation contract on mint() and burn()\",\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment\"},\"returns\":{\"_0\":\"Accumulated rewards for subgraph\"}},\"setDenied(bytes32,bool)\":{\"params\":{\"deny\":\"True to deny, false to allow\",\"subgraphDeploymentID\":\"The subgraph deployment ID\"}},\"setIssuancePerBlock(uint256)\":{\"params\":{\"issuancePerBlock\":\"The amount of tokens to issue per block\"}},\"setMinimumSubgraphSignal(uint256)\":{\"details\":\"Can be set to zero which means that this feature is not being used\",\"params\":{\"minimumSubgraphSignal\":\"Minimum signaled tokens\"}},\"setSubgraphAvailabilityOracle(address)\":{\"params\":{\"subgraphAvailabilityOracle\":\"The address of the subgraph availability oracle\"}},\"setSubgraphService(address)\":{\"params\":{\"subgraphService\":\"Address of the subgraph service contract\"}},\"takeRewards(address)\":{\"details\":\"This function can only be called by the Staking contract. This function will mint the necessary tokens to reward based on the inflation calculation.\",\"params\":{\"allocationID\":\"Allocation\"},\"returns\":{\"_0\":\"Assigned rewards amount\"}},\"updateAccRewardsPerSignal()\":{\"details\":\"Must be called before `issuancePerBlock` or `total signalled GRT` changes. Called from the Curation contract on mint() and burn()\",\"returns\":{\"_0\":\"Accumulated rewards per signal\"}}},\"title\":\"IRewardsManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"calcRewards(uint256,uint256)\":{\"notice\":\"Calculate rewards based on tokens and accumulated rewards per allocated token\"},\"getAccRewardsForSubgraph(bytes32)\":{\"notice\":\"Get the accumulated rewards for a specific subgraph\"},\"getAccRewardsPerAllocatedToken(bytes32)\":{\"notice\":\"Gets the accumulated rewards per allocated token for the subgraph\"},\"getAccRewardsPerSignal()\":{\"notice\":\"Gets the currently accumulated rewards per signal\"},\"getNewRewardsPerSignal()\":{\"notice\":\"Gets the issuance of rewards per signal since last updated\"},\"getRewards(address,address)\":{\"notice\":\"Calculate current rewards for a given allocation on demand\"},\"isDenied(bytes32)\":{\"notice\":\"Check if a subgraph deployment is denied\"},\"onSubgraphAllocationUpdate(bytes32)\":{\"notice\":\"Triggers an update of rewards for a subgraph\"},\"onSubgraphSignalUpdate(bytes32)\":{\"notice\":\"Triggers an update of rewards for a subgraph\"},\"setDenied(bytes32,bool)\":{\"notice\":\"Set the denied status for a subgraph deployment\"},\"setIssuancePerBlock(uint256)\":{\"notice\":\"Set the issuance per block for rewards distribution\"},\"setMinimumSubgraphSignal(uint256)\":{\"notice\":\"Sets the minimum signaled tokens on a subgraph to start accruing rewards\"},\"setSubgraphAvailabilityOracle(address)\":{\"notice\":\"Set the subgraph availability oracle address\"},\"setSubgraphService(address)\":{\"notice\":\"Set the subgraph service address\"},\"takeRewards(address)\":{\"notice\":\"Pull rewards from the contract for a particular allocation\"},\"updateAccRewardsPerSignal()\":{\"notice\":\"Updates the accumulated rewards per signal and save checkpoint block number\"}},\"notice\":\"Interface for the RewardsManager contract that handles reward distribution\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/rewards/IRewardsManager.sol\":\"IRewardsManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0xfe6d73832d6f1b4b237f42d56a28f3d4a38c338c075b4bc9c9144738ece67f59\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://75dc9b424c57ef8b354bc94b217d8d9703ce7bdcb9270425d0ed4de2865c9fd3\",\"dweb:/ipfs/QmczzdGxLwf5rxUNXSu2FkUKE8PjUrJF2kG8Ck7XqqQjEM\"]}},\"version\":1}"}},"contracts/contracts/staking/IL1GraphTokenLockTransferTool.sol":{"IL1GraphTokenLockTransferTool":{"abi":[{"inputs":[{"internalType":"address","name":"l1Wallet","type":"address"}],"name":"l2WalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"l1Wallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pullETH","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"l2WalletAddress(address)":"e7db8309","pullETH(address,uint256)":"8f8295f7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l1Wallet\",\"type\":\"address\"}],\"name\":\"l2WalletAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l1Wallet\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"pullETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"l2WalletAddress(address)\":{\"details\":\"In the actual L1GraphTokenLockTransferTool contract, this is simply the default getter for a public mapping variable.\",\"params\":{\"l1Wallet\":\"Address of the L1 token lock wallet\"},\"returns\":{\"_0\":\"Address of the L2 token lock wallet if the wallet has an L2 counterpart, or address zero if the wallet doesn't have an L2 counterpart (or is not known to be a token lock wallet).\"}},\"pullETH(address,uint256)\":{\"details\":\"This function is only callable by the staking contract.\",\"params\":{\"amount\":\"Amount of ETH to pull from the transfer tool contract\",\"l1Wallet\":\"Address of the L1 token lock wallet\"}}},\"title\":\"Interface for the L1GraphTokenLockTransferTool contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"l2WalletAddress(address)\":{\"notice\":\"Get the L2 token lock wallet address for a given L1 token lock wallet\"},\"pullETH(address,uint256)\":{\"notice\":\"Pulls ETH from an L1 wallet's account to use for L2 ticket gas.\"}},\"notice\":\"This interface defines the function to get the L2 wallet address for a given L1 token lock wallet. The Transfer Tool contract is implemented in the token-distribution repo: https://github.com/graphprotocol/token-distribution/pull/64 and is only included here to provide support in L1Staking for the transfer of stake and delegation owned by token lock contracts. See GIP-0046 for details: https://forum.thegraph.com/t/4023\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/staking/IL1GraphTokenLockTransferTool.sol\":\"IL1GraphTokenLockTransferTool\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/staking/IL1GraphTokenLockTransferTool.sol\":{\"keccak256\":\"0x61760ab9e87af83bb734387e2758a1130dd2690067cb354d493a905a68c06ce0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f2becc86bf9341a1aa3fdde631b0d61a6c9b7716a8b0930b89e524374e602c65\",\"dweb:/ipfs/QmUgiD4u2bSHe7TtqhLeUyrawGs5VUY5KunvariACoLnyB\"]}},\"version\":1}"}},"contracts/contracts/staking/IL1Staking.sol":{"IL1Staking":{"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":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":"bytes32","name":"metadata","type":"bytes32"}],"name":"AllocationCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"__DEPRECATED_cooldownBlocks","type":"uint32"}],"name":"DelegationParametersUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"l2Delegator","type":"address"},{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"address","name":"l2Indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"transferredDelegationTokens","type":"uint256"}],"name":"DelegationTransferredToL2","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"extensionImpl","type":"address"}],"name":"ExtensionImplementationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"l2Indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"transferredStakeTokens","type":"uint256"}],"name":"IndexerStakeTransferredToL2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"l1GraphTokenLockTransferTool","type":"address"}],"name":"L1GraphTokenLockTransferToolSet","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":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"SetOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"destination","type":"address"}],"name":"SetRewardsDestination","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"slasher","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"SlasherUpdate","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":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"StakeDelegated","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":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"until","type":"uint256"}],"name":"StakeDelegatedLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"delegator","type":"address"}],"name":"StakeDelegatedUnlockedDueToL2Transfer","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":"tokens","type":"uint256"}],"name":"StakeDelegatedWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","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":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":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"}],"name":"StakeSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"StakeWithdrawn","type":"event"},{"inputs":[{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"allocationID","type":"address"},{"internalType":"bytes32","name":"metadata","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"allocate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"allocationID","type":"address"},{"internalType":"bytes32","name":"metadata","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"allocateFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"allocationID","type":"address"}],"name":"allocations","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 IStakingData.Allocation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaDenominator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curationPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"delegate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"delegationPools","outputs":[{"components":[{"internalType":"uint32","name":"__DEPRECATED_cooldownBlocks","type":"uint32"},{"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"internalType":"uint256","name":"updatedAtBlock","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"}],"internalType":"struct IStakingExtension.DelegationPoolReturn","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationRatio","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationTaxPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationUnbondingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","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 IStakingData.Allocation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"allocationID","type":"address"}],"name":"getAllocationData","outputs":[{"internalType":"bool","name":"","type":"bool"},{"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 IStakingBase.AllocationState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"delegator","type":"address"}],"name":"getDelegation","outputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakingData.Delegation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"getIndexerCapacity","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":[{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"}],"name":"getSubgraphAllocatedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakingData.Delegation","name":"delegation","type":"tuple"}],"name":"getWithdraweableDelegatedTokens","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":"controller","type":"address"},{"internalType":"uint256","name":"minimumIndexerStake","type":"uint256"},{"internalType":"uint32","name":"thawingPeriod","type":"uint32"},{"internalType":"uint32","name":"protocolPercentage","type":"uint32"},{"internalType":"uint32","name":"curationPercentage","type":"uint32"},{"internalType":"uint32","name":"maxAllocationEpochs","type":"uint32"},{"internalType":"uint32","name":"delegationUnbondingPeriod","type":"uint32"},{"internalType":"uint32","name":"delegationRatio","type":"uint32"},{"components":[{"internalType":"uint32","name":"alphaNumerator","type":"uint32"},{"internalType":"uint32","name":"alphaDenominator","type":"uint32"},{"internalType":"uint32","name":"lambdaNumerator","type":"uint32"},{"internalType":"uint32","name":"lambdaDenominator","type":"uint32"}],"internalType":"struct IStakingData.RebatesParameters","name":"rebatesParameters","type":"tuple"},{"internalType":"address","name":"extensionImpl","type":"address"}],"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":"allocationID","type":"address"}],"name":"isAllocation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"delegator","type":"address"}],"name":"isDelegator","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":[],"name":"lambdaDenominator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lambdaNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAllocationEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumIndexerStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"indexer","type":"address"},{"internalType":"address","name":"maybeOperator","type":"address"}],"name":"operatorAuth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"rewardsDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newController","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"counterpart","type":"address"}],"name":"setCounterpartStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setCurationPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"internalType":"uint32","name":"cooldownBlocks","type":"uint32"}],"name":"setDelegationParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newDelegationRatio","type":"uint32"}],"name":"setDelegationRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setDelegationTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newDelegationUnbondingPeriod","type":"uint32"}],"name":"setDelegationUnbondingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"extensionImpl","type":"address"}],"name":"setExtensionImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IL1GraphTokenLockTransferTool","name":"l1GraphTokenLockTransferTool","type":"address"}],"name":"setL1GraphTokenLockTransferTool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"maxAllocationEpochs","type":"uint32"}],"name":"setMaxAllocationEpochs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minimumIndexerStake","type":"uint256"}],"name":"setMinimumIndexerStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setProtocolPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"setRebateParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"name":"setRewardsDestination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"slasher","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setSlasher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"thawingPeriod","type":"uint32"}],"name":"setThawingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"slash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"maybeSlasher","type":"address"}],"name":"slashers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"stakeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"stakes","outputs":[{"components":[{"internalType":"uint256","name":"tokensStaked","type":"uint256"},{"internalType":"uint256","name":"tokensAllocated","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakes.Indexer","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"subgraphDeploymentId","type":"bytes32"}],"name":"subgraphAllocations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"syncAllContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thawingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"l2Beneficiary","type":"address"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"name":"transferDelegationToL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"name":"transferLockedDelegationToL2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"name":"transferLockedStakeToL2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"l2Beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"name":"transferStakeToL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"undelegate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"unlockDelegationToTransferredIndexer","outputs":[],"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":"indexer","type":"address"},{"internalType":"address","name":"newIndexer","type":"address"}],"name":"withdrawDelegated","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":{"allocate(bytes32,uint256,address,bytes32,bytes)":"a6fe292b","allocateFrom(address,bytes32,uint256,address,bytes32,bytes)":"23477e48","allocations(address)":"52a9039c","alphaDenominator()":"ce853613","alphaNumerator()":"7ef82070","closeAllocation(address,bytes32)":"44c32a61","collect(uint256,address)":"8d3c100a","controller()":"f77c4791","curationPercentage()":"85b52ad0","delegate(address,uint256)":"026e402b","delegationPools(address)":"92511c8f","delegationRatio()":"bfdfa7af","delegationTaxPercentage()":"e6aeb796","delegationUnbondingPeriod()":"b6846e47","getAllocation(address)":"0e022923","getAllocationData(address)":"55c85269","getAllocationState(address)":"98c657dc","getDelegation(address,address)":"15049a5a","getIndexerCapacity(address)":"a510be20","getIndexerStakedTokens(address)":"1787e69f","getSubgraphAllocatedTokens(bytes32)":"e2e1e8e9","getWithdraweableDelegatedTokens((uint256,uint256,uint256))":"130bea57","hasStake(address)":"e73e14bf","initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)":"687fe40e","isActiveAllocation(address)":"6a3ca383","isAllocation(address)":"f1d60d66","isDelegator(address,address)":"a0e11929","isOperator(address,address)":"b6363cf2","lambdaDenominator()":"4b8a9b8e","lambdaNumerator()":"09da07f7","maxAllocationEpochs()":"fb765938","minimumIndexerStake()":"f2485bf2","multicall(bytes[])":"ac9650d8","operatorAuth(address,address)":"e2e94656","protocolPercentage()":"a26b90f2","rewardsDestination(address)":"7203ca78","setController(address)":"92eefe9b","setCounterpartStakingAddress(address)":"1ae72045","setCurationPercentage(uint32)":"39dcf476","setDelegationParameters(uint32,uint32,uint32)":"9dcaa6c9","setDelegationRatio(uint32)":"1dd42f60","setDelegationTaxPercentage(uint32)":"e6dc5a1c","setDelegationUnbondingPeriod(uint32)":"5e9a6392","setExtensionImpl(address)":"6948a78c","setL1GraphTokenLockTransferTool(address)":"f0c2d66c","setMaxAllocationEpochs(uint32)":"2652d75e","setMinimumIndexerStake(uint256)":"ddb8b131","setOperator(address,bool)":"558a7297","setProtocolPercentage(uint32)":"9a48bf83","setRebateParameters(uint32,uint32,uint32,uint32)":"69286e47","setRewardsDestination(address)":"772495c3","setSlasher(address,bool)":"52348080","setThawingPeriod(uint32)":"32bc9108","slash(address,uint256,uint256,address)":"e76fede6","slashers(address)":"b87fcbff","stake(uint256)":"a694fc3a","stakeTo(address,uint256)":"a2a31722","stakes(address)":"16934fc4","subgraphAllocations(bytes32)":"b1468f52","syncAllContracts()":"d6866ea5","thawingPeriod()":"cdc747dd","transferDelegationToL2(address,address,uint256,uint256,uint256)":"bb8d57c9","transferLockedDelegationToL2(address,uint256,uint256,uint256)":"0a6655a0","transferLockedStakeToL2(uint256,uint256,uint256,uint256)":"42f543ae","transferStakeToL2(address,uint256,uint256,uint256,uint256)":"cbf0fdfe","undelegate(address,uint256)":"4d99dd16","unlockDelegationToTransferredIndexer(address)":"2fd43482","unstake(uint256)":"2e17de78","withdraw()":"3ccfd60b","withdrawDelegated(address,address)":"51a60b02"}},"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\":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\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"}],\"name\":\"AllocationCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"__DEPRECATED_cooldownBlocks\",\"type\":\"uint32\"}],\"name\":\"DelegationParametersUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transferredDelegationTokens\",\"type\":\"uint256\"}],\"name\":\"DelegationTransferredToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"name\":\"ExtensionImplementationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transferredStakeTokens\",\"type\":\"uint256\"}],\"name\":\"IndexerStakeTransferredToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l1GraphTokenLockTransferTool\",\"type\":\"address\"}],\"name\":\"L1GraphTokenLockTransferToolSet\",\"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\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"SetOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"SetRewardsDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"SlasherUpdate\",\"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\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"StakeDelegated\",\"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\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"StakeDelegatedUnlockedDueToL2Transfer\",\"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\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"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\":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\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"StakeSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"allocate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"allocateFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"allocations\",\"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 IStakingData.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alphaDenominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alphaNumerator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"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\":[],\"name\":\"controller\",\"outputs\":[{\"internalType\":\"contract IController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"curationPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"delegationPools\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"__DEPRECATED_cooldownBlocks\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"updatedAtBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingExtension.DelegationPoolReturn\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationTaxPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"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 IStakingData.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"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 IStakingBase.AllocationState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"getDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingData.Delegation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getIndexerCapacity\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingData.Delegation\",\"name\":\"delegation\",\"type\":\"tuple\"}],\"name\":\"getWithdraweableDelegatedTokens\",\"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\":\"controller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minimumIndexerStake\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"thawingPeriod\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"protocolPercentage\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"curationPercentage\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxAllocationEpochs\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"delegationUnbondingPeriod\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"alphaNumerator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"alphaDenominator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lambdaNumerator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lambdaDenominator\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakingData.RebatesParameters\",\"name\":\"rebatesParameters\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"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\":\"allocationID\",\"type\":\"address\"}],\"name\":\"isAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"isDelegator\",\"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\":[],\"name\":\"lambdaDenominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lambdaNumerator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAllocationEpochs\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumIndexerStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"maybeOperator\",\"type\":\"address\"}],\"name\":\"operatorAuth\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"rewardsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newController\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpart\",\"type\":\"address\"}],\"name\":\"setCounterpartStakingAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setCurationPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"cooldownBlocks\",\"type\":\"uint32\"}],\"name\":\"setDelegationParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDelegationRatio\",\"type\":\"uint32\"}],\"name\":\"setDelegationRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setDelegationTaxPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDelegationUnbondingPeriod\",\"type\":\"uint32\"}],\"name\":\"setDelegationUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"name\":\"setExtensionImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IL1GraphTokenLockTransferTool\",\"name\":\"l1GraphTokenLockTransferTool\",\"type\":\"address\"}],\"name\":\"setL1GraphTokenLockTransferTool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxAllocationEpochs\",\"type\":\"uint32\"}],\"name\":\"setMaxAllocationEpochs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumIndexerStake\",\"type\":\"uint256\"}],\"name\":\"setMinimumIndexerStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setProtocolPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"setRebateParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"setRewardsDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"slasher\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"thawingPeriod\",\"type\":\"uint32\"}],\"name\":\"setThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"maybeSlasher\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"stakes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokensStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensAllocated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakes.Indexer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"subgraphAllocations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"syncAllContracts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"thawingPeriod\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2Beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"name\":\"transferDelegationToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"name\":\"transferLockedDelegationToL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"name\":\"transferLockedStakeToL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"name\":\"transferStakeToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"unlockDelegationToTransferredIndexer\",\"outputs\":[],\"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\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newIndexer\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"details\":\"Note that L1Staking doesn't actually inherit this interface. This is because of 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.\",\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"epoch\":\"Epoch when allocation was closed\",\"indexer\":\"Address of the indexer\",\"isPublic\":\"True if closed by someone other than the indexer\",\"poi\":\"Proof of indexing submitted\",\"sender\":\"Address that closed the allocation\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Amount of tokens unallocated\"}},\"AllocationCreated(address,bytes32,uint256,uint256,address,bytes32)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"epoch\":\"Epoch when allocation was created\",\"indexer\":\"Address of the indexer\",\"metadata\":\"IPFS hash for additional allocation information\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Amount of tokens allocated\"}},\"DelegationParametersUpdated(address,uint32,uint32,uint32)\":{\"params\":{\"__DEPRECATED_cooldownBlocks\":\"Deprecated parameter (no longer used)\",\"indexer\":\"Address of the indexer\",\"indexingRewardCut\":\"Percentage of indexing rewards left for the indexer\",\"queryFeeCut\":\"Percentage of query fees left for the indexer\"}},\"DelegationTransferredToL2(address,address,address,address,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator on L1\",\"indexer\":\"Address of the indexer on L1\",\"l2Delegator\":\"Address of the delegator on L2\",\"l2Indexer\":\"Address of the indexer on L2\",\"transferredDelegationTokens\":\"Amount of delegation tokens transferred\"}},\"ExtensionImplementationSet(address)\":{\"params\":{\"extensionImpl\":\"Address of the StakingExtension implementation\"}},\"IndexerStakeTransferredToL2(address,address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer on L1\",\"l2Indexer\":\"Address of the indexer on L2\",\"transferredStakeTokens\":\"Amount of stake tokens transferred\"}},\"L1GraphTokenLockTransferToolSet(address)\":{\"params\":{\"l1GraphTokenLockTransferTool\":\"Address of the L1GraphTokenLockTransferTool contract\"}},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"assetHolder\":\"Address providing the rebate tokens\",\"curationFees\":\"Amount distributed to curators\",\"delegationRewards\":\"Amount distributed to delegators\",\"epoch\":\"Epoch when rebate was collected\",\"indexer\":\"Address of the indexer collecting the rebate\",\"protocolTax\":\"Amount burned as protocol tax\",\"queryFees\":\"Amount available for rebate after fees\",\"queryRebates\":\"Amount distributed to the indexer\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Total amount of tokens in the rebate\"}},\"SetOperator(address,address,bool)\":{\"params\":{\"allowed\":\"Whether the operator is authorized\",\"indexer\":\"Address of the indexer\",\"operator\":\"Address of the operator\"}},\"SetRewardsDestination(address,address)\":{\"params\":{\"destination\":\"Address to receive rewards\",\"indexer\":\"Address of the indexer\"}},\"SlasherUpdate(address,address,bool)\":{\"params\":{\"allowed\":\"Whether the slasher is allowed to slash\",\"caller\":\"Address that updated the slasher status\",\"slasher\":\"Address of the slasher\"}},\"StakeDelegated(address,address,uint256,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer receiving the delegation\",\"shares\":\"Amount of shares issued to the delegator\",\"tokens\":\"Amount of tokens delegated\"}},\"StakeDelegatedLocked(address,address,uint256,uint256,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer from which tokens are undelegated\",\"shares\":\"Amount of shares returned\",\"tokens\":\"Amount of tokens undelegated\",\"until\":\"Epoch until which tokens are locked\"}},\"StakeDelegatedUnlockedDueToL2Transfer(address,address)\":{\"params\":{\"delegator\":\"Address of the delegator unlocking their tokens\",\"indexer\":\"Address of the indexer that transferred to L2\"}},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer from which tokens are withdrawn\",\"tokens\":\"Amount of tokens withdrawn\"}},\"StakeDeposited(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens staked\"}},\"StakeLocked(address,uint256,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens locked\",\"until\":\"Block number until which tokens are locked\"}},\"StakeSlashed(address,uint256,uint256,address)\":{\"params\":{\"beneficiary\":\"Address receiving the reward\",\"indexer\":\"Address of the indexer that was slashed\",\"reward\":\"Amount of tokens given as reward\",\"tokens\":\"Total amount of tokens slashed\"}},\"StakeWithdrawn(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens withdrawn\"}}},\"kind\":\"dev\",\"methods\":{\"allocate(bytes32,uint256,address,bytes32,bytes)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"metadata\":\"IPFS hash for additional information about the allocation\",\"proof\":\"A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`\",\"subgraphDeploymentID\":\"ID of the SubgraphDeployment where tokens will be allocated\",\"tokens\":\"Amount of tokens to allocate\"}},\"allocateFrom(address,bytes32,uint256,address,bytes32,bytes)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"indexer\":\"Indexer address to allocate funds from.\",\"metadata\":\"IPFS hash for additional information about the allocation\",\"proof\":\"A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`\",\"subgraphDeploymentID\":\"ID of the SubgraphDeployment where tokens will be allocated\",\"tokens\":\"Amount of tokens to allocate\"}},\"allocations(address)\":{\"params\":{\"allocationID\":\"Allocation ID for which to query the allocation information\"},\"returns\":{\"_0\":\"The specified allocation, as an IStakingData.Allocation struct\"}},\"alphaDenominator()\":{\"returns\":{\"_0\":\"Alpha denominator\"}},\"alphaNumerator()\":{\"returns\":{\"_0\":\"Alpha numerator\"}},\"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\"}},\"controller()\":{\"returns\":{\"_0\":\"The Controller as an IController interface\"}},\"curationPercentage()\":{\"returns\":{\"_0\":\"Curation percentage in parts per million\"}},\"delegate(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer to which tokens are delegated\",\"tokens\":\"Amount of tokens to delegate\"},\"returns\":{\"_0\":\"Amount of shares issued from the delegation pool\"}},\"delegationPools(address)\":{\"params\":{\"indexer\":\"Address of the indexer for which to query the delegation pool\"},\"returns\":{\"_0\":\"Delegation pool as a DelegationPoolReturn struct\"}},\"delegationRatio()\":{\"returns\":{\"_0\":\"Delegation ratio\"}},\"delegationTaxPercentage()\":{\"returns\":{\"_0\":\"Delegation tax percentage in parts per million\"}},\"delegationUnbondingPeriod()\":{\"returns\":{\"_0\":\"Delegation unbonding period in epochs\"}},\"getAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as allocation identifier\"},\"returns\":{\"_0\":\"Allocation data\"}},\"getAllocationData(address)\":{\"details\":\"New function to get the allocation data for the rewards managerNote 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.\",\"params\":{\"allocationID\":\"The allocation ID\"},\"returns\":{\"_0\":\"active Whether the allocation is active\",\"_1\":\"indexer The indexer address\",\"_2\":\"subgraphDeploymentID The subgraph deployment ID\",\"_3\":\"tokens The allocated tokens\",\"_4\":\"createdAtEpoch The epoch when allocation was created\",\"_5\":\"closedAtEpoch The epoch when allocation was closed\"}},\"getAllocationState(address)\":{\"params\":{\"allocationID\":\"Allocation identifier\"},\"returns\":{\"_0\":\"AllocationState enum with the state of the allocation\"}},\"getDelegation(address,address)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer where funds have been delegated\"},\"returns\":{\"_0\":\"Delegation data\"}},\"getIndexerCapacity(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"Amount of tokens available to allocate including delegation\"}},\"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\"}},\"getWithdraweableDelegatedTokens((uint256,uint256,uint256))\":{\"params\":{\"delegation\":\"Delegation of tokens from delegator to indexer\"},\"returns\":{\"_0\":\"Amount of tokens to withdraw\"}},\"hasStake(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"True if indexer has staked tokens\"}},\"initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)\":{\"params\":{\"controller\":\"Address of the controller that manages this contract\",\"curationPercentage\":\"Percentage of query fees that are given to curators (in PPM)\",\"delegationRatio\":\"The ratio between an indexer's own stake and the delegation they can use\",\"delegationUnbondingPeriod\":\"The period in epochs that tokens get locked after undelegating\",\"extensionImpl\":\"Address of the StakingExtension implementation\",\"maxAllocationEpochs\":\"The maximum number of epochs that an allocation can be active\",\"minimumIndexerStake\":\"Minimum amount of tokens that an indexer must stake\",\"protocolPercentage\":\"Percentage of query fees that are burned as protocol fee (in PPM)\",\"rebatesParameters\":\"Alpha and lambda parameters for rebates function\",\"thawingPeriod\":\"Number of blocks that tokens get locked after unstaking\"}},\"isActiveAllocation(address)\":{\"details\":\"New function to get the allocation active status for the rewards managerNote 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.\",\"params\":{\"allocationID\":\"The allocation identifier\"},\"returns\":{\"_0\":\"True if the allocation is active, false otherwise\"}},\"isAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as signer by the indexer for an allocation\"},\"returns\":{\"_0\":\"True if allocationID already used\"}},\"isDelegator(address,address)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer where funds have been delegated\"},\"returns\":{\"_0\":\"True if delegator has tokens delegated to the indexer\"}},\"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\"}},\"lambdaDenominator()\":{\"returns\":{\"_0\":\"Lambda denominator\"}},\"lambdaNumerator()\":{\"returns\":{\"_0\":\"Lambda numerator\"}},\"maxAllocationEpochs()\":{\"returns\":{\"_0\":\"Maximum allocation period in epochs\"}},\"minimumIndexerStake()\":{\"returns\":{\"_0\":\"Minimum indexer stake in GRT\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"operatorAuth(address,address)\":{\"params\":{\"indexer\":\"The indexer address for which to query authorization\",\"maybeOperator\":\"The address that may or may not be an operator\"},\"returns\":{\"_0\":\"True if the operator is authorized to operate on behalf of the indexer\"}},\"protocolPercentage()\":{\"returns\":{\"_0\":\"Protocol percentage in parts per million\"}},\"rewardsDestination(address)\":{\"params\":{\"indexer\":\"The indexer address for which to query the rewards destination\"},\"returns\":{\"_0\":\"The address where the indexer's rewards are sent, zero if none is set in which case rewards are re-staked\"}},\"setController(address)\":{\"details\":\"Only the current controller can set a new controller\",\"params\":{\"newController\":\"Address of the new controller\"}},\"setCounterpartStakingAddress(address)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"counterpart\":\"Address of the counterpart staking contract in the other chain, without any aliasing.\"}},\"setCurationPercentage(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"percentage\":\"Percentage of query fees sent to curators\"}},\"setDelegationParameters(uint32,uint32,uint32)\":{\"params\":{\"cooldownBlocks\":\"Deprecated cooldown blocks parameter (no longer used)\",\"indexingRewardCut\":\"Percentage of indexing rewards left for the indexer\",\"queryFeeCut\":\"Percentage of query fees left for the indexer\"}},\"setDelegationRatio(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"newDelegationRatio\":\"Delegation capacity multiplier\"}},\"setDelegationTaxPercentage(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"percentage\":\"Percentage of delegated tokens to burn as delegation tax, expressed in parts per million\"}},\"setDelegationUnbondingPeriod(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"newDelegationUnbondingPeriod\":\"Period in epochs to wait for token withdrawals after undelegating\"}},\"setExtensionImpl(address)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"extensionImpl\":\"Address of the StakingExtension implementation\"}},\"setL1GraphTokenLockTransferTool(address)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"l1GraphTokenLockTransferTool\":\"Address of the L1GraphTokenLockTransferTool contract\"}},\"setMaxAllocationEpochs(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"maxAllocationEpochs\":\"Allocation duration limit in epochs\"}},\"setMinimumIndexerStake(uint256)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"minimumIndexerStake\":\"Minimum amount of tokens that an indexer must stake\"}},\"setOperator(address,bool)\":{\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\"}},\"setProtocolPercentage(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"percentage\":\"Percentage of query fees to burn as protocol fee\"}},\"setRebateParameters(uint32,uint32,uint32,uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"alphaDenominator\":\"Denominator of `alpha`\",\"alphaNumerator\":\"Numerator of `alpha`\",\"lambdaDenominator\":\"Denominator of `lambda`\",\"lambdaNumerator\":\"Numerator of `lambda`\"}},\"setRewardsDestination(address)\":{\"params\":{\"destination\":\"Rewards destination address. If set to zero, rewards will be restaked\"}},\"setSlasher(address,bool)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"allowed\":\"True if slasher is allowed\",\"slasher\":\"Address of the party allowed to slash indexers\"}},\"setThawingPeriod(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"thawingPeriod\":\"Number of blocks that tokens get locked after unstaking\"}},\"slash(address,uint256,uint256,address)\":{\"details\":\"Can only be called by the slasher role.\",\"params\":{\"beneficiary\":\"Address of a beneficiary to receive a reward for the slashing\",\"indexer\":\"Address of indexer to slash\",\"reward\":\"Amount of reward tokens to send to a beneficiary\",\"tokens\":\"Amount of tokens to slash from the indexer stake\"}},\"slashers(address)\":{\"params\":{\"maybeSlasher\":\"Address for which to check the slasher role\"},\"returns\":{\"_0\":\"True if the address is a slasher\"}},\"stake(uint256)\":{\"params\":{\"tokens\":\"Amount of tokens to stake\"}},\"stakeTo(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens to stake\"}},\"stakes(address)\":{\"params\":{\"indexer\":\"Indexer address for which to query the stake information\"},\"returns\":{\"_0\":\"Stake information for the specified indexer, as a IStakes.Indexer struct\"}},\"subgraphAllocations(bytes32)\":{\"params\":{\"subgraphDeploymentId\":\"The subgraph deployment for which to query the allocations\"},\"returns\":{\"_0\":\"The amount of tokens allocated to the subgraph deployment\"}},\"syncAllContracts()\":{\"details\":\"This function will cache all the contracts using the latest addresses. Anyone can call the function whenever a Proxy contract change in the controller to ensure the protocol is using the latest version.\"},\"thawingPeriod()\":{\"returns\":{\"_0\":\"Thawing period in blocks\"}},\"transferDelegationToL2(address,address,uint256,uint256,uint256)\":{\"details\":\"This function can only be called by the delegator. This function will validate that the indexer has transferred their stake using transferStakeToL2, and that the delegation is not locked for undelegation. Since the delegator's address might be an L1-only contract, the function takes a beneficiary address that will be the delegator's address in L2. The caller must provide an amount of ETH to use for the L2 retryable ticket, that must be at least `maxSubmissionCost + gasPriceBid * maxGas`.\",\"params\":{\"gasPriceBid\":\"Gas price bid for the L2 retryable ticket\",\"indexer\":\"Address of the indexer (in L1, before transferring to L2)\",\"l2Beneficiary\":\"Address of the delegator in L2\",\"maxGas\":\"Max gas to use for the L2 retryable ticket\",\"maxSubmissionCost\":\"Max submission cost for the L2 retryable ticket\"}},\"transferLockedDelegationToL2(address,uint256,uint256,uint256)\":{\"details\":\"This function can only be called by the delegator. This function will validate that the indexer has transferred their stake using transferStakeToL2, and that the delegation is not locked for undelegation. The L2 beneficiary for the delegation will be determined by calling the L1GraphTokenLockTransferTool contract, so the caller must have previously transferred tokens through that first (see GIP-0046 for details: https://forum.thegraph.com/t/4023). The ETH for the L2 gas will be pulled from the L1GraphTokenLockTransferTool, so the owner of the GraphTokenLockWallet must have previously deposited at least `maxSubmissionCost + gasPriceBid * maxGas` ETH into the L1GraphTokenLockTransferTool contract (using its depositETH function).\",\"params\":{\"gasPriceBid\":\"Gas price bid for the L2 retryable ticket\",\"indexer\":\"Address of the indexer (in L1, before transferring to L2)\",\"maxGas\":\"Max gas to use for the L2 retryable ticket\",\"maxSubmissionCost\":\"Max submission cost for the L2 retryable ticket\"}},\"transferLockedStakeToL2(uint256,uint256,uint256,uint256)\":{\"details\":\"This function can only be called by the indexer (not an operator). It will validate that the remaining stake is sufficient to cover all the allocated stake, so the indexer might have to close some allocations before transferring. It will also check that the indexer's stake is not locked for withdrawal. The L2 beneficiary for the stake will be determined by calling the L1GraphTokenLockTransferTool contract, so the caller must have previously transferred tokens through that first (see GIP-0046 for details: https://forum.thegraph.com/t/4023). The ETH for the L2 gas will be pulled from the L1GraphTokenLockTransferTool, so the owner of the GraphTokenLockWallet must have previously deposited at least `maxSubmissionCost + gasPriceBid * maxGas` ETH into the L1GraphTokenLockTransferTool contract (using its depositETH function).\",\"params\":{\"amount\":\"Amount of stake GRT to transfer to L2\",\"gasPriceBid\":\"Gas price bid for the L2 retryable ticket\",\"maxGas\":\"Max gas to use for the L2 retryable ticket\",\"maxSubmissionCost\":\"Max submission cost for the L2 retryable ticket\"}},\"transferStakeToL2(address,uint256,uint256,uint256,uint256)\":{\"details\":\"This function can only be called by the indexer (not an operator). It will validate that the remaining stake is sufficient to cover all the allocated stake, so the indexer might have to close some allocations before transferring. It will also check that the indexer's stake is not locked for withdrawal. Since the indexer address might be an L1-only contract, the function takes a beneficiary address that will be the indexer's address in L2. The caller must provide an amount of ETH to use for the L2 retryable ticket, that must be at least `maxSubmissionCost + gasPriceBid * maxGas`.\",\"params\":{\"amount\":\"Amount of stake GRT to transfer to L2\",\"gasPriceBid\":\"Gas price bid for the L2 retryable ticket\",\"l2Beneficiary\":\"Address of the indexer in L2. If the indexer has previously transferred stake, this must match the previously-used value.\",\"maxGas\":\"Max gas to use for the L2 retryable ticket\",\"maxSubmissionCost\":\"Max submission cost for the L2 retryable ticket\"}},\"undelegate(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer to which tokens had been delegated\",\"shares\":\"Amount of shares to return and undelegate tokens\"},\"returns\":{\"_0\":\"Amount of tokens returned for the shares of the delegation pool\"}},\"unlockDelegationToTransferredIndexer(address)\":{\"details\":\"This function can only be called by the delegator. This function will validate that the indexer has transferred their stake using transferStakeToL2, and that the indexer has no remaining stake in L1. The tokens must previously be locked for undelegation by calling `undelegate()`, and can be withdrawn with `withdrawDelegated()` immediately after calling this.\",\"params\":{\"indexer\":\"Address of the indexer (in L1, before transferring to L2)\"}},\"unstake(uint256)\":{\"details\":\"NOTE: The function accepts an amount greater than the currently staked tokens. If that happens, it will try to unstake the max amount of tokens it can. The reason for this behaviour is to avoid time conditions while the transaction is in flight.\",\"params\":{\"tokens\":\"Amount of tokens to unstake\"}},\"withdrawDelegated(address,address)\":{\"params\":{\"indexer\":\"Withdraw available tokens delegated to indexer\",\"newIndexer\":\"Re-delegate to indexer address if non-zero, withdraw if zero address\"},\"returns\":{\"_0\":\"Amount of tokens withdrawn\"}}},\"title\":\"Interface for the L1 Staking contract\",\"version\":1},\"userdoc\":{\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"notice\":\"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.\"},\"AllocationCreated(address,bytes32,uint256,uint256,address,bytes32)\":{\"notice\":\"Emitted when `indexer` allocated `tokens` amount to `subgraphDeploymentID` during `epoch`. `allocationID` indexer derived address used to identify the allocation. `metadata` additional information related to the allocation.\"},\"DelegationParametersUpdated(address,uint32,uint32,uint32)\":{\"notice\":\"Emitted when `indexer` update the delegation parameters for its delegation pool.\"},\"DelegationTransferredToL2(address,address,address,address,uint256)\":{\"notice\":\"Emitted when a delegator transfers their delegation to L2\"},\"ExtensionImplementationSet(address)\":{\"notice\":\"Emitted when `extensionImpl` was set as the address of the StakingExtension contract to which extended functionality is delegated.\"},\"IndexerStakeTransferredToL2(address,address,uint256)\":{\"notice\":\"Emitted when an indexer transfers their stake to L2. This can happen several times as indexers can transfer partial stake.\"},\"L1GraphTokenLockTransferToolSet(address)\":{\"notice\":\"Emitted when the L1GraphTokenLockTransferTool is set\"},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"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.\"},\"SetOperator(address,address,bool)\":{\"notice\":\"Emitted when `indexer` set `operator` access.\"},\"SetRewardsDestination(address,address)\":{\"notice\":\"Emitted when `indexer` set an address to receive rewards.\"},\"SlasherUpdate(address,address,bool)\":{\"notice\":\"Emitted when `caller` set `slasher` address as `allowed` to slash stakes.\"},\"StakeDelegated(address,address,uint256,uint256)\":{\"notice\":\"Emitted when `delegator` delegated `tokens` to the `indexer`, the delegator gets `shares` for the delegation pool proportionally to the tokens staked.\"},\"StakeDelegatedLocked(address,address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when `delegator` undelegated `tokens` from `indexer`. Tokens get locked for withdrawal after a period of time.\"},\"StakeDelegatedUnlockedDueToL2Transfer(address,address)\":{\"notice\":\"Emitted when a delegator unlocks their tokens ahead of time because the indexer has transferred to L2\"},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"notice\":\"Emitted when `delegator` withdrew delegated `tokens` from `indexer`.\"},\"StakeDeposited(address,uint256)\":{\"notice\":\"Emitted when `indexer` stakes `tokens` amount.\"},\"StakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when `indexer` unstaked and locked `tokens` amount until `until` block.\"},\"StakeSlashed(address,uint256,uint256,address)\":{\"notice\":\"Emitted when `indexer` was slashed for a total of `tokens` amount. Tracks `reward` amount of tokens given to `beneficiary`.\"},\"StakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when `indexer` withdrew `tokens` staked.\"}},\"kind\":\"user\",\"methods\":{\"allocate(bytes32,uint256,address,bytes32,bytes)\":{\"notice\":\"Allocate available tokens to a subgraph deployment.\"},\"allocateFrom(address,bytes32,uint256,address,bytes32,bytes)\":{\"notice\":\"Allocate available tokens to a subgraph deployment from and indexer's stake. The caller must be the indexer or the indexer's operator.\"},\"allocations(address)\":{\"notice\":\"Getter for allocations[_allocationID]: gets an allocation's information as an IStakingData.Allocation struct.\"},\"alphaDenominator()\":{\"notice\":\"Getter for the denominator of the rebates alpha parameter\"},\"alphaNumerator()\":{\"notice\":\"Getter for the numerator of the rebates alpha parameter\"},\"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.\"},\"controller()\":{\"notice\":\"Get the Controller that manages this contract\"},\"curationPercentage()\":{\"notice\":\"Getter for curationPercentage: the percentage of query fees that are distributed to curators.\"},\"delegate(address,uint256)\":{\"notice\":\"Delegate tokens to an indexer.\"},\"delegationPools(address)\":{\"notice\":\"Getter for delegationPools[_indexer]: gets the delegation pool structure for a particular indexer.\"},\"delegationRatio()\":{\"notice\":\"Getter for the delegationRatio, i.e. the delegation capacity multiplier: If delegation ratio is 100, and an Indexer has staked 5 GRT, then they can use up to 500 GRT from the delegated stake\"},\"delegationTaxPercentage()\":{\"notice\":\"Getter for delegationTaxPercentage: Percentage of tokens to tax a delegation deposit, expressed in parts per million\"},\"delegationUnbondingPeriod()\":{\"notice\":\"Getter for delegationUnbondingPeriod: Time in epochs a delegator needs to wait to withdraw delegated stake\"},\"getAllocation(address)\":{\"notice\":\"Return the allocation by ID.\"},\"getAllocationData(address)\":{\"notice\":\"Get the allocation data for the rewards manager\"},\"getAllocationState(address)\":{\"notice\":\"Return the current state of an allocation\"},\"getDelegation(address,address)\":{\"notice\":\"Return the delegation from a delegator to an indexer.\"},\"getIndexerCapacity(address)\":{\"notice\":\"Get the total amount of tokens available to use in allocations. This considers the indexer stake and delegated tokens according to delegation ratio\"},\"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.\"},\"getWithdraweableDelegatedTokens((uint256,uint256,uint256))\":{\"notice\":\"Returns amount of delegated tokens ready to be withdrawn after unbonding period.\"},\"hasStake(address)\":{\"notice\":\"Getter that returns if an indexer has any stake.\"},\"initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)\":{\"notice\":\"Initialize this contract.\"},\"isActiveAllocation(address)\":{\"notice\":\"Get the allocation active status for the rewards manager\"},\"isAllocation(address)\":{\"notice\":\"Return if allocationID is used.\"},\"isDelegator(address,address)\":{\"notice\":\"Return whether the delegator has delegated to the indexer.\"},\"isOperator(address,address)\":{\"notice\":\"Return true if operator is allowed for indexer.\"},\"lambdaDenominator()\":{\"notice\":\"Getter for the denominator of the rebates lambda parameter\"},\"lambdaNumerator()\":{\"notice\":\"Getter for the numerator of the rebates lambda parameter\"},\"maxAllocationEpochs()\":{\"notice\":\"Getter for maxAllocationEpochs: the maximum time in epochs that an allocation can be open before anyone is allowed to close it. This also caps the effective allocation when sending the allocation's query fees to the rebate pool.\"},\"minimumIndexerStake()\":{\"notice\":\"Getter for minimumIndexerStake: the minimum amount of GRT that an indexer needs to stake.\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"operatorAuth(address,address)\":{\"notice\":\"Getter for operatorAuth[_indexer][_maybeOperator]: returns true if the operator is authorized to operate on behalf of the indexer.\"},\"protocolPercentage()\":{\"notice\":\"Getter for protocolPercentage: the percentage of query fees that are burned as protocol fees.\"},\"rewardsDestination(address)\":{\"notice\":\"Getter for rewardsDestination[_indexer]: returns the address where the indexer's rewards are sent.\"},\"setController(address)\":{\"notice\":\"Set the controller that manages this contract\"},\"setCounterpartStakingAddress(address)\":{\"notice\":\"Set the address of the counterpart (L1 or L2) staking contract.\"},\"setCurationPercentage(uint32)\":{\"notice\":\"Set the curation percentage of query fees sent to curators.\"},\"setDelegationParameters(uint32,uint32,uint32)\":{\"notice\":\"Set the delegation parameters for the caller.\"},\"setDelegationRatio(uint32)\":{\"notice\":\"Set the delegation ratio. If set to 10 it means the indexer can use up to 10x the indexer staked amount from their delegated tokens\"},\"setDelegationTaxPercentage(uint32)\":{\"notice\":\"Set a delegation tax percentage to burn when delegated funds are deposited.\"},\"setDelegationUnbondingPeriod(uint32)\":{\"notice\":\"Set the time, in epochs, a Delegator needs to wait to withdraw tokens after undelegating.\"},\"setExtensionImpl(address)\":{\"notice\":\"Set the address of the StakingExtension implementation.\"},\"setL1GraphTokenLockTransferTool(address)\":{\"notice\":\"Set the L1GraphTokenLockTransferTool contract address\"},\"setMaxAllocationEpochs(uint32)\":{\"notice\":\"Set the max time allowed for indexers to allocate on a subgraph before others are allowed to close the allocation.\"},\"setMinimumIndexerStake(uint256)\":{\"notice\":\"Set the minimum stake needed to be an Indexer\"},\"setOperator(address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller.\"},\"setProtocolPercentage(uint32)\":{\"notice\":\"Set a protocol percentage to burn when collecting query fees.\"},\"setRebateParameters(uint32,uint32,uint32,uint32)\":{\"notice\":\"Set the rebate parameters\"},\"setRewardsDestination(address)\":{\"notice\":\"Set the destination where to send rewards for an indexer.\"},\"setSlasher(address,bool)\":{\"notice\":\"Set or unset an address as allowed slasher.\"},\"setThawingPeriod(uint32)\":{\"notice\":\"Set the number of blocks that tokens get locked after unstaking\"},\"slash(address,uint256,uint256,address)\":{\"notice\":\"Slash the indexer stake. Delegated tokens are not subject to slashing.\"},\"slashers(address)\":{\"notice\":\"Getter for slashers[_maybeSlasher]: returns true if the address is a slasher, i.e. an entity that can slash indexers\"},\"stake(uint256)\":{\"notice\":\"Deposit tokens on the indexer's stake. The amount staked must be over the minimumIndexerStake.\"},\"stakeTo(address,uint256)\":{\"notice\":\"Deposit tokens on the Indexer stake, on behalf of the Indexer. The amount staked must be over the minimumIndexerStake.\"},\"stakes(address)\":{\"notice\":\"Getter for stakes[_indexer]: gets the stake information for an indexer as a IStakes.Indexer struct.\"},\"subgraphAllocations(bytes32)\":{\"notice\":\"Getter for subgraphAllocations[_subgraphDeploymentId]: returns the amount of tokens allocated to a subgraph deployment.\"},\"syncAllContracts()\":{\"notice\":\"Sync protocol contract addresses from the Controller registry\"},\"thawingPeriod()\":{\"notice\":\"Getter for thawingPeriod: the time in blocks an indexer needs to wait to unstake tokens.\"},\"transferDelegationToL2(address,address,uint256,uint256,uint256)\":{\"notice\":\"Send a delegator's delegated tokens to L2\"},\"transferLockedDelegationToL2(address,uint256,uint256,uint256)\":{\"notice\":\"Send a delegator's delegated tokens to L2, for a GraphTokenLockWallet vesting contract\"},\"transferLockedStakeToL2(uint256,uint256,uint256,uint256)\":{\"notice\":\"Send an indexer's stake to L2, from a GraphTokenLockWallet vesting contract.\"},\"transferStakeToL2(address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Send an indexer's stake to L2.\"},\"undelegate(address,uint256)\":{\"notice\":\"Undelegate tokens from an indexer. Tokens will be locked for the unbonding period.\"},\"unlockDelegationToTransferredIndexer(address)\":{\"notice\":\"Unlock a delegator's delegated tokens, if the indexer has transferred to L2\"},\"unstake(uint256)\":{\"notice\":\"Unstake tokens from the indexer stake, lock them until the thawing period expires.\"},\"withdraw()\":{\"notice\":\"Withdraw indexer tokens once the thawing period has passed.\"},\"withdrawDelegated(address,address)\":{\"notice\":\"Withdraw undelegated tokens once the unbonding period has passed, and optionally re-delegate to a new indexer.\"}},\"notice\":\"This is the interface that should be used when interacting with the L1 Staking contract. It extends the IStaking interface with the functions that are specific to L1, adding the transfer tools to send stake and delegation to L2.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/staking/IL1Staking.sol\":\"IL1Staking\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/base/IMulticall.sol\":{\"keccak256\":\"0x229a773eba322776fd11fa9ef4d256f5405d4243a7eee9c776e9cc3943d5712a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c55cfe4a3ada03e97f5bf18d42e0a35504386617b2e7481b8c54c241aae9a5e9\",\"dweb:/ipfs/QmehvFTHm6BNPQZt5KMVttifEwfLZ3snWDdCx4PFEoAVoP\"]},\"contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0x8bcf3c80d81f5dc6dab2dae12ba244af44d688d7f4e25659398ccc253b3b36ce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f4098877f5d5bcdd725333dfb56a1e6a4a7be63c62b76b385589c17290b615a3\",\"dweb:/ipfs/QmXxATjrLJd3J9V7ZLpP3aY4sJH1suQU7jZqxV2dFzBLsV\"]},\"contracts/contracts/governance/IManaged.sol\":{\"keccak256\":\"0x3fa95c1be98ab78c3b45b4b090e88584e68c65c15822a96c9f3c2563a0b866ab\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e4ffae922866649d8cc0159078e9a6a15ba4b9b254bd3aa9fcaa63a80c33f469\",\"dweb:/ipfs/QmWozzUTcRDsHTeEBzLRVdbS6nBq8bxyknCPUFVjem3Zqg\"]},\"contracts/contracts/staking/IL1GraphTokenLockTransferTool.sol\":{\"keccak256\":\"0x61760ab9e87af83bb734387e2758a1130dd2690067cb354d493a905a68c06ce0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f2becc86bf9341a1aa3fdde631b0d61a6c9b7716a8b0930b89e524374e602c65\",\"dweb:/ipfs/QmUgiD4u2bSHe7TtqhLeUyrawGs5VUY5KunvariACoLnyB\"]},\"contracts/contracts/staking/IL1Staking.sol\":{\"keccak256\":\"0x759222b97f1f3570710c15807bd3d212d619d9604b725499750268b5ab93b8c3\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://701dba6fe708efb7a1ea659b708452c0728508d0d5d800914239ed1514810cf2\",\"dweb:/ipfs/QmT5DcHoBZMgJWH8gUAE7otDqAPszD9vrYFDt6oSdBBdgd\"]},\"contracts/contracts/staking/IL1StakingBase.sol\":{\"keccak256\":\"0xda1cd64300f025a4bd894f4db616ca3842eb3e108cfa23956bfa7e9a36298d2e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://251264e6f1fa8409cadcb6d3129220506d0f39c249d87dba0fa3de888bbeb3e2\",\"dweb:/ipfs/QmUGoyR9VCsbvjPGBHV1CkLBPsZfeTDPsTGgk9GhU2oPF9\"]},\"contracts/contracts/staking/IStaking.sol\":{\"keccak256\":\"0x03722c5a476d36d265097d307576f49cacb7ada011d3bc4fbf3451d238c3b17b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5aa002cb6b88cfc397b05eaf3dccacf625ae022756673a6646c8a8601878b577\",\"dweb:/ipfs/QmdQotqPKcxfm1aguH1S482am9KTqXXxWGEiY9ew7zmS5D\"]},\"contracts/contracts/staking/IStakingBase.sol\":{\"keccak256\":\"0xb7feff377d26ccba1d8f010af6d1697812409d39161206832284d1815ff67f25\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://606a67e762e9897af74615f60fb71b8ced316be996a690fb76e0cf063611765f\",\"dweb:/ipfs/QmaAB2yFQAW2qhF6Rb9r4R2Qo1NvKnpnW2Xrb58byWybMS\"]},\"contracts/contracts/staking/IStakingData.sol\":{\"keccak256\":\"0x538d86b0f64b89bfaa1257a38b38e94bf24c4314793fb15c0d078fb0c6e5a0b5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4e76933e6d57b778dfec8f8154c940dbbc217432fdfc2bd4aa0506f359d31509\",\"dweb:/ipfs/QmT9BhCaD4yGiYWo6ZCKY2mVEFp3XwMFS3HkhRU55BQBRa\"]},\"contracts/contracts/staking/IStakingExtension.sol\":{\"keccak256\":\"0x002814ddee1a132e0dd32a13db8a8722a3e02bc73c10f99b542fb0e518d8e562\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1dfe0ac4eb1aff4859416ae11725e6eb5b1b91fcf1156b4bcfb0242178262536\",\"dweb:/ipfs/QmcLRgfzy58cvDjrkdC3u9KV9jS2WyLFAnUQnLNmtUunSG\"]},\"contracts/contracts/staking/libs/IStakes.sol\":{\"keccak256\":\"0x8f1f7b3b8d8a4018223ecdf200d8cb48d31cf055e1b6ed20fb035e226ab4c376\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1fa5cf676a93c23dd0a380908940fe51b22297681b06fd06045a387824b1ba77\",\"dweb:/ipfs/QmUJ6Buv42R5KLVpZE9Bo5YwxoVk7URJERfQindABstWbk\"]}},\"version\":1}"}},"contracts/contracts/staking/IL1StakingBase.sol":{"IL1StakingBase":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"l2Delegator","type":"address"},{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"address","name":"l2Indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"transferredDelegationTokens","type":"uint256"}],"name":"DelegationTransferredToL2","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"l2Indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"transferredStakeTokens","type":"uint256"}],"name":"IndexerStakeTransferredToL2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"l1GraphTokenLockTransferTool","type":"address"}],"name":"L1GraphTokenLockTransferToolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"delegator","type":"address"}],"name":"StakeDelegatedUnlockedDueToL2Transfer","type":"event"},{"inputs":[{"internalType":"contract IL1GraphTokenLockTransferTool","name":"l1GraphTokenLockTransferTool","type":"address"}],"name":"setL1GraphTokenLockTransferTool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"l2Beneficiary","type":"address"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"name":"transferDelegationToL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"name":"transferLockedDelegationToL2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"name":"transferLockedStakeToL2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"l2Beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"name":"transferStakeToL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"unlockDelegationToTransferredIndexer","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"setL1GraphTokenLockTransferTool(address)":"f0c2d66c","transferDelegationToL2(address,address,uint256,uint256,uint256)":"bb8d57c9","transferLockedDelegationToL2(address,uint256,uint256,uint256)":"0a6655a0","transferLockedStakeToL2(uint256,uint256,uint256,uint256)":"42f543ae","transferStakeToL2(address,uint256,uint256,uint256,uint256)":"cbf0fdfe","unlockDelegationToTransferredIndexer(address)":"2fd43482"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transferredDelegationTokens\",\"type\":\"uint256\"}],\"name\":\"DelegationTransferredToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transferredStakeTokens\",\"type\":\"uint256\"}],\"name\":\"IndexerStakeTransferredToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l1GraphTokenLockTransferTool\",\"type\":\"address\"}],\"name\":\"L1GraphTokenLockTransferToolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"StakeDelegatedUnlockedDueToL2Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IL1GraphTokenLockTransferTool\",\"name\":\"l1GraphTokenLockTransferTool\",\"type\":\"address\"}],\"name\":\"setL1GraphTokenLockTransferTool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2Beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"name\":\"transferDelegationToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"name\":\"transferLockedDelegationToL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"name\":\"transferLockedStakeToL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"name\":\"transferStakeToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"unlockDelegationToTransferredIndexer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"details\":\"Note it includes only the L1-specific functionality, not the full IStaking interface.\",\"events\":{\"DelegationTransferredToL2(address,address,address,address,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator on L1\",\"indexer\":\"Address of the indexer on L1\",\"l2Delegator\":\"Address of the delegator on L2\",\"l2Indexer\":\"Address of the indexer on L2\",\"transferredDelegationTokens\":\"Amount of delegation tokens transferred\"}},\"IndexerStakeTransferredToL2(address,address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer on L1\",\"l2Indexer\":\"Address of the indexer on L2\",\"transferredStakeTokens\":\"Amount of stake tokens transferred\"}},\"L1GraphTokenLockTransferToolSet(address)\":{\"params\":{\"l1GraphTokenLockTransferTool\":\"Address of the L1GraphTokenLockTransferTool contract\"}},\"StakeDelegatedUnlockedDueToL2Transfer(address,address)\":{\"params\":{\"delegator\":\"Address of the delegator unlocking their tokens\",\"indexer\":\"Address of the indexer that transferred to L2\"}}},\"kind\":\"dev\",\"methods\":{\"setL1GraphTokenLockTransferTool(address)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"l1GraphTokenLockTransferTool\":\"Address of the L1GraphTokenLockTransferTool contract\"}},\"transferDelegationToL2(address,address,uint256,uint256,uint256)\":{\"details\":\"This function can only be called by the delegator. This function will validate that the indexer has transferred their stake using transferStakeToL2, and that the delegation is not locked for undelegation. Since the delegator's address might be an L1-only contract, the function takes a beneficiary address that will be the delegator's address in L2. The caller must provide an amount of ETH to use for the L2 retryable ticket, that must be at least `maxSubmissionCost + gasPriceBid * maxGas`.\",\"params\":{\"gasPriceBid\":\"Gas price bid for the L2 retryable ticket\",\"indexer\":\"Address of the indexer (in L1, before transferring to L2)\",\"l2Beneficiary\":\"Address of the delegator in L2\",\"maxGas\":\"Max gas to use for the L2 retryable ticket\",\"maxSubmissionCost\":\"Max submission cost for the L2 retryable ticket\"}},\"transferLockedDelegationToL2(address,uint256,uint256,uint256)\":{\"details\":\"This function can only be called by the delegator. This function will validate that the indexer has transferred their stake using transferStakeToL2, and that the delegation is not locked for undelegation. The L2 beneficiary for the delegation will be determined by calling the L1GraphTokenLockTransferTool contract, so the caller must have previously transferred tokens through that first (see GIP-0046 for details: https://forum.thegraph.com/t/4023). The ETH for the L2 gas will be pulled from the L1GraphTokenLockTransferTool, so the owner of the GraphTokenLockWallet must have previously deposited at least `maxSubmissionCost + gasPriceBid * maxGas` ETH into the L1GraphTokenLockTransferTool contract (using its depositETH function).\",\"params\":{\"gasPriceBid\":\"Gas price bid for the L2 retryable ticket\",\"indexer\":\"Address of the indexer (in L1, before transferring to L2)\",\"maxGas\":\"Max gas to use for the L2 retryable ticket\",\"maxSubmissionCost\":\"Max submission cost for the L2 retryable ticket\"}},\"transferLockedStakeToL2(uint256,uint256,uint256,uint256)\":{\"details\":\"This function can only be called by the indexer (not an operator). It will validate that the remaining stake is sufficient to cover all the allocated stake, so the indexer might have to close some allocations before transferring. It will also check that the indexer's stake is not locked for withdrawal. The L2 beneficiary for the stake will be determined by calling the L1GraphTokenLockTransferTool contract, so the caller must have previously transferred tokens through that first (see GIP-0046 for details: https://forum.thegraph.com/t/4023). The ETH for the L2 gas will be pulled from the L1GraphTokenLockTransferTool, so the owner of the GraphTokenLockWallet must have previously deposited at least `maxSubmissionCost + gasPriceBid * maxGas` ETH into the L1GraphTokenLockTransferTool contract (using its depositETH function).\",\"params\":{\"amount\":\"Amount of stake GRT to transfer to L2\",\"gasPriceBid\":\"Gas price bid for the L2 retryable ticket\",\"maxGas\":\"Max gas to use for the L2 retryable ticket\",\"maxSubmissionCost\":\"Max submission cost for the L2 retryable ticket\"}},\"transferStakeToL2(address,uint256,uint256,uint256,uint256)\":{\"details\":\"This function can only be called by the indexer (not an operator). It will validate that the remaining stake is sufficient to cover all the allocated stake, so the indexer might have to close some allocations before transferring. It will also check that the indexer's stake is not locked for withdrawal. Since the indexer address might be an L1-only contract, the function takes a beneficiary address that will be the indexer's address in L2. The caller must provide an amount of ETH to use for the L2 retryable ticket, that must be at least `maxSubmissionCost + gasPriceBid * maxGas`.\",\"params\":{\"amount\":\"Amount of stake GRT to transfer to L2\",\"gasPriceBid\":\"Gas price bid for the L2 retryable ticket\",\"l2Beneficiary\":\"Address of the indexer in L2. If the indexer has previously transferred stake, this must match the previously-used value.\",\"maxGas\":\"Max gas to use for the L2 retryable ticket\",\"maxSubmissionCost\":\"Max submission cost for the L2 retryable ticket\"}},\"unlockDelegationToTransferredIndexer(address)\":{\"details\":\"This function can only be called by the delegator. This function will validate that the indexer has transferred their stake using transferStakeToL2, and that the indexer has no remaining stake in L1. The tokens must previously be locked for undelegation by calling `undelegate()`, and can be withdrawn with `withdrawDelegated()` immediately after calling this.\",\"params\":{\"indexer\":\"Address of the indexer (in L1, before transferring to L2)\"}}},\"title\":\"Base interface for the L1Staking contract.\",\"version\":1},\"userdoc\":{\"events\":{\"DelegationTransferredToL2(address,address,address,address,uint256)\":{\"notice\":\"Emitted when a delegator transfers their delegation to L2\"},\"IndexerStakeTransferredToL2(address,address,uint256)\":{\"notice\":\"Emitted when an indexer transfers their stake to L2. This can happen several times as indexers can transfer partial stake.\"},\"L1GraphTokenLockTransferToolSet(address)\":{\"notice\":\"Emitted when the L1GraphTokenLockTransferTool is set\"},\"StakeDelegatedUnlockedDueToL2Transfer(address,address)\":{\"notice\":\"Emitted when a delegator unlocks their tokens ahead of time because the indexer has transferred to L2\"}},\"kind\":\"user\",\"methods\":{\"setL1GraphTokenLockTransferTool(address)\":{\"notice\":\"Set the L1GraphTokenLockTransferTool contract address\"},\"transferDelegationToL2(address,address,uint256,uint256,uint256)\":{\"notice\":\"Send a delegator's delegated tokens to L2\"},\"transferLockedDelegationToL2(address,uint256,uint256,uint256)\":{\"notice\":\"Send a delegator's delegated tokens to L2, for a GraphTokenLockWallet vesting contract\"},\"transferLockedStakeToL2(uint256,uint256,uint256,uint256)\":{\"notice\":\"Send an indexer's stake to L2, from a GraphTokenLockWallet vesting contract.\"},\"transferStakeToL2(address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Send an indexer's stake to L2.\"},\"unlockDelegationToTransferredIndexer(address)\":{\"notice\":\"Unlock a delegator's delegated tokens, if the indexer has transferred to L2\"}},\"notice\":\"This interface is used to define the transfer tools that are implemented in L1Staking.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/staking/IL1StakingBase.sol\":\"IL1StakingBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/staking/IL1GraphTokenLockTransferTool.sol\":{\"keccak256\":\"0x61760ab9e87af83bb734387e2758a1130dd2690067cb354d493a905a68c06ce0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f2becc86bf9341a1aa3fdde631b0d61a6c9b7716a8b0930b89e524374e602c65\",\"dweb:/ipfs/QmUgiD4u2bSHe7TtqhLeUyrawGs5VUY5KunvariACoLnyB\"]},\"contracts/contracts/staking/IL1StakingBase.sol\":{\"keccak256\":\"0xda1cd64300f025a4bd894f4db616ca3842eb3e108cfa23956bfa7e9a36298d2e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://251264e6f1fa8409cadcb6d3129220506d0f39c249d87dba0fa3de888bbeb3e2\",\"dweb:/ipfs/QmUGoyR9VCsbvjPGBHV1CkLBPsZfeTDPsTGgk9GhU2oPF9\"]}},\"version\":1}"}},"contracts/contracts/staking/IStaking.sol":{"IStaking":{"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":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":"bytes32","name":"metadata","type":"bytes32"}],"name":"AllocationCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"__DEPRECATED_cooldownBlocks","type":"uint32"}],"name":"DelegationParametersUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"extensionImpl","type":"address"}],"name":"ExtensionImplementationSet","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":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"SetOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"destination","type":"address"}],"name":"SetRewardsDestination","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"slasher","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"SlasherUpdate","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":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"StakeDelegated","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":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"until","type":"uint256"}],"name":"StakeDelegatedLocked","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":"tokens","type":"uint256"}],"name":"StakeDelegatedWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","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":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":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"}],"name":"StakeSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"StakeWithdrawn","type":"event"},{"inputs":[{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"allocationID","type":"address"},{"internalType":"bytes32","name":"metadata","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"allocate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"allocationID","type":"address"},{"internalType":"bytes32","name":"metadata","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"allocateFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"allocationID","type":"address"}],"name":"allocations","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 IStakingData.Allocation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaDenominator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curationPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"delegate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"delegationPools","outputs":[{"components":[{"internalType":"uint32","name":"__DEPRECATED_cooldownBlocks","type":"uint32"},{"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"internalType":"uint256","name":"updatedAtBlock","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"}],"internalType":"struct IStakingExtension.DelegationPoolReturn","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationRatio","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationTaxPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationUnbondingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","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 IStakingData.Allocation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"allocationID","type":"address"}],"name":"getAllocationData","outputs":[{"internalType":"bool","name":"","type":"bool"},{"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 IStakingBase.AllocationState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"delegator","type":"address"}],"name":"getDelegation","outputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakingData.Delegation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"getIndexerCapacity","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":[{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"}],"name":"getSubgraphAllocatedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakingData.Delegation","name":"delegation","type":"tuple"}],"name":"getWithdraweableDelegatedTokens","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":"controller","type":"address"},{"internalType":"uint256","name":"minimumIndexerStake","type":"uint256"},{"internalType":"uint32","name":"thawingPeriod","type":"uint32"},{"internalType":"uint32","name":"protocolPercentage","type":"uint32"},{"internalType":"uint32","name":"curationPercentage","type":"uint32"},{"internalType":"uint32","name":"maxAllocationEpochs","type":"uint32"},{"internalType":"uint32","name":"delegationUnbondingPeriod","type":"uint32"},{"internalType":"uint32","name":"delegationRatio","type":"uint32"},{"components":[{"internalType":"uint32","name":"alphaNumerator","type":"uint32"},{"internalType":"uint32","name":"alphaDenominator","type":"uint32"},{"internalType":"uint32","name":"lambdaNumerator","type":"uint32"},{"internalType":"uint32","name":"lambdaDenominator","type":"uint32"}],"internalType":"struct IStakingData.RebatesParameters","name":"rebatesParameters","type":"tuple"},{"internalType":"address","name":"extensionImpl","type":"address"}],"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":"allocationID","type":"address"}],"name":"isAllocation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"delegator","type":"address"}],"name":"isDelegator","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":[],"name":"lambdaDenominator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lambdaNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAllocationEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumIndexerStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"indexer","type":"address"},{"internalType":"address","name":"maybeOperator","type":"address"}],"name":"operatorAuth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"rewardsDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newController","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"counterpart","type":"address"}],"name":"setCounterpartStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setCurationPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"internalType":"uint32","name":"cooldownBlocks","type":"uint32"}],"name":"setDelegationParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newDelegationRatio","type":"uint32"}],"name":"setDelegationRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setDelegationTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newDelegationUnbondingPeriod","type":"uint32"}],"name":"setDelegationUnbondingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"extensionImpl","type":"address"}],"name":"setExtensionImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"maxAllocationEpochs","type":"uint32"}],"name":"setMaxAllocationEpochs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minimumIndexerStake","type":"uint256"}],"name":"setMinimumIndexerStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setProtocolPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"setRebateParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"name":"setRewardsDestination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"slasher","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setSlasher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"thawingPeriod","type":"uint32"}],"name":"setThawingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"slash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"maybeSlasher","type":"address"}],"name":"slashers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"stakeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"stakes","outputs":[{"components":[{"internalType":"uint256","name":"tokensStaked","type":"uint256"},{"internalType":"uint256","name":"tokensAllocated","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakes.Indexer","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"subgraphDeploymentId","type":"bytes32"}],"name":"subgraphAllocations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"syncAllContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thawingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"undelegate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"indexer","type":"address"},{"internalType":"address","name":"newIndexer","type":"address"}],"name":"withdrawDelegated","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":{"allocate(bytes32,uint256,address,bytes32,bytes)":"a6fe292b","allocateFrom(address,bytes32,uint256,address,bytes32,bytes)":"23477e48","allocations(address)":"52a9039c","alphaDenominator()":"ce853613","alphaNumerator()":"7ef82070","closeAllocation(address,bytes32)":"44c32a61","collect(uint256,address)":"8d3c100a","controller()":"f77c4791","curationPercentage()":"85b52ad0","delegate(address,uint256)":"026e402b","delegationPools(address)":"92511c8f","delegationRatio()":"bfdfa7af","delegationTaxPercentage()":"e6aeb796","delegationUnbondingPeriod()":"b6846e47","getAllocation(address)":"0e022923","getAllocationData(address)":"55c85269","getAllocationState(address)":"98c657dc","getDelegation(address,address)":"15049a5a","getIndexerCapacity(address)":"a510be20","getIndexerStakedTokens(address)":"1787e69f","getSubgraphAllocatedTokens(bytes32)":"e2e1e8e9","getWithdraweableDelegatedTokens((uint256,uint256,uint256))":"130bea57","hasStake(address)":"e73e14bf","initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)":"687fe40e","isActiveAllocation(address)":"6a3ca383","isAllocation(address)":"f1d60d66","isDelegator(address,address)":"a0e11929","isOperator(address,address)":"b6363cf2","lambdaDenominator()":"4b8a9b8e","lambdaNumerator()":"09da07f7","maxAllocationEpochs()":"fb765938","minimumIndexerStake()":"f2485bf2","multicall(bytes[])":"ac9650d8","operatorAuth(address,address)":"e2e94656","protocolPercentage()":"a26b90f2","rewardsDestination(address)":"7203ca78","setController(address)":"92eefe9b","setCounterpartStakingAddress(address)":"1ae72045","setCurationPercentage(uint32)":"39dcf476","setDelegationParameters(uint32,uint32,uint32)":"9dcaa6c9","setDelegationRatio(uint32)":"1dd42f60","setDelegationTaxPercentage(uint32)":"e6dc5a1c","setDelegationUnbondingPeriod(uint32)":"5e9a6392","setExtensionImpl(address)":"6948a78c","setMaxAllocationEpochs(uint32)":"2652d75e","setMinimumIndexerStake(uint256)":"ddb8b131","setOperator(address,bool)":"558a7297","setProtocolPercentage(uint32)":"9a48bf83","setRebateParameters(uint32,uint32,uint32,uint32)":"69286e47","setRewardsDestination(address)":"772495c3","setSlasher(address,bool)":"52348080","setThawingPeriod(uint32)":"32bc9108","slash(address,uint256,uint256,address)":"e76fede6","slashers(address)":"b87fcbff","stake(uint256)":"a694fc3a","stakeTo(address,uint256)":"a2a31722","stakes(address)":"16934fc4","subgraphAllocations(bytes32)":"b1468f52","syncAllContracts()":"d6866ea5","thawingPeriod()":"cdc747dd","undelegate(address,uint256)":"4d99dd16","unstake(uint256)":"2e17de78","withdraw()":"3ccfd60b","withdrawDelegated(address,address)":"51a60b02"}},"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\":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\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"}],\"name\":\"AllocationCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"__DEPRECATED_cooldownBlocks\",\"type\":\"uint32\"}],\"name\":\"DelegationParametersUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"name\":\"ExtensionImplementationSet\",\"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\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"SetOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"SetRewardsDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"SlasherUpdate\",\"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\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"StakeDelegated\",\"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\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedLocked\",\"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\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"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\":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\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"StakeSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"allocate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"allocateFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"allocations\",\"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 IStakingData.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alphaDenominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alphaNumerator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"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\":[],\"name\":\"controller\",\"outputs\":[{\"internalType\":\"contract IController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"curationPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"delegationPools\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"__DEPRECATED_cooldownBlocks\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"updatedAtBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingExtension.DelegationPoolReturn\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationTaxPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"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 IStakingData.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"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 IStakingBase.AllocationState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"getDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingData.Delegation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getIndexerCapacity\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingData.Delegation\",\"name\":\"delegation\",\"type\":\"tuple\"}],\"name\":\"getWithdraweableDelegatedTokens\",\"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\":\"controller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minimumIndexerStake\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"thawingPeriod\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"protocolPercentage\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"curationPercentage\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxAllocationEpochs\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"delegationUnbondingPeriod\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"alphaNumerator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"alphaDenominator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lambdaNumerator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lambdaDenominator\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakingData.RebatesParameters\",\"name\":\"rebatesParameters\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"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\":\"allocationID\",\"type\":\"address\"}],\"name\":\"isAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"isDelegator\",\"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\":[],\"name\":\"lambdaDenominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lambdaNumerator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAllocationEpochs\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumIndexerStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"maybeOperator\",\"type\":\"address\"}],\"name\":\"operatorAuth\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"rewardsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newController\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpart\",\"type\":\"address\"}],\"name\":\"setCounterpartStakingAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setCurationPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"cooldownBlocks\",\"type\":\"uint32\"}],\"name\":\"setDelegationParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDelegationRatio\",\"type\":\"uint32\"}],\"name\":\"setDelegationRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setDelegationTaxPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDelegationUnbondingPeriod\",\"type\":\"uint32\"}],\"name\":\"setDelegationUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"name\":\"setExtensionImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxAllocationEpochs\",\"type\":\"uint32\"}],\"name\":\"setMaxAllocationEpochs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumIndexerStake\",\"type\":\"uint256\"}],\"name\":\"setMinimumIndexerStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setProtocolPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"setRebateParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"setRewardsDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"slasher\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"thawingPeriod\",\"type\":\"uint32\"}],\"name\":\"setThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"maybeSlasher\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"stakes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokensStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensAllocated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakes.Indexer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"subgraphAllocations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"syncAllContracts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"thawingPeriod\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newIndexer\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"details\":\"Note that Staking doesn't actually inherit this interface. This is because of 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.\",\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"epoch\":\"Epoch when allocation was closed\",\"indexer\":\"Address of the indexer\",\"isPublic\":\"True if closed by someone other than the indexer\",\"poi\":\"Proof of indexing submitted\",\"sender\":\"Address that closed the allocation\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Amount of tokens unallocated\"}},\"AllocationCreated(address,bytes32,uint256,uint256,address,bytes32)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"epoch\":\"Epoch when allocation was created\",\"indexer\":\"Address of the indexer\",\"metadata\":\"IPFS hash for additional allocation information\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Amount of tokens allocated\"}},\"DelegationParametersUpdated(address,uint32,uint32,uint32)\":{\"params\":{\"__DEPRECATED_cooldownBlocks\":\"Deprecated parameter (no longer used)\",\"indexer\":\"Address of the indexer\",\"indexingRewardCut\":\"Percentage of indexing rewards left for the indexer\",\"queryFeeCut\":\"Percentage of query fees left for the indexer\"}},\"ExtensionImplementationSet(address)\":{\"params\":{\"extensionImpl\":\"Address of the StakingExtension implementation\"}},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"assetHolder\":\"Address providing the rebate tokens\",\"curationFees\":\"Amount distributed to curators\",\"delegationRewards\":\"Amount distributed to delegators\",\"epoch\":\"Epoch when rebate was collected\",\"indexer\":\"Address of the indexer collecting the rebate\",\"protocolTax\":\"Amount burned as protocol tax\",\"queryFees\":\"Amount available for rebate after fees\",\"queryRebates\":\"Amount distributed to the indexer\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Total amount of tokens in the rebate\"}},\"SetOperator(address,address,bool)\":{\"params\":{\"allowed\":\"Whether the operator is authorized\",\"indexer\":\"Address of the indexer\",\"operator\":\"Address of the operator\"}},\"SetRewardsDestination(address,address)\":{\"params\":{\"destination\":\"Address to receive rewards\",\"indexer\":\"Address of the indexer\"}},\"SlasherUpdate(address,address,bool)\":{\"params\":{\"allowed\":\"Whether the slasher is allowed to slash\",\"caller\":\"Address that updated the slasher status\",\"slasher\":\"Address of the slasher\"}},\"StakeDelegated(address,address,uint256,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer receiving the delegation\",\"shares\":\"Amount of shares issued to the delegator\",\"tokens\":\"Amount of tokens delegated\"}},\"StakeDelegatedLocked(address,address,uint256,uint256,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer from which tokens are undelegated\",\"shares\":\"Amount of shares returned\",\"tokens\":\"Amount of tokens undelegated\",\"until\":\"Epoch until which tokens are locked\"}},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer from which tokens are withdrawn\",\"tokens\":\"Amount of tokens withdrawn\"}},\"StakeDeposited(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens staked\"}},\"StakeLocked(address,uint256,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens locked\",\"until\":\"Block number until which tokens are locked\"}},\"StakeSlashed(address,uint256,uint256,address)\":{\"params\":{\"beneficiary\":\"Address receiving the reward\",\"indexer\":\"Address of the indexer that was slashed\",\"reward\":\"Amount of tokens given as reward\",\"tokens\":\"Total amount of tokens slashed\"}},\"StakeWithdrawn(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens withdrawn\"}}},\"kind\":\"dev\",\"methods\":{\"allocate(bytes32,uint256,address,bytes32,bytes)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"metadata\":\"IPFS hash for additional information about the allocation\",\"proof\":\"A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`\",\"subgraphDeploymentID\":\"ID of the SubgraphDeployment where tokens will be allocated\",\"tokens\":\"Amount of tokens to allocate\"}},\"allocateFrom(address,bytes32,uint256,address,bytes32,bytes)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"indexer\":\"Indexer address to allocate funds from.\",\"metadata\":\"IPFS hash for additional information about the allocation\",\"proof\":\"A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`\",\"subgraphDeploymentID\":\"ID of the SubgraphDeployment where tokens will be allocated\",\"tokens\":\"Amount of tokens to allocate\"}},\"allocations(address)\":{\"params\":{\"allocationID\":\"Allocation ID for which to query the allocation information\"},\"returns\":{\"_0\":\"The specified allocation, as an IStakingData.Allocation struct\"}},\"alphaDenominator()\":{\"returns\":{\"_0\":\"Alpha denominator\"}},\"alphaNumerator()\":{\"returns\":{\"_0\":\"Alpha numerator\"}},\"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\"}},\"controller()\":{\"returns\":{\"_0\":\"The Controller as an IController interface\"}},\"curationPercentage()\":{\"returns\":{\"_0\":\"Curation percentage in parts per million\"}},\"delegate(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer to which tokens are delegated\",\"tokens\":\"Amount of tokens to delegate\"},\"returns\":{\"_0\":\"Amount of shares issued from the delegation pool\"}},\"delegationPools(address)\":{\"params\":{\"indexer\":\"Address of the indexer for which to query the delegation pool\"},\"returns\":{\"_0\":\"Delegation pool as a DelegationPoolReturn struct\"}},\"delegationRatio()\":{\"returns\":{\"_0\":\"Delegation ratio\"}},\"delegationTaxPercentage()\":{\"returns\":{\"_0\":\"Delegation tax percentage in parts per million\"}},\"delegationUnbondingPeriod()\":{\"returns\":{\"_0\":\"Delegation unbonding period in epochs\"}},\"getAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as allocation identifier\"},\"returns\":{\"_0\":\"Allocation data\"}},\"getAllocationData(address)\":{\"details\":\"New function to get the allocation data for the rewards managerNote 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.\",\"params\":{\"allocationID\":\"The allocation ID\"},\"returns\":{\"_0\":\"active Whether the allocation is active\",\"_1\":\"indexer The indexer address\",\"_2\":\"subgraphDeploymentID The subgraph deployment ID\",\"_3\":\"tokens The allocated tokens\",\"_4\":\"createdAtEpoch The epoch when allocation was created\",\"_5\":\"closedAtEpoch The epoch when allocation was closed\"}},\"getAllocationState(address)\":{\"params\":{\"allocationID\":\"Allocation identifier\"},\"returns\":{\"_0\":\"AllocationState enum with the state of the allocation\"}},\"getDelegation(address,address)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer where funds have been delegated\"},\"returns\":{\"_0\":\"Delegation data\"}},\"getIndexerCapacity(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"Amount of tokens available to allocate including delegation\"}},\"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\"}},\"getWithdraweableDelegatedTokens((uint256,uint256,uint256))\":{\"params\":{\"delegation\":\"Delegation of tokens from delegator to indexer\"},\"returns\":{\"_0\":\"Amount of tokens to withdraw\"}},\"hasStake(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"True if indexer has staked tokens\"}},\"initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)\":{\"params\":{\"controller\":\"Address of the controller that manages this contract\",\"curationPercentage\":\"Percentage of query fees that are given to curators (in PPM)\",\"delegationRatio\":\"The ratio between an indexer's own stake and the delegation they can use\",\"delegationUnbondingPeriod\":\"The period in epochs that tokens get locked after undelegating\",\"extensionImpl\":\"Address of the StakingExtension implementation\",\"maxAllocationEpochs\":\"The maximum number of epochs that an allocation can be active\",\"minimumIndexerStake\":\"Minimum amount of tokens that an indexer must stake\",\"protocolPercentage\":\"Percentage of query fees that are burned as protocol fee (in PPM)\",\"rebatesParameters\":\"Alpha and lambda parameters for rebates function\",\"thawingPeriod\":\"Number of blocks that tokens get locked after unstaking\"}},\"isActiveAllocation(address)\":{\"details\":\"New function to get the allocation active status for the rewards managerNote 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.\",\"params\":{\"allocationID\":\"The allocation identifier\"},\"returns\":{\"_0\":\"True if the allocation is active, false otherwise\"}},\"isAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as signer by the indexer for an allocation\"},\"returns\":{\"_0\":\"True if allocationID already used\"}},\"isDelegator(address,address)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer where funds have been delegated\"},\"returns\":{\"_0\":\"True if delegator has tokens delegated to the indexer\"}},\"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\"}},\"lambdaDenominator()\":{\"returns\":{\"_0\":\"Lambda denominator\"}},\"lambdaNumerator()\":{\"returns\":{\"_0\":\"Lambda numerator\"}},\"maxAllocationEpochs()\":{\"returns\":{\"_0\":\"Maximum allocation period in epochs\"}},\"minimumIndexerStake()\":{\"returns\":{\"_0\":\"Minimum indexer stake in GRT\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"operatorAuth(address,address)\":{\"params\":{\"indexer\":\"The indexer address for which to query authorization\",\"maybeOperator\":\"The address that may or may not be an operator\"},\"returns\":{\"_0\":\"True if the operator is authorized to operate on behalf of the indexer\"}},\"protocolPercentage()\":{\"returns\":{\"_0\":\"Protocol percentage in parts per million\"}},\"rewardsDestination(address)\":{\"params\":{\"indexer\":\"The indexer address for which to query the rewards destination\"},\"returns\":{\"_0\":\"The address where the indexer's rewards are sent, zero if none is set in which case rewards are re-staked\"}},\"setController(address)\":{\"details\":\"Only the current controller can set a new controller\",\"params\":{\"newController\":\"Address of the new controller\"}},\"setCounterpartStakingAddress(address)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"counterpart\":\"Address of the counterpart staking contract in the other chain, without any aliasing.\"}},\"setCurationPercentage(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"percentage\":\"Percentage of query fees sent to curators\"}},\"setDelegationParameters(uint32,uint32,uint32)\":{\"params\":{\"cooldownBlocks\":\"Deprecated cooldown blocks parameter (no longer used)\",\"indexingRewardCut\":\"Percentage of indexing rewards left for the indexer\",\"queryFeeCut\":\"Percentage of query fees left for the indexer\"}},\"setDelegationRatio(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"newDelegationRatio\":\"Delegation capacity multiplier\"}},\"setDelegationTaxPercentage(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"percentage\":\"Percentage of delegated tokens to burn as delegation tax, expressed in parts per million\"}},\"setDelegationUnbondingPeriod(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"newDelegationUnbondingPeriod\":\"Period in epochs to wait for token withdrawals after undelegating\"}},\"setExtensionImpl(address)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"extensionImpl\":\"Address of the StakingExtension implementation\"}},\"setMaxAllocationEpochs(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"maxAllocationEpochs\":\"Allocation duration limit in epochs\"}},\"setMinimumIndexerStake(uint256)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"minimumIndexerStake\":\"Minimum amount of tokens that an indexer must stake\"}},\"setOperator(address,bool)\":{\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\"}},\"setProtocolPercentage(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"percentage\":\"Percentage of query fees to burn as protocol fee\"}},\"setRebateParameters(uint32,uint32,uint32,uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"alphaDenominator\":\"Denominator of `alpha`\",\"alphaNumerator\":\"Numerator of `alpha`\",\"lambdaDenominator\":\"Denominator of `lambda`\",\"lambdaNumerator\":\"Numerator of `lambda`\"}},\"setRewardsDestination(address)\":{\"params\":{\"destination\":\"Rewards destination address. If set to zero, rewards will be restaked\"}},\"setSlasher(address,bool)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"allowed\":\"True if slasher is allowed\",\"slasher\":\"Address of the party allowed to slash indexers\"}},\"setThawingPeriod(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"thawingPeriod\":\"Number of blocks that tokens get locked after unstaking\"}},\"slash(address,uint256,uint256,address)\":{\"details\":\"Can only be called by the slasher role.\",\"params\":{\"beneficiary\":\"Address of a beneficiary to receive a reward for the slashing\",\"indexer\":\"Address of indexer to slash\",\"reward\":\"Amount of reward tokens to send to a beneficiary\",\"tokens\":\"Amount of tokens to slash from the indexer stake\"}},\"slashers(address)\":{\"params\":{\"maybeSlasher\":\"Address for which to check the slasher role\"},\"returns\":{\"_0\":\"True if the address is a slasher\"}},\"stake(uint256)\":{\"params\":{\"tokens\":\"Amount of tokens to stake\"}},\"stakeTo(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens to stake\"}},\"stakes(address)\":{\"params\":{\"indexer\":\"Indexer address for which to query the stake information\"},\"returns\":{\"_0\":\"Stake information for the specified indexer, as a IStakes.Indexer struct\"}},\"subgraphAllocations(bytes32)\":{\"params\":{\"subgraphDeploymentId\":\"The subgraph deployment for which to query the allocations\"},\"returns\":{\"_0\":\"The amount of tokens allocated to the subgraph deployment\"}},\"syncAllContracts()\":{\"details\":\"This function will cache all the contracts using the latest addresses. Anyone can call the function whenever a Proxy contract change in the controller to ensure the protocol is using the latest version.\"},\"thawingPeriod()\":{\"returns\":{\"_0\":\"Thawing period in blocks\"}},\"undelegate(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer to which tokens had been delegated\",\"shares\":\"Amount of shares to return and undelegate tokens\"},\"returns\":{\"_0\":\"Amount of tokens returned for the shares of the delegation pool\"}},\"unstake(uint256)\":{\"details\":\"NOTE: The function accepts an amount greater than the currently staked tokens. If that happens, it will try to unstake the max amount of tokens it can. The reason for this behaviour is to avoid time conditions while the transaction is in flight.\",\"params\":{\"tokens\":\"Amount of tokens to unstake\"}},\"withdrawDelegated(address,address)\":{\"params\":{\"indexer\":\"Withdraw available tokens delegated to indexer\",\"newIndexer\":\"Re-delegate to indexer address if non-zero, withdraw if zero address\"},\"returns\":{\"_0\":\"Amount of tokens withdrawn\"}}},\"title\":\"Interface for the Staking contract\",\"version\":1},\"userdoc\":{\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"notice\":\"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.\"},\"AllocationCreated(address,bytes32,uint256,uint256,address,bytes32)\":{\"notice\":\"Emitted when `indexer` allocated `tokens` amount to `subgraphDeploymentID` during `epoch`. `allocationID` indexer derived address used to identify the allocation. `metadata` additional information related to the allocation.\"},\"DelegationParametersUpdated(address,uint32,uint32,uint32)\":{\"notice\":\"Emitted when `indexer` update the delegation parameters for its delegation pool.\"},\"ExtensionImplementationSet(address)\":{\"notice\":\"Emitted when `extensionImpl` was set as the address of the StakingExtension contract to which extended functionality is delegated.\"},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"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.\"},\"SetOperator(address,address,bool)\":{\"notice\":\"Emitted when `indexer` set `operator` access.\"},\"SetRewardsDestination(address,address)\":{\"notice\":\"Emitted when `indexer` set an address to receive rewards.\"},\"SlasherUpdate(address,address,bool)\":{\"notice\":\"Emitted when `caller` set `slasher` address as `allowed` to slash stakes.\"},\"StakeDelegated(address,address,uint256,uint256)\":{\"notice\":\"Emitted when `delegator` delegated `tokens` to the `indexer`, the delegator gets `shares` for the delegation pool proportionally to the tokens staked.\"},\"StakeDelegatedLocked(address,address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when `delegator` undelegated `tokens` from `indexer`. Tokens get locked for withdrawal after a period of time.\"},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"notice\":\"Emitted when `delegator` withdrew delegated `tokens` from `indexer`.\"},\"StakeDeposited(address,uint256)\":{\"notice\":\"Emitted when `indexer` stakes `tokens` amount.\"},\"StakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when `indexer` unstaked and locked `tokens` amount until `until` block.\"},\"StakeSlashed(address,uint256,uint256,address)\":{\"notice\":\"Emitted when `indexer` was slashed for a total of `tokens` amount. Tracks `reward` amount of tokens given to `beneficiary`.\"},\"StakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when `indexer` withdrew `tokens` staked.\"}},\"kind\":\"user\",\"methods\":{\"allocate(bytes32,uint256,address,bytes32,bytes)\":{\"notice\":\"Allocate available tokens to a subgraph deployment.\"},\"allocateFrom(address,bytes32,uint256,address,bytes32,bytes)\":{\"notice\":\"Allocate available tokens to a subgraph deployment from and indexer's stake. The caller must be the indexer or the indexer's operator.\"},\"allocations(address)\":{\"notice\":\"Getter for allocations[_allocationID]: gets an allocation's information as an IStakingData.Allocation struct.\"},\"alphaDenominator()\":{\"notice\":\"Getter for the denominator of the rebates alpha parameter\"},\"alphaNumerator()\":{\"notice\":\"Getter for the numerator of the rebates alpha parameter\"},\"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.\"},\"controller()\":{\"notice\":\"Get the Controller that manages this contract\"},\"curationPercentage()\":{\"notice\":\"Getter for curationPercentage: the percentage of query fees that are distributed to curators.\"},\"delegate(address,uint256)\":{\"notice\":\"Delegate tokens to an indexer.\"},\"delegationPools(address)\":{\"notice\":\"Getter for delegationPools[_indexer]: gets the delegation pool structure for a particular indexer.\"},\"delegationRatio()\":{\"notice\":\"Getter for the delegationRatio, i.e. the delegation capacity multiplier: If delegation ratio is 100, and an Indexer has staked 5 GRT, then they can use up to 500 GRT from the delegated stake\"},\"delegationTaxPercentage()\":{\"notice\":\"Getter for delegationTaxPercentage: Percentage of tokens to tax a delegation deposit, expressed in parts per million\"},\"delegationUnbondingPeriod()\":{\"notice\":\"Getter for delegationUnbondingPeriod: Time in epochs a delegator needs to wait to withdraw delegated stake\"},\"getAllocation(address)\":{\"notice\":\"Return the allocation by ID.\"},\"getAllocationData(address)\":{\"notice\":\"Get the allocation data for the rewards manager\"},\"getAllocationState(address)\":{\"notice\":\"Return the current state of an allocation\"},\"getDelegation(address,address)\":{\"notice\":\"Return the delegation from a delegator to an indexer.\"},\"getIndexerCapacity(address)\":{\"notice\":\"Get the total amount of tokens available to use in allocations. This considers the indexer stake and delegated tokens according to delegation ratio\"},\"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.\"},\"getWithdraweableDelegatedTokens((uint256,uint256,uint256))\":{\"notice\":\"Returns amount of delegated tokens ready to be withdrawn after unbonding period.\"},\"hasStake(address)\":{\"notice\":\"Getter that returns if an indexer has any stake.\"},\"initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)\":{\"notice\":\"Initialize this contract.\"},\"isActiveAllocation(address)\":{\"notice\":\"Get the allocation active status for the rewards manager\"},\"isAllocation(address)\":{\"notice\":\"Return if allocationID is used.\"},\"isDelegator(address,address)\":{\"notice\":\"Return whether the delegator has delegated to the indexer.\"},\"isOperator(address,address)\":{\"notice\":\"Return true if operator is allowed for indexer.\"},\"lambdaDenominator()\":{\"notice\":\"Getter for the denominator of the rebates lambda parameter\"},\"lambdaNumerator()\":{\"notice\":\"Getter for the numerator of the rebates lambda parameter\"},\"maxAllocationEpochs()\":{\"notice\":\"Getter for maxAllocationEpochs: the maximum time in epochs that an allocation can be open before anyone is allowed to close it. This also caps the effective allocation when sending the allocation's query fees to the rebate pool.\"},\"minimumIndexerStake()\":{\"notice\":\"Getter for minimumIndexerStake: the minimum amount of GRT that an indexer needs to stake.\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"operatorAuth(address,address)\":{\"notice\":\"Getter for operatorAuth[_indexer][_maybeOperator]: returns true if the operator is authorized to operate on behalf of the indexer.\"},\"protocolPercentage()\":{\"notice\":\"Getter for protocolPercentage: the percentage of query fees that are burned as protocol fees.\"},\"rewardsDestination(address)\":{\"notice\":\"Getter for rewardsDestination[_indexer]: returns the address where the indexer's rewards are sent.\"},\"setController(address)\":{\"notice\":\"Set the controller that manages this contract\"},\"setCounterpartStakingAddress(address)\":{\"notice\":\"Set the address of the counterpart (L1 or L2) staking contract.\"},\"setCurationPercentage(uint32)\":{\"notice\":\"Set the curation percentage of query fees sent to curators.\"},\"setDelegationParameters(uint32,uint32,uint32)\":{\"notice\":\"Set the delegation parameters for the caller.\"},\"setDelegationRatio(uint32)\":{\"notice\":\"Set the delegation ratio. If set to 10 it means the indexer can use up to 10x the indexer staked amount from their delegated tokens\"},\"setDelegationTaxPercentage(uint32)\":{\"notice\":\"Set a delegation tax percentage to burn when delegated funds are deposited.\"},\"setDelegationUnbondingPeriod(uint32)\":{\"notice\":\"Set the time, in epochs, a Delegator needs to wait to withdraw tokens after undelegating.\"},\"setExtensionImpl(address)\":{\"notice\":\"Set the address of the StakingExtension implementation.\"},\"setMaxAllocationEpochs(uint32)\":{\"notice\":\"Set the max time allowed for indexers to allocate on a subgraph before others are allowed to close the allocation.\"},\"setMinimumIndexerStake(uint256)\":{\"notice\":\"Set the minimum stake needed to be an Indexer\"},\"setOperator(address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller.\"},\"setProtocolPercentage(uint32)\":{\"notice\":\"Set a protocol percentage to burn when collecting query fees.\"},\"setRebateParameters(uint32,uint32,uint32,uint32)\":{\"notice\":\"Set the rebate parameters\"},\"setRewardsDestination(address)\":{\"notice\":\"Set the destination where to send rewards for an indexer.\"},\"setSlasher(address,bool)\":{\"notice\":\"Set or unset an address as allowed slasher.\"},\"setThawingPeriod(uint32)\":{\"notice\":\"Set the number of blocks that tokens get locked after unstaking\"},\"slash(address,uint256,uint256,address)\":{\"notice\":\"Slash the indexer stake. Delegated tokens are not subject to slashing.\"},\"slashers(address)\":{\"notice\":\"Getter for slashers[_maybeSlasher]: returns true if the address is a slasher, i.e. an entity that can slash indexers\"},\"stake(uint256)\":{\"notice\":\"Deposit tokens on the indexer's stake. The amount staked must be over the minimumIndexerStake.\"},\"stakeTo(address,uint256)\":{\"notice\":\"Deposit tokens on the Indexer stake, on behalf of the Indexer. The amount staked must be over the minimumIndexerStake.\"},\"stakes(address)\":{\"notice\":\"Getter for stakes[_indexer]: gets the stake information for an indexer as a IStakes.Indexer struct.\"},\"subgraphAllocations(bytes32)\":{\"notice\":\"Getter for subgraphAllocations[_subgraphDeploymentId]: returns the amount of tokens allocated to a subgraph deployment.\"},\"syncAllContracts()\":{\"notice\":\"Sync protocol contract addresses from the Controller registry\"},\"thawingPeriod()\":{\"notice\":\"Getter for thawingPeriod: the time in blocks an indexer needs to wait to unstake tokens.\"},\"undelegate(address,uint256)\":{\"notice\":\"Undelegate tokens from an indexer. Tokens will be locked for the unbonding period.\"},\"unstake(uint256)\":{\"notice\":\"Unstake tokens from the indexer stake, lock them until the thawing period expires.\"},\"withdraw()\":{\"notice\":\"Withdraw indexer tokens once the thawing period has passed.\"},\"withdrawDelegated(address,address)\":{\"notice\":\"Withdraw undelegated tokens once the unbonding period has passed, and optionally re-delegate to a new indexer.\"}},\"notice\":\"This is the interface that should be used when interacting with the Staking contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/staking/IStaking.sol\":\"IStaking\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/base/IMulticall.sol\":{\"keccak256\":\"0x229a773eba322776fd11fa9ef4d256f5405d4243a7eee9c776e9cc3943d5712a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c55cfe4a3ada03e97f5bf18d42e0a35504386617b2e7481b8c54c241aae9a5e9\",\"dweb:/ipfs/QmehvFTHm6BNPQZt5KMVttifEwfLZ3snWDdCx4PFEoAVoP\"]},\"contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0x8bcf3c80d81f5dc6dab2dae12ba244af44d688d7f4e25659398ccc253b3b36ce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f4098877f5d5bcdd725333dfb56a1e6a4a7be63c62b76b385589c17290b615a3\",\"dweb:/ipfs/QmXxATjrLJd3J9V7ZLpP3aY4sJH1suQU7jZqxV2dFzBLsV\"]},\"contracts/contracts/governance/IManaged.sol\":{\"keccak256\":\"0x3fa95c1be98ab78c3b45b4b090e88584e68c65c15822a96c9f3c2563a0b866ab\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e4ffae922866649d8cc0159078e9a6a15ba4b9b254bd3aa9fcaa63a80c33f469\",\"dweb:/ipfs/QmWozzUTcRDsHTeEBzLRVdbS6nBq8bxyknCPUFVjem3Zqg\"]},\"contracts/contracts/staking/IStaking.sol\":{\"keccak256\":\"0x03722c5a476d36d265097d307576f49cacb7ada011d3bc4fbf3451d238c3b17b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5aa002cb6b88cfc397b05eaf3dccacf625ae022756673a6646c8a8601878b577\",\"dweb:/ipfs/QmdQotqPKcxfm1aguH1S482am9KTqXXxWGEiY9ew7zmS5D\"]},\"contracts/contracts/staking/IStakingBase.sol\":{\"keccak256\":\"0xb7feff377d26ccba1d8f010af6d1697812409d39161206832284d1815ff67f25\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://606a67e762e9897af74615f60fb71b8ced316be996a690fb76e0cf063611765f\",\"dweb:/ipfs/QmaAB2yFQAW2qhF6Rb9r4R2Qo1NvKnpnW2Xrb58byWybMS\"]},\"contracts/contracts/staking/IStakingData.sol\":{\"keccak256\":\"0x538d86b0f64b89bfaa1257a38b38e94bf24c4314793fb15c0d078fb0c6e5a0b5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4e76933e6d57b778dfec8f8154c940dbbc217432fdfc2bd4aa0506f359d31509\",\"dweb:/ipfs/QmT9BhCaD4yGiYWo6ZCKY2mVEFp3XwMFS3HkhRU55BQBRa\"]},\"contracts/contracts/staking/IStakingExtension.sol\":{\"keccak256\":\"0x002814ddee1a132e0dd32a13db8a8722a3e02bc73c10f99b542fb0e518d8e562\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1dfe0ac4eb1aff4859416ae11725e6eb5b1b91fcf1156b4bcfb0242178262536\",\"dweb:/ipfs/QmcLRgfzy58cvDjrkdC3u9KV9jS2WyLFAnUQnLNmtUunSG\"]},\"contracts/contracts/staking/libs/IStakes.sol\":{\"keccak256\":\"0x8f1f7b3b8d8a4018223ecdf200d8cb48d31cf055e1b6ed20fb035e226ab4c376\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1fa5cf676a93c23dd0a380908940fe51b22297681b06fd06045a387824b1ba77\",\"dweb:/ipfs/QmUJ6Buv42R5KLVpZE9Bo5YwxoVk7URJERfQindABstWbk\"]}},\"version\":1}"}},"contracts/contracts/staking/IStakingBase.sol":{"IStakingBase":{"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":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":"bytes32","name":"metadata","type":"bytes32"}],"name":"AllocationCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"__DEPRECATED_cooldownBlocks","type":"uint32"}],"name":"DelegationParametersUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"extensionImpl","type":"address"}],"name":"ExtensionImplementationSet","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":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"SetOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"destination","type":"address"}],"name":"SetRewardsDestination","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","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":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":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"StakeWithdrawn","type":"event"},{"inputs":[{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"allocationID","type":"address"},{"internalType":"bytes32","name":"metadata","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"allocate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"allocationID","type":"address"},{"internalType":"bytes32","name":"metadata","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"allocateFrom","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 IStakingData.Allocation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"allocationID","type":"address"}],"name":"getAllocationData","outputs":[{"internalType":"bool","name":"","type":"bool"},{"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 IStakingBase.AllocationState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"getIndexerCapacity","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":[{"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":"controller","type":"address"},{"internalType":"uint256","name":"minimumIndexerStake","type":"uint256"},{"internalType":"uint32","name":"thawingPeriod","type":"uint32"},{"internalType":"uint32","name":"protocolPercentage","type":"uint32"},{"internalType":"uint32","name":"curationPercentage","type":"uint32"},{"internalType":"uint32","name":"maxAllocationEpochs","type":"uint32"},{"internalType":"uint32","name":"delegationUnbondingPeriod","type":"uint32"},{"internalType":"uint32","name":"delegationRatio","type":"uint32"},{"components":[{"internalType":"uint32","name":"alphaNumerator","type":"uint32"},{"internalType":"uint32","name":"alphaDenominator","type":"uint32"},{"internalType":"uint32","name":"lambdaNumerator","type":"uint32"},{"internalType":"uint32","name":"lambdaDenominator","type":"uint32"}],"internalType":"struct IStakingData.RebatesParameters","name":"rebatesParameters","type":"tuple"},{"internalType":"address","name":"extensionImpl","type":"address"}],"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":"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"},{"inputs":[{"internalType":"address","name":"counterpart","type":"address"}],"name":"setCounterpartStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setCurationPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"internalType":"uint32","name":"cooldownBlocks","type":"uint32"}],"name":"setDelegationParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"extensionImpl","type":"address"}],"name":"setExtensionImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"maxAllocationEpochs","type":"uint32"}],"name":"setMaxAllocationEpochs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minimumIndexerStake","type":"uint256"}],"name":"setMinimumIndexerStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setProtocolPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"setRebateParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"name":"setRewardsDestination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"thawingPeriod","type":"uint32"}],"name":"setThawingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"stakeTo","outputs":[],"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"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allocate(bytes32,uint256,address,bytes32,bytes)":"a6fe292b","allocateFrom(address,bytes32,uint256,address,bytes32,bytes)":"23477e48","closeAllocation(address,bytes32)":"44c32a61","collect(uint256,address)":"8d3c100a","getAllocation(address)":"0e022923","getAllocationData(address)":"55c85269","getAllocationState(address)":"98c657dc","getIndexerCapacity(address)":"a510be20","getIndexerStakedTokens(address)":"1787e69f","getSubgraphAllocatedTokens(bytes32)":"e2e1e8e9","hasStake(address)":"e73e14bf","initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)":"687fe40e","isActiveAllocation(address)":"6a3ca383","isAllocation(address)":"f1d60d66","isOperator(address,address)":"b6363cf2","setCounterpartStakingAddress(address)":"1ae72045","setCurationPercentage(uint32)":"39dcf476","setDelegationParameters(uint32,uint32,uint32)":"9dcaa6c9","setExtensionImpl(address)":"6948a78c","setMaxAllocationEpochs(uint32)":"2652d75e","setMinimumIndexerStake(uint256)":"ddb8b131","setOperator(address,bool)":"558a7297","setProtocolPercentage(uint32)":"9a48bf83","setRebateParameters(uint32,uint32,uint32,uint32)":"69286e47","setRewardsDestination(address)":"772495c3","setThawingPeriod(uint32)":"32bc9108","stake(uint256)":"a694fc3a","stakeTo(address,uint256)":"a2a31722","unstake(uint256)":"2e17de78","withdraw()":"3ccfd60b"}},"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\":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\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"}],\"name\":\"AllocationCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"__DEPRECATED_cooldownBlocks\",\"type\":\"uint32\"}],\"name\":\"DelegationParametersUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"name\":\"ExtensionImplementationSet\",\"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\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"SetOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"SetRewardsDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"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\":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\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"allocate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"metadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"allocateFrom\",\"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 IStakingData.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"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 IStakingBase.AllocationState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getIndexerCapacity\",\"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\":[{\"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\":\"controller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minimumIndexerStake\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"thawingPeriod\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"protocolPercentage\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"curationPercentage\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxAllocationEpochs\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"delegationUnbondingPeriod\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"alphaNumerator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"alphaDenominator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lambdaNumerator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lambdaDenominator\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakingData.RebatesParameters\",\"name\":\"rebatesParameters\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"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\":\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpart\",\"type\":\"address\"}],\"name\":\"setCounterpartStakingAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setCurationPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"cooldownBlocks\",\"type\":\"uint32\"}],\"name\":\"setDelegationParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extensionImpl\",\"type\":\"address\"}],\"name\":\"setExtensionImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxAllocationEpochs\",\"type\":\"uint32\"}],\"name\":\"setMaxAllocationEpochs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumIndexerStake\",\"type\":\"uint256\"}],\"name\":\"setMinimumIndexerStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setProtocolPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"setRebateParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"setRewardsDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"thawingPeriod\",\"type\":\"uint32\"}],\"name\":\"setThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeTo\",\"outputs\":[],\"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\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"details\":\"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.\",\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"epoch\":\"Epoch when allocation was closed\",\"indexer\":\"Address of the indexer\",\"isPublic\":\"True if closed by someone other than the indexer\",\"poi\":\"Proof of indexing submitted\",\"sender\":\"Address that closed the allocation\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Amount of tokens unallocated\"}},\"AllocationCreated(address,bytes32,uint256,uint256,address,bytes32)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"epoch\":\"Epoch when allocation was created\",\"indexer\":\"Address of the indexer\",\"metadata\":\"IPFS hash for additional allocation information\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Amount of tokens allocated\"}},\"DelegationParametersUpdated(address,uint32,uint32,uint32)\":{\"params\":{\"__DEPRECATED_cooldownBlocks\":\"Deprecated parameter (no longer used)\",\"indexer\":\"Address of the indexer\",\"indexingRewardCut\":\"Percentage of indexing rewards left for the indexer\",\"queryFeeCut\":\"Percentage of query fees left for the indexer\"}},\"ExtensionImplementationSet(address)\":{\"params\":{\"extensionImpl\":\"Address of the StakingExtension implementation\"}},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"params\":{\"allocationID\":\"Allocation identifier\",\"assetHolder\":\"Address providing the rebate tokens\",\"curationFees\":\"Amount distributed to curators\",\"delegationRewards\":\"Amount distributed to delegators\",\"epoch\":\"Epoch when rebate was collected\",\"indexer\":\"Address of the indexer collecting the rebate\",\"protocolTax\":\"Amount burned as protocol tax\",\"queryFees\":\"Amount available for rebate after fees\",\"queryRebates\":\"Amount distributed to the indexer\",\"subgraphDeploymentID\":\"Subgraph deployment ID\",\"tokens\":\"Total amount of tokens in the rebate\"}},\"SetOperator(address,address,bool)\":{\"params\":{\"allowed\":\"Whether the operator is authorized\",\"indexer\":\"Address of the indexer\",\"operator\":\"Address of the operator\"}},\"SetRewardsDestination(address,address)\":{\"params\":{\"destination\":\"Address to receive rewards\",\"indexer\":\"Address of the indexer\"}},\"StakeDeposited(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens staked\"}},\"StakeLocked(address,uint256,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens locked\",\"until\":\"Block number until which tokens are locked\"}},\"StakeWithdrawn(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens withdrawn\"}}},\"kind\":\"dev\",\"methods\":{\"allocate(bytes32,uint256,address,bytes32,bytes)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"metadata\":\"IPFS hash for additional information about the allocation\",\"proof\":\"A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`\",\"subgraphDeploymentID\":\"ID of the SubgraphDeployment where tokens will be allocated\",\"tokens\":\"Amount of tokens to allocate\"}},\"allocateFrom(address,bytes32,uint256,address,bytes32,bytes)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"indexer\":\"Indexer address to allocate funds from.\",\"metadata\":\"IPFS hash for additional information about the allocation\",\"proof\":\"A 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationID)`\",\"subgraphDeploymentID\":\"ID of the SubgraphDeployment where tokens will be allocated\",\"tokens\":\"Amount of tokens to allocate\"}},\"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\":\"New function to get the allocation data for the rewards managerNote 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.\",\"params\":{\"allocationID\":\"The allocation ID\"},\"returns\":{\"_0\":\"active Whether the allocation is active\",\"_1\":\"indexer The indexer address\",\"_2\":\"subgraphDeploymentID The subgraph deployment ID\",\"_3\":\"tokens The allocated tokens\",\"_4\":\"createdAtEpoch The epoch when allocation was created\",\"_5\":\"closedAtEpoch The epoch when allocation was closed\"}},\"getAllocationState(address)\":{\"params\":{\"allocationID\":\"Allocation identifier\"},\"returns\":{\"_0\":\"AllocationState enum with the state of the allocation\"}},\"getIndexerCapacity(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"Amount of tokens available to allocate including delegation\"}},\"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\"}},\"initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)\":{\"params\":{\"controller\":\"Address of the controller that manages this contract\",\"curationPercentage\":\"Percentage of query fees that are given to curators (in PPM)\",\"delegationRatio\":\"The ratio between an indexer's own stake and the delegation they can use\",\"delegationUnbondingPeriod\":\"The period in epochs that tokens get locked after undelegating\",\"extensionImpl\":\"Address of the StakingExtension implementation\",\"maxAllocationEpochs\":\"The maximum number of epochs that an allocation can be active\",\"minimumIndexerStake\":\"Minimum amount of tokens that an indexer must stake\",\"protocolPercentage\":\"Percentage of query fees that are burned as protocol fee (in PPM)\",\"rebatesParameters\":\"Alpha and lambda parameters for rebates function\",\"thawingPeriod\":\"Number of blocks that tokens get locked after unstaking\"}},\"isActiveAllocation(address)\":{\"details\":\"New function to get the allocation active status for the rewards managerNote 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.\",\"params\":{\"allocationID\":\"The allocation identifier\"},\"returns\":{\"_0\":\"True if the allocation is active, false otherwise\"}},\"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\"}},\"setCounterpartStakingAddress(address)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"counterpart\":\"Address of the counterpart staking contract in the other chain, without any aliasing.\"}},\"setCurationPercentage(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"percentage\":\"Percentage of query fees sent to curators\"}},\"setDelegationParameters(uint32,uint32,uint32)\":{\"params\":{\"cooldownBlocks\":\"Deprecated cooldown blocks parameter (no longer used)\",\"indexingRewardCut\":\"Percentage of indexing rewards left for the indexer\",\"queryFeeCut\":\"Percentage of query fees left for the indexer\"}},\"setExtensionImpl(address)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"extensionImpl\":\"Address of the StakingExtension implementation\"}},\"setMaxAllocationEpochs(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"maxAllocationEpochs\":\"Allocation duration limit in epochs\"}},\"setMinimumIndexerStake(uint256)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"minimumIndexerStake\":\"Minimum amount of tokens that an indexer must stake\"}},\"setOperator(address,bool)\":{\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\"}},\"setProtocolPercentage(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"percentage\":\"Percentage of query fees to burn as protocol fee\"}},\"setRebateParameters(uint32,uint32,uint32,uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"alphaDenominator\":\"Denominator of `alpha`\",\"alphaNumerator\":\"Numerator of `alpha`\",\"lambdaDenominator\":\"Denominator of `lambda`\",\"lambdaNumerator\":\"Numerator of `lambda`\"}},\"setRewardsDestination(address)\":{\"params\":{\"destination\":\"Rewards destination address. If set to zero, rewards will be restaked\"}},\"setThawingPeriod(uint32)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"thawingPeriod\":\"Number of blocks that tokens get locked after unstaking\"}},\"stake(uint256)\":{\"params\":{\"tokens\":\"Amount of tokens to stake\"}},\"stakeTo(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"tokens\":\"Amount of tokens to stake\"}},\"unstake(uint256)\":{\"details\":\"NOTE: The function accepts an amount greater than the currently staked tokens. If that happens, it will try to unstake the max amount of tokens it can. The reason for this behaviour is to avoid time conditions while the transaction is in flight.\",\"params\":{\"tokens\":\"Amount of tokens to unstake\"}}},\"title\":\"Base interface for the Staking contract.\",\"version\":1},\"userdoc\":{\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"notice\":\"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.\"},\"AllocationCreated(address,bytes32,uint256,uint256,address,bytes32)\":{\"notice\":\"Emitted when `indexer` allocated `tokens` amount to `subgraphDeploymentID` during `epoch`. `allocationID` indexer derived address used to identify the allocation. `metadata` additional information related to the allocation.\"},\"DelegationParametersUpdated(address,uint32,uint32,uint32)\":{\"notice\":\"Emitted when `indexer` update the delegation parameters for its delegation pool.\"},\"ExtensionImplementationSet(address)\":{\"notice\":\"Emitted when `extensionImpl` was set as the address of the StakingExtension contract to which extended functionality is delegated.\"},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"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.\"},\"SetOperator(address,address,bool)\":{\"notice\":\"Emitted when `indexer` set `operator` access.\"},\"SetRewardsDestination(address,address)\":{\"notice\":\"Emitted when `indexer` set an address to receive rewards.\"},\"StakeDeposited(address,uint256)\":{\"notice\":\"Emitted when `indexer` stakes `tokens` amount.\"},\"StakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when `indexer` unstaked and locked `tokens` amount until `until` block.\"},\"StakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when `indexer` withdrew `tokens` staked.\"}},\"kind\":\"user\",\"methods\":{\"allocate(bytes32,uint256,address,bytes32,bytes)\":{\"notice\":\"Allocate available tokens to a subgraph deployment.\"},\"allocateFrom(address,bytes32,uint256,address,bytes32,bytes)\":{\"notice\":\"Allocate available tokens to a subgraph deployment from and indexer's stake. The caller must be the indexer or the indexer's operator.\"},\"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.\"},\"getAllocationData(address)\":{\"notice\":\"Get the allocation data for the rewards manager\"},\"getAllocationState(address)\":{\"notice\":\"Return the current state of an allocation\"},\"getIndexerCapacity(address)\":{\"notice\":\"Get the total amount of tokens available to use in allocations. This considers the indexer stake and delegated tokens according to delegation ratio\"},\"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.\"},\"initialize(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32,(uint32,uint32,uint32,uint32),address)\":{\"notice\":\"Initialize this contract.\"},\"isActiveAllocation(address)\":{\"notice\":\"Get the allocation active status for the rewards manager\"},\"isAllocation(address)\":{\"notice\":\"Return if allocationID is used.\"},\"isOperator(address,address)\":{\"notice\":\"Return true if operator is allowed for indexer.\"},\"setCounterpartStakingAddress(address)\":{\"notice\":\"Set the address of the counterpart (L1 or L2) staking contract.\"},\"setCurationPercentage(uint32)\":{\"notice\":\"Set the curation percentage of query fees sent to curators.\"},\"setDelegationParameters(uint32,uint32,uint32)\":{\"notice\":\"Set the delegation parameters for the caller.\"},\"setExtensionImpl(address)\":{\"notice\":\"Set the address of the StakingExtension implementation.\"},\"setMaxAllocationEpochs(uint32)\":{\"notice\":\"Set the max time allowed for indexers to allocate on a subgraph before others are allowed to close the allocation.\"},\"setMinimumIndexerStake(uint256)\":{\"notice\":\"Set the minimum stake needed to be an Indexer\"},\"setOperator(address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller.\"},\"setProtocolPercentage(uint32)\":{\"notice\":\"Set a protocol percentage to burn when collecting query fees.\"},\"setRebateParameters(uint32,uint32,uint32,uint32)\":{\"notice\":\"Set the rebate parameters\"},\"setRewardsDestination(address)\":{\"notice\":\"Set the destination where to send rewards for an indexer.\"},\"setThawingPeriod(uint32)\":{\"notice\":\"Set the number of blocks that tokens get locked after unstaking\"},\"stake(uint256)\":{\"notice\":\"Deposit tokens on the indexer's stake. The amount staked must be over the minimumIndexerStake.\"},\"stakeTo(address,uint256)\":{\"notice\":\"Deposit tokens on the Indexer stake, on behalf of the Indexer. The amount staked must be over the minimumIndexerStake.\"},\"unstake(uint256)\":{\"notice\":\"Unstake tokens from the indexer stake, lock them until the thawing period expires.\"},\"withdraw()\":{\"notice\":\"Withdraw indexer tokens once the thawing period has passed.\"}},\"notice\":\"Base interface for the Staking contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/staking/IStakingBase.sol\":\"IStakingBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/staking/IStakingBase.sol\":{\"keccak256\":\"0xb7feff377d26ccba1d8f010af6d1697812409d39161206832284d1815ff67f25\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://606a67e762e9897af74615f60fb71b8ced316be996a690fb76e0cf063611765f\",\"dweb:/ipfs/QmaAB2yFQAW2qhF6Rb9r4R2Qo1NvKnpnW2Xrb58byWybMS\"]},\"contracts/contracts/staking/IStakingData.sol\":{\"keccak256\":\"0x538d86b0f64b89bfaa1257a38b38e94bf24c4314793fb15c0d078fb0c6e5a0b5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4e76933e6d57b778dfec8f8154c940dbbc217432fdfc2bd4aa0506f359d31509\",\"dweb:/ipfs/QmT9BhCaD4yGiYWo6ZCKY2mVEFp3XwMFS3HkhRU55BQBRa\"]}},\"version\":1}"}},"contracts/contracts/staking/IStakingData.sol":{"IStakingData":{"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\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Staking Data interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This interface defines some structures used by the Staking contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/staking/IStakingData.sol\":\"IStakingData\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/staking/IStakingData.sol\":{\"keccak256\":\"0x538d86b0f64b89bfaa1257a38b38e94bf24c4314793fb15c0d078fb0c6e5a0b5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4e76933e6d57b778dfec8f8154c940dbbc217432fdfc2bd4aa0506f359d31509\",\"dweb:/ipfs/QmT9BhCaD4yGiYWo6ZCKY2mVEFp3XwMFS3HkhRU55BQBRa\"]}},\"version\":1}"}},"contracts/contracts/staking/IStakingExtension.sol":{"IStakingExtension":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"slasher","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"SlasherUpdate","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":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"StakeDelegated","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":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"until","type":"uint256"}],"name":"StakeDelegatedLocked","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":"tokens","type":"uint256"}],"name":"StakeDelegatedWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"}],"name":"StakeSlashed","type":"event"},{"inputs":[{"internalType":"address","name":"allocationID","type":"address"}],"name":"allocations","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 IStakingData.Allocation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaDenominator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curationPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"delegate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"delegationPools","outputs":[{"components":[{"internalType":"uint32","name":"__DEPRECATED_cooldownBlocks","type":"uint32"},{"internalType":"uint32","name":"indexingRewardCut","type":"uint32"},{"internalType":"uint32","name":"queryFeeCut","type":"uint32"},{"internalType":"uint256","name":"updatedAtBlock","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"}],"internalType":"struct IStakingExtension.DelegationPoolReturn","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationRatio","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationTaxPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegationUnbondingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"delegator","type":"address"}],"name":"getDelegation","outputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakingData.Delegation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakingData.Delegation","name":"delegation","type":"tuple"}],"name":"getWithdraweableDelegatedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"delegator","type":"address"}],"name":"isDelegator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lambdaDenominator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lambdaNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAllocationEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumIndexerStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"maybeOperator","type":"address"}],"name":"operatorAuth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolPercentage","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"rewardsDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"newDelegationRatio","type":"uint32"}],"name":"setDelegationRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"percentage","type":"uint32"}],"name":"setDelegationTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newDelegationUnbondingPeriod","type":"uint32"}],"name":"setDelegationUnbondingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"slasher","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setSlasher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"slash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"maybeSlasher","type":"address"}],"name":"slashers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"stakes","outputs":[{"components":[{"internalType":"uint256","name":"tokensStaked","type":"uint256"},{"internalType":"uint256","name":"tokensAllocated","type":"uint256"},{"internalType":"uint256","name":"tokensLocked","type":"uint256"},{"internalType":"uint256","name":"tokensLockedUntil","type":"uint256"}],"internalType":"struct IStakes.Indexer","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"subgraphDeploymentId","type":"bytes32"}],"name":"subgraphAllocations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thawingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"undelegate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"address","name":"newIndexer","type":"address"}],"name":"withdrawDelegated","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":{"allocations(address)":"52a9039c","alphaDenominator()":"ce853613","alphaNumerator()":"7ef82070","curationPercentage()":"85b52ad0","delegate(address,uint256)":"026e402b","delegationPools(address)":"92511c8f","delegationRatio()":"bfdfa7af","delegationTaxPercentage()":"e6aeb796","delegationUnbondingPeriod()":"b6846e47","getDelegation(address,address)":"15049a5a","getWithdraweableDelegatedTokens((uint256,uint256,uint256))":"130bea57","isDelegator(address,address)":"a0e11929","lambdaDenominator()":"4b8a9b8e","lambdaNumerator()":"09da07f7","maxAllocationEpochs()":"fb765938","minimumIndexerStake()":"f2485bf2","operatorAuth(address,address)":"e2e94656","protocolPercentage()":"a26b90f2","rewardsDestination(address)":"7203ca78","setDelegationRatio(uint32)":"1dd42f60","setDelegationTaxPercentage(uint32)":"e6dc5a1c","setDelegationUnbondingPeriod(uint32)":"5e9a6392","setSlasher(address,bool)":"52348080","slash(address,uint256,uint256,address)":"e76fede6","slashers(address)":"b87fcbff","stakes(address)":"16934fc4","subgraphAllocations(bytes32)":"b1468f52","thawingPeriod()":"cdc747dd","undelegate(address,uint256)":"4d99dd16","withdrawDelegated(address,address)":"51a60b02"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"SlasherUpdate\",\"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\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"StakeDelegated\",\"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\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedLocked\",\"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\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"StakeSlashed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"allocations\",\"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 IStakingData.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alphaDenominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alphaNumerator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"curationPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"delegationPools\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"__DEPRECATED_cooldownBlocks\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"indexingRewardCut\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"queryFeeCut\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"updatedAtBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingExtension.DelegationPoolReturn\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationTaxPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"getDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingData.Delegation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakingData.Delegation\",\"name\":\"delegation\",\"type\":\"tuple\"}],\"name\":\"getWithdraweableDelegatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"isDelegator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lambdaDenominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lambdaNumerator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAllocationEpochs\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumIndexerStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"maybeOperator\",\"type\":\"address\"}],\"name\":\"operatorAuth\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"rewardsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDelegationRatio\",\"type\":\"uint32\"}],\"name\":\"setDelegationRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"percentage\",\"type\":\"uint32\"}],\"name\":\"setDelegationTaxPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDelegationUnbondingPeriod\",\"type\":\"uint32\"}],\"name\":\"setDelegationUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"slasher\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"maybeSlasher\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"stakes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokensStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensAllocated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensLockedUntil\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakes.Indexer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"subgraphAllocations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"thawingPeriod\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newIndexer\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"events\":{\"SlasherUpdate(address,address,bool)\":{\"params\":{\"allowed\":\"Whether the slasher is allowed to slash\",\"caller\":\"Address that updated the slasher status\",\"slasher\":\"Address of the slasher\"}},\"StakeDelegated(address,address,uint256,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer receiving the delegation\",\"shares\":\"Amount of shares issued to the delegator\",\"tokens\":\"Amount of tokens delegated\"}},\"StakeDelegatedLocked(address,address,uint256,uint256,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer from which tokens are undelegated\",\"shares\":\"Amount of shares returned\",\"tokens\":\"Amount of tokens undelegated\",\"until\":\"Epoch until which tokens are locked\"}},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer from which tokens are withdrawn\",\"tokens\":\"Amount of tokens withdrawn\"}},\"StakeSlashed(address,uint256,uint256,address)\":{\"params\":{\"beneficiary\":\"Address receiving the reward\",\"indexer\":\"Address of the indexer that was slashed\",\"reward\":\"Amount of tokens given as reward\",\"tokens\":\"Total amount of tokens slashed\"}}},\"kind\":\"dev\",\"methods\":{\"allocations(address)\":{\"params\":{\"allocationID\":\"Allocation ID for which to query the allocation information\"},\"returns\":{\"_0\":\"The specified allocation, as an IStakingData.Allocation struct\"}},\"alphaDenominator()\":{\"returns\":{\"_0\":\"Alpha denominator\"}},\"alphaNumerator()\":{\"returns\":{\"_0\":\"Alpha numerator\"}},\"curationPercentage()\":{\"returns\":{\"_0\":\"Curation percentage in parts per million\"}},\"delegate(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer to which tokens are delegated\",\"tokens\":\"Amount of tokens to delegate\"},\"returns\":{\"_0\":\"Amount of shares issued from the delegation pool\"}},\"delegationPools(address)\":{\"params\":{\"indexer\":\"Address of the indexer for which to query the delegation pool\"},\"returns\":{\"_0\":\"Delegation pool as a DelegationPoolReturn struct\"}},\"delegationRatio()\":{\"returns\":{\"_0\":\"Delegation ratio\"}},\"delegationTaxPercentage()\":{\"returns\":{\"_0\":\"Delegation tax percentage in parts per million\"}},\"delegationUnbondingPeriod()\":{\"returns\":{\"_0\":\"Delegation unbonding period in epochs\"}},\"getDelegation(address,address)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer where funds have been delegated\"},\"returns\":{\"_0\":\"Delegation data\"}},\"getWithdraweableDelegatedTokens((uint256,uint256,uint256))\":{\"params\":{\"delegation\":\"Delegation of tokens from delegator to indexer\"},\"returns\":{\"_0\":\"Amount of tokens to withdraw\"}},\"isDelegator(address,address)\":{\"params\":{\"delegator\":\"Address of the delegator\",\"indexer\":\"Address of the indexer where funds have been delegated\"},\"returns\":{\"_0\":\"True if delegator has tokens delegated to the indexer\"}},\"lambdaDenominator()\":{\"returns\":{\"_0\":\"Lambda denominator\"}},\"lambdaNumerator()\":{\"returns\":{\"_0\":\"Lambda numerator\"}},\"maxAllocationEpochs()\":{\"returns\":{\"_0\":\"Maximum allocation period in epochs\"}},\"minimumIndexerStake()\":{\"returns\":{\"_0\":\"Minimum indexer stake in GRT\"}},\"operatorAuth(address,address)\":{\"params\":{\"indexer\":\"The indexer address for which to query authorization\",\"maybeOperator\":\"The address that may or may not be an operator\"},\"returns\":{\"_0\":\"True if the operator is authorized to operate on behalf of the indexer\"}},\"protocolPercentage()\":{\"returns\":{\"_0\":\"Protocol percentage in parts per million\"}},\"rewardsDestination(address)\":{\"params\":{\"indexer\":\"The indexer address for which to query the rewards destination\"},\"returns\":{\"_0\":\"The address where the indexer's rewards are sent, zero if none is set in which case rewards are re-staked\"}},\"setDelegationRatio(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"newDelegationRatio\":\"Delegation capacity multiplier\"}},\"setDelegationTaxPercentage(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"percentage\":\"Percentage of delegated tokens to burn as delegation tax, expressed in parts per million\"}},\"setDelegationUnbondingPeriod(uint32)\":{\"details\":\"This function is only callable by the governor\",\"params\":{\"newDelegationUnbondingPeriod\":\"Period in epochs to wait for token withdrawals after undelegating\"}},\"setSlasher(address,bool)\":{\"details\":\"This function can only be called by the governor.\",\"params\":{\"allowed\":\"True if slasher is allowed\",\"slasher\":\"Address of the party allowed to slash indexers\"}},\"slash(address,uint256,uint256,address)\":{\"details\":\"Can only be called by the slasher role.\",\"params\":{\"beneficiary\":\"Address of a beneficiary to receive a reward for the slashing\",\"indexer\":\"Address of indexer to slash\",\"reward\":\"Amount of reward tokens to send to a beneficiary\",\"tokens\":\"Amount of tokens to slash from the indexer stake\"}},\"slashers(address)\":{\"params\":{\"maybeSlasher\":\"Address for which to check the slasher role\"},\"returns\":{\"_0\":\"True if the address is a slasher\"}},\"stakes(address)\":{\"params\":{\"indexer\":\"Indexer address for which to query the stake information\"},\"returns\":{\"_0\":\"Stake information for the specified indexer, as a IStakes.Indexer struct\"}},\"subgraphAllocations(bytes32)\":{\"params\":{\"subgraphDeploymentId\":\"The subgraph deployment for which to query the allocations\"},\"returns\":{\"_0\":\"The amount of tokens allocated to the subgraph deployment\"}},\"thawingPeriod()\":{\"returns\":{\"_0\":\"Thawing period in blocks\"}},\"undelegate(address,uint256)\":{\"params\":{\"indexer\":\"Address of the indexer to which tokens had been delegated\",\"shares\":\"Amount of shares to return and undelegate tokens\"},\"returns\":{\"_0\":\"Amount of tokens returned for the shares of the delegation pool\"}},\"withdrawDelegated(address,address)\":{\"params\":{\"indexer\":\"Withdraw available tokens delegated to indexer\",\"newIndexer\":\"Re-delegate to indexer address if non-zero, withdraw if zero address\"},\"returns\":{\"_0\":\"Amount of tokens withdrawn\"}}},\"title\":\"Interface for the StakingExtension contract\",\"version\":1},\"userdoc\":{\"events\":{\"SlasherUpdate(address,address,bool)\":{\"notice\":\"Emitted when `caller` set `slasher` address as `allowed` to slash stakes.\"},\"StakeDelegated(address,address,uint256,uint256)\":{\"notice\":\"Emitted when `delegator` delegated `tokens` to the `indexer`, the delegator gets `shares` for the delegation pool proportionally to the tokens staked.\"},\"StakeDelegatedLocked(address,address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when `delegator` undelegated `tokens` from `indexer`. Tokens get locked for withdrawal after a period of time.\"},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"notice\":\"Emitted when `delegator` withdrew delegated `tokens` from `indexer`.\"},\"StakeSlashed(address,uint256,uint256,address)\":{\"notice\":\"Emitted when `indexer` was slashed for a total of `tokens` amount. Tracks `reward` amount of tokens given to `beneficiary`.\"}},\"kind\":\"user\",\"methods\":{\"allocations(address)\":{\"notice\":\"Getter for allocations[_allocationID]: gets an allocation's information as an IStakingData.Allocation struct.\"},\"alphaDenominator()\":{\"notice\":\"Getter for the denominator of the rebates alpha parameter\"},\"alphaNumerator()\":{\"notice\":\"Getter for the numerator of the rebates alpha parameter\"},\"curationPercentage()\":{\"notice\":\"Getter for curationPercentage: the percentage of query fees that are distributed to curators.\"},\"delegate(address,uint256)\":{\"notice\":\"Delegate tokens to an indexer.\"},\"delegationPools(address)\":{\"notice\":\"Getter for delegationPools[_indexer]: gets the delegation pool structure for a particular indexer.\"},\"delegationRatio()\":{\"notice\":\"Getter for the delegationRatio, i.e. the delegation capacity multiplier: If delegation ratio is 100, and an Indexer has staked 5 GRT, then they can use up to 500 GRT from the delegated stake\"},\"delegationTaxPercentage()\":{\"notice\":\"Getter for delegationTaxPercentage: Percentage of tokens to tax a delegation deposit, expressed in parts per million\"},\"delegationUnbondingPeriod()\":{\"notice\":\"Getter for delegationUnbondingPeriod: Time in epochs a delegator needs to wait to withdraw delegated stake\"},\"getDelegation(address,address)\":{\"notice\":\"Return the delegation from a delegator to an indexer.\"},\"getWithdraweableDelegatedTokens((uint256,uint256,uint256))\":{\"notice\":\"Returns amount of delegated tokens ready to be withdrawn after unbonding period.\"},\"isDelegator(address,address)\":{\"notice\":\"Return whether the delegator has delegated to the indexer.\"},\"lambdaDenominator()\":{\"notice\":\"Getter for the denominator of the rebates lambda parameter\"},\"lambdaNumerator()\":{\"notice\":\"Getter for the numerator of the rebates lambda parameter\"},\"maxAllocationEpochs()\":{\"notice\":\"Getter for maxAllocationEpochs: the maximum time in epochs that an allocation can be open before anyone is allowed to close it. This also caps the effective allocation when sending the allocation's query fees to the rebate pool.\"},\"minimumIndexerStake()\":{\"notice\":\"Getter for minimumIndexerStake: the minimum amount of GRT that an indexer needs to stake.\"},\"operatorAuth(address,address)\":{\"notice\":\"Getter for operatorAuth[_indexer][_maybeOperator]: returns true if the operator is authorized to operate on behalf of the indexer.\"},\"protocolPercentage()\":{\"notice\":\"Getter for protocolPercentage: the percentage of query fees that are burned as protocol fees.\"},\"rewardsDestination(address)\":{\"notice\":\"Getter for rewardsDestination[_indexer]: returns the address where the indexer's rewards are sent.\"},\"setDelegationRatio(uint32)\":{\"notice\":\"Set the delegation ratio. If set to 10 it means the indexer can use up to 10x the indexer staked amount from their delegated tokens\"},\"setDelegationTaxPercentage(uint32)\":{\"notice\":\"Set a delegation tax percentage to burn when delegated funds are deposited.\"},\"setDelegationUnbondingPeriod(uint32)\":{\"notice\":\"Set the time, in epochs, a Delegator needs to wait to withdraw tokens after undelegating.\"},\"setSlasher(address,bool)\":{\"notice\":\"Set or unset an address as allowed slasher.\"},\"slash(address,uint256,uint256,address)\":{\"notice\":\"Slash the indexer stake. Delegated tokens are not subject to slashing.\"},\"slashers(address)\":{\"notice\":\"Getter for slashers[_maybeSlasher]: returns true if the address is a slasher, i.e. an entity that can slash indexers\"},\"stakes(address)\":{\"notice\":\"Getter for stakes[_indexer]: gets the stake information for an indexer as a IStakes.Indexer struct.\"},\"subgraphAllocations(bytes32)\":{\"notice\":\"Getter for subgraphAllocations[_subgraphDeploymentId]: returns the amount of tokens allocated to a subgraph deployment.\"},\"thawingPeriod()\":{\"notice\":\"Getter for thawingPeriod: the time in blocks an indexer needs to wait to unstake tokens.\"},\"undelegate(address,uint256)\":{\"notice\":\"Undelegate tokens from an indexer. Tokens will be locked for the unbonding period.\"},\"withdrawDelegated(address,address)\":{\"notice\":\"Withdraw undelegated tokens once the unbonding period has passed, and optionally re-delegate to a new indexer.\"}},\"notice\":\"This interface defines the events and functions implemented in the StakingExtension contract, which is used to extend the functionality of the Staking contract while keeping it within the 24kB mainnet size limit. In particular, this interface includes delegation functions and various storage getters.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/staking/IStakingExtension.sol\":\"IStakingExtension\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/staking/IStakingData.sol\":{\"keccak256\":\"0x538d86b0f64b89bfaa1257a38b38e94bf24c4314793fb15c0d078fb0c6e5a0b5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4e76933e6d57b778dfec8f8154c940dbbc217432fdfc2bd4aa0506f359d31509\",\"dweb:/ipfs/QmT9BhCaD4yGiYWo6ZCKY2mVEFp3XwMFS3HkhRU55BQBRa\"]},\"contracts/contracts/staking/IStakingExtension.sol\":{\"keccak256\":\"0x002814ddee1a132e0dd32a13db8a8722a3e02bc73c10f99b542fb0e518d8e562\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1dfe0ac4eb1aff4859416ae11725e6eb5b1b91fcf1156b4bcfb0242178262536\",\"dweb:/ipfs/QmcLRgfzy58cvDjrkdC3u9KV9jS2WyLFAnUQnLNmtUunSG\"]},\"contracts/contracts/staking/libs/IStakes.sol\":{\"keccak256\":\"0x8f1f7b3b8d8a4018223ecdf200d8cb48d31cf055e1b6ed20fb035e226ab4c376\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1fa5cf676a93c23dd0a380908940fe51b22297681b06fd06045a387824b1ba77\",\"dweb:/ipfs/QmUJ6Buv42R5KLVpZE9Bo5YwxoVk7URJERfQindABstWbk\"]}},\"version\":1}"}},"contracts/contracts/staking/libs/IStakes.sol":{"IStakes":{"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\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Interface for staking data structures\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Defines the data structures used for indexer staking\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/staking/libs/IStakes.sol\":\"IStakes\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/staking/libs/IStakes.sol\":{\"keccak256\":\"0x8f1f7b3b8d8a4018223ecdf200d8cb48d31cf055e1b6ed20fb035e226ab4c376\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1fa5cf676a93c23dd0a380908940fe51b22297681b06fd06045a387824b1ba77\",\"dweb:/ipfs/QmUJ6Buv42R5KLVpZE9Bo5YwxoVk7URJERfQindABstWbk\"]}},\"version\":1}"}},"contracts/contracts/upgrades/IGraphProxy.sol":{"IGraphProxy":{"abi":[{"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"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptUpgrade()":"59fc20bb","acceptUpgradeAndCall(bytes)":"623faf61","admin()":"f851a440","implementation()":"5c60da1b","pendingImplementation()":"396f7b23","setAdmin(address)":"704b6c02","upgradeTo(address)":"3659cfe6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"kind\":\"dev\",\"methods\":{\"acceptUpgradeAndCall(bytes)\":{\"params\":{\"data\":\"Calldata (including selector) for the function to delegatecall into the implementation\"}},\"admin()\":{\"details\":\"NOTE: Only the admin can call this function. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\",\"returns\":{\"_0\":\"adminAddress The address of the current admin\"}},\"implementation()\":{\"details\":\"NOTE: Only the admin can call this function. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\",\"returns\":{\"_0\":\"implementationAddress The address of the current implementation for this proxy\"}},\"pendingImplementation()\":{\"details\":\"NOTE: Only the admin can call this function. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c`\",\"returns\":{\"_0\":\"pendingImplementationAddress The address of the current pending implementation for this proxy\"}},\"setAdmin(address)\":{\"details\":\"NOTE: Only the admin can call this function.\",\"params\":{\"newAdmin\":\"Address of the new admin\"}},\"upgradeTo(address)\":{\"details\":\"NOTE: Only the admin can call this function.\",\"params\":{\"newImplementation\":\"Address of implementation contract\"}}},\"title\":\"Graph Proxy Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptUpgrade()\":{\"notice\":\"Admin function for new implementation to accept its role as implementation.\"},\"acceptUpgradeAndCall(bytes)\":{\"notice\":\"Admin function for new implementation to accept its role as implementation, calling a function on the new implementation.\"},\"admin()\":{\"notice\":\"Get the current admin.\"},\"implementation()\":{\"notice\":\"Get the current implementation.\"},\"pendingImplementation()\":{\"notice\":\"Get the current pending implementation.\"},\"setAdmin(address)\":{\"notice\":\"Change the admin of the proxy.\"},\"upgradeTo(address)\":{\"notice\":\"Upgrades to a new implementation contract.\"}},\"notice\":\"Interface for the Graph Proxy contract that handles upgradeable proxy functionality\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/upgrades/IGraphProxy.sol\":\"IGraphProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/upgrades/IGraphProxy.sol\":{\"keccak256\":\"0xbf99dbbc555e684de2782048413dbc20d7201126c671835eb6ff798f142ecea7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://24f0b8aca36eb17c5c49de248030179a2d09af64ac684aae4745e627626d5beb\",\"dweb:/ipfs/QmZ6E3SdMb8rGTPFq9fCUNk7uAS6uuyvCXVZ346BoXs2BV\"]}},\"version\":1}"}},"contracts/contracts/upgrades/IGraphProxyAdmin.sol":{"IGraphProxyAdmin":{"abi":[{"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 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":"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"},{"inputs":[{"internalType":"contract IGraphProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IGraphProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","acceptProxy(address)":"a2594d82","acceptProxyAndCall(address,bytes)":"9ce7abe5","changeProxyAdmin(address,address)":"7eff275e","getProxyAdmin(address)":"f3b7dead","getProxyImplementation(address)":"204e1c7a","getProxyPendingImplementation(address)":"5bf410eb","governor()":"0c340a24","pendingGovernor()":"e3056a34","transferOwnership(address)":"f2fde38b","upgrade(address,address)":"99a88ec4","upgradeTo(address,address)":"132d807e","upgradeToAndCall(address,address,bytes)":"13b7adcc"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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 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\":\"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\"},{\"inputs\":[{\"internalType\":\"contract IGraphProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IGraphProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"details\":\"Note that this interface is not used by the contract implementation, just used for types and abi generation\",\"events\":{\"NewOwnership(address,address)\":{\"params\":{\"from\":\"The address of the previous governor\",\"to\":\"The address of the new governor\"}},\"NewPendingOwnership(address,address)\":{\"params\":{\"from\":\"The address of the current governor\",\"to\":\"The address of the new pending governor\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProxy(address)\":{\"params\":{\"proxy\":\"The proxy contract to accept\"}},\"acceptProxyAndCall(address,bytes)\":{\"params\":{\"data\":\"The calldata to execute after accepting\",\"proxy\":\"The proxy contract to accept\"}},\"changeProxyAdmin(address,address)\":{\"params\":{\"newAdmin\":\"The new admin address\",\"proxy\":\"The proxy contract to modify\"}},\"getProxyAdmin(address)\":{\"params\":{\"proxy\":\"The proxy contract to query\"},\"returns\":{\"_0\":\"The admin address\"}},\"getProxyImplementation(address)\":{\"params\":{\"proxy\":\"The proxy contract to query\"},\"returns\":{\"_0\":\"The implementation address\"}},\"getProxyPendingImplementation(address)\":{\"params\":{\"proxy\":\"The proxy contract to query\"},\"returns\":{\"_0\":\"The pending implementation address\"}},\"governor()\":{\"returns\":{\"_0\":\"The address of the governor\"}},\"pendingGovernor()\":{\"returns\":{\"_0\":\"The address of the pending governor\"}},\"transferOwnership(address)\":{\"params\":{\"newGovernor\":\"Address of new `governor`\"}},\"upgrade(address,address)\":{\"params\":{\"implementation\":\"The new implementation address\",\"proxy\":\"The proxy contract to upgrade\"}},\"upgradeTo(address,address)\":{\"params\":{\"implementation\":\"The new implementation address\",\"proxy\":\"The proxy contract to upgrade\"}},\"upgradeToAndCall(address,address,bytes)\":{\"params\":{\"data\":\"The calldata to execute on the new implementation\",\"implementation\":\"The new implementation address\",\"proxy\":\"The proxy contract to upgrade\"}}},\"title\":\"IGraphProxyAdmin\",\"version\":1},\"userdoc\":{\"events\":{\"NewOwnership(address,address)\":{\"notice\":\"Emitted when governance is transferred to a new governor\"},\"NewPendingOwnership(address,address)\":{\"notice\":\"Emitted when a new pending governor is set\"}},\"kind\":\"user\",\"methods\":{\"acceptOwnership()\":{\"notice\":\"Admin function for pending governor to accept role and update governor.\"},\"acceptProxy(address)\":{\"notice\":\"Accept ownership of a proxy contract\"},\"acceptProxyAndCall(address,bytes)\":{\"notice\":\"Accept ownership of a proxy contract and call a function\"},\"changeProxyAdmin(address,address)\":{\"notice\":\"Change the admin of a proxy contract\"},\"getProxyAdmin(address)\":{\"notice\":\"Get the admin address of a proxy\"},\"getProxyImplementation(address)\":{\"notice\":\"Get the implementation address of a proxy\"},\"getProxyPendingImplementation(address)\":{\"notice\":\"Get the pending implementation address of a proxy\"},\"governor()\":{\"notice\":\"Get the governor address\"},\"pendingGovernor()\":{\"notice\":\"Get the pending governor address\"},\"transferOwnership(address)\":{\"notice\":\"Admin function to begin change of governor.\"},\"upgrade(address,address)\":{\"notice\":\"Upgrade a proxy to a new implementation\"},\"upgradeTo(address,address)\":{\"notice\":\"Upgrade a proxy to a new implementation\"},\"upgradeToAndCall(address,address,bytes)\":{\"notice\":\"Upgrade a proxy to a new implementation and call a function\"}},\"notice\":\"GraphProxyAdmin contract interface for managing proxy contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/upgrades/IGraphProxyAdmin.sol\":\"IGraphProxyAdmin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/governance/IGoverned.sol\":{\"keccak256\":\"0xd8f3bbcc2c8841065f3ebdd9fc6154936b6f074c7b4390b29e22ac65109261f6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5951d9821182f082d2c9eb2012ac2b8cdc391ff8b295fe9f7fe8b4d5ccc84f57\",\"dweb:/ipfs/QmUJufm4387fqYRicC1gJZwxmBxKDEKhzAVVYQNMpr8L1w\"]},\"contracts/contracts/upgrades/IGraphProxy.sol\":{\"keccak256\":\"0xbf99dbbc555e684de2782048413dbc20d7201126c671835eb6ff798f142ecea7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://24f0b8aca36eb17c5c49de248030179a2d09af64ac684aae4745e627626d5beb\",\"dweb:/ipfs/QmZ6E3SdMb8rGTPFq9fCUNk7uAS6uuyvCXVZ346BoXs2BV\"]},\"contracts/contracts/upgrades/IGraphProxyAdmin.sol\":{\"keccak256\":\"0x0c77b21797c33a86d3002c90ad8858a597c9ea2a65f019f3ab811243bc79865c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://20dd98052c63100af92d94e0c5396e9f04b7ac81e6532fd81588622cb09f11ab\",\"dweb:/ipfs/QmeLQeWreDyU8ufttXnaS1vWy1u8VxqpiY4TVh9pe3BZz4\"]}},\"version\":1}"}},"contracts/data-service/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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"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}. Emits a {ServicePaymentCollected} event. 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.\",\"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\":{\"contracts/data-service/IDataService.sol\":\"IDataService\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/data-service/IDataService.sol\":{\"keccak256\":\"0x24a4b7bf75c66404683c66cb8ed2d456f80a779617eb162794db9cf17bd58f19\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://58a651ccf814c460ce3581cf24de0dcdd8f734b71b1980246608f38aca84ac09\",\"dweb:/ipfs/QmTvyZMaQWpbTYZfjrVp5ZbZMb6NTJGfadyhqNPLCaQL59\"]},\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]}},\"version\":1}"}},"contracts/data-service/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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"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.\",\"errors\":{\"DataServiceFeesClaimNotFound(bytes32)\":[{\"params\":{\"claimId\":\"The id of the stake claim\"}}]},\"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}. Emits a {ServicePaymentCollected} event. 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.\",\"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\":{\"contracts/data-service/IDataServiceFees.sol\":\"IDataServiceFees\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/data-service/IDataService.sol\":{\"keccak256\":\"0x24a4b7bf75c66404683c66cb8ed2d456f80a779617eb162794db9cf17bd58f19\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://58a651ccf814c460ce3581cf24de0dcdd8f734b71b1980246608f38aca84ac09\",\"dweb:/ipfs/QmTvyZMaQWpbTYZfjrVp5ZbZMb6NTJGfadyhqNPLCaQL59\"]},\"contracts/data-service/IDataServiceFees.sol\":{\"keccak256\":\"0xeec7e93837b986ab78968cbb6ffc77f20f7f28124587aaa05a445ae902c05839\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e1e0f5f649653664b2082bb52af4eb07a76e0291250eaa68b4d7559d6cc761b1\",\"dweb:/ipfs/QmR8RJS4RoFRv3X2YBqVtJ5pj8LfunvQH1DrCEY81pkFku\"]},\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]}},\"version\":1}"}},"contracts/data-service/IDataServicePausable.sol":{"IDataServicePausable":{"abi":[{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"DataServicePausableNotPauseGuardian","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"DataServicePausablePauseGuardianNoChange","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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"DataServicePausablePauseGuardianNoChange\",\"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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"DataServicePausableNotPauseGuardian(address)\":[{\"params\":{\"account\":\"The address of the pause guardian\"}}],\"DataServicePausablePauseGuardianNoChange(address,bool)\":[{\"params\":{\"account\":\"The address of the pause guardian\",\"allowed\":\"The allowed status 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}. Emits a {ServicePaymentCollected} event. 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.\",\"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\"}],\"DataServicePausablePauseGuardianNoChange(address,bool)\":[{\"notice\":\"Emitted when a pause guardian is set to the same allowed status\"}]},\"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\":{\"contracts/data-service/IDataServicePausable.sol\":\"IDataServicePausable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/data-service/IDataService.sol\":{\"keccak256\":\"0x24a4b7bf75c66404683c66cb8ed2d456f80a779617eb162794db9cf17bd58f19\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://58a651ccf814c460ce3581cf24de0dcdd8f734b71b1980246608f38aca84ac09\",\"dweb:/ipfs/QmTvyZMaQWpbTYZfjrVp5ZbZMb6NTJGfadyhqNPLCaQL59\"]},\"contracts/data-service/IDataServicePausable.sol\":{\"keccak256\":\"0x1b134b20498d16314a7e1931fff6245500af66cc14a71684d4350353d7d826a1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4201cbf720bb24710abadfc887dc6e6151763c69ce7be06907aab71f1bc9ae3\",\"dweb:/ipfs/QmbU4Cwo2ApVQVGPhTs7B8kyHmkDu7iN2pDRw9hcoASFKR\"]},\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]}},\"version\":1}"}},"contracts/data-service/IDataServiceRescuable.sol":{"IDataServiceRescuable":{"abi":[{"inputs":[],"name":"DataServiceRescuableCannotRescueZero","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"DataServiceRescuableNotRescuer","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"RescuerSet","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"TokensRescued","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 payable","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueGRT","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","rescueETH(address,uint256)":"099a04e5","rescueGRT(address,uint256)":"8723fce5","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\":[],\"name\":\"DataServiceRescuableCannotRescueZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DataServiceRescuableNotRescuer\",\"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\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"RescuerSet\",\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensRescued\",\"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 payable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"rescueETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"rescueGRT\",\"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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"DataServiceRescuableNotRescuer(address)\":[{\"params\":{\"account\":\"The address of the account that attempted the rescue\"}}]},\"events\":{\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"RescuerSet(address,bool)\":{\"params\":{\"account\":\"The address of the rescuer\",\"allowed\":\"Whether the rescuer is allowed to rescue 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.\"}},\"TokensRescued(address,address,address,uint256)\":{\"params\":{\"from\":\"The address initiating the rescue\",\"to\":\"The address receiving the rescued tokens\",\"token\":\"The address of the token being rescued\",\"tokens\":\"The amount of tokens rescued\"}}},\"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}. Emits a {ServicePaymentCollected} event. 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.\",\"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.\"}},\"rescueETH(address,uint256)\":{\"details\":\"Declared as virtual to allow disabling the function via override. Requirements: - Cannot rescue zeroether. Emits a {TokensRescued} event.\",\"params\":{\"to\":\"Address of the tokens recipient.\",\"tokens\":\"Amount of tokens to rescue.\"}},\"rescueGRT(address,uint256)\":{\"details\":\"Declared as virtual to allow disabling the function via override. Requirements: - Cannot rescue zero tokens. Emits a {TokensRescued} event.\",\"params\":{\"to\":\"Address of the tokens recipient.\",\"tokens\":\"Amount of tokens to rescue.\"}},\"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 {IDataServicePausable} contract.\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServiceRescuableCannotRescueZero()\":[{\"notice\":\"Thrown when trying to rescue zero tokens.\"}],\"DataServiceRescuableNotRescuer(address)\":[{\"notice\":\"Thrown when the caller is not a rescuer.\"}]},\"events\":{\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"RescuerSet(address,bool)\":{\"notice\":\"Emitted when a rescuer 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.\"},\"TokensRescued(address,address,address,uint256)\":{\"notice\":\"Emitted when tokens are rescued from the contract.\"}},\"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.\"},\"rescueETH(address,uint256)\":{\"notice\":\"Rescues ether from the contract.\"},\"rescueGRT(address,uint256)\":{\"notice\":\"Rescues GRT tokens from the contract.\"},\"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, adds the ability to rescue any ERC20 token or ETH from the contract, controlled by a rescuer privileged role.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/data-service/IDataServiceRescuable.sol\":\"IDataServiceRescuable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/data-service/IDataService.sol\":{\"keccak256\":\"0x24a4b7bf75c66404683c66cb8ed2d456f80a779617eb162794db9cf17bd58f19\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://58a651ccf814c460ce3581cf24de0dcdd8f734b71b1980246608f38aca84ac09\",\"dweb:/ipfs/QmTvyZMaQWpbTYZfjrVp5ZbZMb6NTJGfadyhqNPLCaQL59\"]},\"contracts/data-service/IDataServiceRescuable.sol\":{\"keccak256\":\"0x18819b9380a0243075ea253f847ac64f541076146c2ba86a8c3080ec3f42c2d0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fade4e7aeb581ddbd6633c1c7f11aba465551418b174ab70df036348fe0ca7d1\",\"dweb:/ipfs/QmW2xZt9NBCndrgmd6uWSobFEti1MHfHjsDQsGCjDNk8uW\"]},\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]}},\"version\":1}"}},"contracts/horizon/IAuthorizable.sol":{"IAuthorizable":{"abi":[{"inputs":[],"name":"AuthorizableInvalidSignerProof","type":"error"},{"inputs":[{"internalType":"uint256","name":"proofDeadline","type":"uint256"},{"internalType":"uint256","name":"currentTimestamp","type":"uint256"}],"name":"AuthorizableInvalidSignerProofDeadline","type":"error"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"bool","name":"revoked","type":"bool"}],"name":"AuthorizableSignerAlreadyAuthorized","type":"error"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"name":"AuthorizableSignerNotAuthorized","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"AuthorizableSignerNotThawing","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentTimestamp","type":"uint256"},{"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"AuthorizableSignerStillThawing","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"SignerAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"SignerRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"SignerThawCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"SignerThawing","type":"event"},{"inputs":[],"name":"REVOKE_AUTHORIZATION_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":"cancelThawSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"getThawEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":{"REVOKE_AUTHORIZATION_THAWING_PERIOD()":"9b952881","authorizeSigner(address,uint256,bytes)":"fee9f01f","cancelThawSigner(address)":"015cdd80","getThawEnd(address)":"bea5d2ab","isAuthorized(address,address)":"65e4ad9e","revokeAuthorizedSigner(address)":"39aa7416","thawSigner(address)":"1354f019"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AuthorizableInvalidSignerProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"}],\"name\":\"AuthorizableInvalidSignerProofDeadline\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"revoked\",\"type\":\"bool\"}],\"name\":\"AuthorizableSignerAlreadyAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"AuthorizableSignerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"AuthorizableSignerNotThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"AuthorizableSignerStillThawing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"SignerAuthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"SignerRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"SignerThawCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"SignerThawing\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"REVOKE_AUTHORIZATION_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\":\"cancelThawSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"getThawEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"isAuthorized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"AuthorizableInvalidSignerProofDeadline(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"proofDeadline\":\"The deadline for the proof provided\"}}],\"AuthorizableSignerAlreadyAuthorized(address,address,bool)\":[{\"params\":{\"authorizer\":\"The address of the authorizer\",\"revoked\":\"The revoked status of the authorization\",\"signer\":\"The address of the signer\"}}],\"AuthorizableSignerNotAuthorized(address,address)\":[{\"params\":{\"authorizer\":\"The address of the authorizer\",\"signer\":\"The address of the signer\"}}],\"AuthorizableSignerNotThawing(address)\":[{\"params\":{\"signer\":\"The address of the signer\"}}],\"AuthorizableSignerStillThawing(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}]},\"events\":{\"SignerAuthorized(address,address)\":{\"params\":{\"authorizer\":\"The address of the authorizer\",\"signer\":\"The address of the signer\"}},\"SignerRevoked(address,address)\":{\"params\":{\"authorizer\":\"The address of the authorizer revoking the signer\",\"signer\":\"The address of the signer\"}},\"SignerThawCanceled(address,address,uint256)\":{\"params\":{\"authorizer\":\"The address of the authorizer cancelling the thawing\",\"signer\":\"The address of the signer\",\"thawEndTimestamp\":\"The timestamp at which the thawing period was scheduled to end\"}},\"SignerThawing(address,address,uint256)\":{\"params\":{\"authorizer\":\"The address of the authorizer thawing the signer\",\"signer\":\"The address of the signer to thaw\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}},\"kind\":\"dev\",\"methods\":{\"REVOKE_AUTHORIZATION_THAWING_PERIOD()\":{\"returns\":{\"_0\":\"The period in seconds\"}},\"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 a {SignerAuthorized} event\",\"params\":{\"proof\":\"The proof provided by the signer to be authorized by the authorizer consists of (chain id, verifying contract address, domain, proof deadline, authorizer address)\",\"proofDeadline\":\"The deadline for the proof provided by the signer\",\"signer\":\"The address of the signer\"}},\"cancelThawSigner(address)\":{\"details\":\"Requirements: - `signer` must be thawing and authorized by the function caller Emits a {SignerThawCanceled} event\",\"params\":{\"signer\":\"The address of the signer to cancel thawing\"}},\"getThawEnd(address)\":{\"params\":{\"signer\":\"The address of the signer\"},\"returns\":{\"_0\":\"The timestamp at which the thawing period ends\"}},\"isAuthorized(address,address)\":{\"params\":{\"authorizer\":\"The address of the authorizer\",\"signer\":\"The address of the signer\"},\"returns\":{\"_0\":\"true if the signer is authorized by the authorizer, false otherwise\"}},\"revokeAuthorizedSigner(address)\":{\"details\":\"Requirements: - `signer` must be thawed and authorized by the function caller Emits a {SignerRevoked} event\",\"params\":{\"signer\":\"The address of the signer\"}},\"thawSigner(address)\":{\"details\":\"Thawing a signer signals that signatures from that signer will soon be deemed invalid. Once a signer is thawed, they should be viewed as revoked regardless of their revocation status. If a signer is already thawing and this function is called, the thawing period is reset. Requirements: - `signer` must be authorized by the authorizer calling this function Emits a {SignerThawing} event\",\"params\":{\"signer\":\"The address of the signer to thaw\"}}},\"title\":\"Interface for the {Authorizable} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"AuthorizableInvalidSignerProof()\":[{\"notice\":\"Thrown when the signer proof is invalid\"}],\"AuthorizableInvalidSignerProofDeadline(uint256,uint256)\":[{\"notice\":\"Thrown when the signer proof deadline is invalid\"}],\"AuthorizableSignerAlreadyAuthorized(address,address,bool)\":[{\"notice\":\"Thrown when attempting to authorize a signer that is already authorized\"}],\"AuthorizableSignerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the signer is not authorized by the authorizer\"}],\"AuthorizableSignerNotThawing(address)\":[{\"notice\":\"Thrown when the signer is not thawing\"}],\"AuthorizableSignerStillThawing(uint256,uint256)\":[{\"notice\":\"Thrown when the signer is still thawing\"}]},\"events\":{\"SignerAuthorized(address,address)\":{\"notice\":\"Emitted when a signer is authorized to sign for a authorizer\"},\"SignerRevoked(address,address)\":{\"notice\":\"Emitted when a signer has been revoked after thawing\"},\"SignerThawCanceled(address,address,uint256)\":{\"notice\":\"Emitted when the thawing of a signer is cancelled\"},\"SignerThawing(address,address,uint256)\":{\"notice\":\"Emitted when a signer is thawed to be de-authorized\"}},\"kind\":\"user\",\"methods\":{\"REVOKE_AUTHORIZATION_THAWING_PERIOD()\":{\"notice\":\"The period after which a signer can be revoked after thawing\"},\"authorizeSigner(address,uint256,bytes)\":{\"notice\":\"Authorize a signer to sign on behalf of the authorizer\"},\"cancelThawSigner(address)\":{\"notice\":\"Stops thawing a signer.\"},\"getThawEnd(address)\":{\"notice\":\"Returns the timestamp at which the thawing period ends for a signer. Returns 0 if the signer is not thawing.\"},\"isAuthorized(address,address)\":{\"notice\":\"Returns true if the signer is authorized by the authorizer\"},\"revokeAuthorizedSigner(address)\":{\"notice\":\"Revokes a signer if thawed.\"},\"thawSigner(address)\":{\"notice\":\"Starts thawing a signer to be de-authorized\"}},\"notice\":\"Implements an authorization scheme that allows authorizers to authorize signers to sign on their behalf.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/horizon/IAuthorizable.sol\":\"IAuthorizable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/IAuthorizable.sol\":{\"keccak256\":\"0x355b62b5710dd2ff0ca085989f78dd4daaac7b5c35ee11dac47674ea3592b21d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://78587e3ed01e52d1092ebfbc48b8c11519a4fba9ae264fb5aba02806404bad25\",\"dweb:/ipfs/Qme5duGpikyHR2QXFiuQNNCjiCihyZR4eb9vzQsHK5vfVk\"]}},\"version\":1}"}},"contracts/horizon/IGraphPayments.sol":{"IGraphPayments":{"abi":[{"inputs":[{"internalType":"uint256","name":"cut","type":"uint256"}],"name":"GraphPaymentsInvalidCut","type":"error"},{"inputs":[{"internalType":"uint256","name":"protocolPaymentCut","type":"uint256"}],"name":"GraphPaymentsInvalidProtocolPaymentCut","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":true,"internalType":"address","name":"dataService","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensProtocol","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensDataService","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensDelegationPool","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensReceiver","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiverDestination","type":"address"}],"name":"GraphPaymentCollected","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":"dataServiceCut","type":"uint256"},{"internalType":"address","name":"receiverDestination","type":"address"}],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"PROTOCOL_PAYMENT_CUT()":"1d526e50","collect(uint8,address,uint256,address,uint256,address)":"81cd11a0","initialize()":"8129fc1c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cut\",\"type\":\"uint256\"}],\"name\":\"GraphPaymentsInvalidCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolPaymentCut\",\"type\":\"uint256\"}],\"name\":\"GraphPaymentsInvalidProtocolPaymentCut\",\"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\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensProtocol\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDelegationPool\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReceiver\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiverDestination\",\"type\":\"address\"}],\"name\":\"GraphPaymentCollected\",\"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\":\"dataServiceCut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiverDestination\",\"type\":\"address\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"GraphPaymentsInvalidCut(uint256)\":[{\"params\":{\"cut\":\"The cut\"}}],\"GraphPaymentsInvalidProtocolPaymentCut(uint256)\":[{\"params\":{\"protocolPaymentCut\":\"The protocol payment cut\"}}]},\"events\":{\"GraphPaymentCollected(uint8,address,address,address,uint256,uint256,uint256,uint256,uint256,address)\":{\"params\":{\"dataService\":\"The address of the data service\",\"payer\":\"The address of the payer\",\"paymentType\":\"The type of payment as defined in {IGraphPayments}\",\"receiver\":\"The address of the receiver\",\"receiverDestination\":\"The address where the receiver's payment cut is sent.\",\"tokens\":\"The total amount of tokens being collected\",\"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\":{\"PROTOCOL_PAYMENT_CUT()\":{\"returns\":{\"_0\":\"The protocol payment cut in PPM\"}},\"collect(uint8,address,uint256,address,uint256,address)\":{\"params\":{\"dataService\":\"The address of the data service\",\"dataServiceCut\":\"The data service cut in PPM\",\"paymentType\":\"The type of payment as defined in {IGraphPayments}\",\"receiver\":\"The address of the receiver\",\"receiverDestination\":\"The address where the receiver's payment cut is sent.\",\"tokens\":\"The amount of tokens being collected.\"}}},\"title\":\"Interface for the {GraphPayments} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphPaymentsInvalidCut(uint256)\":[{\"notice\":\"Thrown when trying to use a cut that is not expressed in PPM\"}],\"GraphPaymentsInvalidProtocolPaymentCut(uint256)\":[{\"notice\":\"Thrown when the protocol payment cut is invalid\"}]},\"events\":{\"GraphPaymentCollected(uint8,address,address,address,uint256,uint256,uint256,uint256,uint256,address)\":{\"notice\":\"Emitted when a payment is collected\"}},\"kind\":\"user\",\"methods\":{\"PROTOCOL_PAYMENT_CUT()\":{\"notice\":\"Returns the protocol payment cut\"},\"collect(uint8,address,uint256,address,uint256,address)\":{\"notice\":\"Collects funds from a payer. It will pay cuts to all relevant parties and forward the rest to the receiver destination address. If the destination address is zero the funds are automatically staked to the receiver. Note that the receiver destination address can be set to the receiver address to collect funds on the receiver without re-staking. Note that the collected amount can be zero.\"},\"initialize()\":{\"notice\":\"Initialize the 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.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/horizon/IGraphPayments.sol\":\"IGraphPayments\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]}},\"version\":1}"}},"contracts/horizon/IGraphTallyCollector.sol":{"IGraphTallyCollector":{"abi":[{"inputs":[],"name":"AuthorizableInvalidSignerProof","type":"error"},{"inputs":[{"internalType":"uint256","name":"proofDeadline","type":"uint256"},{"internalType":"uint256","name":"currentTimestamp","type":"uint256"}],"name":"AuthorizableInvalidSignerProofDeadline","type":"error"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"bool","name":"revoked","type":"bool"}],"name":"AuthorizableSignerAlreadyAuthorized","type":"error"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"name":"AuthorizableSignerNotAuthorized","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"AuthorizableSignerNotThawing","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentTimestamp","type":"uint256"},{"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"AuthorizableSignerStillThawing","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"dataService","type":"address"}],"name":"GraphTallyCollectorCallerNotDataService","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"tokensCollected","type":"uint256"}],"name":"GraphTallyCollectorInconsistentRAVTokens","type":"error"},{"inputs":[],"name":"GraphTallyCollectorInvalidRAVSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokensToCollect","type":"uint256"},{"internalType":"uint256","name":"maxTokensToCollect","type":"uint256"}],"name":"GraphTallyCollectorInvalidTokensToCollectAmount","type":"error"},{"inputs":[{"internalType":"address","name":"dataService","type":"address"}],"name":"GraphTallyCollectorUnauthorizedDataService","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum IGraphPayments.PaymentTypes","name":"paymentType","type":"uint8"},{"indexed":true,"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"dataService","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"PaymentCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":true,"internalType":"address","name":"dataService","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":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"SignerAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"SignerRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"SignerThawCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"SignerThawing","type":"event"},{"inputs":[],"name":"REVOKE_AUTHORIZATION_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":"cancelThawSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IGraphPayments.PaymentTypes","name":"paymentType","type":"uint8"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"tokensToCollect","type":"uint256"}],"name":"collect","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"bytes32","name":"collectionId","type":"bytes32"},{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"serviceProvider","type":"address"},{"internalType":"address","name":"dataService","type":"address"},{"internalType":"uint64","name":"timestampNs","type":"uint64"},{"internalType":"uint128","name":"valueAggregate","type":"uint128"},{"internalType":"bytes","name":"metadata","type":"bytes"}],"internalType":"struct IGraphTallyCollector.ReceiptAggregateVoucher","name":"rav","type":"tuple"}],"name":"encodeRAV","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"getThawEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"serviceProvider","type":"address"},{"internalType":"address","name":"dataService","type":"address"},{"internalType":"uint64","name":"timestampNs","type":"uint64"},{"internalType":"uint128","name":"valueAggregate","type":"uint128"},{"internalType":"bytes","name":"metadata","type":"bytes"}],"internalType":"struct IGraphTallyCollector.ReceiptAggregateVoucher","name":"rav","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct IGraphTallyCollector.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":{"REVOKE_AUTHORIZATION_THAWING_PERIOD()":"9b952881","authorizeSigner(address,uint256,bytes)":"fee9f01f","cancelThawSigner(address)":"015cdd80","collect(uint8,bytes)":"7f07d283","collect(uint8,bytes,uint256)":"692209ce","encodeRAV((bytes32,address,address,address,uint64,uint128,bytes))":"26969c4c","getThawEnd(address)":"bea5d2ab","isAuthorized(address,address)":"65e4ad9e","recoverRAVSigner(((bytes32,address,address,address,uint64,uint128,bytes),bytes))":"63648817","revokeAuthorizedSigner(address)":"39aa7416","thawSigner(address)":"1354f019"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AuthorizableInvalidSignerProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"}],\"name\":\"AuthorizableInvalidSignerProofDeadline\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"revoked\",\"type\":\"bool\"}],\"name\":\"AuthorizableSignerAlreadyAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"AuthorizableSignerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"AuthorizableSignerNotThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"AuthorizableSignerStillThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"}],\"name\":\"GraphTallyCollectorCallerNotDataService\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensCollected\",\"type\":\"uint256\"}],\"name\":\"GraphTallyCollectorInconsistentRAVTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GraphTallyCollectorInvalidRAVSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensToCollect\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokensToCollect\",\"type\":\"uint256\"}],\"name\":\"GraphTallyCollectorInvalidTokensToCollectAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"}],\"name\":\"GraphTallyCollectorUnauthorizedDataService\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"PaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"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\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"SignerAuthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"SignerRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"SignerThawCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"SignerThawing\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"REVOKE_AUTHORIZATION_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\":\"cancelThawSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"tokensToCollect\",\"type\":\"uint256\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestampNs\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"valueAggregate\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct IGraphTallyCollector.ReceiptAggregateVoucher\",\"name\":\"rav\",\"type\":\"tuple\"}],\"name\":\"encodeRAV\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"getThawEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"isAuthorized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestampNs\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"valueAggregate\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct IGraphTallyCollector.ReceiptAggregateVoucher\",\"name\":\"rav\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IGraphTallyCollector.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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"details\":\"Implements the {IPaymentCollector} interface as defined by the Graph Horizon payments protocol.\",\"errors\":{\"AuthorizableInvalidSignerProofDeadline(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"proofDeadline\":\"The deadline for the proof provided\"}}],\"AuthorizableSignerAlreadyAuthorized(address,address,bool)\":[{\"params\":{\"authorizer\":\"The address of the authorizer\",\"revoked\":\"The revoked status of the authorization\",\"signer\":\"The address of the signer\"}}],\"AuthorizableSignerNotAuthorized(address,address)\":[{\"params\":{\"authorizer\":\"The address of the authorizer\",\"signer\":\"The address of the signer\"}}],\"AuthorizableSignerNotThawing(address)\":[{\"params\":{\"signer\":\"The address of the signer\"}}],\"AuthorizableSignerStillThawing(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}],\"GraphTallyCollectorCallerNotDataService(address,address)\":[{\"params\":{\"caller\":\"The address of the caller\",\"dataService\":\"The address of the data service\"}}],\"GraphTallyCollectorInconsistentRAVTokens(uint256,uint256)\":[{\"params\":{\"tokens\":\"The amount of tokens in the RAV\",\"tokensCollected\":\"The amount of tokens already collected\"}}],\"GraphTallyCollectorInvalidTokensToCollectAmount(uint256,uint256)\":[{\"params\":{\"maxTokensToCollect\":\"The maximum amount of tokens to collect\",\"tokensToCollect\":\"The amount of tokens to collect\"}}],\"GraphTallyCollectorUnauthorizedDataService(address)\":[{\"params\":{\"dataService\":\"The address of the data service\"}}]},\"events\":{\"PaymentCollected(uint8,bytes32,address,address,address,uint256)\":{\"params\":{\"collectionId\":\"The id for the collection. Can be used at the discretion of the collector to group multiple payments.\",\"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\",\"tokens\":\"The amount of tokens being collected\"}},\"RAVCollected(bytes32,address,address,address,uint64,uint128,bytes,bytes)\":{\"params\":{\"collectionId\":\"The ID of the collection \\\"bucket\\\" the RAV belongs to.\",\"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\":{\"authorizer\":\"The address of the authorizer\",\"signer\":\"The address of the signer\"}},\"SignerRevoked(address,address)\":{\"params\":{\"authorizer\":\"The address of the authorizer revoking the signer\",\"signer\":\"The address of the signer\"}},\"SignerThawCanceled(address,address,uint256)\":{\"params\":{\"authorizer\":\"The address of the authorizer cancelling the thawing\",\"signer\":\"The address of the signer\",\"thawEndTimestamp\":\"The timestamp at which the thawing period was scheduled to end\"}},\"SignerThawing(address,address,uint256)\":{\"params\":{\"authorizer\":\"The address of the authorizer thawing the signer\",\"signer\":\"The address of the signer to thaw\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}},\"kind\":\"dev\",\"methods\":{\"REVOKE_AUTHORIZATION_THAWING_PERIOD()\":{\"returns\":{\"_0\":\"The period in seconds\"}},\"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 a {SignerAuthorized} event\",\"params\":{\"proof\":\"The proof provided by the signer to be authorized by the authorizer consists of (chain id, verifying contract address, domain, proof deadline, authorizer address)\",\"proofDeadline\":\"The deadline for the proof provided by the signer\",\"signer\":\"The address of the signer\"}},\"cancelThawSigner(address)\":{\"details\":\"Requirements: - `signer` must be thawing and authorized by the function caller 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. 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}\"},\"returns\":{\"_0\":\"The amount of tokens collected\"}},\"collect(uint8,bytes,uint256)\":{\"params\":{\"data\":\"Additional data required for the payment collection. Encoded as follows: - SignedRAV `signedRAV`: The signed RAV - uint256 `dataServiceCut`: The data service cut in PPM - address `receiverDestination`: The address where the receiver's payment should be sent.\",\"paymentType\":\"The payment type to collect\",\"tokensToCollect\":\"The amount of tokens to collect\"},\"returns\":{\"_0\":\"The amount of tokens collected\"}},\"encodeRAV((bytes32,address,address,address,uint64,uint128,bytes))\":{\"params\":{\"rav\":\"The RAV for which to compute the hash.\"},\"returns\":{\"_0\":\"The hash of the RAV.\"}},\"getThawEnd(address)\":{\"params\":{\"signer\":\"The address of the signer\"},\"returns\":{\"_0\":\"The timestamp at which the thawing period ends\"}},\"isAuthorized(address,address)\":{\"params\":{\"authorizer\":\"The address of the authorizer\",\"signer\":\"The address of the signer\"},\"returns\":{\"_0\":\"true if the signer is authorized by the authorizer, false otherwise\"}},\"recoverRAVSigner(((bytes32,address,address,address,uint64,uint128,bytes),bytes))\":{\"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 function caller Emits a {SignerRevoked} event\",\"params\":{\"signer\":\"The address of the signer\"}},\"thawSigner(address)\":{\"details\":\"Thawing a signer signals that signatures from that signer will soon be deemed invalid. Once a signer is thawed, they should be viewed as revoked regardless of their revocation status. If a signer is already thawing and this function is called, the thawing period is reset. Requirements: - `signer` must be authorized by the authorizer calling this function Emits a {SignerThawing} event\",\"params\":{\"signer\":\"The address of the signer to thaw\"}}},\"title\":\"Interface for the {GraphTallyCollector} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"AuthorizableInvalidSignerProof()\":[{\"notice\":\"Thrown when the signer proof is invalid\"}],\"AuthorizableInvalidSignerProofDeadline(uint256,uint256)\":[{\"notice\":\"Thrown when the signer proof deadline is invalid\"}],\"AuthorizableSignerAlreadyAuthorized(address,address,bool)\":[{\"notice\":\"Thrown when attempting to authorize a signer that is already authorized\"}],\"AuthorizableSignerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the signer is not authorized by the authorizer\"}],\"AuthorizableSignerNotThawing(address)\":[{\"notice\":\"Thrown when the signer is not thawing\"}],\"AuthorizableSignerStillThawing(uint256,uint256)\":[{\"notice\":\"Thrown when the signer is still thawing\"}],\"GraphTallyCollectorCallerNotDataService(address,address)\":[{\"notice\":\"Thrown when the caller is not the data service the RAV was issued to\"}],\"GraphTallyCollectorInconsistentRAVTokens(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\"}],\"GraphTallyCollectorInvalidRAVSigner()\":[{\"notice\":\"Thrown when the RAV signer is invalid\"}],\"GraphTallyCollectorInvalidTokensToCollectAmount(uint256,uint256)\":[{\"notice\":\"Thrown when the attempting to collect more tokens than what it's owed\"}],\"GraphTallyCollectorUnauthorizedDataService(address)\":[{\"notice\":\"Thrown when the RAV is for a data service the service provider has no provision for\"}]},\"events\":{\"PaymentCollected(uint8,bytes32,address,address,address,uint256)\":{\"notice\":\"Emitted when a payment is collected\"},\"RAVCollected(bytes32,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 for a authorizer\"},\"SignerRevoked(address,address)\":{\"notice\":\"Emitted when a signer has been revoked after thawing\"},\"SignerThawCanceled(address,address,uint256)\":{\"notice\":\"Emitted when the thawing of a signer is cancelled\"},\"SignerThawing(address,address,uint256)\":{\"notice\":\"Emitted when a signer is thawed to be de-authorized\"}},\"kind\":\"user\",\"methods\":{\"REVOKE_AUTHORIZATION_THAWING_PERIOD()\":{\"notice\":\"The period after which a signer can be revoked after thawing\"},\"authorizeSigner(address,uint256,bytes)\":{\"notice\":\"Authorize a signer to sign on behalf of the authorizer\"},\"cancelThawSigner(address)\":{\"notice\":\"Stops thawing a signer.\"},\"collect(uint8,bytes)\":{\"notice\":\"Initiate a payment collection through the payments protocol\"},\"collect(uint8,bytes,uint256)\":{\"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.\"},\"encodeRAV((bytes32,address,address,address,uint64,uint128,bytes))\":{\"notice\":\"Computes the hash of a ReceiptAggregateVoucher (RAV).\"},\"getThawEnd(address)\":{\"notice\":\"Returns the timestamp at which the thawing period ends for a signer. Returns 0 if the signer is not thawing.\"},\"isAuthorized(address,address)\":{\"notice\":\"Returns true if the signer is authorized by the authorizer\"},\"recoverRAVSigner(((bytes32,address,address,address,uint64,uint128,bytes),bytes))\":{\"notice\":\"Recovers the signer address of a signed ReceiptAggregateVoucher (RAV).\"},\"revokeAuthorizedSigner(address)\":{\"notice\":\"Revokes a signer if thawed.\"},\"thawSigner(address)\":{\"notice\":\"Starts thawing a signer to be de-authorized\"}},\"notice\":\"Implements a payments collector contract that can be used to collect payments using a GraphTally RAV (Receipt Aggregate Voucher).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/horizon/IGraphTallyCollector.sol\":\"IGraphTallyCollector\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/IAuthorizable.sol\":{\"keccak256\":\"0x355b62b5710dd2ff0ca085989f78dd4daaac7b5c35ee11dac47674ea3592b21d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://78587e3ed01e52d1092ebfbc48b8c11519a4fba9ae264fb5aba02806404bad25\",\"dweb:/ipfs/Qme5duGpikyHR2QXFiuQNNCjiCihyZR4eb9vzQsHK5vfVk\"]},\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/horizon/IGraphTallyCollector.sol\":{\"keccak256\":\"0x1645b28cc986fa2ba3f2c8a1d8e3cf5a34ff8d71b9f2b5df25e37729f8d6b50e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9794391a7b607b74c3e5903435ab5b9a6fb9249e9acb65d37f1fc80bd66fd3a1\",\"dweb:/ipfs/Qme3RQTvzzwrgHmpyuizc122p7sxEerisHwFc8V7wiGs77\"]},\"contracts/horizon/IPaymentsCollector.sol\":{\"keccak256\":\"0xac87419dd33722e6e2cf782959ea445feea521388075cdfd492b8694efef2c3b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2620459f86ddf5a96f35e3069fb96de6fa26c46c697250d9965589addf8030db\",\"dweb:/ipfs/QmZ4rG6J6VSyEtDEwyju8DfsHYiFMXwFWyfvBjmwdXhwVd\"]}},\"version\":1}"}},"contracts/horizon/IHorizonStaking.sol":{"IHorizonStaking":{"abi":[{"inputs":[],"name":"HorizonStakingCallerIsServiceProvider","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"minTokens","type":"uint256"}],"name":"HorizonStakingInsufficientDelegationTokens","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":"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":[],"name":"HorizonStakingInvalidThawRequestType","type":"error"},{"inputs":[{"internalType":"uint64","name":"thawingPeriod","type":"uint64"},{"internalType":"uint64","name":"maxThawingPeriod","type":"uint64"}],"name":"HorizonStakingInvalidThawingPeriod","type":"error"},{"inputs":[{"internalType":"address","name":"verifier","type":"address"}],"name":"HorizonStakingInvalidVerifier","type":"error"},{"inputs":[],"name":"HorizonStakingInvalidVerifierZeroAddress","type":"error"},{"inputs":[],"name":"HorizonStakingInvalidZeroShares","type":"error"},{"inputs":[],"name":"HorizonStakingInvalidZeroTokens","type":"error"},{"inputs":[],"name":"HorizonStakingLegacySlashFailed","type":"error"},{"inputs":[],"name":"HorizonStakingNoTokensToSlash","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":"HorizonStakingNothingToWithdraw","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":[],"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":"serviceProvider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"HorizonStakeDeposited","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":"HorizonStakeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"HorizonStakeWithdrawn","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":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"StakeDelegatedWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"}],"name":"StakeSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"requestType","type":"uint8"},{"indexed":true,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":false,"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"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"ThawRequestCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"requestType","type":"uint8"},{"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":"enum IHorizonStakingTypes.ThawRequestType","name":"requestType","type":"uint8"},{"indexed":true,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":false,"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"},{"indexed":false,"internalType":"uint256","name":"shares","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"},{"indexed":false,"internalType":"uint256","name":"shares","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":"bool","name":"isActive","type":"bool"},{"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":"lastParametersStagedAt","type":"uint256"},{"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":[],"name":"getStakingExtension","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"getSubgraphService","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"thawRequestType","type":"uint8"},{"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":"nextRequest","type":"bytes32"},{"internalType":"uint256","name":"thawingNonce","type":"uint256"}],"internalType":"struct IHorizonStakingTypes.ThawRequest","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"thawRequestType","type":"uint8"},{"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 ILinkedList.List","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"thawRequestType","type":"uint8"},{"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":"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":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"legacySlash","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":"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":"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":"deprecated","type":"address"}],"name":"withdrawDelegated","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":{"__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","getStakingExtension()":"66ee1b28","getSubgraphAllocatedTokens(bytes32)":"e2e1e8e9","getSubgraphService()":"9363c522","getThawRequest(uint8,bytes32)":"d48de845","getThawRequestList(uint8,address,address,address)":"e56f8a1d","getThawedTokens(uint8,address,address,address)":"2f7cc501","getTokensAvailable(address,address,uint32)":"872d0489","hasStake(address)":"e73e14bf","isAllocation(address)":"f1d60d66","isAllowedLockedVerifier(address)":"ae4fe67a","isAuthorized(address,address,address)":"7c145cc7","isDelegationSlashingEnabled()":"fc54fb27","isOperator(address,address)":"b6363cf2","legacySlash(address,uint256,uint256,address)":"4488a382","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,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\":\"HorizonStakingInsufficientDelegationTokens\",\"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\":\"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\":[],\"name\":\"HorizonStakingInvalidThawRequestType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"HorizonStakingInvalidThawingPeriod\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidVerifier\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidVerifierZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingLegacySlashFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingNoTokensToSlash\",\"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\":\"HorizonStakingNothingToWithdraw\",\"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\":[],\"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\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakeDeposited\",\"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\":\"HorizonStakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakeWithdrawn\",\"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\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"StakeSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"requestType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ThawRequestCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"requestType\",\"type\":\"uint8\"},{\"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\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"requestType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"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\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"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\":\"lastParametersStagedAt\",\"type\":\"uint256\"},{\"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\":[],\"name\":\"getStakingExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"getSubgraphService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"thawRequestType\",\"type\":\"uint8\"},{\"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\":\"nextRequest\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ThawRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"thawRequestType\",\"type\":\"uint8\"},{\"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 ILinkedList.List\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"thawRequestType\",\"type\":\"uint8\"},{\"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\":\"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\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"legacySlash\",\"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\":\"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\":\"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\":\"deprecated\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"details\":\"Use this interface to interact with the Horizon Staking contract.\",\"errors\":{\"HorizonStakingInsufficientDelegationTokens(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"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\"}}],\"HorizonStakingInvalidVerifier(address)\":[{\"params\":{\"verifier\":\"The verifier address\"}}],\"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.\",\"params\":{\"verifier\":\"The verifier address\"}}]},\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"epoch\":\"The protocol epoch the allocation was closed on\",\"indexer\":\"The indexer address\",\"isPublic\":\"True if the allocation was force closed by someone other than the indexer/operator\",\"poi\":\"The proof of indexing submitted by the sender\",\"sender\":\"The address closing the allocation\",\"subgraphDeploymentID\":\"The subgraph deployment ID\",\"tokens\":\"The amount of tokens unallocated from the allocation\"}},\"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\"}},\"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\"}},\"HorizonStakeDeposited(address,uint256)\":{\"details\":\"TRANSITION PERIOD: 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.\"}},\"HorizonStakeLocked(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens now locked (including previously locked tokens)\",\"until\":\"The block number until the stake is locked\"}},\"HorizonStakeWithdrawn(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\"}},\"MaxThawingPeriodSet(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period\"}},\"OperatorSet(address,address,address,bool)\":{\"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)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"assetHolder\":\"The address of the asset holder, the entity paying the query fees\",\"curationFees\":\"The amount of tokens distributed to the curation pool\",\"delegationRewards\":\"The amount of tokens collected from the delegation pool\",\"epoch\":\"The protocol epoch the rebate was collected on\",\"indexer\":\"The indexer address\",\"protocolTax\":\"The amount of tokens burnt as protocol tax\",\"queryFees\":\"The amount of tokens collected as query fees\",\"queryRebates\":\"The amount of tokens distributed to the indexer\",\"subgraphDeploymentID\":\"The subgraph deployment ID\",\"tokens\":\"The amount of tokens collected\"}},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"details\":\"This event is for the legacy `withdrawDelegated` function.\",\"params\":{\"delegator\":\"The address of the delegator\",\"indexer\":\"The address of the indexer\",\"tokens\":\"The amount of tokens withdrawn\"}},\"StakeSlashed(address,uint256,uint256,address)\":{\"params\":{\"beneficiary\":\"The address of a beneficiary to receive a reward for the slashing\",\"indexer\":\"The indexer address\",\"reward\":\"The amount of reward tokens to send to a beneficiary\",\"tokens\":\"The amount of tokens slashed\"}},\"ThawRequestCreated(uint8,address,address,address,uint256,uint64,bytes32,uint256)\":{\"details\":\"Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\",\"params\":{\"nonce\":\"The nonce of the thaw request\",\"owner\":\"The address of the owner of the thaw request.\",\"requestType\":\"The type of 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(uint8,bytes32,uint256,uint256,uint64,bool)\":{\"params\":{\"requestType\":\"The type of thaw request\",\"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(uint8,address,address,address,uint256,uint256)\":{\"params\":{\"owner\":\"The address of the owner of the thaw requests\",\"requestType\":\"The type of thaw request\",\"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,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"shares\":\"The amount of shares delegated\",\"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,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"shares\":\"The amount of shares undelegated\",\"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)\":{\"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. Otherwise, the function will attempt to fulfill all thaw requests until the first one that is not yet expired is found. 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)\":{\"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\",\"isActive\":\"Whether the allocation is active or not\",\"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\"}},\"getMaxThawingPeriod()\":{\"returns\":{\"_0\":\"The maximum allowed thawing period in seconds.\"}},\"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.\"},\"returns\":{\"_0\":\"The service provider details.\"}},\"getStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens staked.\"}},\"getStakingExtension()\":{\"returns\":{\"_0\":\"The address of the staking extension\"}},\"getSubgraphAllocatedTokens(bytes32)\":{\"params\":{\"subgraphDeploymentId\":\"Deployment Id for the subgraph\"},\"returns\":{\"_0\":\"Total tokens allocated to subgraph\"}},\"getSubgraphService()\":{\"details\":\"TRANSITION PERIOD: After transition period move to main HorizonStaking contract\",\"returns\":{\"_0\":\"Address of the subgraph data service\"}},\"getThawRequest(uint8,bytes32)\":{\"params\":{\"thawRequestId\":\"The id of the thaw request.\",\"thawRequestType\":\"The type of thaw request.\"},\"returns\":{\"_0\":\"The thaw request details.\"}},\"getThawRequestList(uint8,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.\",\"thawRequestType\":\"The type of thaw request.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The thaw requests list metadata.\"}},\"getThawedTokens(uint8,address,address,address)\":{\"details\":\"Note that the value returned by this function does not return the total amount of thawed tokens but only those that can be released. If thaw requests are created with different thawing periods it's possible that an unexpired thaw request temporarily blocks the release of other ones that have already expired. This function will stop counting when it encounters the first thaw request that is not yet expired.\",\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"thawRequestType\":\"The type of thaw request.\",\"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\"}},\"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\"}},\"isDelegationSlashingEnabled()\":{\"returns\":{\"_0\":\"True if delegation slashing is enabled, false otherwise\"}},\"isOperator(address,address)\":{\"params\":{\"indexer\":\"Address of the service provider\",\"operator\":\"Address of the operator\"},\"returns\":{\"_0\":\"True if operator is allowed for indexer, false otherwise\"}},\"legacySlash(address,uint256,uint256,address)\":{\"details\":\"Can only be called by the slasher role.\",\"params\":{\"beneficiary\":\"Address of a beneficiary to receive a reward for the slashing\",\"indexer\":\"Address of indexer to slash\",\"reward\":\"Amount of reward tokens to send to a beneficiary\",\"tokens\":\"Amount of tokens to slash from the indexer stake\"}},\"provision(address,address,uint256,uint32,uint64)\":{\"details\":\"During the transition period, only the subgraph data service can be used as a verifier. This prevents an escape hatch for legacy allocation stake.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. Requirements: - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. Note that if `_maxThawingPeriod` changes the function will not revert if called with the same thawing period as the current one. 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 {HorizonStakeDeposited} 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 {HorizonStakeDeposited} event.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\"}},\"stakeToProvision(address,address,uint256)\":{\"details\":\"This function can be called by the service provider, by an authorized operator or by the verifier itself.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 {HorizonStakeDeposited} 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,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 {HorizonStakeLocked} event during the transition period. Emits a {HorizonStakeWithdrawn} 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\":{\"deprecated\":\"Deprecated parameter kept for backwards compatibility\",\"serviceProvider\":\"The service provider address\"},\"returns\":{\"_0\":\"The amount of tokens withdrawn\"}},\"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. Otherwise, the function will attempt to fulfill all thaw requests until the first one that is not yet expired is found.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.\"}],\"HorizonStakingInsufficientDelegationTokens(uint256,uint256)\":[{\"notice\":\"Thrown when the minimum token amount required for delegation is not met.\"}],\"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.\"}],\"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.\"}],\"HorizonStakingInvalidThawRequestType()\":[{\"notice\":\"Thrown when using an invalid thaw request type.\"}],\"HorizonStakingInvalidThawingPeriod(uint64,uint64)\":[{\"notice\":\"Thrown when attempting to create a provision with an invalid thawing period.\"}],\"HorizonStakingInvalidVerifier(address)\":[{\"notice\":\"Thrown when attempting to create a provision with a verifier other than the subgraph data service. This restriction only applies during the transition 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.\"}],\"HorizonStakingLegacySlashFailed()\":[{\"notice\":\"Thrown when a legacy slash fails.\"}],\"HorizonStakingNoTokensToSlash()\":[{\"notice\":\"Thrown when there attempting to slash a provision with no tokens to slash.\"}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to operate on a provision.\"}],\"HorizonStakingNothingThawing()\":[{\"notice\":\"Thrown when attempting to fulfill a thaw request but there is nothing thawing.\"}],\"HorizonStakingNothingToWithdraw()\":[{\"notice\":\"Thrown when attempting to withdraw tokens that have not thawed (legacy undelegate).\"}],\"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.\"}],\"HorizonStakingTooManyThawRequests()\":[{\"notice\":\"Thrown when a service provider has too many thaw requests.\"}],\"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\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"notice\":\"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)\":{\"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()\":{\"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.\"},\"HorizonStakeDeposited(address,uint256)\":{\"notice\":\"Emitted when a service provider stakes tokens.\"},\"HorizonStakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when a service provider unstakes tokens during the transition period.\"},\"HorizonStakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when a service provider withdraws tokens during the transition period.\"},\"MaxThawingPeriodSet(uint64)\":{\"notice\":\"Emitted when the global maximum thawing period allowed for provisions is set.\"},\"OperatorSet(address,address,address,bool)\":{\"notice\":\"Emitted when an operator is allowed or denied by a service provider for a particular verifier\"},\"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.\"},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"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.\"},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"notice\":\"Emitted when `delegator` withdrew delegated `tokens` from `indexer` using `withdrawDelegated`.\"},\"StakeSlashed(address,uint256,uint256,address)\":{\"notice\":\"Emitted when `indexer` was slashed for a total of `tokens` amount. Tracks `reward` amount of tokens given to `beneficiary`.\"},\"ThawRequestCreated(uint8,address,address,address,uint256,uint64,bytes32,uint256)\":{\"notice\":\"Emitted when a thaw request is created.\"},\"ThawRequestFulfilled(uint8,bytes32,uint256,uint256,uint64,bool)\":{\"notice\":\"Emitted when a thaw request is fulfilled, meaning the stake is released.\"},\"ThawRequestsFulfilled(uint8,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,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,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 Deprecated, now enforced by each data service (verifier)\"},\"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 and rebate query fees to the indexer 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.\"},\"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.\"},\"getAllocationData(address)\":{\"notice\":\"Get allocation data to calculate rewards issuance\"},\"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.\"},\"getStakingExtension()\":{\"notice\":\"Get the address of the staking extension.\"},\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"},\"getSubgraphService()\":{\"notice\":\"Return the address of the subgraph data service.\"},\"getThawRequest(uint8,bytes32)\":{\"notice\":\"Gets a thaw request.\"},\"getThawRequestList(uint8,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(uint8,address,address,address)\":{\"notice\":\"Gets the amount of thawed tokens that can be releasedfor 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.\"},\"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\":\"(Legacy) Return true if operator is allowed for the service provider on the subgraph data service.\"},\"legacySlash(address,uint256,uint256,address)\":{\"notice\":\"Slash the indexer stake. Delegated tokens are not subject to slashing. Note that depending on the state of the indexer's stake, the slashed amount might be smaller than the requested slash amount. This can happen if the indexer has moved a significant part of their stake to a provision. Any outstanding slashing amount should be settled using Horizon's slash function {IHorizonStaking.slash}.\"},\"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}. Calling this function is a no-op if the new parameters are the same as the current ones.\"},\"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,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. Note that after the transition period if there are tokens still locked they will have to be withdrawn by calling {withdraw}.\"},\"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 tokens undelegated before horizon upgrade.\"},\"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\":{\"contracts/horizon/IHorizonStaking.sol\":\"IHorizonStaking\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0xd937edb011bce015702a25c6841a8dc3ffb47b4de56bc45f82af965b7e578ccc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e95d49c3e91a0f21b17a34bc85d29b56a1fcc6ed8d3a72db3d9a5baee94ecc10\",\"dweb:/ipfs/QmQAxear764tqcaSyXP7BQgxDk5GpazL4wZKdHzt1asWpm\"]},\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/horizon/IHorizonStaking.sol\":{\"keccak256\":\"0xca2c5615f3e9338cd8647f9e7c2336ebb141637041c9ab79e4f703077ca3334a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://444d7a887156bd5fc64a41050456bda7532b866168c745588e4a70c144eeb425\",\"dweb:/ipfs/Qma3x22x5VTYHndCDwiGBxrngN9Dktp5VAcLoEcNmFFYTf\"]},\"contracts/horizon/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x850aa13b9bb70a67ccaaab204ac65ebc89baebd6fb8307f2fd1aab74f0a7f94e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ebf855bcf49a9230b6dec7199446156d3139ea44fdb637a4fe746905c26b1715\",\"dweb:/ipfs/QmfPNPwiMCpn7oMsZR7UY9aFzVNjLKok3RuAfFEHLHPSPZ\"]},\"contracts/horizon/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0x10dc7645ddcc40f8958e66947b8141423c71ec99ed2cc657d3d419effc1f41d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c0effff4158c05eaf12661033c53fe920eb852f97e4cb572d0f6d565c7b808f\",\"dweb:/ipfs/QmRrSjDbMvdeKbJ6fy9Fu5riGWkeg6c2B3yHGd7A5FBrkM\"]},\"contracts/horizon/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd15f2faaf49110b04a0d815a80ff316e166873714464d158fc582f5a529b3853\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://17bc5978ed4aeaced53a3e17063d6d368ebbf425e4ee828d9987869e79fc65c3\",\"dweb:/ipfs/QmNXEAyZeWrGdt1Myb4EBHxWYW3qu6q1pK9hudmzzUJsV9\"]},\"contracts/horizon/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xb09fb2ddff97b5e34abb0271fa7693e5ade769ed174e350da0f71545b2c70060\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e908fc109f8610978dd47788e51e764bb80930c81fd2e32ea4fd7d8961a816ae\",\"dweb:/ipfs/QmbtR4G5haUPzgk3TTnX3p6DHh8STtXUKeFYhvG6fkhQcp\"]},\"contracts/horizon/internal/ILinkedList.sol\":{\"keccak256\":\"0x823aeadd74821b6a9f29a83f3278171896a3f24ff76cb45725a2a504125ccd46\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://01380fec7911ea62ebc1371dcd2d8b2b00dd10bae5af06365a04138795415cfa\",\"dweb:/ipfs/QmcY2H9moW5dB8GMXMp7GZrTR6nmKxdrSGybG8T8fU5b2b\"]}},\"version\":1}"}},"contracts/horizon/IPaymentsCollector.sol":{"IPaymentsCollector":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum IGraphPayments.PaymentTypes","name":"paymentType","type":"uint8"},{"indexed":true,"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"dataService","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","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\":false,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"details\":\"It's important to note that it's the collector contract's responsibility to validate the payment request is legitimate.\",\"events\":{\"PaymentCollected(uint8,bytes32,address,address,address,uint256)\":{\"params\":{\"collectionId\":\"The id for the collection. Can be used at the discretion of the collector to group multiple payments.\",\"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\",\"tokens\":\"The amount of tokens being collected\"}}},\"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. 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}\"},\"returns\":{\"_0\":\"The amount of tokens collected\"}}},\"title\":\"Interface for a payments collector contract as defined by Graph Horizon payments protocol\",\"version\":1},\"userdoc\":{\"events\":{\"PaymentCollected(uint8,bytes32,address,address,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\":{\"contracts/horizon/IPaymentsCollector.sol\":\"IPaymentsCollector\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/horizon/IPaymentsCollector.sol\":{\"keccak256\":\"0xac87419dd33722e6e2cf782959ea445feea521388075cdfd492b8694efef2c3b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2620459f86ddf5a96f35e3069fb96de6fa26c46c697250d9965589addf8030db\",\"dweb:/ipfs/QmZ4rG6J6VSyEtDEwyju8DfsHYiFMXwFWyfvBjmwdXhwVd\"]}},\"version\":1}"}},"contracts/horizon/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":"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":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensThawing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"CancelThaw","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":"enum IGraphPayments.PaymentTypes","name":"paymentType","type":"uint8"},{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"collector","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiverDestination","type":"address"}],"name":"EscrowCollected","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"},{"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":"WITHDRAW_ESCROW_THAWING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelThaw","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":"dataServiceCut","type":"uint256"},{"internalType":"address","name":"receiverDestination","type":"address"}],"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":[],"name":"initialize","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"},{"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":{"MAX_WAIT_PERIOD()":"b2168b6b","WITHDRAW_ESCROW_THAWING_PERIOD()":"7b8ae6cf","cancelThaw(address,address)":"b1d07de4","collect(uint8,address,address,uint256,address,uint256,address)":"1230fa3e","deposit(address,address,uint256)":"8340f549","depositTo(address,address,address,uint256)":"72eb521e","getBalance(address,address,address)":"d6bd603c","initialize()":"8129fc1c","thaw(address,address,uint256)":"f93f1cd0","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\":\"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\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"CancelThaw\",\"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\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiverDestination\",\"type\":\"address\"}],\"name\":\"EscrowCollected\",\"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\"},{\"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\":\"WITHDRAW_ESCROW_THAWING_PERIOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelThaw\",\"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\":\"dataServiceCut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiverDestination\",\"type\":\"address\"}],\"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\":[],\"name\":\"initialize\",\"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\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"PaymentsEscrowInconsistentCollection(uint256,uint256,uint256)\":[{\"params\":{\"balanceAfter\":\"The balance after the collection\",\"balanceBefore\":\"The balance before the collection\",\"tokens\":\"The amount of tokens collected\"}}],\"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\":{\"CancelThaw(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 was ending\",\"tokensThawing\":\"The amount of tokens that were being thawed\"}},\"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(uint8,address,address,address,uint256,address)\":{\"params\":{\"collector\":\"The address of the collector\",\"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\",\"receiverDestination\":\"The address where the receiver's payment should be sent.\",\"tokens\":\"The amount of tokens collected\"}},\"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\"}},\"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\":{\"MAX_WAIT_PERIOD()\":{\"returns\":{\"_0\":\"The maximum thawing period in seconds\"}},\"WITHDRAW_ESCROW_THAWING_PERIOD()\":{\"returns\":{\"_0\":\"The thawing period in seconds\"}},\"cancelThaw(address,address)\":{\"details\":\"Requirements: - The payer must be thawing funds Emits a {CancelThaw} event.\",\"params\":{\"collector\":\"The address of the collector\",\"receiver\":\"The address of the receiver\"}},\"collect(uint8,address,address,uint256,address,uint256,address)\":{\"params\":{\"dataService\":\"The address of the data service\",\"dataServiceCut\":\"The data service cut in PPM that {GraphPayments} should send\",\"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\",\"receiverDestination\":\"The address where the receiver's payment should be sent.\",\"tokens\":\"The amount of tokens to collect\"}},\"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\"},\"returns\":{\"_0\":\"The balance of the payer-collector-receiver tuple\"}},\"thaw(address,address,uint256)\":{\"details\":\"Requirements: - `tokens` must be less than or equal to the available balance Emits a {Thaw} event.\",\"params\":{\"collector\":\"The address of the collector\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens to thaw\"}},\"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\"}],\"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\":{\"CancelThaw(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a payer cancels an escrow thawing\"},\"Deposit(address,address,address,uint256)\":{\"notice\":\"Emitted when a payer deposits funds into the escrow for a payer-collector-receiver tuple\"},\"EscrowCollected(uint8,address,address,address,uint256,address)\":{\"notice\":\"Emitted when a collector collects funds from the escrow for a payer-collector-receiver tuple\"},\"Thaw(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a payer thaws funds from the escrow for a payer-collector-receiver tuple\"},\"Withdraw(address,address,address,uint256)\":{\"notice\":\"Emitted when a payer withdraws funds from the escrow for a payer-collector-receiver tuple\"}},\"kind\":\"user\",\"methods\":{\"MAX_WAIT_PERIOD()\":{\"notice\":\"The maximum thawing period for escrow funds withdrawal\"},\"WITHDRAW_ESCROW_THAWING_PERIOD()\":{\"notice\":\"The thawing period for escrow funds withdrawal\"},\"cancelThaw(address,address)\":{\"notice\":\"Cancels the thawing of escrow from a payer-collector-receiver's escrow account.\"},\"collect(uint8,address,address,uint256,address,uint256,address)\":{\"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. Emits an {EscrowCollected} event\"},\"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 This function will return 0 if the current balance is less than the amount of funds being thawed.\"},\"initialize()\":{\"notice\":\"Initialize the contract\"},\"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. Note that repeated calls to this function will overwrite the previous thawing amount and reset the thawing period.\"},\"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\":{\"contracts/horizon/IPaymentsEscrow.sol\":\"IPaymentsEscrow\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/horizon/IPaymentsEscrow.sol\":{\"keccak256\":\"0xe1e96fbd174df4b238486e55a53631febddbee58b392a5db9b7c5ad6c7048cf0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5badee627fd83df7c1823cb8ba2a92172d0c14cf320d55d06e6336efca21ebf\",\"dweb:/ipfs/QmSJL8S5hfq81zajFb3E8bhw53TsuNNK97WEpVQejMoZhv\"]}},\"version\":1}"}},"contracts/horizon/internal/IHorizonStakingBase.sol":{"IHorizonStakingBase":{"abi":[{"inputs":[],"name":"HorizonStakingInvalidThawRequestType","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"HorizonStakeDeposited","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":"lastParametersStagedAt","type":"uint256"},{"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":"enum IHorizonStakingTypes.ThawRequestType","name":"thawRequestType","type":"uint8"},{"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":"nextRequest","type":"bytes32"},{"internalType":"uint256","name":"thawingNonce","type":"uint256"}],"internalType":"struct IHorizonStakingTypes.ThawRequest","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"thawRequestType","type":"uint8"},{"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 ILinkedList.List","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"thawRequestType","type":"uint8"},{"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(uint8,bytes32)":"d48de845","getThawRequestList(uint8,address,address,address)":"e56f8a1d","getThawedTokens(uint8,address,address,address)":"2f7cc501","getTokensAvailable(address,address,uint32)":"872d0489","isAllowedLockedVerifier(address)":"ae4fe67a","isDelegationSlashingEnabled()":"fc54fb27"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"HorizonStakingInvalidThawRequestType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakeDeposited\",\"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\":\"lastParametersStagedAt\",\"type\":\"uint256\"},{\"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\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"thawRequestType\",\"type\":\"uint8\"},{\"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\":\"nextRequest\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ThawRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"thawRequestType\",\"type\":\"uint8\"},{\"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 ILinkedList.List\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"thawRequestType\",\"type\":\"uint8\"},{\"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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"details\":\"Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision functions take `serviceProvider` and `verifier` addresses.\",\"events\":{\"HorizonStakeDeposited(address,uint256)\":{\"details\":\"TRANSITION PERIOD: 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.\"}},\"getMaxThawingPeriod()\":{\"returns\":{\"_0\":\"The maximum allowed thawing period in seconds.\"}},\"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.\"},\"returns\":{\"_0\":\"The service provider details.\"}},\"getStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens staked.\"}},\"getThawRequest(uint8,bytes32)\":{\"params\":{\"thawRequestId\":\"The id of the thaw request.\",\"thawRequestType\":\"The type of thaw request.\"},\"returns\":{\"_0\":\"The thaw request details.\"}},\"getThawRequestList(uint8,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.\",\"thawRequestType\":\"The type of thaw request.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The thaw requests list metadata.\"}},\"getThawedTokens(uint8,address,address,address)\":{\"details\":\"Note that the value returned by this function does not return the total amount of thawed tokens but only those that can be released. If thaw requests are created with different thawing periods it's possible that an unexpired thaw request temporarily blocks the release of other ones that have already expired. This function will stop counting when it encounters the first thaw request that is not yet expired.\",\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"thawRequestType\":\"The type of thaw request.\",\"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\"}},\"isDelegationSlashingEnabled()\":{\"returns\":{\"_0\":\"True if delegation slashing is enabled, false otherwise\"}}},\"title\":\"Interface for the {HorizonStakingBase} contract.\",\"version\":1},\"userdoc\":{\"errors\":{\"HorizonStakingInvalidThawRequestType()\":[{\"notice\":\"Thrown when using an invalid thaw request type.\"}]},\"events\":{\"HorizonStakeDeposited(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(uint8,bytes32)\":{\"notice\":\"Gets a thaw request.\"},\"getThawRequestList(uint8,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(uint8,address,address,address)\":{\"notice\":\"Gets the amount of thawed tokens that can be releasedfor 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\":{\"contracts/horizon/internal/IHorizonStakingBase.sol\":\"IHorizonStakingBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/horizon/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x850aa13b9bb70a67ccaaab204ac65ebc89baebd6fb8307f2fd1aab74f0a7f94e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ebf855bcf49a9230b6dec7199446156d3139ea44fdb637a4fe746905c26b1715\",\"dweb:/ipfs/QmfPNPwiMCpn7oMsZR7UY9aFzVNjLKok3RuAfFEHLHPSPZ\"]},\"contracts/horizon/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xb09fb2ddff97b5e34abb0271fa7693e5ade769ed174e350da0f71545b2c70060\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e908fc109f8610978dd47788e51e764bb80930c81fd2e32ea4fd7d8961a816ae\",\"dweb:/ipfs/QmbtR4G5haUPzgk3TTnX3p6DHh8STtXUKeFYhvG6fkhQcp\"]},\"contracts/horizon/internal/ILinkedList.sol\":{\"keccak256\":\"0x823aeadd74821b6a9f29a83f3278171896a3f24ff76cb45725a2a504125ccd46\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://01380fec7911ea62ebc1371dcd2d8b2b00dd10bae5af06365a04138795415cfa\",\"dweb:/ipfs/QmcY2H9moW5dB8GMXMp7GZrTR6nmKxdrSGybG8T8fU5b2b\"]}},\"version\":1}"}},"contracts/horizon/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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"}],"name":"StakeSlashed","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":"bool","name":"isActive","type":"bool"},{"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":[],"name":"getSubgraphService","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"legacySlash","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","closeAllocation(address,bytes32)":"44c32a61","collect(uint256,address)":"8d3c100a","getAllocation(address)":"0e022923","getAllocationData(address)":"55c85269","getAllocationState(address)":"98c657dc","getIndexerStakedTokens(address)":"1787e69f","getSubgraphAllocatedTokens(bytes32)":"e2e1e8e9","getSubgraphService()":"9363c522","hasStake(address)":"e73e14bf","isAllocation(address)":"f1d60d66","isOperator(address,address)":"b6363cf2","legacySlash(address,uint256,uint256,address)":"4488a382"}},"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"StakeSlashed\",\"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\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"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\":[],\"name\":\"getSubgraphService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"legacySlash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"epoch\":\"The protocol epoch the allocation was closed on\",\"indexer\":\"The indexer address\",\"isPublic\":\"True if the allocation was force closed by someone other than the indexer/operator\",\"poi\":\"The proof of indexing submitted by the sender\",\"sender\":\"The address closing the allocation\",\"subgraphDeploymentID\":\"The subgraph deployment ID\",\"tokens\":\"The amount of tokens unallocated from the allocation\"}},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"assetHolder\":\"The address of the asset holder, the entity paying the query fees\",\"curationFees\":\"The amount of tokens distributed to the curation pool\",\"delegationRewards\":\"The amount of tokens collected from the delegation pool\",\"epoch\":\"The protocol epoch the rebate was collected on\",\"indexer\":\"The indexer address\",\"protocolTax\":\"The amount of tokens burnt as protocol tax\",\"queryFees\":\"The amount of tokens collected as query fees\",\"queryRebates\":\"The amount of tokens distributed to the indexer\",\"subgraphDeploymentID\":\"The subgraph deployment ID\",\"tokens\":\"The amount of tokens collected\"}},\"StakeSlashed(address,uint256,uint256,address)\":{\"params\":{\"beneficiary\":\"The address of a beneficiary to receive a reward for the slashing\",\"indexer\":\"The indexer address\",\"reward\":\"The amount of reward tokens to send to a beneficiary\",\"tokens\":\"The amount of tokens slashed\"}}},\"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)\":{\"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)\":{\"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\",\"isActive\":\"Whether the allocation is active or not\",\"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\"}},\"getSubgraphService()\":{\"details\":\"TRANSITION PERIOD: After transition period move to main HorizonStaking contract\",\"returns\":{\"_0\":\"Address of the subgraph data service\"}},\"hasStake(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"True if indexer has staked tokens\"}},\"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 service provider\",\"operator\":\"Address of the operator\"},\"returns\":{\"_0\":\"True if operator is allowed for indexer, false otherwise\"}},\"legacySlash(address,uint256,uint256,address)\":{\"details\":\"Can only be called by the slasher role.\",\"params\":{\"beneficiary\":\"Address of a beneficiary to receive a reward for the slashing\",\"indexer\":\"Address of indexer to slash\",\"reward\":\"Amount of reward tokens to send to a beneficiary\",\"tokens\":\"Amount of tokens to slash from the indexer stake\"}}},\"title\":\"Interface for {HorizonStakingExtension} contract.\",\"version\":1},\"userdoc\":{\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"notice\":\"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)\":{\"notice\":\"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.\"},\"StakeSlashed(address,uint256,uint256,address)\":{\"notice\":\"Emitted when `indexer` was slashed for a total of `tokens` amount. Tracks `reward` amount of tokens given to `beneficiary`.\"}},\"kind\":\"user\",\"methods\":{\"__DEPRECATED_getThawingPeriod()\":{\"notice\":\"Return the time in blocks to unstake Deprecated, now enforced by each data service (verifier)\"},\"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 and rebate query fees to the indexer 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.\"},\"getAllocation(address)\":{\"notice\":\"Return the allocation by ID.\"},\"getAllocationData(address)\":{\"notice\":\"Get allocation data to calculate rewards issuance\"},\"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.\"},\"getSubgraphService()\":{\"notice\":\"Return the address of the subgraph data service.\"},\"hasStake(address)\":{\"notice\":\"Getter that returns if an indexer has any stake.\"},\"isAllocation(address)\":{\"notice\":\"Return if allocationID is used.\"},\"isOperator(address,address)\":{\"notice\":\"(Legacy) Return true if operator is allowed for the service provider on the subgraph data service.\"},\"legacySlash(address,uint256,uint256,address)\":{\"notice\":\"Slash the indexer stake. Delegated tokens are not subject to slashing. Note that depending on the state of the indexer's stake, the slashed amount might be smaller than the requested slash amount. This can happen if the indexer has moved a significant part of their stake to a provision. Any outstanding slashing amount should be settled using Horizon's slash function {IHorizonStaking.slash}.\"}},\"notice\":\"Provides functions for managing legacy allocations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/horizon/internal/IHorizonStakingExtension.sol\":\"IHorizonStakingExtension\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0xd937edb011bce015702a25c6841a8dc3ffb47b4de56bc45f82af965b7e578ccc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e95d49c3e91a0f21b17a34bc85d29b56a1fcc6ed8d3a72db3d9a5baee94ecc10\",\"dweb:/ipfs/QmQAxear764tqcaSyXP7BQgxDk5GpazL4wZKdHzt1asWpm\"]},\"contracts/horizon/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0x10dc7645ddcc40f8958e66947b8141423c71ec99ed2cc657d3d419effc1f41d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c0effff4158c05eaf12661033c53fe920eb852f97e4cb572d0f6d565c7b808f\",\"dweb:/ipfs/QmRrSjDbMvdeKbJ6fy9Fu5riGWkeg6c2B3yHGd7A5FBrkM\"]}},\"version\":1}"}},"contracts/horizon/internal/IHorizonStakingMain.sol":{"IHorizonStakingMain":{"abi":[{"inputs":[],"name":"HorizonStakingCallerIsServiceProvider","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"minTokens","type":"uint256"}],"name":"HorizonStakingInsufficientDelegationTokens","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":"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":[{"internalType":"address","name":"verifier","type":"address"}],"name":"HorizonStakingInvalidVerifier","type":"error"},{"inputs":[],"name":"HorizonStakingInvalidVerifierZeroAddress","type":"error"},{"inputs":[],"name":"HorizonStakingInvalidZeroShares","type":"error"},{"inputs":[],"name":"HorizonStakingInvalidZeroTokens","type":"error"},{"inputs":[],"name":"HorizonStakingLegacySlashFailed","type":"error"},{"inputs":[],"name":"HorizonStakingNoTokensToSlash","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":"HorizonStakingNothingToWithdraw","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":[],"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":"serviceProvider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"until","type":"uint256"}],"name":"HorizonStakeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"HorizonStakeWithdrawn","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":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"StakeDelegatedWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"requestType","type":"uint8"},{"indexed":true,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":false,"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"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"ThawRequestCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"requestType","type":"uint8"},{"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":"enum IHorizonStakingTypes.ThawRequestType","name":"requestType","type":"uint8"},{"indexed":true,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":false,"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"},{"indexed":false,"internalType":"uint256","name":"shares","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"},{"indexed":false,"internalType":"uint256","name":"shares","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":[],"name":"getStakingExtension","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"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":"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":"deprecated","type":"address"}],"name":"withdrawDelegated","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":{"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","getStakingExtension()":"66ee1b28","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,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\":\"HorizonStakingInsufficientDelegationTokens\",\"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\":\"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\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidVerifier\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidVerifierZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingLegacySlashFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingNoTokensToSlash\",\"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\":\"HorizonStakingNothingToWithdraw\",\"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\":[],\"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\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"HorizonStakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakeWithdrawn\",\"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\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"requestType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ThawRequestCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"requestType\",\"type\":\"uint8\"},{\"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\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"requestType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"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\":[],\"name\":\"getStakingExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":[{\"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\":\"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\":\"deprecated\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"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.TRANSITION PERIOD: After transition period rename to IHorizonStaking.\",\"errors\":{\"HorizonStakingInsufficientDelegationTokens(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"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\"}}],\"HorizonStakingInvalidVerifier(address)\":[{\"params\":{\"verifier\":\"The verifier address\"}}],\"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.\",\"params\":{\"verifier\":\"The verifier address\"}}]},\"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\"}},\"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\"}},\"HorizonStakeLocked(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens now locked (including previously locked tokens)\",\"until\":\"The block number until the stake is locked\"}},\"HorizonStakeWithdrawn(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\"}},\"MaxThawingPeriodSet(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period\"}},\"OperatorSet(address,address,address,bool)\":{\"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\"}},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"details\":\"This event is for the legacy `withdrawDelegated` function.\",\"params\":{\"delegator\":\"The address of the delegator\",\"indexer\":\"The address of the indexer\",\"tokens\":\"The amount of tokens withdrawn\"}},\"ThawRequestCreated(uint8,address,address,address,uint256,uint64,bytes32,uint256)\":{\"details\":\"Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\",\"params\":{\"nonce\":\"The nonce of the thaw request\",\"owner\":\"The address of the owner of the thaw request.\",\"requestType\":\"The type of 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(uint8,bytes32,uint256,uint256,uint64,bool)\":{\"params\":{\"requestType\":\"The type of thaw request\",\"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(uint8,address,address,address,uint256,uint256)\":{\"params\":{\"owner\":\"The address of the owner of the thaw requests\",\"requestType\":\"The type of thaw request\",\"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,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"shares\":\"The amount of shares delegated\",\"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,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"shares\":\"The amount of shares undelegated\",\"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. Otherwise, the function will attempt to fulfill all thaw requests until the first one that is not yet expired is found. 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\"}},\"getStakingExtension()\":{\"returns\":{\"_0\":\"The address of the staking extension\"}},\"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\":\"During the transition period, only the subgraph data service can be used as a verifier. This prevents an escape hatch for legacy allocation stake.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. Requirements: - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. Note that if `_maxThawingPeriod` changes the function will not revert if called with the same thawing period as the current one. 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 {HorizonStakeDeposited} 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 {HorizonStakeDeposited} event.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\"}},\"stakeToProvision(address,address,uint256)\":{\"details\":\"This function can be called by the service provider, by an authorized operator or by the verifier itself.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 {HorizonStakeDeposited} 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,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 {HorizonStakeLocked} event during the transition period. Emits a {HorizonStakeWithdrawn} 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\":{\"deprecated\":\"Deprecated parameter kept for backwards compatibility\",\"serviceProvider\":\"The service provider address\"},\"returns\":{\"_0\":\"The amount of tokens withdrawn\"}},\"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. Otherwise, the function will attempt to fulfill all thaw requests until the first one that is not yet expired is found.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.\"}],\"HorizonStakingInsufficientDelegationTokens(uint256,uint256)\":[{\"notice\":\"Thrown when the minimum token amount required for delegation is not met.\"}],\"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.\"}],\"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.\"}],\"HorizonStakingInvalidVerifier(address)\":[{\"notice\":\"Thrown when attempting to create a provision with a verifier other than the subgraph data service. This restriction only applies during the transition 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.\"}],\"HorizonStakingLegacySlashFailed()\":[{\"notice\":\"Thrown when a legacy slash fails.\"}],\"HorizonStakingNoTokensToSlash()\":[{\"notice\":\"Thrown when there attempting to slash a provision with no tokens to slash.\"}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to operate on a provision.\"}],\"HorizonStakingNothingThawing()\":[{\"notice\":\"Thrown when attempting to fulfill a thaw request but there is nothing thawing.\"}],\"HorizonStakingNothingToWithdraw()\":[{\"notice\":\"Thrown when attempting to withdraw tokens that have not thawed (legacy undelegate).\"}],\"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.\"}],\"HorizonStakingTooManyThawRequests()\":[{\"notice\":\"Thrown when a service provider has too many thaw requests.\"}],\"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()\":{\"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.\"},\"HorizonStakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when a service provider unstakes tokens during the transition period.\"},\"HorizonStakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when a service provider withdraws tokens during the transition period.\"},\"MaxThawingPeriodSet(uint64)\":{\"notice\":\"Emitted when the global maximum thawing period allowed for provisions is set.\"},\"OperatorSet(address,address,address,bool)\":{\"notice\":\"Emitted when an operator is allowed or denied by a service provider for a particular verifier\"},\"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.\"},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"notice\":\"Emitted when `delegator` withdrew delegated `tokens` from `indexer` using `withdrawDelegated`.\"},\"ThawRequestCreated(uint8,address,address,address,uint256,uint64,bytes32,uint256)\":{\"notice\":\"Emitted when a thaw request is created.\"},\"ThawRequestFulfilled(uint8,bytes32,uint256,uint256,uint64,bool)\":{\"notice\":\"Emitted when a thaw request is fulfilled, meaning the stake is released.\"},\"ThawRequestsFulfilled(uint8,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,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,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.\"},\"getStakingExtension()\":{\"notice\":\"Get the address of the staking extension.\"},\"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}. Calling this function is a no-op if the new parameters are the same as the current ones.\"},\"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,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. Note that after the transition period if there are tokens still locked they will have to be withdrawn by calling {withdraw}.\"},\"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 tokens undelegated before horizon upgrade.\"},\"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\":{\"contracts/horizon/internal/IHorizonStakingMain.sol\":\"IHorizonStakingMain\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/horizon/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd15f2faaf49110b04a0d815a80ff316e166873714464d158fc582f5a529b3853\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://17bc5978ed4aeaced53a3e17063d6d368ebbf425e4ee828d9987869e79fc65c3\",\"dweb:/ipfs/QmNXEAyZeWrGdt1Myb4EBHxWYW3qu6q1pK9hudmzzUJsV9\"]},\"contracts/horizon/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xb09fb2ddff97b5e34abb0271fa7693e5ade769ed174e350da0f71545b2c70060\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e908fc109f8610978dd47788e51e764bb80930c81fd2e32ea4fd7d8961a816ae\",\"dweb:/ipfs/QmbtR4G5haUPzgk3TTnX3p6DHh8STtXUKeFYhvG6fkhQcp\"]}},\"version\":1}"}},"contracts/horizon/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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"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\":{},\"notice\":\"Interface defining data types and structures for Horizon staking\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/horizon/internal/IHorizonStakingTypes.sol\":\"IHorizonStakingTypes\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xb09fb2ddff97b5e34abb0271fa7693e5ade769ed174e350da0f71545b2c70060\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e908fc109f8610978dd47788e51e764bb80930c81fd2e32ea4fd7d8961a816ae\",\"dweb:/ipfs/QmbtR4G5haUPzgk3TTnX3p6DHh8STtXUKeFYhvG6fkhQcp\"]}},\"version\":1}"}},"contracts/horizon/internal/ILinkedList.sol":{"ILinkedList":{"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":"","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\":\"LinkedListEmptyList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidIterations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidZeroId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListMaxElementsExceeded\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Interface for the {LinkedList} library contract.\",\"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\":\"Interface for managing linked list data structures\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/horizon/internal/ILinkedList.sol\":\"ILinkedList\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/internal/ILinkedList.sol\":{\"keccak256\":\"0x823aeadd74821b6a9f29a83f3278171896a3f24ff76cb45725a2a504125ccd46\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://01380fec7911ea62ebc1371dcd2d8b2b00dd10bae5af06365a04138795415cfa\",\"dweb:/ipfs/QmcY2H9moW5dB8GMXMp7GZrTR6nmKxdrSGybG8T8fU5b2b\"]}},\"version\":1}"}},"contracts/subgraph-service/IDisputeManager.sol":{"IDisputeManager":{"abi":[{"inputs":[{"internalType":"bytes32","name":"disputeId","type":"bytes32"}],"name":"DisputeManagerDisputeAlreadyCreated","type":"error"},{"inputs":[{"internalType":"bytes32","name":"disputeId","type":"bytes32"}],"name":"DisputeManagerDisputeInConflict","type":"error"},{"inputs":[{"internalType":"bytes32","name":"disputeId","type":"bytes32"}],"name":"DisputeManagerDisputeNotInConflict","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":"DisputeManagerSubgraphServiceNotSet","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":"blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeSnapshot","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cancellableAt","type":"uint256"}],"name":"IndexingDisputeCreated","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":"address","name":"allocationId","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSlash","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensRewards","type":"uint256"}],"name":"LegacyDisputeCreated","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"},{"indexed":false,"internalType":"uint256","name":"cancellableAt","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":[{"internalType":"bytes32","name":"disputeId","type":"bytes32"},{"internalType":"uint256","name":"tokensSlash","type":"uint256"},{"internalType":"bool","name":"acceptDisputeInConflict","type":"bool"},{"internalType":"uint256","name":"tokensSlashRelated","type":"uint256"}],"name":"acceptDisputeConflict","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 IAttestation.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 IAttestation.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":"address","name":"fisherman","type":"address"},{"internalType":"uint256","name":"tokensSlash","type":"uint256"},{"internalType":"uint256","name":"tokensRewards","type":"uint256"}],"name":"createAndAcceptLegacyDispute","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"allocationId","type":"address"},{"internalType":"bytes32","name":"poi","type":"bytes32"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"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 IAttestation.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 IAttestation.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":[],"name":"getFishermanRewardCut","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"getStakeSnapshot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"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":[{"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":"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"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptDispute(bytes32,uint256)":"050b17ad","acceptDisputeConflict(bytes32,uint256,bool,uint256)":"b0e2f7e9","areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))":"d36fc9d4","cancelDispute(bytes32)":"1792f194","createAndAcceptLegacyDispute(address,address,uint256,uint256)":"8d4e9008","createIndexingDispute(address,bytes32,uint256)":"417c10fd","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","getFishermanRewardCut()":"bb2a2b47","getStakeSnapshot(address)":"c133b429","initialize(address,address,uint64,uint256,uint32,uint32)":"0bc7344b","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\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerDisputeInConflict\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerDisputeNotInConflict\",\"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\":\"DisputeManagerSubgraphServiceNotSet\",\"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\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cancellableAt\",\"type\":\"uint256\"}],\"name\":\"IndexingDisputeCreated\",\"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\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensRewards\",\"type\":\"uint256\"}],\"name\":\"LegacyDisputeCreated\",\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cancellableAt\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"acceptDisputeInConflict\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"tokensSlashRelated\",\"type\":\"uint256\"}],\"name\":\"acceptDisputeConflict\",\"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 IAttestation.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 IAttestation.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\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensRewards\",\"type\":\"uint256\"}],\"name\":\"createAndAcceptLegacyDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"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 IAttestation.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 IAttestation.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\":[],\"name\":\"getFishermanRewardCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getStakeSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"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\":[{\"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\":\"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\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"DisputeManagerDisputeAlreadyCreated(bytes32)\":[{\"params\":{\"disputeId\":\"The dispute id\"}}],\"DisputeManagerDisputeInConflict(bytes32)\":[{\"params\":{\"disputeId\":\"The dispute id\"}}],\"DisputeManagerDisputeNotInConflict(bytes32)\":[{\"params\":{\"disputeId\":\"The dispute id\"}}],\"DisputeManagerDisputeNotPending(uint8)\":[{\"params\":{\"status\":\"The status of the dispute\"}}],\"DisputeManagerIndexerNotFound(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"DisputeManagerInvalidDispute(bytes32)\":[{\"params\":{\"disputeId\":\"The dispute id\"}}],\"DisputeManagerInvalidDisputeDeposit(uint256)\":[{\"params\":{\"disputeDeposit\":\"The dispute deposit\"}}],\"DisputeManagerInvalidFishermanReward(uint32)\":[{\"params\":{\"cut\":\"The fisherman reward cut\"}}],\"DisputeManagerInvalidMaxSlashingCut(uint32)\":[{\"params\":{\"maxSlashingCut\":\"The max slashing cut\"}}],\"DisputeManagerInvalidTokensSlash(uint256,uint256)\":[{\"params\":{\"maxTokensSlash\":\"The max tokens slash\",\"tokensSlash\":\"The tokens slash\"}}],\"DisputeManagerMustAcceptRelatedDispute(bytes32,bytes32)\":[{\"params\":{\"disputeId\":\"The dispute id\",\"relatedDisputeId\":\"The related dispute id\"}}],\"DisputeManagerNonConflictingAttestations(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)\":[{\"params\":{\"requestCID1\":\"The request CID of the first attestation\",\"requestCID2\":\"The request CID of the second attestation\",\"responseCID1\":\"The response CID of the first attestation\",\"responseCID2\":\"The response CID of the second attestation\",\"subgraphDeploymentId1\":\"The subgraph deployment id of the first attestation\",\"subgraphDeploymentId2\":\"The subgraph deployment id of the second attestation\"}}],\"DisputeManagerNonMatchingSubgraphDeployment(bytes32,bytes32)\":[{\"params\":{\"subgraphDeploymentId1\":\"The subgraph deployment id of the first attestation\",\"subgraphDeploymentId2\":\"The subgraph deployment id of the second attestation\"}}]},\"events\":{\"ArbitratorSet(address)\":{\"params\":{\"arbitrator\":\"The address of the arbitrator.\"}},\"DisputeAccepted(bytes32,address,address,uint256)\":{\"params\":{\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"tokens\":\"The amount of tokens transferred to the fisherman, the deposit plus reward\"}},\"DisputeCancelled(bytes32,address,address,uint256)\":{\"params\":{\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"tokens\":\"The amount of tokens returned to the fisherman - the deposit\"}},\"DisputeDepositSet(uint256)\":{\"params\":{\"disputeDeposit\":\"The dispute deposit required to create a dispute.\"}},\"DisputeDrawn(bytes32,address,address,uint256)\":{\"params\":{\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"tokens\":\"The amount of tokens returned to the fisherman - the deposit\"}},\"DisputeLinked(bytes32,bytes32)\":{\"params\":{\"disputeId1\":\"The first dispute id\",\"disputeId2\":\"The second dispute id\"}},\"DisputePeriodSet(uint64)\":{\"params\":{\"disputePeriod\":\"The dispute period in seconds.\"}},\"DisputeRejected(bytes32,address,address,uint256)\":{\"params\":{\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"tokens\":\"The amount of tokens burned from the fisherman deposit\"}},\"FishermanRewardCutSet(uint32)\":{\"params\":{\"fishermanRewardCut\":\"The fisherman reward cut.\"}},\"IndexingDisputeCreated(bytes32,address,address,uint256,address,bytes32,uint256,uint256,uint256)\":{\"params\":{\"allocationId\":\"The allocation id\",\"blockNumber\":\"The block number for which the POI was calculated\",\"cancellableAt\":\"The timestamp when the dispute can be cancelled\",\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"poi\":\"The POI\",\"stakeSnapshot\":\"The stake snapshot of the indexer at the time of the dispute\",\"tokens\":\"The amount of tokens deposited by the fisherman\"}},\"LegacyDisputeCreated(bytes32,address,address,address,uint256,uint256)\":{\"params\":{\"allocationId\":\"The allocation id\",\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address to be credited with the rewards\",\"indexer\":\"The indexer address\",\"tokensRewards\":\"The amount of tokens to reward the fisherman\",\"tokensSlash\":\"The amount of tokens to slash\"}},\"MaxSlashingCutSet(uint32)\":{\"params\":{\"maxSlashingCut\":\"The maximum slashing cut that can be set.\"}},\"QueryDisputeCreated(bytes32,address,address,uint256,bytes32,bytes,uint256,uint256)\":{\"params\":{\"attestation\":\"The attestation\",\"cancellableAt\":\"The timestamp when the dispute can be cancelled\",\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"stakeSnapshot\":\"The stake snapshot of the indexer at the time of the dispute\",\"subgraphDeploymentId\":\"The subgraph deployment id\",\"tokens\":\"The amount of tokens deposited by the fisherman\"}},\"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\"}},\"acceptDisputeConflict(bytes32,uint256,bool,uint256)\":{\"params\":{\"acceptDisputeInConflict\":\"Accept the conflicting dispute. Otherwise it will be drawn automatically\",\"disputeId\":\"Id of the dispute to be accepted\",\"tokensSlash\":\"Amount of tokens to slash from the indexer for the first dispute\",\"tokensSlashRelated\":\"Amount of tokens to slash from the indexer for the related dispute in case acceptDisputeInConflict is true, otherwise it will be ignored\"}},\"areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"params\":{\"attestation1\":\"The first attestation\",\"attestation2\":\"The second attestation\"},\"returns\":{\"_0\":\"Whether the attestations are conflicting\"}},\"cancelDispute(bytes32)\":{\"details\":\"Cancel a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be cancelled\"}},\"createAndAcceptLegacyDispute(address,address,uint256,uint256)\":{\"params\":{\"allocationId\":\"The allocation to dispute\",\"fisherman\":\"The fisherman address to be credited with the rewards\",\"tokensRewards\":\"The amount of tokens to reward the fisherman\",\"tokensSlash\":\"The amount of tokens to slash\"},\"returns\":{\"_0\":\"The dispute id\"}},\"createIndexingDispute(address,bytes32,uint256)\":{\"params\":{\"allocationId\":\"The allocation to dispute\",\"blockNumber\":\"The block number for which the POI was calculated\",\"poi\":\"The Proof of Indexing (POI) being disputed\"},\"returns\":{\"_0\":\"The dispute id\"}},\"createQueryDispute(bytes)\":{\"params\":{\"attestationData\":\"Attestation bytes submitted by the fisherman\"},\"returns\":{\"_0\":\"The dispute id\"}},\"createQueryDisputeConflict(bytes,bytes)\":{\"params\":{\"attestationData1\":\"First attestation data submitted\",\"attestationData2\":\"Second attestation data submitted\"},\"returns\":{\"_0\":\"The first dispute id\",\"_1\":\"The second dispute id\"}},\"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\"}},\"getFishermanRewardCut()\":{\"returns\":{\"_0\":\"Fisherman reward cut in percentage (ppm)\"}},\"getStakeSnapshot(address)\":{\"params\":{\"indexer\":\"The indexer address\"},\"returns\":{\"_0\":\"The stake snapshot\"}},\"initialize(address,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)\",\"owner\":\"The owner of the contract\"}},\"isDisputeCreated(bytes32)\":{\"details\":\"Return if dispute with Id `disputeId` exists\",\"params\":{\"disputeId\":\"True if dispute already exists\"},\"returns\":{\"_0\":\"True if dispute already exists\"}},\"rejectDispute(bytes32)\":{\"details\":\"Reject a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be rejected\"}},\"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\"}}},\"title\":\"IDisputeManager\",\"version\":1},\"userdoc\":{\"errors\":{\"DisputeManagerDisputeAlreadyCreated(bytes32)\":[{\"notice\":\"Thrown when the dispute is already created\"}],\"DisputeManagerDisputeInConflict(bytes32)\":[{\"notice\":\"Thrown when the dispute is in conflict\"}],\"DisputeManagerDisputeNotInConflict(bytes32)\":[{\"notice\":\"Thrown when the dispute is not in conflict\"}],\"DisputeManagerDisputeNotPending(uint8)\":[{\"notice\":\"Thrown when the dispute is not pending\"}],\"DisputeManagerDisputePeriodNotFinished()\":[{\"notice\":\"Thrown when the dispute period is not finished\"}],\"DisputeManagerDisputePeriodZero()\":[{\"notice\":\"Thrown when the dispute period is zero\"}],\"DisputeManagerIndexerNotFound(address)\":[{\"notice\":\"Thrown when the indexer is not found\"}],\"DisputeManagerInvalidDispute(bytes32)\":[{\"notice\":\"Thrown when the dispute id is invalid\"}],\"DisputeManagerInvalidDisputeDeposit(uint256)\":[{\"notice\":\"Thrown when the dispute deposit is invalid - less than the minimum dispute deposit\"}],\"DisputeManagerInvalidFishermanReward(uint32)\":[{\"notice\":\"Thrown when the fisherman reward cut is invalid\"}],\"DisputeManagerInvalidMaxSlashingCut(uint32)\":[{\"notice\":\"Thrown when the max slashing cut is invalid\"}],\"DisputeManagerInvalidTokensSlash(uint256,uint256)\":[{\"notice\":\"Thrown when the tokens slash is invalid\"}],\"DisputeManagerInvalidZeroAddress()\":[{\"notice\":\"Thrown when the address is the zero address\"}],\"DisputeManagerMustAcceptRelatedDispute(bytes32,bytes32)\":[{\"notice\":\"Thrown when the dispute must be accepted\"}],\"DisputeManagerNonConflictingAttestations(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)\":[{\"notice\":\"Thrown when the attestations are not conflicting\"}],\"DisputeManagerNonMatchingSubgraphDeployment(bytes32,bytes32)\":[{\"notice\":\"Thrown when the subgraph deployment is not matching\"}],\"DisputeManagerNotArbitrator()\":[{\"notice\":\"Thrown when the caller is not the arbitrator\"}],\"DisputeManagerNotFisherman()\":[{\"notice\":\"Thrown when the caller is not the fisherman\"}],\"DisputeManagerSubgraphServiceNotSet()\":[{\"notice\":\"Thrown when attempting to get the subgraph service before it is set\"}],\"DisputeManagerZeroTokens()\":[{\"notice\":\"Thrown when the indexer being disputed has no provisioned tokens\"}]},\"events\":{\"ArbitratorSet(address)\":{\"notice\":\"Emitted when arbitrator is set.\"},\"DisputeAccepted(bytes32,address,address,uint256)\":{\"notice\":\"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)\":{\"notice\":\"Emitted when a dispute is cancelled by the fisherman. The event emits the amount `tokens` returned to the fisherman.\"},\"DisputeDepositSet(uint256)\":{\"notice\":\"Emitted when dispute deposit is set.\"},\"DisputeDrawn(bytes32,address,address,uint256)\":{\"notice\":\"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)\":{\"notice\":\"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)\":{\"notice\":\"Emitted when dispute period is set.\"},\"DisputeRejected(bytes32,address,address,uint256)\":{\"notice\":\"Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`. The event emits the amount `tokens` burned from the fisherman deposit.\"},\"FishermanRewardCutSet(uint32)\":{\"notice\":\"Emitted when fisherman reward cut is set.\"},\"IndexingDisputeCreated(bytes32,address,address,uint256,address,bytes32,uint256,uint256,uint256)\":{\"notice\":\"Emitted when an indexing dispute is created for `allocationId` and `indexer` by `fisherman`. The event emits the amount of `tokens` deposited by the fisherman.\"},\"LegacyDisputeCreated(bytes32,address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a legacy dispute is created for `allocationId` and `fisherman`. The event emits the amount of `tokensSlash` to slash and `tokensRewards` to reward the fisherman.\"},\"MaxSlashingCutSet(uint32)\":{\"notice\":\"Emitted when max slashing cut is set.\"},\"QueryDisputeCreated(bytes32,address,address,uint256,bytes32,bytes,uint256,uint256)\":{\"notice\":\"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)\":{\"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. This function will also revert if the dispute is in conflict, to accept a conflicting dispute use acceptDisputeConflict.\"},\"acceptDisputeConflict(bytes32,uint256,bool,uint256)\":{\"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.\"},\"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. Note that cancelling a conflicting query dispute will also cancel the related dispute.\"},\"createAndAcceptLegacyDispute(address,address,uint256,uint256)\":{\"notice\":\"Creates and auto-accepts a legacy dispute. This disputes can be created to settle outstanding slashing amounts with an indexer that has been \\\"legacy slashed\\\" during or shortly after the transition period. See {HorizonStakingExtension.legacySlash} for more details. Note that this type of dispute: - can only be created by the arbitrator - does not require a bond - is automatically accepted when created Additionally, note that this type of disputes allow the arbitrator to directly set the slash and rewards amounts, bypassing the usual mechanisms that impose restrictions on those. This is done to give arbitrators maximum flexibility to ensure outstanding slashing amounts are settled fairly. This function needs to be removed after the transition period. Requirements: - Indexer must have been legacy slashed during or shortly after the transition period - Indexer must have provisioned funds to the Subgraph Service\"},\"createIndexingDispute(address,bytes32,uint256)\":{\"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. Two linked disputes will be created and if the arbitrator resolve one, the other 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.\"},\"drawDispute(bytes32)\":{\"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.\"},\"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.\"},\"getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"notice\":\"Returns the indexer that signed an attestation.\"},\"getDisputePeriod()\":{\"notice\":\"Get the dispute period.\"},\"getFishermanRewardCut()\":{\"notice\":\"Get the fisherman reward cut.\"},\"getStakeSnapshot(address)\":{\"notice\":\"Get the stake snapshot for an indexer.\"},\"initialize(address,address,uint64,uint256,uint32,uint32)\":{\"notice\":\"Initialize this contract.\"},\"isDisputeCreated(bytes32)\":{\"notice\":\"Return whether a dispute exists or not.\"},\"rejectDispute(bytes32)\":{\"notice\":\"The arbitrator rejects a dispute as being invalid. Note that conflicting query disputes cannot be rejected.\"},\"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.\"}},\"notice\":\"Interface for the {Dispute Manager} contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/subgraph-service/IDisputeManager.sol\":\"IDisputeManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/subgraph-service/IDisputeManager.sol\":{\"keccak256\":\"0xb57133d5ffb3f6b86275fc435b346a658f20a4dfcf457a1590601e995d679ec1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://db4dfb8db349a45ff8f79aeb64a5a01bca4decfdd69ee48a1a272c7978d74a7f\",\"dweb:/ipfs/QmPbfZeqvmPcfeqfaYFGxzy8iXkpCncbLVAvmw9BiZ4Rxh\"]},\"contracts/subgraph-service/internal/IAttestation.sol\":{\"keccak256\":\"0x0b450e1c254bb557cbeece6059af6f29da448addd8740b0350a7f2f69c679f5c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c6a46822ae6e6f2b950bacdd8993928e64fde85944db8181e2e6d089441380a8\",\"dweb:/ipfs/QmQFvoNamhyfwbWw8kMbpy1SSh11cSRHgRry6ns492bF6B\"]}},\"version\":1}"}},"contracts/subgraph-service/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"}],"name":"SubgraphServiceInconsistentCollection","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":"bytes32","name":"collectionId","type":"bytes32"}],"name":"SubgraphServiceInvalidCollectionId","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":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"paymentsDestination","type":"address"}],"name":"PaymentsDestinationSet","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":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"allocationId","type":"address"},{"indexed":false,"internalType":"bytes32","name":"subgraphDeploymentId","type":"bytes32"},{"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":"allocationId","type":"address"}],"name":"closeStaleAllocation","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":"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":"uint256","name":"createdAtEpoch","type":"uint256"}],"internalType":"struct IAllocation.State","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCuration","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDelegationRatio","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDisputeManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGraphTallyCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"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 ILegacyAllocation.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":"owner","type":"address"},{"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":"isOverAllocated","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":"paymentsDestination","type":"address"}],"name":"setPaymentsDestination","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","closeStaleAllocation(address)":"ec9c218d","collect(address,uint8,bytes)":"b15d2a2c","encodeAllocationProof(address,address)":"ce56c98b","getAllocation(address)":"0e022923","getCuration()":"c0f47497","getDelegationRatio()":"1ebb7c30","getDisputeManager()":"db9bee46","getGraphTallyCollector()":"ebf6ddaf","getLegacyAllocation(address)":"6d9a3951","getProvisionTokensRange()":"819ba366","getThawingPeriodRange()":"71ce020a","getVerifierCutRange()":"482468b7","initialize(address,uint256,uint32,uint256)":"c84a5ef3","isOverAllocated(address)":"ba38f67d","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","setPaymentsDestination(address)":"6ccec5b8","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\"}],\"name\":\"SubgraphServiceInconsistentCollection\",\"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\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"}],\"name\":\"SubgraphServiceInvalidCollectionId\",\"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\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymentsDestination\",\"type\":\"address\"}],\"name\":\"PaymentsDestinationSet\",\"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\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"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\":\"allocationId\",\"type\":\"address\"}],\"name\":\"closeStaleAllocation\",\"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\":\"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\":\"uint256\",\"name\":\"createdAtEpoch\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllocation.State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCuration\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputeManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGraphTallyCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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 ILegacyAllocation.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\":\"owner\",\"type\":\"address\"},{\"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\":\"isOverAllocated\",\"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\":\"paymentsDestination\",\"type\":\"address\"}],\"name\":\"setPaymentsDestination\",\"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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"details\":\"This interface extends {IDataServiceFees} and {IDataService}.\",\"errors\":{\"DataServiceFeesClaimNotFound(bytes32)\":[{\"params\":{\"claimId\":\"The id of the stake claim\"}}],\"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)\":[{\"params\":{\"balanceAfter\":\"The contract GRT balance after the collection\",\"balanceBefore\":\"The contract GRT balance before the collection\"}}],\"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\"}}],\"SubgraphServiceInvalidCollectionId(bytes32)\":[{\"params\":{\"collectionId\":\"The collectionId\"}}],\"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\"}},\"PaymentsDestinationSet(address,address)\":{\"params\":{\"indexer\":\"The address of the indexer\",\"paymentsDestination\":\"The address where payments should be sent\"}},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"QueryFeesCollected(address,address,address,bytes32,uint256,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"payer\":\"The address paying for the query fees\",\"serviceProvider\":\"The address of the service provider\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"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.\"}},\"closeStaleAllocation(address)\":{\"details\":\"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 - Allocation cannot be altruistic Emits a {AllocationClosed} event.\",\"params\":{\"allocationId\":\"The id of the allocation\"}},\"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}. Emits a {ServicePaymentCollected} event. 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.\",\"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\"},\"returns\":{\"_0\":\"The encoded allocation proof\"}},\"getAllocation(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"},\"returns\":{\"_0\":\"The allocation details\"}},\"getCuration()\":{\"returns\":{\"_0\":\"The address of the curation contract\"}},\"getDelegationRatio()\":{\"returns\":{\"_0\":\"The delegation ratio\"}},\"getDisputeManager()\":{\"returns\":{\"_0\":\"The address of the dispute manager\"}},\"getGraphTallyCollector()\":{\"returns\":{\"_0\":\"The address of the graph tally collector\"}},\"getLegacyAllocation(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"},\"returns\":{\"_0\":\"The legacy allocation details\"}},\"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\"}},\"initialize(address,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\",\"owner\":\"The owner of the contract\",\"stakeToFeesRatio\":\"The ratio of stake to fees to lock when collecting query fees\"}},\"isOverAllocated(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"},\"returns\":{\"_0\":\"True if the indexer is over-allocated, 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\"}},\"setPaymentsDestination(address)\":{\"details\":\"Emits a {PaymentsDestinationSet} event\",\"params\":{\"paymentsDestination\":\"The address where payments 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)\":[{\"notice\":\"Thrown when the contract GRT balance is inconsistent after collecting from Graph Payments\"}],\"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\"}],\"SubgraphServiceInvalidCollectionId(bytes32)\":[{\"notice\":\"Thrown when collectionId is not a valid address\"}],\"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\"},\"PaymentsDestinationSet(address,address)\":{\"notice\":\"Emitted when an indexer sets a new payments destination\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"QueryFeesCollected(address,address,address,bytes32,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}.\"},\"closeStaleAllocation(address)\":{\"notice\":\"Force close a stale allocation\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"encodeAllocationProof(address,address)\":{\"notice\":\"Encodes the allocation proof for EIP712 signing\"},\"getAllocation(address)\":{\"notice\":\"Gets the details of an allocation For legacy allocations use {getLegacyAllocation}\"},\"getCuration()\":{\"notice\":\"Gets the address of the curation contract\"},\"getDelegationRatio()\":{\"notice\":\"External getter for the delegation ratio\"},\"getDisputeManager()\":{\"notice\":\"Gets the address of the dispute manager\"},\"getGraphTallyCollector()\":{\"notice\":\"Gets the address of the graph tally collector\"},\"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\"},\"initialize(address,uint256,uint32,uint256)\":{\"notice\":\"Initialize the contract\"},\"isOverAllocated(address)\":{\"notice\":\"Checks if an indexer is over-allocated\"},\"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\"},\"setPaymentsDestination(address)\":{\"notice\":\"Sets the payments destination for an indexer to receive payments\"},\"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/subgraph-service/ISubgraphService.sol\":\"ISubgraphService\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/data-service/IDataService.sol\":{\"keccak256\":\"0x24a4b7bf75c66404683c66cb8ed2d456f80a779617eb162794db9cf17bd58f19\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://58a651ccf814c460ce3581cf24de0dcdd8f734b71b1980246608f38aca84ac09\",\"dweb:/ipfs/QmTvyZMaQWpbTYZfjrVp5ZbZMb6NTJGfadyhqNPLCaQL59\"]},\"contracts/data-service/IDataServiceFees.sol\":{\"keccak256\":\"0xeec7e93837b986ab78968cbb6ffc77f20f7f28124587aaa05a445ae902c05839\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e1e0f5f649653664b2082bb52af4eb07a76e0291250eaa68b4d7559d6cc761b1\",\"dweb:/ipfs/QmR8RJS4RoFRv3X2YBqVtJ5pj8LfunvQH1DrCEY81pkFku\"]},\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/subgraph-service/ISubgraphService.sol\":{\"keccak256\":\"0xec321735903ced280af532df740a43ed9f13d70073ba6c2da04c01888ad353f7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://265fd2093fb4d658f5c1e8a3f3ef79d9d86538b70e12f69f1497a39a5eb7a350\",\"dweb:/ipfs/QmUiKYRwHeMkGXcpF3EPbf7yP54y7q9nXDFhdzVqaPmF3P\"]},\"contracts/subgraph-service/internal/IAllocation.sol\":{\"keccak256\":\"0x4642a282ea1efe3a60266c9566a179ff9f4b52c9e9a9c7a0e56b3bc2fd064e7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c581b0d9d4503cf8090083bca35574b200aea9da1babf447df4e65eb036ca46a\",\"dweb:/ipfs/QmfF1JSFXxHnEuD77vMgTt6cRzqiHovxwQaA2QKP9ngPxB\"]},\"contracts/subgraph-service/internal/ILegacyAllocation.sol\":{\"keccak256\":\"0x9068aeb63c9d115135a1e398f8296e841648a18827744f927e6980ab15301d36\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://fc96b0211b67ab0cf3e62eb019f1fbbe706d2974a9941478b4312ee7be471a4c\",\"dweb:/ipfs/Qmc1xZLhcbc7yTHRAAkaFShv559ao5hRWYD9uxEtzTwRcQ\"]}},\"version\":1}"}},"contracts/subgraph-service/internal/IAllocation.sol":{"IAllocation":{"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":"","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\":\"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\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"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\":\"Interface for the {Allocation} library 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\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface for managing allocation data and operations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/subgraph-service/internal/IAllocation.sol\":\"IAllocation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/subgraph-service/internal/IAllocation.sol\":{\"keccak256\":\"0x4642a282ea1efe3a60266c9566a179ff9f4b52c9e9a9c7a0e56b3bc2fd064e7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c581b0d9d4503cf8090083bca35574b200aea9da1babf447df4e65eb036ca46a\",\"dweb:/ipfs/QmfF1JSFXxHnEuD77vMgTt6cRzqiHovxwQaA2QKP9ngPxB\"]}},\"version\":1}"}},"contracts/subgraph-service/internal/IAttestation.sol":{"IAttestation":{"abi":[{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"uint256","name":"expectedLength","type":"uint256"}],"name":"AttestationInvalidBytesLength","type":"error"}],"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\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLength\",\"type\":\"uint256\"}],\"name\":\"AttestationInvalidBytesLength\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"AttestationInvalidBytesLength(uint256,uint256)\":[{\"params\":{\"expectedLength\":\"The expected length of the attestation data\",\"length\":\"The length of the attestation data\"}}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"Interface for the {Attestation} library contract.\",\"version\":1},\"userdoc\":{\"errors\":{\"AttestationInvalidBytesLength(uint256,uint256)\":[{\"notice\":\"The error thrown when the attestation data length is invalid\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface for managing attestation data and verification\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/subgraph-service/internal/IAttestation.sol\":\"IAttestation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/subgraph-service/internal/IAttestation.sol\":{\"keccak256\":\"0x0b450e1c254bb557cbeece6059af6f29da448addd8740b0350a7f2f69c679f5c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c6a46822ae6e6f2b950bacdd8993928e64fde85944db8181e2e6d089441380a8\",\"dweb:/ipfs/QmQFvoNamhyfwbWw8kMbpy1SSh11cSRHgRry6ns492bF6B\"]}},\"version\":1}"}},"contracts/subgraph-service/internal/ILegacyAllocation.sol":{"ILegacyAllocation":{"abi":[{"inputs":[{"internalType":"address","name":"allocationId","type":"address"}],"name":"LegacyAllocationAlreadyExists","type":"error"},{"inputs":[{"internalType":"address","name":"allocationId","type":"address"}],"name":"LegacyAllocationDoesNotExist","type":"error"}],"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\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationDoesNotExist\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"LegacyAllocationAlreadyExists(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"LegacyAllocationDoesNotExist(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"Interface for the {LegacyAllocation} library contract.\",\"version\":1},\"userdoc\":{\"errors\":{\"LegacyAllocationAlreadyExists(address)\":[{\"notice\":\"Thrown when attempting to migrate an allocation with an existing id\"}],\"LegacyAllocationDoesNotExist(address)\":[{\"notice\":\"Thrown when trying to get a non-existent allocation\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface for managing legacy allocation data\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/subgraph-service/internal/ILegacyAllocation.sol\":\"ILegacyAllocation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/subgraph-service/internal/ILegacyAllocation.sol\":{\"keccak256\":\"0x9068aeb63c9d115135a1e398f8296e841648a18827744f927e6980ab15301d36\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://fc96b0211b67ab0cf3e62eb019f1fbbe706d2974a9941478b4312ee7be471a4c\",\"dweb:/ipfs/Qmc1xZLhcbc7yTHRAAkaFShv559ao5hRWYD9uxEtzTwRcQ\"]}},\"version\":1}"}},"contracts/token-distribution/IGraphTokenLockWallet.sol":{"IGraphTokenLockWallet":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"_newManager","type":"address"}],"name":"ManagerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"TokenDestinationsApproved","type":"event"},{"anonymous":false,"inputs":[],"name":"TokenDestinationsRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensWithdrawn","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"amountPerPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"approveProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"beneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevoked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"passedPeriods","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periods","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releasableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releasedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revocable","outputs":[{"internalType":"enum IGraphTokenLockWallet.Revocability","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinceStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"surplusAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalOutstandingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingCliffTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawSurplus","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"amountPerPeriod()":"029c6c9f","approveProtocol()":"2a627814","beneficiary()":"38af3eed","currentBalance()":"ce845d1d","currentPeriod()":"06040618","currentTime()":"d18e81b3","duration()":"0fb5a6b4","endTime()":"3197cbb6","isRevoked()":"2bc9ed02","managedAmount()":"398057a3","passedPeriods()":"ebbab992","periodDuration()":"b470aade","periods()":"a4caeb42","releasableAmount()":"5b940081","release()":"86d1a69f","releaseStartTime()":"e97d87d5","releasedAmount()":"45d30a17","revocable()":"872a7810","revokeProtocol()":"60e79944","sinceStartTime()":"7bdf05af","startTime()":"78e97925","surplusAmount()":"0dff24d5","token()":"fc0c546a","totalOutstandingAmount()":"bc0163c1","usedAmount()":"e8dda6f5","vestedAmount()":"44b1231f","vestingCliffTime()":"86d00e02","withdrawSurplus(uint256)":"b0d1818c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newManager\",\"type\":\"address\"}],\"name\":\"ManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"TokenDestinationsApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"TokenDestinationsRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"amountPerPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approveProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beneficiary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"duration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isRevoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"managedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"passedPeriods\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"periodDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"periods\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"releasableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"releaseStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"releasedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revocable\",\"outputs\":[{\"internalType\":\"enum IGraphTokenLockWallet.Revocability\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revokeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sinceStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"surplusAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalOutstandingAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vestedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vestingCliffTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawSurplus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"details\":\"This interface includes core vesting functionality. Protocol interaction functions are in IGraphTokenLockWalletToolshed\",\"events\":{\"ManagerUpdated(address,address)\":{\"params\":{\"_newManager\":\"The new manager address\",\"_oldManager\":\"The previous manager address\"}},\"OwnershipTransferred(address,address)\":{\"params\":{\"newOwner\":\"The new owner address\",\"previousOwner\":\"The previous owner address\"}},\"TokensReleased(address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens released\",\"beneficiary\":\"The beneficiary address\"}},\"TokensRevoked(address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens revoked\",\"beneficiary\":\"The beneficiary address\"}},\"TokensWithdrawn(address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens withdrawn\",\"beneficiary\":\"The beneficiary address\"}}},\"kind\":\"dev\",\"methods\":{\"amountPerPeriod()\":{\"returns\":{\"_0\":\"The amount per period\"}},\"beneficiary()\":{\"returns\":{\"_0\":\"The beneficiary address\"}},\"currentBalance()\":{\"returns\":{\"_0\":\"The current balance\"}},\"currentPeriod()\":{\"returns\":{\"_0\":\"The current period number\"}},\"currentTime()\":{\"returns\":{\"_0\":\"The current timestamp\"}},\"duration()\":{\"returns\":{\"_0\":\"The duration in seconds\"}},\"endTime()\":{\"returns\":{\"_0\":\"The end time timestamp\"}},\"isRevoked()\":{\"returns\":{\"_0\":\"True if revoked, false otherwise\"}},\"managedAmount()\":{\"returns\":{\"_0\":\"The managed token amount\"}},\"passedPeriods()\":{\"returns\":{\"_0\":\"The number of passed periods\"}},\"periodDuration()\":{\"returns\":{\"_0\":\"The period duration in seconds\"}},\"periods()\":{\"returns\":{\"_0\":\"The number of periods\"}},\"releasableAmount()\":{\"returns\":{\"_0\":\"The releasable token amount\"}},\"releaseStartTime()\":{\"returns\":{\"_0\":\"The release start time timestamp\"}},\"releasedAmount()\":{\"returns\":{\"_0\":\"The released token amount\"}},\"revocable()\":{\"returns\":{\"_0\":\"The revocability status\"}},\"sinceStartTime()\":{\"returns\":{\"_0\":\"The elapsed time in seconds\"}},\"startTime()\":{\"returns\":{\"_0\":\"The start time timestamp\"}},\"surplusAmount()\":{\"returns\":{\"_0\":\"The surplus token amount\"}},\"token()\":{\"returns\":{\"_0\":\"The token contract address\"}},\"totalOutstandingAmount()\":{\"returns\":{\"_0\":\"The total outstanding amount\"}},\"usedAmount()\":{\"returns\":{\"_0\":\"The used token amount\"}},\"vestedAmount()\":{\"returns\":{\"_0\":\"The vested token amount\"}},\"vestingCliffTime()\":{\"returns\":{\"_0\":\"The cliff time timestamp\"}},\"withdrawSurplus(uint256)\":{\"params\":{\"_amount\":\"The amount of surplus tokens to withdraw\"}}},\"title\":\"IGraphTokenLockWallet\",\"version\":1},\"userdoc\":{\"events\":{\"ManagerUpdated(address,address)\":{\"notice\":\"Emitted when the manager is updated\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Emitted when ownership is transferred\"},\"TokenDestinationsApproved()\":{\"notice\":\"Emitted when token destinations are approved\"},\"TokenDestinationsRevoked()\":{\"notice\":\"Emitted when token destinations are revoked\"},\"TokensReleased(address,uint256)\":{\"notice\":\"Emitted when tokens are released to beneficiary\"},\"TokensRevoked(address,uint256)\":{\"notice\":\"Emitted when tokens are revoked\"},\"TokensWithdrawn(address,uint256)\":{\"notice\":\"Emitted when tokens are withdrawn\"}},\"kind\":\"user\",\"methods\":{\"amountPerPeriod()\":{\"notice\":\"Get the amount of tokens released per period\"},\"approveProtocol()\":{\"notice\":\"Approve protocol interactions\"},\"beneficiary()\":{\"notice\":\"Get the beneficiary address\"},\"currentBalance()\":{\"notice\":\"Get the current token balance of the contract\"},\"currentPeriod()\":{\"notice\":\"Get the current vesting period\"},\"currentTime()\":{\"notice\":\"Get the current timestamp\"},\"duration()\":{\"notice\":\"Get the total vesting duration\"},\"endTime()\":{\"notice\":\"Get the vesting end time\"},\"isRevoked()\":{\"notice\":\"Check if the vesting has been revoked\"},\"managedAmount()\":{\"notice\":\"Get the total amount of tokens managed by this contract\"},\"passedPeriods()\":{\"notice\":\"Get the number of periods that have passed\"},\"periodDuration()\":{\"notice\":\"Get the duration of each vesting period\"},\"periods()\":{\"notice\":\"Get the number of vesting periods\"},\"releasableAmount()\":{\"notice\":\"Get the amount of tokens that can be released\"},\"release()\":{\"notice\":\"Release vested tokens to the beneficiary\"},\"releaseStartTime()\":{\"notice\":\"Get the release start time\"},\"releasedAmount()\":{\"notice\":\"Get the amount of tokens that have been released\"},\"revocable()\":{\"notice\":\"Get the revocability status\"},\"revokeProtocol()\":{\"notice\":\"Revoke protocol interactions\"},\"sinceStartTime()\":{\"notice\":\"Get the time elapsed since vesting start\"},\"startTime()\":{\"notice\":\"Get the vesting start time\"},\"surplusAmount()\":{\"notice\":\"Get the surplus amount of tokens\"},\"token()\":{\"notice\":\"Get the token contract address\"},\"totalOutstandingAmount()\":{\"notice\":\"Get the total outstanding token amount\"},\"usedAmount()\":{\"notice\":\"Get the amount of tokens that have been used\"},\"vestedAmount()\":{\"notice\":\"Get the amount of tokens that have vested\"},\"vestingCliffTime()\":{\"notice\":\"Get the vesting cliff time\"},\"withdrawSurplus(uint256)\":{\"notice\":\"Withdraw surplus tokens\"}},\"notice\":\"Interface for the GraphTokenLockWallet contract that manages locked tokens with vesting schedules\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/token-distribution/IGraphTokenLockWallet.sol\":\"IGraphTokenLockWallet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/token-distribution/IGraphTokenLockWallet.sol\":{\"keccak256\":\"0x913457f1aea4703ff9e6f1db45e43509d7580d28213ad372454e7c51b718e2a4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://95362d7f51c39e54343ec10181b47bf721aa16fea2ba4e8e67f5ac17672d205f\",\"dweb:/ipfs/QmdKGuqp8GjjPU1xLXM9Yy9CcKLkSbz2czh3x3udEWhiQ2\"]}},\"version\":1}"}},"contracts/toolshed/IControllerToolshed.sol":{"IControllerToolshed":{"abi":[{"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":"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":"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":[],"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":"partialPause","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":"pause","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"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","getContractProxy(bytes32)":"f7641a5e","getGovernor()":"4fc07d75","governor()":"0c340a24","partialPaused()":"2e292fc7","paused()":"5c975abb","pendingGovernor()":"e3056a34","setContractProxy(bytes32,address)":"e0e99292","setPartialPaused(bool)":"56371bd8","setPauseGuardian(address)":"48bde20c","setPaused(bool)":"16c38b3c","transferOwnership(address)":"f2fde38b","unsetContractProxy(bytes32)":"9181df9c","updateController(bytes32,address)":"eb5dd94f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"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\":\"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\":[],\"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\":\"partialPause\",\"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\":\"pause\",\"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\"}],\"devdoc\":{\"events\":{\"NewOwnership(address,address)\":{\"params\":{\"from\":\"The address of the previous governor\",\"to\":\"The address of the new governor\"}},\"NewPendingOwnership(address,address)\":{\"params\":{\"from\":\"The address of the current governor\",\"to\":\"The address of the new pending governor\"}}},\"kind\":\"dev\",\"methods\":{\"getContractProxy(bytes32)\":{\"params\":{\"id\":\"Contract id\"},\"returns\":{\"_0\":\"Address of the proxy contract for the provided id\"}},\"getGovernor()\":{\"returns\":{\"_0\":\"The governor address\"}},\"governor()\":{\"returns\":{\"_0\":\"The address of the current governor\"}},\"partialPaused()\":{\"returns\":{\"_0\":\"True if the protocol is partially paused\"}},\"paused()\":{\"returns\":{\"_0\":\"True if the protocol is paused\"}},\"pendingGovernor()\":{\"returns\":{\"_0\":\"The address of the pending governor\"}},\"setContractProxy(bytes32,address)\":{\"params\":{\"contractAddress\":\"Contract address\",\"id\":\"Contract id (keccak256 hash of contract name)\"}},\"setPartialPaused(bool)\":{\"params\":{\"partialPause\":\"True if the contracts should be (partially) paused, false otherwise\"}},\"setPauseGuardian(address)\":{\"params\":{\"newPauseGuardian\":\"The address of the new Pause Guardian\"}},\"setPaused(bool)\":{\"params\":{\"pause\":\"True if the contracts should be paused, false otherwise\"}},\"transferOwnership(address)\":{\"params\":{\"newGovernor\":\"Address of new `governor`\"}},\"unsetContractProxy(bytes32)\":{\"params\":{\"id\":\"Contract id (keccak256 hash of contract name)\"}},\"updateController(bytes32,address)\":{\"params\":{\"controller\":\"Controller address\",\"id\":\"Contract id (keccak256 hash of contract name)\"}}},\"version\":1},\"userdoc\":{\"events\":{\"NewOwnership(address,address)\":{\"notice\":\"Emitted when governance is transferred to a new governor\"},\"NewPendingOwnership(address,address)\":{\"notice\":\"Emitted when a new pending governor is set\"}},\"kind\":\"user\",\"methods\":{\"acceptOwnership()\":{\"notice\":\"Admin function for pending governor to accept role and update governor.\"},\"getContractProxy(bytes32)\":{\"notice\":\"Get contract proxy address by its id\"},\"getGovernor()\":{\"notice\":\"Return the governor address\"},\"governor()\":{\"notice\":\"Get the current governor address\"},\"partialPaused()\":{\"notice\":\"Return whether the protocol is partially paused\"},\"paused()\":{\"notice\":\"Return whether the protocol is paused\"},\"pendingGovernor()\":{\"notice\":\"Get the pending governor address\"},\"setContractProxy(bytes32,address)\":{\"notice\":\"Register contract id and mapped address\"},\"setPartialPaused(bool)\":{\"notice\":\"Change the partial paused state of the contract Partial pause is intended as a partial pause of the protocol\"},\"setPauseGuardian(address)\":{\"notice\":\"Change the Pause Guardian\"},\"setPaused(bool)\":{\"notice\":\"Change the paused state of the contract Full pause most of protocol functions\"},\"transferOwnership(address)\":{\"notice\":\"Admin function to begin change of governor.\"},\"unsetContractProxy(bytes32)\":{\"notice\":\"Unregister a contract address\"},\"updateController(bytes32,address)\":{\"notice\":\"Update contract's controller\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IControllerToolshed.sol\":\"IControllerToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0x8bcf3c80d81f5dc6dab2dae12ba244af44d688d7f4e25659398ccc253b3b36ce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f4098877f5d5bcdd725333dfb56a1e6a4a7be63c62b76b385589c17290b615a3\",\"dweb:/ipfs/QmXxATjrLJd3J9V7ZLpP3aY4sJH1suQU7jZqxV2dFzBLsV\"]},\"contracts/contracts/governance/IGoverned.sol\":{\"keccak256\":\"0xd8f3bbcc2c8841065f3ebdd9fc6154936b6f074c7b4390b29e22ac65109261f6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5951d9821182f082d2c9eb2012ac2b8cdc391ff8b295fe9f7fe8b4d5ccc84f57\",\"dweb:/ipfs/QmUJufm4387fqYRicC1gJZwxmBxKDEKhzAVVYQNMpr8L1w\"]},\"contracts/toolshed/IControllerToolshed.sol\":{\"keccak256\":\"0x517d9e29be1fe0b45280165512f7867803221f6a9b575038384a4135f02e6d75\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1aa828e61eaeff27af856c7cf131c7c58e39076e9f9ea845a2d81b6cc54f176c\",\"dweb:/ipfs/QmazG1HfcYkmRArseXUZBdv8vChoq753mE7XyvRuXwxRWd\"]}},\"version\":1}"}},"contracts/toolshed/IDisputeManagerToolshed.sol":{"IDisputeManagerToolshed":{"abi":[{"inputs":[{"internalType":"bytes32","name":"disputeId","type":"bytes32"}],"name":"DisputeManagerDisputeAlreadyCreated","type":"error"},{"inputs":[{"internalType":"bytes32","name":"disputeId","type":"bytes32"}],"name":"DisputeManagerDisputeInConflict","type":"error"},{"inputs":[{"internalType":"bytes32","name":"disputeId","type":"bytes32"}],"name":"DisputeManagerDisputeNotInConflict","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":"DisputeManagerSubgraphServiceNotSet","type":"error"},{"inputs":[],"name":"DisputeManagerZeroTokens","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","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":"blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeSnapshot","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cancellableAt","type":"uint256"}],"name":"IndexingDisputeCreated","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":"address","name":"allocationId","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSlash","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensRewards","type":"uint256"}],"name":"LegacyDisputeCreated","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"},{"indexed":false,"internalType":"uint256","name":"cancellableAt","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":[{"internalType":"bytes32","name":"disputeId","type":"bytes32"},{"internalType":"uint256","name":"tokensSlash","type":"uint256"},{"internalType":"bool","name":"acceptDisputeInConflict","type":"bool"},{"internalType":"uint256","name":"tokensSlashRelated","type":"uint256"}],"name":"acceptDisputeConflict","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 IAttestation.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 IAttestation.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":"address","name":"fisherman","type":"address"},{"internalType":"uint256","name":"tokensSlash","type":"uint256"},{"internalType":"uint256","name":"tokensRewards","type":"uint256"}],"name":"createAndAcceptLegacyDispute","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"allocationId","type":"address"},{"internalType":"bytes32","name":"poi","type":"bytes32"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"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":[{"components":[{"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":"cancellableAt","type":"uint256"},{"internalType":"uint256","name":"stakeSnapshot","type":"uint256"}],"internalType":"struct IDisputeManager.Dispute","name":"","type":"tuple"}],"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 IAttestation.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 IAttestation.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":[],"name":"getFishermanRewardCut","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"getStakeSnapshot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"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":"address","name":"","type":"address"}],"stateMutability":"view","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":{"acceptDispute(bytes32,uint256)":"050b17ad","acceptDisputeConflict(bytes32,uint256,bool,uint256)":"b0e2f7e9","arbitrator()":"6cc6cde1","areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))":"d36fc9d4","cancelDispute(bytes32)":"1792f194","createAndAcceptLegacyDispute(address,address,uint256,uint256)":"8d4e9008","createIndexingDispute(address,bytes32,uint256)":"417c10fd","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","getFishermanRewardCut()":"bb2a2b47","getStakeSnapshot(address)":"c133b429","initialize(address,address,uint64,uint256,uint32,uint32)":"0bc7344b","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\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerDisputeAlreadyCreated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerDisputeInConflict\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerDisputeNotInConflict\",\"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\":\"DisputeManagerSubgraphServiceNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"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\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cancellableAt\",\"type\":\"uint256\"}],\"name\":\"IndexingDisputeCreated\",\"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\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensRewards\",\"type\":\"uint256\"}],\"name\":\"LegacyDisputeCreated\",\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cancellableAt\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"acceptDisputeInConflict\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"tokensSlashRelated\",\"type\":\"uint256\"}],\"name\":\"acceptDisputeConflict\",\"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 IAttestation.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 IAttestation.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\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensRewards\",\"type\":\"uint256\"}],\"name\":\"createAndAcceptLegacyDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"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\":[{\"components\":[{\"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\":\"cancellableAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"internalType\":\"struct IDisputeManager.Dispute\",\"name\":\"\",\"type\":\"tuple\"}],\"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 IAttestation.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 IAttestation.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\":[],\"name\":\"getFishermanRewardCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getStakeSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"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\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"DisputeManagerDisputeAlreadyCreated(bytes32)\":[{\"params\":{\"disputeId\":\"The dispute id\"}}],\"DisputeManagerDisputeInConflict(bytes32)\":[{\"params\":{\"disputeId\":\"The dispute id\"}}],\"DisputeManagerDisputeNotInConflict(bytes32)\":[{\"params\":{\"disputeId\":\"The dispute id\"}}],\"DisputeManagerDisputeNotPending(uint8)\":[{\"params\":{\"status\":\"The status of the dispute\"}}],\"DisputeManagerIndexerNotFound(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"DisputeManagerInvalidDispute(bytes32)\":[{\"params\":{\"disputeId\":\"The dispute id\"}}],\"DisputeManagerInvalidDisputeDeposit(uint256)\":[{\"params\":{\"disputeDeposit\":\"The dispute deposit\"}}],\"DisputeManagerInvalidFishermanReward(uint32)\":[{\"params\":{\"cut\":\"The fisherman reward cut\"}}],\"DisputeManagerInvalidMaxSlashingCut(uint32)\":[{\"params\":{\"maxSlashingCut\":\"The max slashing cut\"}}],\"DisputeManagerInvalidTokensSlash(uint256,uint256)\":[{\"params\":{\"maxTokensSlash\":\"The max tokens slash\",\"tokensSlash\":\"The tokens slash\"}}],\"DisputeManagerMustAcceptRelatedDispute(bytes32,bytes32)\":[{\"params\":{\"disputeId\":\"The dispute id\",\"relatedDisputeId\":\"The related dispute id\"}}],\"DisputeManagerNonConflictingAttestations(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)\":[{\"params\":{\"requestCID1\":\"The request CID of the first attestation\",\"requestCID2\":\"The request CID of the second attestation\",\"responseCID1\":\"The response CID of the first attestation\",\"responseCID2\":\"The response CID of the second attestation\",\"subgraphDeploymentId1\":\"The subgraph deployment id of the first attestation\",\"subgraphDeploymentId2\":\"The subgraph deployment id of the second attestation\"}}],\"DisputeManagerNonMatchingSubgraphDeployment(bytes32,bytes32)\":[{\"params\":{\"subgraphDeploymentId1\":\"The subgraph deployment id of the first attestation\",\"subgraphDeploymentId2\":\"The subgraph deployment id of the second attestation\"}}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"ArbitratorSet(address)\":{\"params\":{\"arbitrator\":\"The address of the arbitrator.\"}},\"DisputeAccepted(bytes32,address,address,uint256)\":{\"params\":{\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"tokens\":\"The amount of tokens transferred to the fisherman, the deposit plus reward\"}},\"DisputeCancelled(bytes32,address,address,uint256)\":{\"params\":{\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"tokens\":\"The amount of tokens returned to the fisherman - the deposit\"}},\"DisputeDepositSet(uint256)\":{\"params\":{\"disputeDeposit\":\"The dispute deposit required to create a dispute.\"}},\"DisputeDrawn(bytes32,address,address,uint256)\":{\"params\":{\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"tokens\":\"The amount of tokens returned to the fisherman - the deposit\"}},\"DisputeLinked(bytes32,bytes32)\":{\"params\":{\"disputeId1\":\"The first dispute id\",\"disputeId2\":\"The second dispute id\"}},\"DisputePeriodSet(uint64)\":{\"params\":{\"disputePeriod\":\"The dispute period in seconds.\"}},\"DisputeRejected(bytes32,address,address,uint256)\":{\"params\":{\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"tokens\":\"The amount of tokens burned from the fisherman deposit\"}},\"FishermanRewardCutSet(uint32)\":{\"params\":{\"fishermanRewardCut\":\"The fisherman reward cut.\"}},\"IndexingDisputeCreated(bytes32,address,address,uint256,address,bytes32,uint256,uint256,uint256)\":{\"params\":{\"allocationId\":\"The allocation id\",\"blockNumber\":\"The block number for which the POI was calculated\",\"cancellableAt\":\"The timestamp when the dispute can be cancelled\",\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"poi\":\"The POI\",\"stakeSnapshot\":\"The stake snapshot of the indexer at the time of the dispute\",\"tokens\":\"The amount of tokens deposited by the fisherman\"}},\"LegacyDisputeCreated(bytes32,address,address,address,uint256,uint256)\":{\"params\":{\"allocationId\":\"The allocation id\",\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address to be credited with the rewards\",\"indexer\":\"The indexer address\",\"tokensRewards\":\"The amount of tokens to reward the fisherman\",\"tokensSlash\":\"The amount of tokens to slash\"}},\"MaxSlashingCutSet(uint32)\":{\"params\":{\"maxSlashingCut\":\"The maximum slashing cut that can be set.\"}},\"QueryDisputeCreated(bytes32,address,address,uint256,bytes32,bytes,uint256,uint256)\":{\"params\":{\"attestation\":\"The attestation\",\"cancellableAt\":\"The timestamp when the dispute can be cancelled\",\"disputeId\":\"The dispute id\",\"fisherman\":\"The fisherman address\",\"indexer\":\"The indexer address\",\"stakeSnapshot\":\"The stake snapshot of the indexer at the time of the dispute\",\"subgraphDeploymentId\":\"The subgraph deployment id\",\"tokens\":\"The amount of tokens deposited by the fisherman\"}},\"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\"}},\"acceptDisputeConflict(bytes32,uint256,bool,uint256)\":{\"params\":{\"acceptDisputeInConflict\":\"Accept the conflicting dispute. Otherwise it will be drawn automatically\",\"disputeId\":\"Id of the dispute to be accepted\",\"tokensSlash\":\"Amount of tokens to slash from the indexer for the first dispute\",\"tokensSlashRelated\":\"Amount of tokens to slash from the indexer for the related dispute in case acceptDisputeInConflict is true, otherwise it will be ignored\"}},\"arbitrator()\":{\"returns\":{\"_0\":\"Arbitrator address\"}},\"areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"params\":{\"attestation1\":\"The first attestation\",\"attestation2\":\"The second attestation\"},\"returns\":{\"_0\":\"Whether the attestations are conflicting\"}},\"cancelDispute(bytes32)\":{\"details\":\"Cancel a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be cancelled\"}},\"createAndAcceptLegacyDispute(address,address,uint256,uint256)\":{\"params\":{\"allocationId\":\"The allocation to dispute\",\"fisherman\":\"The fisherman address to be credited with the rewards\",\"tokensRewards\":\"The amount of tokens to reward the fisherman\",\"tokensSlash\":\"The amount of tokens to slash\"},\"returns\":{\"_0\":\"The dispute id\"}},\"createIndexingDispute(address,bytes32,uint256)\":{\"params\":{\"allocationId\":\"The allocation to dispute\",\"blockNumber\":\"The block number for which the POI was calculated\",\"poi\":\"The Proof of Indexing (POI) being disputed\"},\"returns\":{\"_0\":\"The dispute id\"}},\"createQueryDispute(bytes)\":{\"params\":{\"attestationData\":\"Attestation bytes submitted by the fisherman\"},\"returns\":{\"_0\":\"The dispute id\"}},\"createQueryDisputeConflict(bytes,bytes)\":{\"params\":{\"attestationData1\":\"First attestation data submitted\",\"attestationData2\":\"Second attestation data submitted\"},\"returns\":{\"_0\":\"The first dispute id\",\"_1\":\"The second dispute id\"}},\"disputeDeposit()\":{\"returns\":{\"_0\":\"Dispute deposit\"}},\"disputePeriod()\":{\"returns\":{\"_0\":\"Dispute period in seconds\"}},\"disputes(bytes32)\":{\"params\":{\"disputeId\":\"The dispute ID\"},\"returns\":{\"_0\":\"Dispute status\"}},\"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\"}},\"fishermanRewardCut()\":{\"returns\":{\"_0\":\"Fisherman reward cut in percentage (ppm)\"}},\"getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"params\":{\"attestation\":\"Attestation\"},\"returns\":{\"_0\":\"indexer address\"}},\"getDisputePeriod()\":{\"returns\":{\"_0\":\"Dispute period in seconds\"}},\"getFishermanRewardCut()\":{\"returns\":{\"_0\":\"Fisherman reward cut in percentage (ppm)\"}},\"getStakeSnapshot(address)\":{\"params\":{\"indexer\":\"The indexer address\"},\"returns\":{\"_0\":\"The stake snapshot\"}},\"initialize(address,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)\",\"owner\":\"The owner of the contract\"}},\"isDisputeCreated(bytes32)\":{\"details\":\"Return if dispute with Id `disputeId` exists\",\"params\":{\"disputeId\":\"True if dispute already exists\"},\"returns\":{\"_0\":\"True if dispute already exists\"}},\"maxSlashingCut()\":{\"returns\":{\"_0\":\"Max percentage slashing for disputes\"}},\"rejectDispute(bytes32)\":{\"details\":\"Reject a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be rejected\"}},\"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\"}},\"subgraphService()\":{\"returns\":{\"_0\":\"Subgraph service address\"}},\"transferOwnership(address)\":{\"params\":{\"newOwner\":\"The address of the new owner\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"DisputeManagerDisputeAlreadyCreated(bytes32)\":[{\"notice\":\"Thrown when the dispute is already created\"}],\"DisputeManagerDisputeInConflict(bytes32)\":[{\"notice\":\"Thrown when the dispute is in conflict\"}],\"DisputeManagerDisputeNotInConflict(bytes32)\":[{\"notice\":\"Thrown when the dispute is not in conflict\"}],\"DisputeManagerDisputeNotPending(uint8)\":[{\"notice\":\"Thrown when the dispute is not pending\"}],\"DisputeManagerDisputePeriodNotFinished()\":[{\"notice\":\"Thrown when the dispute period is not finished\"}],\"DisputeManagerDisputePeriodZero()\":[{\"notice\":\"Thrown when the dispute period is zero\"}],\"DisputeManagerIndexerNotFound(address)\":[{\"notice\":\"Thrown when the indexer is not found\"}],\"DisputeManagerInvalidDispute(bytes32)\":[{\"notice\":\"Thrown when the dispute id is invalid\"}],\"DisputeManagerInvalidDisputeDeposit(uint256)\":[{\"notice\":\"Thrown when the dispute deposit is invalid - less than the minimum dispute deposit\"}],\"DisputeManagerInvalidFishermanReward(uint32)\":[{\"notice\":\"Thrown when the fisherman reward cut is invalid\"}],\"DisputeManagerInvalidMaxSlashingCut(uint32)\":[{\"notice\":\"Thrown when the max slashing cut is invalid\"}],\"DisputeManagerInvalidTokensSlash(uint256,uint256)\":[{\"notice\":\"Thrown when the tokens slash is invalid\"}],\"DisputeManagerInvalidZeroAddress()\":[{\"notice\":\"Thrown when the address is the zero address\"}],\"DisputeManagerMustAcceptRelatedDispute(bytes32,bytes32)\":[{\"notice\":\"Thrown when the dispute must be accepted\"}],\"DisputeManagerNonConflictingAttestations(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)\":[{\"notice\":\"Thrown when the attestations are not conflicting\"}],\"DisputeManagerNonMatchingSubgraphDeployment(bytes32,bytes32)\":[{\"notice\":\"Thrown when the subgraph deployment is not matching\"}],\"DisputeManagerNotArbitrator()\":[{\"notice\":\"Thrown when the caller is not the arbitrator\"}],\"DisputeManagerNotFisherman()\":[{\"notice\":\"Thrown when the caller is not the fisherman\"}],\"DisputeManagerSubgraphServiceNotSet()\":[{\"notice\":\"Thrown when attempting to get the subgraph service before it is set\"}],\"DisputeManagerZeroTokens()\":[{\"notice\":\"Thrown when the indexer being disputed has no provisioned tokens\"}]},\"events\":{\"ArbitratorSet(address)\":{\"notice\":\"Emitted when arbitrator is set.\"},\"DisputeAccepted(bytes32,address,address,uint256)\":{\"notice\":\"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)\":{\"notice\":\"Emitted when a dispute is cancelled by the fisherman. The event emits the amount `tokens` returned to the fisherman.\"},\"DisputeDepositSet(uint256)\":{\"notice\":\"Emitted when dispute deposit is set.\"},\"DisputeDrawn(bytes32,address,address,uint256)\":{\"notice\":\"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)\":{\"notice\":\"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)\":{\"notice\":\"Emitted when dispute period is set.\"},\"DisputeRejected(bytes32,address,address,uint256)\":{\"notice\":\"Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`. The event emits the amount `tokens` burned from the fisherman deposit.\"},\"FishermanRewardCutSet(uint32)\":{\"notice\":\"Emitted when fisherman reward cut is set.\"},\"IndexingDisputeCreated(bytes32,address,address,uint256,address,bytes32,uint256,uint256,uint256)\":{\"notice\":\"Emitted when an indexing dispute is created for `allocationId` and `indexer` by `fisherman`. The event emits the amount of `tokens` deposited by the fisherman.\"},\"LegacyDisputeCreated(bytes32,address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a legacy dispute is created for `allocationId` and `fisherman`. The event emits the amount of `tokensSlash` to slash and `tokensRewards` to reward the fisherman.\"},\"MaxSlashingCutSet(uint32)\":{\"notice\":\"Emitted when max slashing cut is set.\"},\"QueryDisputeCreated(bytes32,address,address,uint256,bytes32,bytes,uint256,uint256)\":{\"notice\":\"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)\":{\"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. This function will also revert if the dispute is in conflict, to accept a conflicting dispute use acceptDisputeConflict.\"},\"acceptDisputeConflict(bytes32,uint256,bool,uint256)\":{\"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.\"},\"arbitrator()\":{\"notice\":\"Get the arbitrator address.\"},\"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. Note that cancelling a conflicting query dispute will also cancel the related dispute.\"},\"createAndAcceptLegacyDispute(address,address,uint256,uint256)\":{\"notice\":\"Creates and auto-accepts a legacy dispute. This disputes can be created to settle outstanding slashing amounts with an indexer that has been \\\"legacy slashed\\\" during or shortly after the transition period. See {HorizonStakingExtension.legacySlash} for more details. Note that this type of dispute: - can only be created by the arbitrator - does not require a bond - is automatically accepted when created Additionally, note that this type of disputes allow the arbitrator to directly set the slash and rewards amounts, bypassing the usual mechanisms that impose restrictions on those. This is done to give arbitrators maximum flexibility to ensure outstanding slashing amounts are settled fairly. This function needs to be removed after the transition period. Requirements: - Indexer must have been legacy slashed during or shortly after the transition period - Indexer must have provisioned funds to the Subgraph Service\"},\"createIndexingDispute(address,bytes32,uint256)\":{\"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. Two linked disputes will be created and if the arbitrator resolve one, the other 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.\"},\"disputeDeposit()\":{\"notice\":\"Get the dispute deposit.\"},\"disputePeriod()\":{\"notice\":\"Get the dispute period.\"},\"disputes(bytes32)\":{\"notice\":\"Get the dispute status.\"},\"drawDispute(bytes32)\":{\"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.\"},\"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\":\"Get the fisherman reward cut.\"},\"getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"notice\":\"Returns the indexer that signed an attestation.\"},\"getDisputePeriod()\":{\"notice\":\"Get the dispute period.\"},\"getFishermanRewardCut()\":{\"notice\":\"Get the fisherman reward cut.\"},\"getStakeSnapshot(address)\":{\"notice\":\"Get the stake snapshot for an indexer.\"},\"initialize(address,address,uint64,uint256,uint32,uint32)\":{\"notice\":\"Initialize this contract.\"},\"isDisputeCreated(bytes32)\":{\"notice\":\"Return whether a dispute exists or not.\"},\"maxSlashingCut()\":{\"notice\":\"Get the maximum percentage that can be used for slashing indexers.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner\"},\"rejectDispute(bytes32)\":{\"notice\":\"The arbitrator rejects a dispute as being invalid. Note that conflicting query disputes cannot be rejected.\"},\"renounceOwnership()\":{\"notice\":\"Leaves the contract without an owner\"},\"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\":\"Get the subgraph service address.\"},\"transferOwnership(address)\":{\"notice\":\"Transfers ownership of the contract to a new account\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IDisputeManagerToolshed.sol\":\"IDisputeManagerToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/subgraph-service/IDisputeManager.sol\":{\"keccak256\":\"0xb57133d5ffb3f6b86275fc435b346a658f20a4dfcf457a1590601e995d679ec1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://db4dfb8db349a45ff8f79aeb64a5a01bca4decfdd69ee48a1a272c7978d74a7f\",\"dweb:/ipfs/QmPbfZeqvmPcfeqfaYFGxzy8iXkpCncbLVAvmw9BiZ4Rxh\"]},\"contracts/subgraph-service/internal/IAttestation.sol\":{\"keccak256\":\"0x0b450e1c254bb557cbeece6059af6f29da448addd8740b0350a7f2f69c679f5c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c6a46822ae6e6f2b950bacdd8993928e64fde85944db8181e2e6d089441380a8\",\"dweb:/ipfs/QmQFvoNamhyfwbWw8kMbpy1SSh11cSRHgRry6ns492bF6B\"]},\"contracts/toolshed/IDisputeManagerToolshed.sol\":{\"keccak256\":\"0xc15e53f739a05f18e630c7bacfb22c6b07ec3125293842004f94ea4cd2c1762c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://95c8903a513dec0cfeca427415f2d8795e90789e16051b00ef2a1a6e2d69fecb\",\"dweb:/ipfs/QmcrKqpFvjYCjTeKCFFHL9crHzDF8gHLTDYfe5w4YEgdyf\"]},\"contracts/toolshed/internal/IOwnable.sol\":{\"keccak256\":\"0x176542b8ad75eb5179ef5d65f0a67868b9ff198ee4fb26fb9755ff160e7fc37a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4292e7e2343903aa9dd9bfd2f9938ee896588f56862271f74f8ef29998ecb7ba\",\"dweb:/ipfs/QmW6sZpzBid5fnsKE53hfquYXLxgrvcWkmPvnAL4WUfWJM\"]}},\"version\":1}"}},"contracts/toolshed/IEpochManagerToolshed.sol":{"IEpochManagerToolshed":{"abi":[{"inputs":[{"internalType":"uint256","name":"blockNumber","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":[],"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":[],"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","epochLength()":"57d775f8","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\":\"blockNumber\",\"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\":[],\"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\":[],\"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\":{\"blockHash(uint256)\":{\"params\":{\"blockNumber\":\"Block number to get hash for\"},\"returns\":{\"_0\":\"Block hash\"}},\"blockNum()\":{\"returns\":{\"_0\":\"Current block number\"}},\"currentEpoch()\":{\"returns\":{\"_0\":\"Current epoch number\"}},\"currentEpochBlock()\":{\"returns\":{\"_0\":\"Block number of current epoch start\"}},\"currentEpochBlockSinceStart()\":{\"returns\":{\"_0\":\"Number of blocks since current epoch start\"}},\"epochsSince(uint256)\":{\"params\":{\"epoch\":\"Epoch to calculate from\"},\"returns\":{\"_0\":\"Number of epochs since the given epoch\"}},\"epochsSinceUpdate()\":{\"returns\":{\"_0\":\"Number of epochs since last update\"}},\"isCurrentEpochRun()\":{\"returns\":{\"_0\":\"True if current epoch has been run, false otherwise\"}},\"runEpoch()\":{\"details\":\"Run a new epoch, should be called once at the start of any epoch.\"},\"setEpochLength(uint256)\":{\"params\":{\"epochLength\":\"Epoch length in blocks\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"blockHash(uint256)\":{\"notice\":\"Get the hash of a specific block\"},\"blockNum()\":{\"notice\":\"Get the current block number\"},\"currentEpoch()\":{\"notice\":\"Get the current epoch number\"},\"currentEpochBlock()\":{\"notice\":\"Get the block number when the current epoch started\"},\"currentEpochBlockSinceStart()\":{\"notice\":\"Get the number of blocks since the current epoch started\"},\"epochsSince(uint256)\":{\"notice\":\"Get the number of epochs since a given epoch\"},\"epochsSinceUpdate()\":{\"notice\":\"Get the number of epochs since the last epoch length update\"},\"isCurrentEpochRun()\":{\"notice\":\"Check if the current epoch has been run\"},\"runEpoch()\":{\"notice\":\"Perform state changes for the current epoch\"},\"setEpochLength(uint256)\":{\"notice\":\"Set epoch length to `epochLength` blocks\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IEpochManagerToolshed.sol\":\"IEpochManagerToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x5bb333cb1f88982a5a4d3197639d8f3b08cff627405ae87a273d06d20e86f1cf\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f9d9a04ec87d7f3acf00fd343970a4f61d51689450a56a1b19b69a67f7ccb818\",\"dweb:/ipfs/QmUvqyVcF51hvaipgNLsNeBYcwr4Upm8aWM6CM6D96QFfA\"]},\"contracts/toolshed/IEpochManagerToolshed.sol\":{\"keccak256\":\"0xa990a2757fa058ce0b4636cd86396dccfe4d9b7aed4ff4b05a0f8e906be451f1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2e4b06284ea00c186d80a76c671136bbf01f9b4dd097330023baaa1bef5502ac\",\"dweb:/ipfs/QmWDYZYb7joShsLkStVJJnVb2WjymaHWBz2cXAnRhAWmaz\"]}},\"version\":1}"}},"contracts/toolshed/IGraphTallyCollectorToolshed.sol":{"IGraphTallyCollectorToolshed":{"abi":[{"inputs":[],"name":"AuthorizableInvalidSignerProof","type":"error"},{"inputs":[{"internalType":"uint256","name":"proofDeadline","type":"uint256"},{"internalType":"uint256","name":"currentTimestamp","type":"uint256"}],"name":"AuthorizableInvalidSignerProofDeadline","type":"error"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"bool","name":"revoked","type":"bool"}],"name":"AuthorizableSignerAlreadyAuthorized","type":"error"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"name":"AuthorizableSignerNotAuthorized","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"AuthorizableSignerNotThawing","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentTimestamp","type":"uint256"},{"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"AuthorizableSignerStillThawing","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"dataService","type":"address"}],"name":"GraphTallyCollectorCallerNotDataService","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"tokensCollected","type":"uint256"}],"name":"GraphTallyCollectorInconsistentRAVTokens","type":"error"},{"inputs":[],"name":"GraphTallyCollectorInvalidRAVSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokensToCollect","type":"uint256"},{"internalType":"uint256","name":"maxTokensToCollect","type":"uint256"}],"name":"GraphTallyCollectorInvalidTokensToCollectAmount","type":"error"},{"inputs":[{"internalType":"address","name":"dataService","type":"address"}],"name":"GraphTallyCollectorUnauthorizedDataService","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum IGraphPayments.PaymentTypes","name":"paymentType","type":"uint8"},{"indexed":true,"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"dataService","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"PaymentCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":true,"internalType":"address","name":"dataService","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":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"SignerAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"SignerRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"SignerThawCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"SignerThawing","type":"event"},{"inputs":[],"name":"REVOKE_AUTHORIZATION_THAWING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"authorizations","outputs":[{"components":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"},{"internalType":"bool","name":"revoked","type":"bool"}],"internalType":"struct IAuthorizable.Authorization","name":"","type":"tuple"}],"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":"cancelThawSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IGraphPayments.PaymentTypes","name":"paymentType","type":"uint8"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"tokensToCollect","type":"uint256"}],"name":"collect","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"bytes32","name":"collectionId","type":"bytes32"},{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"serviceProvider","type":"address"},{"internalType":"address","name":"dataService","type":"address"},{"internalType":"uint64","name":"timestampNs","type":"uint64"},{"internalType":"uint128","name":"valueAggregate","type":"uint128"},{"internalType":"bytes","name":"metadata","type":"bytes"}],"internalType":"struct IGraphTallyCollector.ReceiptAggregateVoucher","name":"rav","type":"tuple"}],"name":"encodeRAV","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"getThawEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"serviceProvider","type":"address"},{"internalType":"address","name":"dataService","type":"address"},{"internalType":"uint64","name":"timestampNs","type":"uint64"},{"internalType":"uint128","name":"valueAggregate","type":"uint128"},{"internalType":"bytes","name":"metadata","type":"bytes"}],"internalType":"struct IGraphTallyCollector.ReceiptAggregateVoucher","name":"rav","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct IGraphTallyCollector.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":"serviceProvider","type":"address"},{"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"payer","type":"address"}],"name":"tokensCollected","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":{"REVOKE_AUTHORIZATION_THAWING_PERIOD()":"9b952881","authorizations(address)":"3a13e1af","authorizeSigner(address,uint256,bytes)":"fee9f01f","cancelThawSigner(address)":"015cdd80","collect(uint8,bytes)":"7f07d283","collect(uint8,bytes,uint256)":"692209ce","encodeRAV((bytes32,address,address,address,uint64,uint128,bytes))":"26969c4c","getThawEnd(address)":"bea5d2ab","isAuthorized(address,address)":"65e4ad9e","recoverRAVSigner(((bytes32,address,address,address,uint64,uint128,bytes),bytes))":"63648817","revokeAuthorizedSigner(address)":"39aa7416","thawSigner(address)":"1354f019","tokensCollected(address,bytes32,address,address)":"181250ff"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AuthorizableInvalidSignerProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"}],\"name\":\"AuthorizableInvalidSignerProofDeadline\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"revoked\",\"type\":\"bool\"}],\"name\":\"AuthorizableSignerAlreadyAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"AuthorizableSignerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"AuthorizableSignerNotThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"AuthorizableSignerStillThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"}],\"name\":\"GraphTallyCollectorCallerNotDataService\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensCollected\",\"type\":\"uint256\"}],\"name\":\"GraphTallyCollectorInconsistentRAVTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GraphTallyCollectorInvalidRAVSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensToCollect\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokensToCollect\",\"type\":\"uint256\"}],\"name\":\"GraphTallyCollectorInvalidTokensToCollectAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"}],\"name\":\"GraphTallyCollectorUnauthorizedDataService\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"PaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"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\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"SignerAuthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"SignerRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"SignerThawCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"SignerThawing\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"REVOKE_AUTHORIZATION_THAWING_PERIOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"authorizations\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"revoked\",\"type\":\"bool\"}],\"internalType\":\"struct IAuthorizable.Authorization\",\"name\":\"\",\"type\":\"tuple\"}],\"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\":\"cancelThawSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"tokensToCollect\",\"type\":\"uint256\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestampNs\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"valueAggregate\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct IGraphTallyCollector.ReceiptAggregateVoucher\",\"name\":\"rav\",\"type\":\"tuple\"}],\"name\":\"encodeRAV\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"getThawEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"isAuthorized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestampNs\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"valueAggregate\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct IGraphTallyCollector.ReceiptAggregateVoucher\",\"name\":\"rav\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IGraphTallyCollector.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\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"}],\"name\":\"tokensCollected\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AuthorizableInvalidSignerProofDeadline(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"proofDeadline\":\"The deadline for the proof provided\"}}],\"AuthorizableSignerAlreadyAuthorized(address,address,bool)\":[{\"params\":{\"authorizer\":\"The address of the authorizer\",\"revoked\":\"The revoked status of the authorization\",\"signer\":\"The address of the signer\"}}],\"AuthorizableSignerNotAuthorized(address,address)\":[{\"params\":{\"authorizer\":\"The address of the authorizer\",\"signer\":\"The address of the signer\"}}],\"AuthorizableSignerNotThawing(address)\":[{\"params\":{\"signer\":\"The address of the signer\"}}],\"AuthorizableSignerStillThawing(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}],\"GraphTallyCollectorCallerNotDataService(address,address)\":[{\"params\":{\"caller\":\"The address of the caller\",\"dataService\":\"The address of the data service\"}}],\"GraphTallyCollectorInconsistentRAVTokens(uint256,uint256)\":[{\"params\":{\"tokens\":\"The amount of tokens in the RAV\",\"tokensCollected\":\"The amount of tokens already collected\"}}],\"GraphTallyCollectorInvalidTokensToCollectAmount(uint256,uint256)\":[{\"params\":{\"maxTokensToCollect\":\"The maximum amount of tokens to collect\",\"tokensToCollect\":\"The amount of tokens to collect\"}}],\"GraphTallyCollectorUnauthorizedDataService(address)\":[{\"params\":{\"dataService\":\"The address of the data service\"}}]},\"events\":{\"PaymentCollected(uint8,bytes32,address,address,address,uint256)\":{\"params\":{\"collectionId\":\"The id for the collection. Can be used at the discretion of the collector to group multiple payments.\",\"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\",\"tokens\":\"The amount of tokens being collected\"}},\"RAVCollected(bytes32,address,address,address,uint64,uint128,bytes,bytes)\":{\"params\":{\"collectionId\":\"The ID of the collection \\\"bucket\\\" the RAV belongs to.\",\"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\":{\"authorizer\":\"The address of the authorizer\",\"signer\":\"The address of the signer\"}},\"SignerRevoked(address,address)\":{\"params\":{\"authorizer\":\"The address of the authorizer revoking the signer\",\"signer\":\"The address of the signer\"}},\"SignerThawCanceled(address,address,uint256)\":{\"params\":{\"authorizer\":\"The address of the authorizer cancelling the thawing\",\"signer\":\"The address of the signer\",\"thawEndTimestamp\":\"The timestamp at which the thawing period was scheduled to end\"}},\"SignerThawing(address,address,uint256)\":{\"params\":{\"authorizer\":\"The address of the authorizer thawing the signer\",\"signer\":\"The address of the signer to thaw\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}},\"kind\":\"dev\",\"methods\":{\"REVOKE_AUTHORIZATION_THAWING_PERIOD()\":{\"returns\":{\"_0\":\"The period in seconds\"}},\"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 a {SignerAuthorized} event\",\"params\":{\"proof\":\"The proof provided by the signer to be authorized by the authorizer consists of (chain id, verifying contract address, domain, proof deadline, authorizer address)\",\"proofDeadline\":\"The deadline for the proof provided by the signer\",\"signer\":\"The address of the signer\"}},\"cancelThawSigner(address)\":{\"details\":\"Requirements: - `signer` must be thawing and authorized by the function caller 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. 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}\"},\"returns\":{\"_0\":\"The amount of tokens collected\"}},\"collect(uint8,bytes,uint256)\":{\"params\":{\"data\":\"Additional data required for the payment collection. Encoded as follows: - SignedRAV `signedRAV`: The signed RAV - uint256 `dataServiceCut`: The data service cut in PPM - address `receiverDestination`: The address where the receiver's payment should be sent.\",\"paymentType\":\"The payment type to collect\",\"tokensToCollect\":\"The amount of tokens to collect\"},\"returns\":{\"_0\":\"The amount of tokens collected\"}},\"encodeRAV((bytes32,address,address,address,uint64,uint128,bytes))\":{\"params\":{\"rav\":\"The RAV for which to compute the hash.\"},\"returns\":{\"_0\":\"The hash of the RAV.\"}},\"getThawEnd(address)\":{\"params\":{\"signer\":\"The address of the signer\"},\"returns\":{\"_0\":\"The timestamp at which the thawing period ends\"}},\"isAuthorized(address,address)\":{\"params\":{\"authorizer\":\"The address of the authorizer\",\"signer\":\"The address of the signer\"},\"returns\":{\"_0\":\"true if the signer is authorized by the authorizer, false otherwise\"}},\"recoverRAVSigner(((bytes32,address,address,address,uint64,uint128,bytes),bytes))\":{\"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 function caller Emits a {SignerRevoked} event\",\"params\":{\"signer\":\"The address of the signer\"}},\"thawSigner(address)\":{\"details\":\"Thawing a signer signals that signatures from that signer will soon be deemed invalid. Once a signer is thawed, they should be viewed as revoked regardless of their revocation status. If a signer is already thawing and this function is called, the thawing period is reset. Requirements: - `signer` must be authorized by the authorizer calling this function Emits a {SignerThawing} event\",\"params\":{\"signer\":\"The address of the signer to thaw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AuthorizableInvalidSignerProof()\":[{\"notice\":\"Thrown when the signer proof is invalid\"}],\"AuthorizableInvalidSignerProofDeadline(uint256,uint256)\":[{\"notice\":\"Thrown when the signer proof deadline is invalid\"}],\"AuthorizableSignerAlreadyAuthorized(address,address,bool)\":[{\"notice\":\"Thrown when attempting to authorize a signer that is already authorized\"}],\"AuthorizableSignerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the signer is not authorized by the authorizer\"}],\"AuthorizableSignerNotThawing(address)\":[{\"notice\":\"Thrown when the signer is not thawing\"}],\"AuthorizableSignerStillThawing(uint256,uint256)\":[{\"notice\":\"Thrown when the signer is still thawing\"}],\"GraphTallyCollectorCallerNotDataService(address,address)\":[{\"notice\":\"Thrown when the caller is not the data service the RAV was issued to\"}],\"GraphTallyCollectorInconsistentRAVTokens(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\"}],\"GraphTallyCollectorInvalidRAVSigner()\":[{\"notice\":\"Thrown when the RAV signer is invalid\"}],\"GraphTallyCollectorInvalidTokensToCollectAmount(uint256,uint256)\":[{\"notice\":\"Thrown when the attempting to collect more tokens than what it's owed\"}],\"GraphTallyCollectorUnauthorizedDataService(address)\":[{\"notice\":\"Thrown when the RAV is for a data service the service provider has no provision for\"}]},\"events\":{\"PaymentCollected(uint8,bytes32,address,address,address,uint256)\":{\"notice\":\"Emitted when a payment is collected\"},\"RAVCollected(bytes32,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 for a authorizer\"},\"SignerRevoked(address,address)\":{\"notice\":\"Emitted when a signer has been revoked after thawing\"},\"SignerThawCanceled(address,address,uint256)\":{\"notice\":\"Emitted when the thawing of a signer is cancelled\"},\"SignerThawing(address,address,uint256)\":{\"notice\":\"Emitted when a signer is thawed to be de-authorized\"}},\"kind\":\"user\",\"methods\":{\"REVOKE_AUTHORIZATION_THAWING_PERIOD()\":{\"notice\":\"The period after which a signer can be revoked after thawing\"},\"authorizeSigner(address,uint256,bytes)\":{\"notice\":\"Authorize a signer to sign on behalf of the authorizer\"},\"cancelThawSigner(address)\":{\"notice\":\"Stops thawing a signer.\"},\"collect(uint8,bytes)\":{\"notice\":\"Initiate a payment collection through the payments protocol\"},\"collect(uint8,bytes,uint256)\":{\"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.\"},\"encodeRAV((bytes32,address,address,address,uint64,uint128,bytes))\":{\"notice\":\"Computes the hash of a ReceiptAggregateVoucher (RAV).\"},\"getThawEnd(address)\":{\"notice\":\"Returns the timestamp at which the thawing period ends for a signer. Returns 0 if the signer is not thawing.\"},\"isAuthorized(address,address)\":{\"notice\":\"Returns true if the signer is authorized by the authorizer\"},\"recoverRAVSigner(((bytes32,address,address,address,uint64,uint128,bytes),bytes))\":{\"notice\":\"Recovers the signer address of a signed ReceiptAggregateVoucher (RAV).\"},\"revokeAuthorizedSigner(address)\":{\"notice\":\"Revokes a signer if thawed.\"},\"thawSigner(address)\":{\"notice\":\"Starts thawing a signer to be de-authorized\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IGraphTallyCollectorToolshed.sol\":\"IGraphTallyCollectorToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/IAuthorizable.sol\":{\"keccak256\":\"0x355b62b5710dd2ff0ca085989f78dd4daaac7b5c35ee11dac47674ea3592b21d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://78587e3ed01e52d1092ebfbc48b8c11519a4fba9ae264fb5aba02806404bad25\",\"dweb:/ipfs/Qme5duGpikyHR2QXFiuQNNCjiCihyZR4eb9vzQsHK5vfVk\"]},\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/horizon/IGraphTallyCollector.sol\":{\"keccak256\":\"0x1645b28cc986fa2ba3f2c8a1d8e3cf5a34ff8d71b9f2b5df25e37729f8d6b50e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9794391a7b607b74c3e5903435ab5b9a6fb9249e9acb65d37f1fc80bd66fd3a1\",\"dweb:/ipfs/Qme3RQTvzzwrgHmpyuizc122p7sxEerisHwFc8V7wiGs77\"]},\"contracts/horizon/IPaymentsCollector.sol\":{\"keccak256\":\"0xac87419dd33722e6e2cf782959ea445feea521388075cdfd492b8694efef2c3b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2620459f86ddf5a96f35e3069fb96de6fa26c46c697250d9965589addf8030db\",\"dweb:/ipfs/QmZ4rG6J6VSyEtDEwyju8DfsHYiFMXwFWyfvBjmwdXhwVd\"]},\"contracts/toolshed/IGraphTallyCollectorToolshed.sol\":{\"keccak256\":\"0x5a33d6d9a19116c3eea135b369737b011083938992e0c0ac7ad325aece1c7093\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://27a3a414523a510144cc7713c2bf80ead6f3a89d0b6a5614a4b7797f453526f7\",\"dweb:/ipfs/QmefqSVUWSLUWJNQHCJfLJZLwRQ5ue9RxBqxQqdP1jkHjz\"]}},\"version\":1}"}},"contracts/toolshed/IGraphTokenLockWalletToolshed.sol":{"IGraphTokenLockWalletToolshed":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"_newManager","type":"address"}],"name":"ManagerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"TokenDestinationsApproved","type":"event"},{"anonymous":false,"inputs":[],"name":"TokenDestinationsRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensWithdrawn","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"amountPerPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"approveProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"beneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"nThawRequests","type":"uint256"}],"name":"deprovision","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevoked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"passedPeriods","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periods","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"provisionLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releasableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releasedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revocable","outputs":[{"internalType":"enum IGraphTokenLockWallet.Revocability","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeProtocol","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":[{"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":"rewardsDestination","type":"address"}],"name":"setRewardsDestination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinceStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"surplusAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"serviceProvider","type":"address"},{"internalType":"address","name":"verifier","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"thaw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalOutstandingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"serviceProvider","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"undelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingCliffTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"indexer","type":"address"},{"internalType":"address","name":"__DEPRECATED_delegateToIndexer","type":"address"}],"name":"withdrawDelegated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawSurplus","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"amountPerPeriod()":"029c6c9f","approveProtocol()":"2a627814","beneficiary()":"38af3eed","currentBalance()":"ce845d1d","currentPeriod()":"06040618","currentTime()":"d18e81b3","delegate(address,uint256)":"026e402b","deprovision(address,address,uint256)":"21195373","duration()":"0fb5a6b4","endTime()":"3197cbb6","isRevoked()":"2bc9ed02","managedAmount()":"398057a3","passedPeriods()":"ebbab992","periodDuration()":"b470aade","periods()":"a4caeb42","provisionLocked(address,address,uint256,uint32,uint64)":"82d66cb8","releasableAmount()":"5b940081","release()":"86d1a69f","releaseStartTime()":"e97d87d5","releasedAmount()":"45d30a17","revocable()":"872a7810","revokeProtocol()":"60e79944","setDelegationFeeCut(address,address,uint8,uint256)":"42c51693","setOperatorLocked(address,address,bool)":"ad4d35b5","setRewardsDestination(address,address)":"e9de3180","sinceStartTime()":"7bdf05af","stake(uint256)":"a694fc3a","startTime()":"78e97925","surplusAmount()":"0dff24d5","thaw(address,address,uint256)":"f93f1cd0","token()":"fc0c546a","totalOutstandingAmount()":"bc0163c1","undelegate(address,uint256)":"4d99dd16","unstake(uint256)":"2e17de78","usedAmount()":"e8dda6f5","vestedAmount()":"44b1231f","vestingCliffTime()":"86d00e02","withdraw()":"3ccfd60b","withdrawDelegated(address,address)":"51a60b02","withdrawDelegated(address,address,uint256)":"3993d849","withdrawSurplus(uint256)":"b0d1818c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newManager\",\"type\":\"address\"}],\"name\":\"ManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"TokenDestinationsApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"TokenDestinationsRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"amountPerPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approveProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beneficiary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"deprovision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"duration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isRevoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"managedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"passedPeriods\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"periodDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"periods\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"provisionLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"releasableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"releaseStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"releasedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revocable\",\"outputs\":[{\"internalType\":\"enum IGraphTokenLockWallet.Revocability\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revokeProtocol\",\"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\":[{\"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\":\"rewardsDestination\",\"type\":\"address\"}],\"name\":\"setRewardsDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sinceStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"surplusAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"thaw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalOutstandingAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vestedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vestingCliffTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"__DEPRECATED_delegateToIndexer\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawSurplus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Edge & Node\",\"details\":\"Functions included are based on the GraphTokenLockManager whitelist for vesting contracts on Horizon\",\"events\":{\"ManagerUpdated(address,address)\":{\"params\":{\"_newManager\":\"The new manager address\",\"_oldManager\":\"The previous manager address\"}},\"OwnershipTransferred(address,address)\":{\"params\":{\"newOwner\":\"The new owner address\",\"previousOwner\":\"The previous owner address\"}},\"TokensReleased(address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens released\",\"beneficiary\":\"The beneficiary address\"}},\"TokensRevoked(address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens revoked\",\"beneficiary\":\"The beneficiary address\"}},\"TokensWithdrawn(address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens withdrawn\",\"beneficiary\":\"The beneficiary address\"}}},\"kind\":\"dev\",\"methods\":{\"amountPerPeriod()\":{\"returns\":{\"_0\":\"The amount per period\"}},\"beneficiary()\":{\"returns\":{\"_0\":\"The beneficiary address\"}},\"currentBalance()\":{\"returns\":{\"_0\":\"The current balance\"}},\"currentPeriod()\":{\"returns\":{\"_0\":\"The current period number\"}},\"currentTime()\":{\"returns\":{\"_0\":\"The current timestamp\"}},\"duration()\":{\"returns\":{\"_0\":\"The duration in seconds\"}},\"endTime()\":{\"returns\":{\"_0\":\"The end time timestamp\"}},\"isRevoked()\":{\"returns\":{\"_0\":\"True if revoked, false otherwise\"}},\"managedAmount()\":{\"returns\":{\"_0\":\"The managed token amount\"}},\"passedPeriods()\":{\"returns\":{\"_0\":\"The number of passed periods\"}},\"periodDuration()\":{\"returns\":{\"_0\":\"The period duration in seconds\"}},\"periods()\":{\"returns\":{\"_0\":\"The number of periods\"}},\"releasableAmount()\":{\"returns\":{\"_0\":\"The releasable token amount\"}},\"releaseStartTime()\":{\"returns\":{\"_0\":\"The release start time timestamp\"}},\"releasedAmount()\":{\"returns\":{\"_0\":\"The released token amount\"}},\"revocable()\":{\"returns\":{\"_0\":\"The revocability status\"}},\"sinceStartTime()\":{\"returns\":{\"_0\":\"The elapsed time in seconds\"}},\"startTime()\":{\"returns\":{\"_0\":\"The start time timestamp\"}},\"surplusAmount()\":{\"returns\":{\"_0\":\"The surplus token amount\"}},\"token()\":{\"returns\":{\"_0\":\"The token contract address\"}},\"totalOutstandingAmount()\":{\"returns\":{\"_0\":\"The total outstanding amount\"}},\"usedAmount()\":{\"returns\":{\"_0\":\"The used token amount\"}},\"vestedAmount()\":{\"returns\":{\"_0\":\"The vested token amount\"}},\"vestingCliffTime()\":{\"returns\":{\"_0\":\"The cliff time timestamp\"}},\"withdrawSurplus(uint256)\":{\"params\":{\"_amount\":\"The amount of surplus tokens to withdraw\"}}},\"title\":\"IGraphTokenLockWalletToolshed\",\"version\":1},\"userdoc\":{\"events\":{\"ManagerUpdated(address,address)\":{\"notice\":\"Emitted when the manager is updated\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Emitted when ownership is transferred\"},\"TokenDestinationsApproved()\":{\"notice\":\"Emitted when token destinations are approved\"},\"TokenDestinationsRevoked()\":{\"notice\":\"Emitted when token destinations are revoked\"},\"TokensReleased(address,uint256)\":{\"notice\":\"Emitted when tokens are released to beneficiary\"},\"TokensRevoked(address,uint256)\":{\"notice\":\"Emitted when tokens are revoked\"},\"TokensWithdrawn(address,uint256)\":{\"notice\":\"Emitted when tokens are withdrawn\"}},\"kind\":\"user\",\"methods\":{\"amountPerPeriod()\":{\"notice\":\"Get the amount of tokens released per period\"},\"approveProtocol()\":{\"notice\":\"Approve protocol interactions\"},\"beneficiary()\":{\"notice\":\"Get the beneficiary address\"},\"currentBalance()\":{\"notice\":\"Get the current token balance of the contract\"},\"currentPeriod()\":{\"notice\":\"Get the current vesting period\"},\"currentTime()\":{\"notice\":\"Get the current timestamp\"},\"duration()\":{\"notice\":\"Get the total vesting duration\"},\"endTime()\":{\"notice\":\"Get the vesting end time\"},\"isRevoked()\":{\"notice\":\"Check if the vesting has been revoked\"},\"managedAmount()\":{\"notice\":\"Get the total amount of tokens managed by this contract\"},\"passedPeriods()\":{\"notice\":\"Get the number of periods that have passed\"},\"periodDuration()\":{\"notice\":\"Get the duration of each vesting period\"},\"periods()\":{\"notice\":\"Get the number of vesting periods\"},\"releasableAmount()\":{\"notice\":\"Get the amount of tokens that can be released\"},\"release()\":{\"notice\":\"Release vested tokens to the beneficiary\"},\"releaseStartTime()\":{\"notice\":\"Get the release start time\"},\"releasedAmount()\":{\"notice\":\"Get the amount of tokens that have been released\"},\"revocable()\":{\"notice\":\"Get the revocability status\"},\"revokeProtocol()\":{\"notice\":\"Revoke protocol interactions\"},\"sinceStartTime()\":{\"notice\":\"Get the time elapsed since vesting start\"},\"startTime()\":{\"notice\":\"Get the vesting start time\"},\"surplusAmount()\":{\"notice\":\"Get the surplus amount of tokens\"},\"token()\":{\"notice\":\"Get the token contract address\"},\"totalOutstandingAmount()\":{\"notice\":\"Get the total outstanding token amount\"},\"usedAmount()\":{\"notice\":\"Get the amount of tokens that have been used\"},\"vestedAmount()\":{\"notice\":\"Get the amount of tokens that have vested\"},\"vestingCliffTime()\":{\"notice\":\"Get the vesting cliff time\"},\"withdrawSurplus(uint256)\":{\"notice\":\"Withdraw surplus tokens\"}},\"notice\":\"Extended interface for GraphTokenLockWallet that includes Horizon protocol interaction functions\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IGraphTokenLockWalletToolshed.sol\":\"IGraphTokenLockWalletToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/token-distribution/IGraphTokenLockWallet.sol\":{\"keccak256\":\"0x913457f1aea4703ff9e6f1db45e43509d7580d28213ad372454e7c51b718e2a4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://95362d7f51c39e54343ec10181b47bf721aa16fea2ba4e8e67f5ac17672d205f\",\"dweb:/ipfs/QmdKGuqp8GjjPU1xLXM9Yy9CcKLkSbz2czh3x3udEWhiQ2\"]},\"contracts/toolshed/IGraphTokenLockWalletToolshed.sol\":{\"keccak256\":\"0x06a9eb4ccff4a0f6a739b8d11ba4115cebee916095774fb72f9e1109fa4f8c1f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://76643894d73e8818750958cac5033594b98e4cc2a5cd3f7bfefc6aab2f965290\",\"dweb:/ipfs/QmNzNQiXncaF4hH9Ab59kb82gfBDihK55rvjX5hp9ZpLpX\"]}},\"version\":1}"}},"contracts/toolshed/IHorizonStakingToolshed.sol":{"IHorizonStakingToolshed":{"abi":[{"inputs":[],"name":"HorizonStakingCallerIsServiceProvider","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"minTokens","type":"uint256"}],"name":"HorizonStakingInsufficientDelegationTokens","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":"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":[],"name":"HorizonStakingInvalidThawRequestType","type":"error"},{"inputs":[{"internalType":"uint64","name":"thawingPeriod","type":"uint64"},{"internalType":"uint64","name":"maxThawingPeriod","type":"uint64"}],"name":"HorizonStakingInvalidThawingPeriod","type":"error"},{"inputs":[{"internalType":"address","name":"verifier","type":"address"}],"name":"HorizonStakingInvalidVerifier","type":"error"},{"inputs":[],"name":"HorizonStakingInvalidVerifierZeroAddress","type":"error"},{"inputs":[],"name":"HorizonStakingInvalidZeroShares","type":"error"},{"inputs":[],"name":"HorizonStakingInvalidZeroTokens","type":"error"},{"inputs":[],"name":"HorizonStakingLegacySlashFailed","type":"error"},{"inputs":[],"name":"HorizonStakingNoTokensToSlash","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":"HorizonStakingNothingToWithdraw","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":[],"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":"serviceProvider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"HorizonStakeDeposited","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":"HorizonStakeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"HorizonStakeWithdrawn","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":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"StakeDelegatedWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"}],"name":"StakeSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"requestType","type":"uint8"},{"indexed":true,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":false,"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"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"ThawRequestCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"requestType","type":"uint8"},{"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":"enum IHorizonStakingTypes.ThawRequestType","name":"requestType","type":"uint8"},{"indexed":true,"internalType":"address","name":"serviceProvider","type":"address"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":false,"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"},{"indexed":false,"internalType":"uint256","name":"shares","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"},{"indexed":false,"internalType":"uint256","name":"shares","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":"bool","name":"isActive","type":"bool"},{"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":"lastParametersStagedAt","type":"uint256"},{"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":[],"name":"getStakingExtension","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"getSubgraphService","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"thawRequestType","type":"uint8"},{"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":"nextRequest","type":"bytes32"},{"internalType":"uint256","name":"thawingNonce","type":"uint256"}],"internalType":"struct IHorizonStakingTypes.ThawRequest","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"thawRequestType","type":"uint8"},{"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 ILinkedList.List","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IHorizonStakingTypes.ThawRequestType","name":"thawRequestType","type":"uint8"},{"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":"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":"indexer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"legacySlash","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":"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":"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":"deprecated","type":"address"}],"name":"withdrawDelegated","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":{"__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","getStakingExtension()":"66ee1b28","getSubgraphAllocatedTokens(bytes32)":"e2e1e8e9","getSubgraphService()":"9363c522","getThawRequest(uint8,bytes32)":"d48de845","getThawRequestList(uint8,address,address,address)":"e56f8a1d","getThawedTokens(uint8,address,address,address)":"2f7cc501","getTokensAvailable(address,address,uint32)":"872d0489","hasStake(address)":"e73e14bf","isAllocation(address)":"f1d60d66","isAllowedLockedVerifier(address)":"ae4fe67a","isAuthorized(address,address,address)":"7c145cc7","isDelegationSlashingEnabled()":"fc54fb27","isOperator(address,address)":"b6363cf2","legacySlash(address,uint256,uint256,address)":"4488a382","multicall(bytes[])":"ac9650d8","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,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\":\"HorizonStakingInsufficientDelegationTokens\",\"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\":\"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\":[],\"name\":\"HorizonStakingInvalidThawRequestType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"HorizonStakingInvalidThawingPeriod\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidVerifier\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidVerifierZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingLegacySlashFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingNoTokensToSlash\",\"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\":\"HorizonStakingNothingToWithdraw\",\"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\":[],\"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\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakeDeposited\",\"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\":\"HorizonStakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakeWithdrawn\",\"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\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDelegatedWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"StakeSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"requestType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ThawRequestCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"requestType\",\"type\":\"uint8\"},{\"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\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"requestType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"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\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"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\":\"lastParametersStagedAt\",\"type\":\"uint256\"},{\"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\":[],\"name\":\"getStakingExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"getSubgraphService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"thawRequestType\",\"type\":\"uint8\"},{\"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\":\"nextRequest\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ThawRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"thawRequestType\",\"type\":\"uint8\"},{\"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 ILinkedList.List\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IHorizonStakingTypes.ThawRequestType\",\"name\":\"thawRequestType\",\"type\":\"uint8\"},{\"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\":\"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\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"legacySlash\",\"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\":\"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\":\"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\":\"deprecated\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"HorizonStakingInsufficientDelegationTokens(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"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\"}}],\"HorizonStakingInvalidVerifier(address)\":[{\"params\":{\"verifier\":\"The verifier address\"}}],\"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.\",\"params\":{\"verifier\":\"The verifier address\"}}]},\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"epoch\":\"The protocol epoch the allocation was closed on\",\"indexer\":\"The indexer address\",\"isPublic\":\"True if the allocation was force closed by someone other than the indexer/operator\",\"poi\":\"The proof of indexing submitted by the sender\",\"sender\":\"The address closing the allocation\",\"subgraphDeploymentID\":\"The subgraph deployment ID\",\"tokens\":\"The amount of tokens unallocated from the allocation\"}},\"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\"}},\"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\"}},\"HorizonStakeDeposited(address,uint256)\":{\"details\":\"TRANSITION PERIOD: 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.\"}},\"HorizonStakeLocked(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens now locked (including previously locked tokens)\",\"until\":\"The block number until the stake is locked\"}},\"HorizonStakeWithdrawn(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\"}},\"MaxThawingPeriodSet(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period\"}},\"OperatorSet(address,address,address,bool)\":{\"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)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"assetHolder\":\"The address of the asset holder, the entity paying the query fees\",\"curationFees\":\"The amount of tokens distributed to the curation pool\",\"delegationRewards\":\"The amount of tokens collected from the delegation pool\",\"epoch\":\"The protocol epoch the rebate was collected on\",\"indexer\":\"The indexer address\",\"protocolTax\":\"The amount of tokens burnt as protocol tax\",\"queryFees\":\"The amount of tokens collected as query fees\",\"queryRebates\":\"The amount of tokens distributed to the indexer\",\"subgraphDeploymentID\":\"The subgraph deployment ID\",\"tokens\":\"The amount of tokens collected\"}},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"details\":\"This event is for the legacy `withdrawDelegated` function.\",\"params\":{\"delegator\":\"The address of the delegator\",\"indexer\":\"The address of the indexer\",\"tokens\":\"The amount of tokens withdrawn\"}},\"StakeSlashed(address,uint256,uint256,address)\":{\"params\":{\"beneficiary\":\"The address of a beneficiary to receive a reward for the slashing\",\"indexer\":\"The indexer address\",\"reward\":\"The amount of reward tokens to send to a beneficiary\",\"tokens\":\"The amount of tokens slashed\"}},\"ThawRequestCreated(uint8,address,address,address,uint256,uint64,bytes32,uint256)\":{\"details\":\"Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\",\"params\":{\"nonce\":\"The nonce of the thaw request\",\"owner\":\"The address of the owner of the thaw request.\",\"requestType\":\"The type of 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(uint8,bytes32,uint256,uint256,uint64,bool)\":{\"params\":{\"requestType\":\"The type of thaw request\",\"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(uint8,address,address,address,uint256,uint256)\":{\"params\":{\"owner\":\"The address of the owner of the thaw requests\",\"requestType\":\"The type of thaw request\",\"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,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"shares\":\"The amount of shares delegated\",\"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,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"shares\":\"The amount of shares undelegated\",\"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)\":{\"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. Otherwise, the function will attempt to fulfill all thaw requests until the first one that is not yet expired is found. 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)\":{\"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\",\"isActive\":\"Whether the allocation is active or not\",\"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\"}},\"getMaxThawingPeriod()\":{\"returns\":{\"_0\":\"The maximum allowed thawing period in seconds.\"}},\"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.\"},\"returns\":{\"_0\":\"The service provider details.\"}},\"getStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens staked.\"}},\"getStakingExtension()\":{\"returns\":{\"_0\":\"The address of the staking extension\"}},\"getSubgraphAllocatedTokens(bytes32)\":{\"params\":{\"subgraphDeploymentId\":\"Deployment Id for the subgraph\"},\"returns\":{\"_0\":\"Total tokens allocated to subgraph\"}},\"getSubgraphService()\":{\"details\":\"TRANSITION PERIOD: After transition period move to main HorizonStaking contract\",\"returns\":{\"_0\":\"Address of the subgraph data service\"}},\"getThawRequest(uint8,bytes32)\":{\"params\":{\"thawRequestId\":\"The id of the thaw request.\",\"thawRequestType\":\"The type of thaw request.\"},\"returns\":{\"_0\":\"The thaw request details.\"}},\"getThawRequestList(uint8,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.\",\"thawRequestType\":\"The type of thaw request.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The thaw requests list metadata.\"}},\"getThawedTokens(uint8,address,address,address)\":{\"details\":\"Note that the value returned by this function does not return the total amount of thawed tokens but only those that can be released. If thaw requests are created with different thawing periods it's possible that an unexpired thaw request temporarily blocks the release of other ones that have already expired. This function will stop counting when it encounters the first thaw request that is not yet expired.\",\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"thawRequestType\":\"The type of thaw request.\",\"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\"}},\"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\"}},\"isDelegationSlashingEnabled()\":{\"returns\":{\"_0\":\"True if delegation slashing is enabled, false otherwise\"}},\"isOperator(address,address)\":{\"params\":{\"indexer\":\"Address of the service provider\",\"operator\":\"Address of the operator\"},\"returns\":{\"_0\":\"True if operator is allowed for indexer, false otherwise\"}},\"legacySlash(address,uint256,uint256,address)\":{\"details\":\"Can only be called by the slasher role.\",\"params\":{\"beneficiary\":\"Address of a beneficiary to receive a reward for the slashing\",\"indexer\":\"Address of indexer to slash\",\"reward\":\"Amount of reward tokens to send to a beneficiary\",\"tokens\":\"Amount of tokens to slash from the indexer stake\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"provision(address,address,uint256,uint32,uint64)\":{\"details\":\"During the transition period, only the subgraph data service can be used as a verifier. This prevents an escape hatch for legacy allocation stake.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. Requirements: - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. Note that if `_maxThawingPeriod` changes the function will not revert if called with the same thawing period as the current one. 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 {HorizonStakeDeposited} 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 {HorizonStakeDeposited} event.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\"}},\"stakeToProvision(address,address,uint256)\":{\"details\":\"This function can be called by the service provider, by an authorized operator or by the verifier itself.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 {HorizonStakeDeposited} 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,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 {HorizonStakeLocked} event during the transition period. Emits a {HorizonStakeWithdrawn} 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\":{\"deprecated\":\"Deprecated parameter kept for backwards compatibility\",\"serviceProvider\":\"The service provider address\"},\"returns\":{\"_0\":\"The amount of tokens withdrawn\"}},\"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. Otherwise, the function will attempt to fulfill all thaw requests until the first one that is not yet expired is found.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\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"HorizonStakingCallerIsServiceProvider()\":[{\"notice\":\"Thrown when a service provider attempts to change their own operator access.\"}],\"HorizonStakingInsufficientDelegationTokens(uint256,uint256)\":[{\"notice\":\"Thrown when the minimum token amount required for delegation is not met.\"}],\"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.\"}],\"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.\"}],\"HorizonStakingInvalidThawRequestType()\":[{\"notice\":\"Thrown when using an invalid thaw request type.\"}],\"HorizonStakingInvalidThawingPeriod(uint64,uint64)\":[{\"notice\":\"Thrown when attempting to create a provision with an invalid thawing period.\"}],\"HorizonStakingInvalidVerifier(address)\":[{\"notice\":\"Thrown when attempting to create a provision with a verifier other than the subgraph data service. This restriction only applies during the transition 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.\"}],\"HorizonStakingLegacySlashFailed()\":[{\"notice\":\"Thrown when a legacy slash fails.\"}],\"HorizonStakingNoTokensToSlash()\":[{\"notice\":\"Thrown when there attempting to slash a provision with no tokens to slash.\"}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to operate on a provision.\"}],\"HorizonStakingNothingThawing()\":[{\"notice\":\"Thrown when attempting to fulfill a thaw request but there is nothing thawing.\"}],\"HorizonStakingNothingToWithdraw()\":[{\"notice\":\"Thrown when attempting to withdraw tokens that have not thawed (legacy undelegate).\"}],\"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.\"}],\"HorizonStakingTooManyThawRequests()\":[{\"notice\":\"Thrown when a service provider has too many thaw requests.\"}],\"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\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"notice\":\"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)\":{\"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()\":{\"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.\"},\"HorizonStakeDeposited(address,uint256)\":{\"notice\":\"Emitted when a service provider stakes tokens.\"},\"HorizonStakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when a service provider unstakes tokens during the transition period.\"},\"HorizonStakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when a service provider withdraws tokens during the transition period.\"},\"MaxThawingPeriodSet(uint64)\":{\"notice\":\"Emitted when the global maximum thawing period allowed for provisions is set.\"},\"OperatorSet(address,address,address,bool)\":{\"notice\":\"Emitted when an operator is allowed or denied by a service provider for a particular verifier\"},\"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.\"},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"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.\"},\"StakeDelegatedWithdrawn(address,address,uint256)\":{\"notice\":\"Emitted when `delegator` withdrew delegated `tokens` from `indexer` using `withdrawDelegated`.\"},\"StakeSlashed(address,uint256,uint256,address)\":{\"notice\":\"Emitted when `indexer` was slashed for a total of `tokens` amount. Tracks `reward` amount of tokens given to `beneficiary`.\"},\"ThawRequestCreated(uint8,address,address,address,uint256,uint64,bytes32,uint256)\":{\"notice\":\"Emitted when a thaw request is created.\"},\"ThawRequestFulfilled(uint8,bytes32,uint256,uint256,uint64,bool)\":{\"notice\":\"Emitted when a thaw request is fulfilled, meaning the stake is released.\"},\"ThawRequestsFulfilled(uint8,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,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,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 Deprecated, now enforced by each data service (verifier)\"},\"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 and rebate query fees to the indexer 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.\"},\"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.\"},\"getAllocationData(address)\":{\"notice\":\"Get allocation data to calculate rewards issuance\"},\"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.\"},\"getStakingExtension()\":{\"notice\":\"Get the address of the staking extension.\"},\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"},\"getSubgraphService()\":{\"notice\":\"Return the address of the subgraph data service.\"},\"getThawRequest(uint8,bytes32)\":{\"notice\":\"Gets a thaw request.\"},\"getThawRequestList(uint8,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(uint8,address,address,address)\":{\"notice\":\"Gets the amount of thawed tokens that can be releasedfor 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.\"},\"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\":\"(Legacy) Return true if operator is allowed for the service provider on the subgraph data service.\"},\"legacySlash(address,uint256,uint256,address)\":{\"notice\":\"Slash the indexer stake. Delegated tokens are not subject to slashing. Note that depending on the state of the indexer's stake, the slashed amount might be smaller than the requested slash amount. This can happen if the indexer has moved a significant part of their stake to a provision. Any outstanding slashing amount should be settled using Horizon's slash function {IHorizonStaking.slash}.\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"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}. Calling this function is a no-op if the new parameters are the same as the current ones.\"},\"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,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. Note that after the transition period if there are tokens still locked they will have to be withdrawn by calling {withdraw}.\"},\"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 tokens undelegated before horizon upgrade.\"},\"withdrawDelegated(address,address,uint256)\":{\"notice\":\"Withdraw undelegated tokens from a provision after thawing.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IHorizonStakingToolshed.sol\":\"IHorizonStakingToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/base/IMulticall.sol\":{\"keccak256\":\"0x229a773eba322776fd11fa9ef4d256f5405d4243a7eee9c776e9cc3943d5712a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c55cfe4a3ada03e97f5bf18d42e0a35504386617b2e7481b8c54c241aae9a5e9\",\"dweb:/ipfs/QmehvFTHm6BNPQZt5KMVttifEwfLZ3snWDdCx4PFEoAVoP\"]},\"contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0xd937edb011bce015702a25c6841a8dc3ffb47b4de56bc45f82af965b7e578ccc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e95d49c3e91a0f21b17a34bc85d29b56a1fcc6ed8d3a72db3d9a5baee94ecc10\",\"dweb:/ipfs/QmQAxear764tqcaSyXP7BQgxDk5GpazL4wZKdHzt1asWpm\"]},\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/horizon/IHorizonStaking.sol\":{\"keccak256\":\"0xca2c5615f3e9338cd8647f9e7c2336ebb141637041c9ab79e4f703077ca3334a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://444d7a887156bd5fc64a41050456bda7532b866168c745588e4a70c144eeb425\",\"dweb:/ipfs/Qma3x22x5VTYHndCDwiGBxrngN9Dktp5VAcLoEcNmFFYTf\"]},\"contracts/horizon/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x850aa13b9bb70a67ccaaab204ac65ebc89baebd6fb8307f2fd1aab74f0a7f94e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ebf855bcf49a9230b6dec7199446156d3139ea44fdb637a4fe746905c26b1715\",\"dweb:/ipfs/QmfPNPwiMCpn7oMsZR7UY9aFzVNjLKok3RuAfFEHLHPSPZ\"]},\"contracts/horizon/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0x10dc7645ddcc40f8958e66947b8141423c71ec99ed2cc657d3d419effc1f41d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c0effff4158c05eaf12661033c53fe920eb852f97e4cb572d0f6d565c7b808f\",\"dweb:/ipfs/QmRrSjDbMvdeKbJ6fy9Fu5riGWkeg6c2B3yHGd7A5FBrkM\"]},\"contracts/horizon/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd15f2faaf49110b04a0d815a80ff316e166873714464d158fc582f5a529b3853\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://17bc5978ed4aeaced53a3e17063d6d368ebbf425e4ee828d9987869e79fc65c3\",\"dweb:/ipfs/QmNXEAyZeWrGdt1Myb4EBHxWYW3qu6q1pK9hudmzzUJsV9\"]},\"contracts/horizon/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xb09fb2ddff97b5e34abb0271fa7693e5ade769ed174e350da0f71545b2c70060\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e908fc109f8610978dd47788e51e764bb80930c81fd2e32ea4fd7d8961a816ae\",\"dweb:/ipfs/QmbtR4G5haUPzgk3TTnX3p6DHh8STtXUKeFYhvG6fkhQcp\"]},\"contracts/horizon/internal/ILinkedList.sol\":{\"keccak256\":\"0x823aeadd74821b6a9f29a83f3278171896a3f24ff76cb45725a2a504125ccd46\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://01380fec7911ea62ebc1371dcd2d8b2b00dd10bae5af06365a04138795415cfa\",\"dweb:/ipfs/QmcY2H9moW5dB8GMXMp7GZrTR6nmKxdrSGybG8T8fU5b2b\"]},\"contracts/toolshed/IHorizonStakingToolshed.sol\":{\"keccak256\":\"0x3960c65a4dc9df32c76b46411d8767c193353d50e98460a42aa028f96e09c4d2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://732bcdf10cabae2b64c129b2d4c58a371e214443a4b00477633adda8012c4672\",\"dweb:/ipfs/QmaE4uFWaDATph1W4MB5btFnqUSTcgTLDGSMEUfVsjceJv\"]}},\"version\":1}"}},"contracts/toolshed/IL2CurationToolshed.sol":{"IL2CurationToolshed":{"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":"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":"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":"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":[{"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"}],"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","mintTaxFree(bytes32,uint256)":"3718896d","setCurationTaxPercentage(uint32)":"cd18119e","setCurationTokenMaster(address)":"9b4d9f33","setDefaultReserveRatio(uint32)":"cd0ad4a2","setMinimumCurationDeposit(uint256)":"6536fe32","setSubgraphService(address)":"93a90a1e","signalToTokens(bytes32,uint256)":"0faaf87f","subgraphService()":"26058249","tokensToSignal(bytes32,uint256)":"f049b900","tokensToSignalNoTax(bytes32,uint256)":"7a2a45b8","tokensToSignalToTokensNoTax(bytes32,uint256)":"69db11a1"}},"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\":\"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\":\"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\":\"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\":[{\"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\"}],\"devdoc\":{\"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\"}},\"mintTaxFree(bytes32,uint256)\":{\"details\":\"This function charges no tax and can only be called by GNS in specific scenarios (for now only during an L1-L2 transfer).\",\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment pool from where to mint signal\",\"tokensIn\":\"Amount of Graph Tokens to deposit\"},\"returns\":{\"_0\":\"Signal minted\"}},\"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\"}},\"setSubgraphService(address)\":{\"params\":{\"subgraphService\":\"Address of the SubgraphService contract\"}},\"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\"}},\"tokensToSignalNoTax(bytes32,uint256)\":{\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment for which to mint signal\",\"tokensIn\":\"Amount of tokens used to mint signal\"},\"returns\":{\"_0\":\"Amount of signal that can be bought\"}},\"tokensToSignalToTokensNoTax(bytes32,uint256)\":{\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment for which to mint signal\",\"tokensIn\":\"Amount of tokens used to mint signal\"},\"returns\":{\"_0\":\"Amount of tokens that would be recovered after minting and burning signal\"}}},\"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.\"},\"mintTaxFree(bytes32,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\"},\"setSubgraphService(address)\":{\"notice\":\"Set the subgraph service address.\"},\"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.\"},\"tokensToSignalNoTax(bytes32,uint256)\":{\"notice\":\"Calculate amount of signal that can be bought with tokens in a curation pool, without accounting for curation tax.\"},\"tokensToSignalToTokensNoTax(bytes32,uint256)\":{\"notice\":\"Calculate the amount of tokens that would be recovered if minting signal with the input tokens and then burning it. This can be used to compute rounding error. This function does not account for curation tax.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IL2CurationToolshed.sol\":\"IL2CurationToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0xe558980540bf81b04ffd780ca1f03d0fbd7217b1eab4d5c3d4c0bae2f9fcc1dd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://67390fd1633e569da7a7cbcd4f518dab06184a28f11db72484520ed40878f98c\",\"dweb:/ipfs/QmNSmNVUT9b4YyU2oa1ecWBMFz7yo4ADdUt27ZaBHZVMEz\"]},\"contracts/contracts/l2/curation/IL2Curation.sol\":{\"keccak256\":\"0x95c4c0ba2c00e6540bdc253fd6163a11ab75782ac34c1ad275877a88e7d87bf8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c09d37672d49e4ca7dfe9b29fa9cb58b00448f0443c4a975c511498265a218e9\",\"dweb:/ipfs/QmPMUEcYXR2p8bBwaVMKF9uXWo16xX2fhh5FfgsFB3cStw\"]},\"contracts/toolshed/IL2CurationToolshed.sol\":{\"keccak256\":\"0x1e059e0d3da77d7134698490a9bd632f8a5198e734779fd88f5f05c4a9d188f9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ceaec1ee3c08f4df99a3a43517b5203494067f6832f6ccd442e3922d273c9571\",\"dweb:/ipfs/QmcS1VWCMrseMhDYQqdRKEbV34YRcMxnPKwMziWCTfWqEk\"]}},\"version\":1}"}},"contracts/toolshed/IL2GNSToolshed.sol":{"IL2GNSToolshed":{"abi":[{"inputs":[],"name":"approveAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"nSignal","type":"uint256"},{"internalType":"uint256","name":"tokensOutMin","type":"uint256"}],"name":"burnSignal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"deprecateSubgraph","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"l2SubgraphID","type":"uint256"},{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"bytes32","name":"subgraphMetadata","type":"bytes32"},{"internalType":"bytes32","name":"versionMetadata","type":"bytes32"}],"name":"finishSubgraphTransferFromL1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"l1SubgraphID","type":"uint256"}],"name":"getAliasedL2SubgraphID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"address","name":"curator","type":"address"}],"name":"getCuratorSignal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"getLegacySubgraphKey","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"seqID","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"l2SubgraphID","type":"uint256"}],"name":"getUnaliasedL1SubgraphID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"isLegacySubgraph","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"isPublished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"tokensIn","type":"uint256"},{"internalType":"uint256","name":"nSignalOutMin","type":"uint256"}],"name":"mintSignal","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":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"nSignalIn","type":"uint256"}],"name":"nSignalToTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"nSignalIn","type":"uint256"}],"name":"nSignalToVSignal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"nextAccountSeqID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"bytes32","name":"versionMetadata","type":"bytes32"},{"internalType":"bytes32","name":"subgraphMetadata","type":"bytes32"}],"name":"publishNewSubgraph","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"bytes32","name":"subgraphDeploymentID","type":"bytes32"},{"internalType":"bytes32","name":"versionMetadata","type":"bytes32"}],"name":"publishNewVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"graphAccount","type":"address"},{"internalType":"uint8","name":"nameSystem","type":"uint8"},{"internalType":"bytes32","name":"nameIdentifier","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setDefaultName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"ownerTaxPercentage","type":"uint32"}],"name":"setOwnerTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"subgraphNFT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"subgraphSignal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"subgraphTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"tokensIn","type":"uint256"}],"name":"tokensToNSignal","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferSignal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"bytes32","name":"subgraphMetadata","type":"bytes32"}],"name":"updateSubgraphMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"},{"internalType":"uint256","name":"vSignalIn","type":"uint256"}],"name":"vSignalToNSignal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subgraphID","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"approveAll()":"380d0c08","burnSignal(uint256,uint256,uint256)":"7bd1b0bf","deprecateSubgraph(uint256)":"56ee0a85","finishSubgraphTransferFromL1(uint256,bytes32,bytes32,bytes32)":"d1a80612","getAliasedL2SubgraphID(uint256)":"ea0f2eba","getCuratorSignal(uint256,address)":"186722fa","getLegacySubgraphKey(uint256)":"14a76fdb","getUnaliasedL1SubgraphID(uint256)":"9c6c022b","isLegacySubgraph(uint256)":"d797f4bb","isPublished(uint256)":"7b156fb5","mintSignal(uint256,uint256,uint256)":"d8825386","multicall(bytes[])":"ac9650d8","nSignalToTokens(uint256,uint256)":"b43f6a02","nSignalToVSignal(uint256,uint256)":"d495f9a7","nextAccountSeqID(address)":"b2235056","onTokenTransfer(address,uint256,bytes)":"a4c0ed36","ownerOf(uint256)":"6352211e","publishNewSubgraph(bytes32,bytes32,bytes32)":"7ba95862","publishNewVersion(uint256,bytes32,bytes32)":"e1329732","setDefaultName(address,uint8,bytes32,string)":"cc2d23c7","setOwnerTaxPercentage(uint32)":"b78edf70","subgraphNFT()":"eec16b0e","subgraphSignal(uint256)":"be8f4920","subgraphTokens(uint256)":"4dbecf2f","tokensToNSignal(uint256,uint256)":"53f615c9","transferSignal(uint256,address,uint256)":"63bd3abe","updateSubgraphMetadata(uint256,bytes32)":"d916f277","vSignalToNSignal(uint256,uint256)":"a49a15f1","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"approveAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nSignal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensOutMin\",\"type\":\"uint256\"}],\"name\":\"burnSignal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"deprecateSubgraph\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2SubgraphID\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphMetadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"versionMetadata\",\"type\":\"bytes32\"}],\"name\":\"finishSubgraphTransferFromL1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l1SubgraphID\",\"type\":\"uint256\"}],\"name\":\"getAliasedL2SubgraphID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"curator\",\"type\":\"address\"}],\"name\":\"getCuratorSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"getLegacySubgraphKey\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"seqID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2SubgraphID\",\"type\":\"uint256\"}],\"name\":\"getUnaliasedL1SubgraphID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"isLegacySubgraph\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"isPublished\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nSignalOutMin\",\"type\":\"uint256\"}],\"name\":\"mintSignal\",\"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\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nSignalIn\",\"type\":\"uint256\"}],\"name\":\"nSignalToTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nSignalIn\",\"type\":\"uint256\"}],\"name\":\"nSignalToVSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"nextAccountSeqID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"versionMetadata\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphMetadata\",\"type\":\"bytes32\"}],\"name\":\"publishNewSubgraph\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"versionMetadata\",\"type\":\"bytes32\"}],\"name\":\"publishNewVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"graphAccount\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"nameSystem\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"nameIdentifier\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setDefaultName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"ownerTaxPercentage\",\"type\":\"uint32\"}],\"name\":\"setOwnerTaxPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subgraphNFT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"subgraphSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"subgraphTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensIn\",\"type\":\"uint256\"}],\"name\":\"tokensToNSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferSignal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphMetadata\",\"type\":\"bytes32\"}],\"name\":\"updateSubgraphMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vSignalIn\",\"type\":\"uint256\"}],\"name\":\"vSignalToNSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subgraphID\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burnSignal(uint256,uint256,uint256)\":{\"params\":{\"nSignal\":\"The amount of nSignal the nameCurator wants to burn\",\"subgraphID\":\"Subgraph ID\",\"tokensOutMin\":\"Expected minimum amount of tokens to receive\"}},\"deprecateSubgraph(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"}},\"finishSubgraphTransferFromL1(uint256,bytes32,bytes32,bytes32)\":{\"params\":{\"l2SubgraphID\":\"Subgraph ID in L2 (aliased from the L1 subgraph ID)\",\"subgraphDeploymentID\":\"Latest subgraph deployment to assign to the subgraph\",\"subgraphMetadata\":\"IPFS hash of the subgraph metadata\",\"versionMetadata\":\"IPFS hash of the version metadata\"}},\"getAliasedL2SubgraphID(uint256)\":{\"params\":{\"l1SubgraphID\":\"L1 subgraph ID\"},\"returns\":{\"_0\":\"L2 subgraph ID\"}},\"getCuratorSignal(uint256,address)\":{\"params\":{\"curator\":\"Curator address\",\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Amount of subgraph signal owned by a curator\"}},\"getLegacySubgraphKey(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"account\":\"Account that created the subgraph (or 0 if it's not a legacy subgraph)\",\"seqID\":\"Sequence number for the subgraph\"}},\"getUnaliasedL1SubgraphID(uint256)\":{\"params\":{\"l2SubgraphID\":\"L2 subgraph ID\"},\"returns\":{\"_0\":\"L1subgraph ID\"}},\"isLegacySubgraph(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Return true if subgraph is a legacy subgraph\"}},\"isPublished(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Return true if subgraph is currently published\"}},\"mintSignal(uint256,uint256,uint256)\":{\"params\":{\"nSignalOutMin\":\"Expected minimum amount of name signal to receive\",\"subgraphID\":\"Subgraph ID\",\"tokensIn\":\"The amount of tokens the nameCurator wants to deposit\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"nSignalToTokens(uint256,uint256)\":{\"params\":{\"nSignalIn\":\"Subgraph signal being exchanged for tokens\",\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Amount of tokens returned for an amount of subgraph signal\",\"_1\":\"Amount of version signal returned\"}},\"nSignalToVSignal(uint256,uint256)\":{\"params\":{\"nSignalIn\":\"Subgraph signal being exchanged for subgraph deployment signal\",\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Amount of subgraph deployment signal that can be returned\"}},\"onTokenTransfer(address,uint256,bytes)\":{\"params\":{\"amount\":\"Amount of tokens that were transferred\",\"data\":\"ABI-encoded callhook data\",\"from\":\"Token sender in L1\"}},\"ownerOf(uint256)\":{\"params\":{\"tokenID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Owner address\"}},\"publishNewSubgraph(bytes32,bytes32,bytes32)\":{\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment for the subgraph\",\"subgraphMetadata\":\"IPFS hash for the subgraph metadata\",\"versionMetadata\":\"IPFS hash for the subgraph version metadata\"}},\"publishNewVersion(uint256,bytes32,bytes32)\":{\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment ID of the new version\",\"subgraphID\":\"Subgraph ID\",\"versionMetadata\":\"IPFS hash for the subgraph version metadata\"}},\"setDefaultName(address,uint8,bytes32,string)\":{\"params\":{\"graphAccount\":\"Account that is setting its name\",\"name\":\"The name being set as default\",\"nameIdentifier\":\"The unique identifier that is used to identify the name in the system\",\"nameSystem\":\"Name system account already has ownership of a name in\"}},\"setOwnerTaxPercentage(uint32)\":{\"params\":{\"ownerTaxPercentage\":\"Owner tax percentage\"}},\"subgraphSignal(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Total signal on the subgraph\"}},\"subgraphTokens(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"},\"returns\":{\"_0\":\"Total tokens on the subgraph\"}},\"tokensToNSignal(uint256,uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\",\"tokensIn\":\"Tokens being exchanged for subgraph signal\"},\"returns\":{\"_0\":\"Amount of subgraph signal that can be bought\",\"_1\":\"Amount of version signal that can be bought\",\"_2\":\"Amount of curation tax\"}},\"transferSignal(uint256,address,uint256)\":{\"params\":{\"amount\":\"The amount of nSignal to transfer\",\"recipient\":\"Address to send the signal to\",\"subgraphID\":\"Subgraph ID\"}},\"updateSubgraphMetadata(uint256,bytes32)\":{\"params\":{\"subgraphID\":\"Subgraph ID\",\"subgraphMetadata\":\"IPFS hash for the subgraph metadata\"}},\"vSignalToNSignal(uint256,uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\",\"vSignalIn\":\"Amount of subgraph deployment signal to exchange for subgraph signal\"},\"returns\":{\"_0\":\"Amount of subgraph signal that can be bought\"}},\"withdraw(uint256)\":{\"params\":{\"subgraphID\":\"Subgraph ID\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveAll()\":{\"notice\":\"Approve curation contract to pull funds.\"},\"burnSignal(uint256,uint256,uint256)\":{\"notice\":\"Burn signal for a subgraph and return the GRT.\"},\"deprecateSubgraph(uint256)\":{\"notice\":\"Deprecate a subgraph. The bonding curve is destroyed, the vSignal is burned, and the GNS contract holds the GRT from burning the vSignal, which all curators can withdraw manually. Can only be done by the subgraph owner.\"},\"finishSubgraphTransferFromL1(uint256,bytes32,bytes32,bytes32)\":{\"notice\":\"Finish a subgraph transfer from L1. The subgraph must have been previously sent through the bridge using the sendSubgraphToL2 function on L1GNS.\"},\"getAliasedL2SubgraphID(uint256)\":{\"notice\":\"Return the aliased L2 subgraph ID from a transferred L1 subgraph ID\"},\"getCuratorSignal(uint256,address)\":{\"notice\":\"Get the amount of subgraph signal a curator has.\"},\"getLegacySubgraphKey(uint256)\":{\"notice\":\"Returns account and sequence ID for a legacy subgraph (created before subgraph NFTs).\"},\"getUnaliasedL1SubgraphID(uint256)\":{\"notice\":\"Return the unaliased L1 subgraph ID from a transferred L2 subgraph ID\"},\"isLegacySubgraph(uint256)\":{\"notice\":\"Return whether a subgraph is a legacy subgraph (created before subgraph NFTs).\"},\"isPublished(uint256)\":{\"notice\":\"Return whether a subgraph is published.\"},\"mintSignal(uint256,uint256,uint256)\":{\"notice\":\"Deposit GRT into a subgraph and mint signal.\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"nSignalToTokens(uint256,uint256)\":{\"notice\":\"Calculate tokens returned for an amount of subgraph signal.\"},\"nSignalToVSignal(uint256,uint256)\":{\"notice\":\"Calculate subgraph deployment signal to be returned for an amount of subgraph signal.\"},\"onTokenTransfer(address,uint256,bytes)\":{\"notice\":\"Receive tokens with a callhook from the bridge\"},\"ownerOf(uint256)\":{\"notice\":\"Return the owner of a subgraph.\"},\"publishNewSubgraph(bytes32,bytes32,bytes32)\":{\"notice\":\"Publish a new subgraph.\"},\"publishNewVersion(uint256,bytes32,bytes32)\":{\"notice\":\"Publish a new version of an existing subgraph.\"},\"setDefaultName(address,uint8,bytes32,string)\":{\"notice\":\"Allows a graph account to set a default name\"},\"setOwnerTaxPercentage(uint32)\":{\"notice\":\"Set the owner fee percentage. This is used to prevent a subgraph owner to drain all the name curators tokens while upgrading or deprecating and is configurable in parts per million.\"},\"subgraphSignal(uint256)\":{\"notice\":\"Return the total signal on the subgraph.\"},\"subgraphTokens(uint256)\":{\"notice\":\"Return the total tokens on the subgraph at current value.\"},\"tokensToNSignal(uint256,uint256)\":{\"notice\":\"Calculate subgraph signal to be returned for an amount of tokens.\"},\"transferSignal(uint256,address,uint256)\":{\"notice\":\"Move subgraph signal from sender to `recipient`\"},\"updateSubgraphMetadata(uint256,bytes32)\":{\"notice\":\"Allows a subgraph owner to update the metadata of a subgraph they have published\"},\"vSignalToNSignal(uint256,uint256)\":{\"notice\":\"Calculate subgraph signal to be returned for an amount of subgraph deployment signal.\"},\"withdraw(uint256)\":{\"notice\":\"Withdraw tokens from a deprecated subgraph. When the subgraph is deprecated, any curator can call this function and withdraw the GRT they are entitled for its original deposit\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IL2GNSToolshed.sol\":\"IL2GNSToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/base/IMulticall.sol\":{\"keccak256\":\"0x229a773eba322776fd11fa9ef4d256f5405d4243a7eee9c776e9cc3943d5712a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c55cfe4a3ada03e97f5bf18d42e0a35504386617b2e7481b8c54c241aae9a5e9\",\"dweb:/ipfs/QmehvFTHm6BNPQZt5KMVttifEwfLZ3snWDdCx4PFEoAVoP\"]},\"contracts/contracts/discovery/IGNS.sol\":{\"keccak256\":\"0x0472e68aa20aa0d4eb6b3264bb8cc781ff00b5a8abd66532d4482b6dc754ba07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3f8d4fbef50c936591abbd75af563381b9c6b34b4d0b50b83b445b964affddb9\",\"dweb:/ipfs/QmYRnLX3pBQCwQ8LwowZybvV6tAwaiNJbkp991RRAKXBTJ\"]},\"contracts/contracts/gateway/ICallhookReceiver.sol\":{\"keccak256\":\"0x28a1eb7c540b648665b036dfb17d4b19264a23e2e34b6d3888763a826e19fcfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://96de7cf683662f68d2e5105a8f322c06c2a71e6fe5d7d5e47b41fb98be55aef7\",\"dweb:/ipfs/QmPkaFVtohPWBMgwNcQriQgPGWNxQY774HjY73zDDKeKMM\"]},\"contracts/contracts/l2/discovery/IL2GNS.sol\":{\"keccak256\":\"0x0fcf26a637479514eeda41ef1af880463748c47ca199f78aa4645ec0aee0da73\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://319aca57d9a55921874b9573ed45d0b557cdb6f176ceafdd700545c6cba72300\",\"dweb:/ipfs/QmRHta1XaFDYqnyN5BmJpdmaHiJgRFe9cqepFcEphdbu4X\"]},\"contracts/toolshed/IL2GNSToolshed.sol\":{\"keccak256\":\"0x68f40a26e68a3df7d5d9839700c935a108041235e5c65e04ada888d50d09a3b5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://100da95af37e4c113fa91525c27f45c98eaf1e01b2bb80af89eeed96130b19c5\",\"dweb:/ipfs/QmcDVi5DFyxkHndYLZmTeNsXwx7H4dZ1em28XRasUxkhVK\"]}},\"version\":1}"}},"contracts/toolshed/IPaymentsEscrowToolshed.sol":{"IPaymentsEscrowToolshed":{"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":"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":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensThawing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"name":"CancelThaw","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":"enum IGraphPayments.PaymentTypes","name":"paymentType","type":"uint8"},{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"collector","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiverDestination","type":"address"}],"name":"EscrowCollected","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"},{"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":"WITHDRAW_ESCROW_THAWING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelThaw","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":"dataServiceCut","type":"uint256"},{"internalType":"address","name":"receiverDestination","type":"address"}],"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":[{"components":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"tokensThawing","type":"uint256"},{"internalType":"uint256","name":"thawEndTimestamp","type":"uint256"}],"internalType":"struct IPaymentsEscrow.EscrowAccount","name":"","type":"tuple"}],"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":"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"},{"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":{"MAX_WAIT_PERIOD()":"b2168b6b","WITHDRAW_ESCROW_THAWING_PERIOD()":"7b8ae6cf","cancelThaw(address,address)":"b1d07de4","collect(uint8,address,address,uint256,address,uint256,address)":"1230fa3e","deposit(address,address,uint256)":"8340f549","depositTo(address,address,address,uint256)":"72eb521e","escrowAccounts(address,address,address)":"7a8df28b","getBalance(address,address,address)":"d6bd603c","initialize()":"8129fc1c","thaw(address,address,uint256)":"f93f1cd0","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\":\"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\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"CancelThaw\",\"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\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiverDestination\",\"type\":\"address\"}],\"name\":\"EscrowCollected\",\"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\"},{\"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\":\"WITHDRAW_ESCROW_THAWING_PERIOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelThaw\",\"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\":\"dataServiceCut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiverDestination\",\"type\":\"address\"}],\"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\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct IPaymentsEscrow.EscrowAccount\",\"name\":\"\",\"type\":\"tuple\"}],\"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\":\"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\"},{\"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\"}}],\"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\":{\"CancelThaw(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 was ending\",\"tokensThawing\":\"The amount of tokens that were being thawed\"}},\"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(uint8,address,address,address,uint256,address)\":{\"params\":{\"collector\":\"The address of the collector\",\"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\",\"receiverDestination\":\"The address where the receiver's payment should be sent.\",\"tokens\":\"The amount of tokens collected\"}},\"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\"}},\"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\":{\"MAX_WAIT_PERIOD()\":{\"returns\":{\"_0\":\"The maximum thawing period in seconds\"}},\"WITHDRAW_ESCROW_THAWING_PERIOD()\":{\"returns\":{\"_0\":\"The thawing period in seconds\"}},\"cancelThaw(address,address)\":{\"details\":\"Requirements: - The payer must be thawing funds Emits a {CancelThaw} event.\",\"params\":{\"collector\":\"The address of the collector\",\"receiver\":\"The address of the receiver\"}},\"collect(uint8,address,address,uint256,address,uint256,address)\":{\"params\":{\"dataService\":\"The address of the data service\",\"dataServiceCut\":\"The data service cut in PPM that {GraphPayments} should send\",\"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\",\"receiverDestination\":\"The address where the receiver's payment should be sent.\",\"tokens\":\"The amount of tokens to collect\"}},\"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\"},\"returns\":{\"_0\":\"The balance of the payer-collector-receiver tuple\"}},\"thaw(address,address,uint256)\":{\"details\":\"Requirements: - `tokens` must be less than or equal to the available balance Emits a {Thaw} event.\",\"params\":{\"collector\":\"The address of the collector\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens to thaw\"}},\"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\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"PaymentsEscrowInconsistentCollection(uint256,uint256,uint256)\":[{\"notice\":\"Thrown when the contract balance is not consistent with the collection amount\"}],\"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\":{\"CancelThaw(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a payer cancels an escrow thawing\"},\"Deposit(address,address,address,uint256)\":{\"notice\":\"Emitted when a payer deposits funds into the escrow for a payer-collector-receiver tuple\"},\"EscrowCollected(uint8,address,address,address,uint256,address)\":{\"notice\":\"Emitted when a collector collects funds from the escrow for a payer-collector-receiver tuple\"},\"Thaw(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a payer thaws funds from the escrow for a payer-collector-receiver tuple\"},\"Withdraw(address,address,address,uint256)\":{\"notice\":\"Emitted when a payer withdraws funds from the escrow for a payer-collector-receiver tuple\"}},\"kind\":\"user\",\"methods\":{\"MAX_WAIT_PERIOD()\":{\"notice\":\"The maximum thawing period for escrow funds withdrawal\"},\"WITHDRAW_ESCROW_THAWING_PERIOD()\":{\"notice\":\"The thawing period for escrow funds withdrawal\"},\"cancelThaw(address,address)\":{\"notice\":\"Cancels the thawing of escrow from a payer-collector-receiver's escrow account.\"},\"collect(uint8,address,address,uint256,address,uint256,address)\":{\"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. Emits an {EscrowCollected} event\"},\"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 This function will return 0 if the current balance is less than the amount of funds being thawed.\"},\"initialize()\":{\"notice\":\"Initialize the contract\"},\"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. Note that repeated calls to this function will overwrite the previous thawing amount and reset the thawing period.\"},\"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.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IPaymentsEscrowToolshed.sol\":\"IPaymentsEscrowToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/horizon/IPaymentsEscrow.sol\":{\"keccak256\":\"0xe1e96fbd174df4b238486e55a53631febddbee58b392a5db9b7c5ad6c7048cf0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5badee627fd83df7c1823cb8ba2a92172d0c14cf320d55d06e6336efca21ebf\",\"dweb:/ipfs/QmSJL8S5hfq81zajFb3E8bhw53TsuNNK97WEpVQejMoZhv\"]},\"contracts/toolshed/IPaymentsEscrowToolshed.sol\":{\"keccak256\":\"0x275fd7eb34188b1a8d59b1aec1f071a48e935f47eff972407093349f62a6659c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6b732ab2fd0ed958a1dcbec3fdcf42db6909529418200bd50f4d9445272c1996\",\"dweb:/ipfs/QmQFH39m7iG7PSNRRyTu7AmSVwHtZKs8SsQXiFWifmdjG1\"]}},\"version\":1}"}},"contracts/toolshed/IRewardsManagerToolshed.sol":{"IRewardsManagerToolshed":{"abi":[{"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":"HorizonRewardsAssigned","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":true,"internalType":"address","name":"oldSubgraphService","type":"address"},{"indexed":true,"internalType":"address","name":"newSubgraphService","type":"address"}],"name":"SubgraphServiceSet","type":"event"},{"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":"rewardsIssuer","type":"address"},{"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":"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":"subgraphService","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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,address)":"779bcb9b","isDenied(bytes32)":"e820e284","onSubgraphAllocationUpdate(bytes32)":"eeac3e0e","onSubgraphSignalUpdate(bytes32)":"1d1c2fec","setDenied(bytes32,bool)":"1324a506","setIssuancePerBlock(uint256)":"1156bdc1","setMinimumSubgraphSignal(uint256)":"4bbfc1c5","setSubgraphAvailabilityOracle(address)":"0903c094","setSubgraphService(address)":"93a90a1e","subgraphService()":"26058249","takeRewards(address)":"db750926","updateAccRewardsPerSignal()":"c7d1117d"}},"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\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"HorizonRewardsAssigned\",\"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\":true,\"internalType\":\"address\",\"name\":\"oldSubgraphService\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newSubgraphService\",\"type\":\"address\"}],\"name\":\"SubgraphServiceSet\",\"type\":\"event\"},{\"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\":\"rewardsIssuer\",\"type\":\"address\"},{\"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\":\"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\":\"subgraphService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":{\"events\":{\"HorizonRewardsAssigned(address,address,uint256)\":{\"details\":\"We use the Horizon prefix to change the event signature which makes network subgraph development much easier\"},\"RewardsAssigned(address,address,uint256)\":{\"details\":\"Emitted when rewards are assigned to an indexer.\"}},\"kind\":\"dev\",\"methods\":{\"calcRewards(uint256,uint256)\":{\"params\":{\"accRewardsPerAllocatedToken\":\"The accumulated rewards per allocated token\",\"tokens\":\"The number of tokens allocated\"},\"returns\":{\"_0\":\"The calculated rewards amount\"}},\"getAccRewardsForSubgraph(bytes32)\":{\"params\":{\"subgraphDeploymentID\":\"The subgraph deployment ID\"},\"returns\":{\"_0\":\"The accumulated rewards for the subgraph\"}},\"getAccRewardsPerAllocatedToken(bytes32)\":{\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment\"},\"returns\":{\"_0\":\"Accumulated rewards per allocated token for the subgraph\",\"_1\":\"Accumulated rewards for subgraph\"}},\"getAccRewardsPerSignal()\":{\"returns\":{\"_0\":\"Currently accumulated rewards per signal\"}},\"getNewRewardsPerSignal()\":{\"returns\":{\"_0\":\"newly accrued rewards per signal since last update\"}},\"getRewards(address,address)\":{\"params\":{\"allocationID\":\"Allocation\",\"rewardsIssuer\":\"The rewards issuer contract\"},\"returns\":{\"_0\":\"Rewards amount for an allocation\"}},\"isDenied(bytes32)\":{\"params\":{\"subgraphDeploymentID\":\"The subgraph deployment ID to check\"},\"returns\":{\"_0\":\"True if the subgraph is denied, false otherwise\"}},\"onSubgraphAllocationUpdate(bytes32)\":{\"details\":\"Must be called before allocation on a subgraph changes. Hook called from the Staking contract on allocate() and close()\",\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment\"},\"returns\":{\"_0\":\"Accumulated rewards per allocated token for a subgraph\"}},\"onSubgraphSignalUpdate(bytes32)\":{\"details\":\"Must be called before `signalled GRT` on a subgraph changes. Hook called from the Curation contract on mint() and burn()\",\"params\":{\"subgraphDeploymentID\":\"Subgraph deployment\"},\"returns\":{\"_0\":\"Accumulated rewards for subgraph\"}},\"setDenied(bytes32,bool)\":{\"params\":{\"deny\":\"True to deny, false to allow\",\"subgraphDeploymentID\":\"The subgraph deployment ID\"}},\"setIssuancePerBlock(uint256)\":{\"params\":{\"issuancePerBlock\":\"The amount of tokens to issue per block\"}},\"setMinimumSubgraphSignal(uint256)\":{\"details\":\"Can be set to zero which means that this feature is not being used\",\"params\":{\"minimumSubgraphSignal\":\"Minimum signaled tokens\"}},\"setSubgraphAvailabilityOracle(address)\":{\"params\":{\"subgraphAvailabilityOracle\":\"The address of the subgraph availability oracle\"}},\"setSubgraphService(address)\":{\"params\":{\"subgraphService\":\"Address of the subgraph service contract\"}},\"takeRewards(address)\":{\"details\":\"This function can only be called by the Staking contract. This function will mint the necessary tokens to reward based on the inflation calculation.\",\"params\":{\"allocationID\":\"Allocation\"},\"returns\":{\"_0\":\"Assigned rewards amount\"}},\"updateAccRewardsPerSignal()\":{\"details\":\"Must be called before `issuancePerBlock` or `total signalled GRT` changes. Called from the Curation contract on mint() and burn()\",\"returns\":{\"_0\":\"Accumulated rewards per signal\"}}},\"version\":1},\"userdoc\":{\"events\":{\"HorizonRewardsAssigned(address,address,uint256)\":{\"notice\":\"Emitted when rewards are assigned to an indexer (Horizon version)\"},\"RewardsDenied(address,address)\":{\"notice\":\"Emitted when rewards are denied to an indexer\"},\"RewardsDenylistUpdated(bytes32,uint256)\":{\"notice\":\"Emitted when a subgraph is denied for claiming rewards\"},\"SubgraphServiceSet(address,address)\":{\"notice\":\"Emitted when the subgraph service is set\"}},\"kind\":\"user\",\"methods\":{\"calcRewards(uint256,uint256)\":{\"notice\":\"Calculate rewards based on tokens and accumulated rewards per allocated token\"},\"getAccRewardsForSubgraph(bytes32)\":{\"notice\":\"Get the accumulated rewards for a specific subgraph\"},\"getAccRewardsPerAllocatedToken(bytes32)\":{\"notice\":\"Gets the accumulated rewards per allocated token for the subgraph\"},\"getAccRewardsPerSignal()\":{\"notice\":\"Gets the currently accumulated rewards per signal\"},\"getNewRewardsPerSignal()\":{\"notice\":\"Gets the issuance of rewards per signal since last updated\"},\"getRewards(address,address)\":{\"notice\":\"Calculate current rewards for a given allocation on demand\"},\"isDenied(bytes32)\":{\"notice\":\"Check if a subgraph deployment is denied\"},\"onSubgraphAllocationUpdate(bytes32)\":{\"notice\":\"Triggers an update of rewards for a subgraph\"},\"onSubgraphSignalUpdate(bytes32)\":{\"notice\":\"Triggers an update of rewards for a subgraph\"},\"setDenied(bytes32,bool)\":{\"notice\":\"Set the denied status for a subgraph deployment\"},\"setIssuancePerBlock(uint256)\":{\"notice\":\"Set the issuance per block for rewards distribution\"},\"setMinimumSubgraphSignal(uint256)\":{\"notice\":\"Sets the minimum signaled tokens on a subgraph to start accruing rewards\"},\"setSubgraphAvailabilityOracle(address)\":{\"notice\":\"Set the subgraph availability oracle address\"},\"setSubgraphService(address)\":{\"notice\":\"Set the subgraph service address\"},\"takeRewards(address)\":{\"notice\":\"Pull rewards from the contract for a particular allocation\"},\"updateAccRewardsPerSignal()\":{\"notice\":\"Updates the accumulated rewards per signal and save checkpoint block number\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IRewardsManagerToolshed.sol\":\"IRewardsManagerToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0xfe6d73832d6f1b4b237f42d56a28f3d4a38c338c075b4bc9c9144738ece67f59\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://75dc9b424c57ef8b354bc94b217d8d9703ce7bdcb9270425d0ed4de2865c9fd3\",\"dweb:/ipfs/QmczzdGxLwf5rxUNXSu2FkUKE8PjUrJF2kG8Ck7XqqQjEM\"]},\"contracts/toolshed/IRewardsManagerToolshed.sol\":{\"keccak256\":\"0x2da0452c279c57abc12df44772221ee15f2d05a37e017b35706a8006da358fa8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1553b0e16f2a14a5d85c1512994eaaac283c6e1cc72f2e0ee832c930173a406a\",\"dweb:/ipfs/QmPN632mdbyhzMYi4vonSknRDs8GEYEeaBk6ikAyeV2iE2\"]}},\"version\":1}"}},"contracts/toolshed/IServiceRegistryToolshed.sol":{"IServiceRegistryToolshed":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":false,"internalType":"string","name":"url","type":"string"},{"indexed":false,"internalType":"string","name":"geohash","type":"string"}],"name":"ServiceRegistered","type":"event"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"isRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"url","type":"string"},{"internalType":"string","name":"geohash","type":"string"}],"name":"register","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"},{"internalType":"string","name":"url","type":"string"},{"internalType":"string","name":"geohash","type":"string"}],"name":"registerFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"services","outputs":[{"internalType":"string","name":"url","type":"string"},{"internalType":"string","name":"geoHash","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unregister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"unregisterFor","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"isRegistered(address)":"c3c5a547","register(string,string)":"3ffbd47f","registerFor(address,string,string)":"cc02d54e","services(address)":"6d966d01","unregister()":"e79a198f","unregisterFor(address)":"4d2e54a8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"geohash\",\"type\":\"string\"}],\"name\":\"ServiceRegistered\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"geohash\",\"type\":\"string\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"geohash\",\"type\":\"string\"}],\"name\":\"registerFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"services\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"geoHash\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unregister\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"unregisterFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isRegistered(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"True if the indexer service is registered\"}},\"register(string,string)\":{\"params\":{\"geohash\":\"Geohash of the indexer service location\",\"url\":\"URL of the indexer service\"}},\"registerFor(address,string,string)\":{\"params\":{\"geohash\":\"Geohash of the indexer service location\",\"indexer\":\"Address of the indexer\",\"url\":\"URL of the indexer service\"}},\"services(address)\":{\"details\":\"Note that this storage getter actually returns a ISubgraphService.IndexerService struct, but ethers v6 is not      good at dealing with dynamic types on return values.\",\"params\":{\"indexer\":\"The address of the indexer\"},\"returns\":{\"geoHash\":\"The indexer's geo location, expressed as a geo hash\",\"url\":\"The URL where the indexer can be reached at for queries\"}},\"unregisterFor(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isRegistered(address)\":{\"notice\":\"Return the registration status of an indexer service\"},\"register(string,string)\":{\"notice\":\"Register an indexer service\"},\"registerFor(address,string,string)\":{\"notice\":\"Register an indexer service\"},\"services(address)\":{\"notice\":\"Gets the indexer registrationdetails\"},\"unregister()\":{\"notice\":\"Unregister an indexer service\"},\"unregisterFor(address)\":{\"notice\":\"Unregister an indexer service\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/IServiceRegistryToolshed.sol\":\"IServiceRegistryToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/discovery/IServiceRegistry.sol\":{\"keccak256\":\"0x54adff0a57ef9c2185bf5a0c59318b9f6f06a5c59734ab22d337d87d460e1bb3\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ab6cc88217d13b8f1110160fb23a24d2bc651aaffedc42c516128b70ec101fda\",\"dweb:/ipfs/QmZTCknP8nSw4vpuDeV8bCXhQERzhqJ5VvVNacdgGc3QJx\"]},\"contracts/toolshed/IServiceRegistryToolshed.sol\":{\"keccak256\":\"0x7fa4c0af6691db7b68ce8a9b5aee7ec36e64f0678a7e8febaa82c342cf88f3fa\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://003a9784c6da73f301765c3209ceb4b50a6667758214f872a01bc994576eff27\",\"dweb:/ipfs/QmXxzKFxT1CoheaeQhoBgVZTv45QKds9ntokEzodmfABVh\"]}},\"version\":1}"}},"contracts/toolshed/ISubgraphServiceToolshed.sol":{"ISubgraphServiceToolshed":{"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":"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":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"DataServicePausablePauseGuardianNoChange","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"address","name":"allocationId","type":"address"}],"name":"LegacyAllocationAlreadyExists","type":"error"},{"inputs":[{"internalType":"address","name":"allocationId","type":"address"}],"name":"LegacyAllocationDoesNotExist","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","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"}],"name":"SubgraphServiceInconsistentCollection","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":"bytes32","name":"collectionId","type":"bytes32"}],"name":"SubgraphServiceInvalidCollectionId","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"},{"indexed":false,"internalType":"bool","name":"forceClosed","type":"bool"}],"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"},{"indexed":false,"internalType":"uint256","name":"currentEpoch","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":[{"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":"bytes","name":"poiMetadata","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"currentEpoch","type":"uint256"}],"name":"IndexingRewardsCollected","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"PauseGuardianSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"indexer","type":"address"},{"indexed":true,"internalType":"address","name":"paymentsDestination","type":"address"}],"name":"PaymentsDestinationSet","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":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"allocationId","type":"address"},{"indexed":false,"internalType":"bytes32","name":"subgraphDeploymentId","type":"bytes32"},{"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"},{"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":"indexer","type":"address"}],"name":"allocationProvisionTracker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"allocationId","type":"address"}],"name":"closeStaleAllocation","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":"curationFeesCut","outputs":[{"internalType":"uint256","name":"","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":"indexer","type":"address"}],"name":"feesProvisionTracker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"createdAtEpoch","type":"uint256"}],"internalType":"struct IAllocation.State","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCuration","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDelegationRatio","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDisputeManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGraphTallyCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"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 ILegacyAllocation.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":"indexer","type":"address"}],"name":"indexers","outputs":[{"internalType":"string","name":"url","type":"string"},{"internalType":"string","name":"geoHash","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"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":"isOverAllocated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPOIStaleness","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":"","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"}],"name":"paymentsDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"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":"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":"paymentsDestination","type":"address"}],"name":"setPaymentsDestination","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":[],"name":"stakeToFeesRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","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","allocationProvisionTracker(address)":"6234e216","closeStaleAllocation(address)":"ec9c218d","collect(address,uint8,bytes)":"b15d2a2c","curationFeesCut()":"138dea08","encodeAllocationProof(address,address)":"ce56c98b","feesProvisionTracker(address)":"cbe5f3f2","getAllocation(address)":"0e022923","getCuration()":"c0f47497","getDelegationRatio()":"1ebb7c30","getDisputeManager()":"db9bee46","getGraphTallyCollector()":"ebf6ddaf","getLegacyAllocation(address)":"6d9a3951","getProvisionTokensRange()":"819ba366","getThawingPeriodRange()":"71ce020a","getVerifierCutRange()":"482468b7","indexers(address)":"4f793cdc","initialize(address,uint256,uint32,uint256)":"c84a5ef3","isOverAllocated(address)":"ba38f67d","maxPOIStaleness()":"85e82baf","migrateLegacyAllocation(address,address,bytes32)":"7dfe6d28","multicall(bytes[])":"ac9650d8","owner()":"8da5cb5b","pause()":"8456cb59","pauseGuardians(address)":"9384e078","paused()":"5c975abb","paymentsDestination(address)":"07e736d8","register(address,bytes)":"24b8fbf6","releaseStake(uint256)":"45f54485","renounceOwnership()":"715018a6","resizeAllocation(address,address,uint256)":"81e777a7","setCurationCut(uint256)":"7e89bac3","setDelegationRatio(uint32)":"1dd42f60","setMaxPOIStaleness(uint256)":"7aa31bce","setMinimumProvisionTokens(uint256)":"832bc923","setPauseGuardian(address,bool)":"35577962","setPaymentsDestination(address)":"6ccec5b8","setStakeToFeesRatio(uint256)":"e6f50054","slash(address,bytes)":"cb8347fe","stakeToFeesRatio()":"d07a7a84","startService(address,bytes)":"dedf6726","stopService(address,bytes)":"8180083b","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a"}},"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\":\"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\":\"account\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"DataServicePausablePauseGuardianNoChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"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\"}],\"name\":\"SubgraphServiceInconsistentCollection\",\"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\":\"bytes32\",\"name\":\"collectionId\",\"type\":\"bytes32\"}],\"name\":\"SubgraphServiceInvalidCollectionId\",\"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\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"forceClosed\",\"type\":\"bool\"}],\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"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\":[{\"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\":\"bytes\",\"name\":\"poiMetadata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"type\":\"uint256\"}],\"name\":\"IndexingRewardsCollected\",\"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\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"PauseGuardianSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymentsDestination\",\"type\":\"address\"}],\"name\":\"PaymentsDestinationSet\",\"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\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"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\"},{\"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\":\"indexer\",\"type\":\"address\"}],\"name\":\"allocationProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"closeStaleAllocation\",\"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\":\"curationFeesCut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"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\":\"indexer\",\"type\":\"address\"}],\"name\":\"feesProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"createdAtEpoch\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllocation.State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCuration\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputeManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGraphTallyCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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 ILegacyAllocation.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\":\"indexer\",\"type\":\"address\"}],\"name\":\"indexers\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"geoHash\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"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\":\"isOverAllocated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPOIStaleness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"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\":\"\",\"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\"}],\"name\":\"paymentsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":[],\"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\":\"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\":\"paymentsDestination\",\"type\":\"address\"}],\"name\":\"setPaymentsDestination\",\"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\":[],\"name\":\"stakeToFeesRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"DataServiceFeesClaimNotFound(bytes32)\":[{\"params\":{\"claimId\":\"The id of the stake claim\"}}],\"DataServicePausableNotPauseGuardian(address)\":[{\"params\":{\"account\":\"The address of the pause guardian\"}}],\"DataServicePausablePauseGuardianNoChange(address,bool)\":[{\"params\":{\"account\":\"The address of the pause guardian\",\"allowed\":\"The allowed status 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.\"}],\"LegacyAllocationAlreadyExists(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"LegacyAllocationDoesNotExist(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"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)\":[{\"params\":{\"balanceAfter\":\"The contract GRT balance after the collection\",\"balanceBefore\":\"The contract GRT balance before the collection\"}}],\"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\"}}],\"SubgraphServiceInvalidCollectionId(bytes32)\":[{\"params\":{\"collectionId\":\"The collectionId\"}}],\"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\"}},\"PauseGuardianSet(address,bool)\":{\"params\":{\"account\":\"The address of the pause guardian\",\"allowed\":\"The allowed status of the pause guardian\"}},\"PaymentsDestinationSet(address,address)\":{\"params\":{\"indexer\":\"The address of the indexer\",\"paymentsDestination\":\"The address where payments should be sent\"}},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"QueryFeesCollected(address,address,address,bytes32,uint256,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"payer\":\"The address paying for the query fees\",\"serviceProvider\":\"The address of the service provider\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"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.\"}},\"allocationProvisionTracker(address)\":{\"params\":{\"indexer\":\"The address of the indexer\"},\"returns\":{\"_0\":\"The allocation provision tracker\"}},\"closeStaleAllocation(address)\":{\"details\":\"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 - Allocation cannot be altruistic Emits a {AllocationClosed} event.\",\"params\":{\"allocationId\":\"The id of the allocation\"}},\"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}. Emits a {ServicePaymentCollected} event. 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.\",\"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.\"}},\"curationFeesCut()\":{\"returns\":{\"_0\":\"The curation fees cut\"}},\"encodeAllocationProof(address,address)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\"},\"returns\":{\"_0\":\"The encoded allocation proof\"}},\"feesProvisionTracker(address)\":{\"params\":{\"indexer\":\"The address of the indexer\"},\"returns\":{\"_0\":\"The fees provision tracker\"}},\"getAllocation(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"},\"returns\":{\"_0\":\"The allocation details\"}},\"getCuration()\":{\"returns\":{\"_0\":\"The address of the curation contract\"}},\"getDelegationRatio()\":{\"returns\":{\"_0\":\"The delegation ratio\"}},\"getDisputeManager()\":{\"returns\":{\"_0\":\"The address of the dispute manager\"}},\"getGraphTallyCollector()\":{\"returns\":{\"_0\":\"The address of the graph tally collector\"}},\"getLegacyAllocation(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"},\"returns\":{\"_0\":\"The legacy allocation details\"}},\"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\"}},\"indexers(address)\":{\"details\":\"Note that this storage getter actually returns a ISubgraphService.Indexer struct, but ethers v6 is not      good at dealing with dynamic types on return values.\",\"params\":{\"indexer\":\"The address of the indexer\"},\"returns\":{\"geoHash\":\"The indexer's geo location, expressed as a geo hash\",\"url\":\"The URL where the indexer can be reached at for queries\"}},\"initialize(address,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\",\"owner\":\"The owner of the contract\",\"stakeToFeesRatio\":\"The ratio of stake to fees to lock when collecting query fees\"}},\"isOverAllocated(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"},\"returns\":{\"_0\":\"True if the indexer is over-allocated, false otherwise\"}},\"maxPOIStaleness()\":{\"returns\":{\"_0\":\"The max POI staleness\"}},\"migrateLegacyAllocation(address,address,bytes32)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"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\"},\"pauseGuardians(address)\":{\"params\":{\"pauseGuardian\":\"The address of the pause guardian\"},\"returns\":{\"_0\":\"The allowed status of the pause guardian\"}},\"paymentsDestination(address)\":{\"params\":{\"indexer\":\"The address of the indexer\"},\"returns\":{\"_0\":\"The payments destination\"}},\"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\"}},\"setPaymentsDestination(address)\":{\"details\":\"Emits a {PaymentsDestinationSet} event\",\"params\":{\"paymentsDestination\":\"The address where payments 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.\"}},\"stakeToFeesRatio()\":{\"returns\":{\"_0\":\"The stake to fees ratio\"}},\"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.\"}},\"transferOwnership(address)\":{\"params\":{\"newOwner\":\"The address of the new owner\"}},\"unpause()\":{\"details\":\"Note that only functions using the modifiers `whenNotPaused` and `whenPaused` will be affected by the pause. Requirements: - The contract must be paused\"}},\"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\"}],\"DataServicePausableNotPauseGuardian(address)\":[{\"notice\":\"Emitted when a the caller is not a pause guardian\"}],\"DataServicePausablePauseGuardianNoChange(address,bool)\":[{\"notice\":\"Emitted when a pause guardian is set to the same allowed status\"}],\"LegacyAllocationAlreadyExists(address)\":[{\"notice\":\"Thrown when attempting to migrate an allocation with an existing id\"}],\"LegacyAllocationDoesNotExist(address)\":[{\"notice\":\"Thrown when trying to get a non-existent allocation\"}],\"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)\":[{\"notice\":\"Thrown when the contract GRT balance is inconsistent after collecting from Graph Payments\"}],\"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\"}],\"SubgraphServiceInvalidCollectionId(bytes32)\":[{\"notice\":\"Thrown when collectionId is not a valid address\"}],\"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\"},\"PauseGuardianSet(address,bool)\":{\"notice\":\"Emitted when a pause guardian is set.\"},\"PaymentsDestinationSet(address,address)\":{\"notice\":\"Emitted when an indexer sets a new payments destination\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"QueryFeesCollected(address,address,address,bytes32,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}.\"},\"allocationProvisionTracker(address)\":{\"notice\":\"Gets the allocation provision tracker\"},\"closeStaleAllocation(address)\":{\"notice\":\"Force close a stale allocation\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"curationFeesCut()\":{\"notice\":\"Gets the curation fees cut\"},\"encodeAllocationProof(address,address)\":{\"notice\":\"Encodes the allocation proof for EIP712 signing\"},\"feesProvisionTracker(address)\":{\"notice\":\"Gets the fees provision tracker\"},\"getAllocation(address)\":{\"notice\":\"Gets the details of an allocation For legacy allocations use {getLegacyAllocation}\"},\"getCuration()\":{\"notice\":\"Gets the address of the curation contract\"},\"getDelegationRatio()\":{\"notice\":\"External getter for the delegation ratio\"},\"getDisputeManager()\":{\"notice\":\"Gets the address of the dispute manager\"},\"getGraphTallyCollector()\":{\"notice\":\"Gets the address of the graph tally collector\"},\"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\"},\"indexers(address)\":{\"notice\":\"Gets the indexer details\"},\"initialize(address,uint256,uint32,uint256)\":{\"notice\":\"Initialize the contract\"},\"isOverAllocated(address)\":{\"notice\":\"Checks if an indexer is over-allocated\"},\"maxPOIStaleness()\":{\"notice\":\"Gets the max POI staleness\"},\"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.\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"owner()\":{\"notice\":\"Returns the address of the current owner\"},\"pause()\":{\"notice\":\"Pauses the data service.\"},\"pauseGuardians(address)\":{\"notice\":\"Gets the pause guardians\"},\"paused()\":{\"notice\":\"Returns true if the contract is paused, and false otherwise\"},\"paymentsDestination(address)\":{\"notice\":\"Gets the payments destination\"},\"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.\"},\"renounceOwnership()\":{\"notice\":\"Leaves the contract without an owner\"},\"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\"},\"setPaymentsDestination(address)\":{\"notice\":\"Sets the payments destination for an indexer to receive payments\"},\"setStakeToFeesRatio(uint256)\":{\"notice\":\"Sets the stake to fees ratio\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"stakeToFeesRatio()\":{\"notice\":\"Gets the stake to fees ratio\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"},\"transferOwnership(address)\":{\"notice\":\"Transfers ownership of the contract to a new account\"},\"unpause()\":{\"notice\":\"Unpauses the data service.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/ISubgraphServiceToolshed.sol\":\"ISubgraphServiceToolshed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/base/IMulticall.sol\":{\"keccak256\":\"0x229a773eba322776fd11fa9ef4d256f5405d4243a7eee9c776e9cc3943d5712a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c55cfe4a3ada03e97f5bf18d42e0a35504386617b2e7481b8c54c241aae9a5e9\",\"dweb:/ipfs/QmehvFTHm6BNPQZt5KMVttifEwfLZ3snWDdCx4PFEoAVoP\"]},\"contracts/data-service/IDataService.sol\":{\"keccak256\":\"0x24a4b7bf75c66404683c66cb8ed2d456f80a779617eb162794db9cf17bd58f19\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://58a651ccf814c460ce3581cf24de0dcdd8f734b71b1980246608f38aca84ac09\",\"dweb:/ipfs/QmTvyZMaQWpbTYZfjrVp5ZbZMb6NTJGfadyhqNPLCaQL59\"]},\"contracts/data-service/IDataServiceFees.sol\":{\"keccak256\":\"0xeec7e93837b986ab78968cbb6ffc77f20f7f28124587aaa05a445ae902c05839\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e1e0f5f649653664b2082bb52af4eb07a76e0291250eaa68b4d7559d6cc761b1\",\"dweb:/ipfs/QmR8RJS4RoFRv3X2YBqVtJ5pj8LfunvQH1DrCEY81pkFku\"]},\"contracts/data-service/IDataServicePausable.sol\":{\"keccak256\":\"0x1b134b20498d16314a7e1931fff6245500af66cc14a71684d4350353d7d826a1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4201cbf720bb24710abadfc887dc6e6151763c69ce7be06907aab71f1bc9ae3\",\"dweb:/ipfs/QmbU4Cwo2ApVQVGPhTs7B8kyHmkDu7iN2pDRw9hcoASFKR\"]},\"contracts/horizon/IGraphPayments.sol\":{\"keccak256\":\"0x0488eb59477911fb0596038d1ee8286f0365727cf271e526719015b972ebd800\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dacd82db07a5a75a20d5bbac17d9826f7954354260d390206a253164b3fd51ae\",\"dweb:/ipfs/QmbYN5qTnnzRfycEGLHr5S4j3npo7Y1dyfB8UGH7URzj6D\"]},\"contracts/subgraph-service/ISubgraphService.sol\":{\"keccak256\":\"0xec321735903ced280af532df740a43ed9f13d70073ba6c2da04c01888ad353f7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://265fd2093fb4d658f5c1e8a3f3ef79d9d86538b70e12f69f1497a39a5eb7a350\",\"dweb:/ipfs/QmUiKYRwHeMkGXcpF3EPbf7yP54y7q9nXDFhdzVqaPmF3P\"]},\"contracts/subgraph-service/internal/IAllocation.sol\":{\"keccak256\":\"0x4642a282ea1efe3a60266c9566a179ff9f4b52c9e9a9c7a0e56b3bc2fd064e7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c581b0d9d4503cf8090083bca35574b200aea9da1babf447df4e65eb036ca46a\",\"dweb:/ipfs/QmfF1JSFXxHnEuD77vMgTt6cRzqiHovxwQaA2QKP9ngPxB\"]},\"contracts/subgraph-service/internal/ILegacyAllocation.sol\":{\"keccak256\":\"0x9068aeb63c9d115135a1e398f8296e841648a18827744f927e6980ab15301d36\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://fc96b0211b67ab0cf3e62eb019f1fbbe706d2974a9941478b4312ee7be471a4c\",\"dweb:/ipfs/Qmc1xZLhcbc7yTHRAAkaFShv559ao5hRWYD9uxEtzTwRcQ\"]},\"contracts/toolshed/ISubgraphServiceToolshed.sol\":{\"keccak256\":\"0x2b2ca79910be4ddcd85d6f8cc5e9c7de3c64189df88edece11f236ff1a1cb2c6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3f7c14fd38d73068c695cc98ac860de0b9216099aa95149f76481c1d1742e0c\",\"dweb:/ipfs/QmdALj8jU9vGuyt6t85xSLdbP8SLNx5H1i5ADpzvkZqNm3\"]},\"contracts/toolshed/internal/IAllocationManager.sol\":{\"keccak256\":\"0xd9a4a1cf24038049bfd3305dae7abee868debf8b28a42aaaf06728c3d856290b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bf07816236e8f77deaf9944f3b5ee66e4c7cfe1c7b4d48956c52d2eadac2a882\",\"dweb:/ipfs/QmeFqQhZufTJKGui1QGGivAuFeFFYwJ8YSZkHLQEBKSRck\"]},\"contracts/toolshed/internal/IOwnable.sol\":{\"keccak256\":\"0x176542b8ad75eb5179ef5d65f0a67868b9ff198ee4fb26fb9755ff160e7fc37a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4292e7e2343903aa9dd9bfd2f9938ee896588f56862271f74f8ef29998ecb7ba\",\"dweb:/ipfs/QmW6sZpzBid5fnsKE53hfquYXLxgrvcWkmPvnAL4WUfWJM\"]},\"contracts/toolshed/internal/IPausable.sol\":{\"keccak256\":\"0xf2250a6bde2d393ad6613c378b15d3704f32249e5fe6c6c8f34bbd8cef59300f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af80da39367c7af37b64dcf55752a91f5aebc9e1ad2cf92e01b433dc5606fc7f\",\"dweb:/ipfs/QmUipAiLoiehMCeQsGHcDJw36KTuhw3awivM5GDjc3ga5t\"]},\"contracts/toolshed/internal/IProvisionManager.sol\":{\"keccak256\":\"0x7130220cee9d443f3c5e380cc28dcaeeb47ad17baa4557aed6f5dd95f59b48c6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5f9d6ca2d1bf6fa0f3fd8e61a12bdbd9dd55ceb6f6f95d20611ef2c0c3b37441\",\"dweb:/ipfs/QmedpWZFsMDFGDxtvqsBefSDuB5ivw2onz3czpFYo9y9gg\"]},\"contracts/toolshed/internal/IProvisionTracker.sol\":{\"keccak256\":\"0x16425902ab58c6f7440cf110addbbf4196b1953abe20e83b6ef2e82987ff9aa3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://02dda4d3e45d61d64d6ca9a44ad771e5aa0dd77664ede6568d1e455df6a5371e\",\"dweb:/ipfs/QmdJy2Z8JD6QSKXGeXPNgYAdoUwjpRNnqnD2JozvH5yytr\"]}},\"version\":1}"}},"contracts/toolshed/internal/IAllocationManager.sol":{"IAllocationManager":{"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"},{"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"},{"indexed":false,"internalType":"bool","name":"forceClosed","type":"bool"}],"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"},{"indexed":false,"internalType":"uint256","name":"currentEpoch","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":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":"bytes","name":"poiMetadata","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"currentEpoch","type":"uint256"}],"name":"IndexingRewardsCollected","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"}],"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\":\"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\"},{\"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\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"forceClosed\",\"type\":\"bool\"}],\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"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\":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\":\"bytes\",\"name\":\"poiMetadata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"type\":\"uint256\"}],\"name\":\"IndexingRewardsCollected\",\"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\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/internal/IAllocationManager.sol\":\"IAllocationManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/toolshed/internal/IAllocationManager.sol\":{\"keccak256\":\"0xd9a4a1cf24038049bfd3305dae7abee868debf8b28a42aaaf06728c3d856290b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bf07816236e8f77deaf9944f3b5ee66e4c7cfe1c7b4d48956c52d2eadac2a882\",\"dweb:/ipfs/QmeFqQhZufTJKGui1QGGivAuFeFFYwJ8YSZkHLQEBKSRck\"]}},\"version\":1}"}},"contracts/toolshed/internal/IOwnable.sol":{"IOwnable":{"abi":[{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"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\":{\"errors\":{\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"transferOwnership(address)\":{\"params\":{\"newOwner\":\"The address of the new owner\"}}},\"title\":\"IOwnable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"owner()\":{\"notice\":\"Returns the address of the current owner\"},\"renounceOwnership()\":{\"notice\":\"Leaves the contract without an owner\"},\"transferOwnership(address)\":{\"notice\":\"Transfers ownership of the contract to a new account\"}},\"notice\":\"Interface for Ownable contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/internal/IOwnable.sol\":\"IOwnable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/toolshed/internal/IOwnable.sol\":{\"keccak256\":\"0x176542b8ad75eb5179ef5d65f0a67868b9ff198ee4fb26fb9755ff160e7fc37a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4292e7e2343903aa9dd9bfd2f9938ee896588f56862271f74f8ef29998ecb7ba\",\"dweb:/ipfs/QmW6sZpzBid5fnsKE53hfquYXLxgrvcWkmPvnAL4WUfWJM\"]}},\"version\":1}"}},"contracts/toolshed/internal/IPausable.sol":{"IPausable":{"abi":[{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"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\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"IPausable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"paused()\":{\"notice\":\"Returns true if the contract is paused, and false otherwise\"}},\"notice\":\"Interface for Pausable contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/internal/IPausable.sol\":\"IPausable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/toolshed/internal/IPausable.sol\":{\"keccak256\":\"0xf2250a6bde2d393ad6613c378b15d3704f32249e5fe6c6c8f34bbd8cef59300f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af80da39367c7af37b64dcf55752a91f5aebc9e1ad2cf92e01b433dc5606fc7f\",\"dweb:/ipfs/QmUipAiLoiehMCeQsGHcDJw36KTuhw3awivM5GDjc3ga5t\"]}},\"version\":1}"}},"contracts/toolshed/internal/IProvisionManager.sol":{"IProvisionManager":{"abi":[{"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":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"}],"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\":\"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\":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\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/internal/IProvisionManager.sol\":\"IProvisionManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/toolshed/internal/IProvisionManager.sol\":{\"keccak256\":\"0x7130220cee9d443f3c5e380cc28dcaeeb47ad17baa4557aed6f5dd95f59b48c6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5f9d6ca2d1bf6fa0f3fd8e61a12bdbd9dd55ceb6f6f95d20611ef2c0c3b37441\",\"dweb:/ipfs/QmedpWZFsMDFGDxtvqsBefSDuB5ivw2onz3czpFYo9y9gg\"]}},\"version\":1}"}},"contracts/toolshed/internal/IProvisionTracker.sol":{"IProvisionTracker":{"abi":[{"inputs":[{"internalType":"uint256","name":"tokensAvailable","type":"uint256"},{"internalType":"uint256","name":"tokensRequired","type":"uint256"}],"name":"ProvisionTrackerInsufficientTokens","type":"error"},{"inputs":[{"internalType":"address","name":"indexer","type":"address"}],"name":"feesProvisionTracker","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":{"feesProvisionTracker(address)":"cbe5f3f2"}},"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"feesProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"feesProvisionTracker(address)\":{\"params\":{\"indexer\":\"The address of the indexer\"},\"returns\":{\"_0\":\"The fees provision tracker\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"feesProvisionTracker(address)\":{\"notice\":\"Gets the fees provision tracker\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/toolshed/internal/IProvisionTracker.sol\":\"IProvisionTracker\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/toolshed/internal/IProvisionTracker.sol\":{\"keccak256\":\"0x16425902ab58c6f7440cf110addbbf4196b1953abe20e83b6ef2e82987ff9aa3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://02dda4d3e45d61d64d6ca9a44ad771e5aa0dd77664ede6568d1e455df6a5371e\",\"dweb:/ipfs/QmdJy2Z8JD6QSKXGeXPNgYAdoUwjpRNnqnD2JozvH5yytr\"]}},\"version\":1}"}}}}}