{
  "contractName": "IBondedECDSAKeep",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "getPublicKey",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "checkBondAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_digest",
          "type": "bytes32"
        }
      ],
      "name": "sign",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "distributeETHReward",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "distributeERC20Reward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "seizeSignerBonds",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "returnPartialSignerBonds",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_signedDigest",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_preimage",
          "type": "bytes"
        }
      ],
      "name": "submitSignatureFraud",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_isFraud",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "closeKeep",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"checkBondAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"closeKeep\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"distributeERC20Reward\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"distributeETHReward\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPublicKey\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"returnPartialSignerBonds\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"seizeSignerBonds\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_signedDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_preimage\",\"type\":\"bytes\"}],\"name\":\"submitSignatureFraud\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isFraud\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"checkBondAmount()\":{\"return\":\"The amount of the keep's ETH bond in wei.\"},\"closeKeep()\":{\"details\":\"The function can be called only by the owner of the keep and only if the keep has not been already closed.\"},\"distributeERC20Reward(address,uint256)\":{\"details\":\"This works with any ERC20 token that implements a transferFrom function. This function only has authority over pre-approved token amount. We don't explicitly check for allowance, SafeMath subtraction overflow is enough protection.\",\"params\":{\"_tokenAddress\":\"Address of the ERC20 token to distribute.\",\"_value\":\"Amount of ERC20 token to distribute.\"}},\"distributeETHReward()\":{\"details\":\"Only the value passed to this function is distributed.\"},\"getPublicKey()\":{\"return\":\"Keeps's public key.\"},\"sign(bytes32)\":{\"params\":{\"_digest\":\"Digest to be signed.\"}},\"submitSignatureFraud(uint8,bytes32,bytes32,bytes32,bytes)\":{\"details\":\"The function expects the signed digest to be calculated as a sha256 hash of the preimage: `sha256(_preimage)`.\",\"params\":{\"_preimage\":\"Preimage of the hashed message.\",\"_r\":\"R part of ECDSA signature.\",\"_s\":\"S part of ECDSA signature.\",\"_signedDigest\":\"Digest for the provided signature. Result of hashing the preimage.\",\"_v\":\"Signature's header byte: `27 + recoveryID`.\"},\"return\":\"True if fraud, error otherwise.\"}},\"title\":\"ECDSA Keep\"},\"userdoc\":{\"methods\":{\"checkBondAmount()\":{\"notice\":\"Returns the amount of the keep's ETH bond in wei.\"},\"closeKeep()\":{\"notice\":\"Closes keep when no longer needed. Releases bonds to the keep members. Keep can be closed only when there is no signing in progress or requested signing process has timed out.\"},\"distributeERC20Reward(address,uint256)\":{\"notice\":\"Distributes ERC20 reward evenly across keep signer beneficiaries.\"},\"distributeETHReward()\":{\"notice\":\"Distributes ETH reward evenly across keep signer beneficiaries.\"},\"getPublicKey()\":{\"notice\":\"Returns public key of this keep.\"},\"returnPartialSignerBonds()\":{\"notice\":\"Returns partial signer's ETH bonds to the pool as an unbounded value. This function is called after bonds have been seized and processed by the privileged application after calling seizeSignerBonds function. It is entirely up to the application if a part of signers' bonds is returned. The application may decide for that but may also decide to seize bonds and do not return anything.\"},\"seizeSignerBonds()\":{\"notice\":\"Seizes the signers' ETH bonds. After seizing bonds keep is terminated so it will no longer respond to signing requests. Bonds can be seized only when there is no signing in progress or requested signing process has timed out. This function seizes all of signers' bonds. The application may decide to return part of bonds later after they are processed using returnPartialSignerBonds function.\"},\"sign(bytes32)\":{\"notice\":\"Calculates a signature over provided digest by the keep. Note that signatures from the keep not explicitly requested by calling `sign` will be provable as fraud via `submitSignatureFraud`.\"},\"submitSignatureFraud(uint8,bytes32,bytes32,bytes32,bytes)\":{\"notice\":\"Submits a fraud proof for a valid signature from this keep that was not first approved via a call to sign.\"}},\"notice\":\"Contract reflecting an ECDSA keep.\"}},\"settings\":{\"compilationTarget\":{\"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol\":\"IBondedECDSAKeep\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol\":{\"keccak256\":\"0x8f1edc0a2dfb4d167d190989ebc1c4256664e50ec1f82dfaeb25fa5d4a76a35a\",\"urls\":[\"bzz-raw://e815868907cc082fee1e3964be7de12da2161863d68dd1532a74e3a97bacf533\",\"dweb:/ipfs/Qmd8DqutKSwxh38WWA1ydftNkiAxSD9sqxa7qf1asHKA8c\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "/**\n▓▓▌ ▓▓ ▐▓▓ ▓▓▓▓▓▓▓▓▓▓▌▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▄\n▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▌▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n  ▓▓▓▓▓▓    ▓▓▓▓▓▓▓▀    ▐▓▓▓▓▓▓    ▐▓▓▓▓▓   ▓▓▓▓▓▓     ▓▓▓▓▓   ▐▓▓▓▓▓▌   ▐▓▓▓▓▓▓\n  ▓▓▓▓▓▓▄▄▓▓▓▓▓▓▓▀      ▐▓▓▓▓▓▓▄▄▄▄         ▓▓▓▓▓▓▄▄▄▄         ▐▓▓▓▓▓▌   ▐▓▓▓▓▓▓\n  ▓▓▓▓▓▓▓▓▓▓▓▓▓▀        ▐▓▓▓▓▓▓▓▓▓▓         ▓▓▓▓▓▓▓▓▓▓▌        ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n  ▓▓▓▓▓▓▀▀▓▓▓▓▓▓▄       ▐▓▓▓▓▓▓▀▀▀▀         ▓▓▓▓▓▓▀▀▀▀         ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▀\n  ▓▓▓▓▓▓   ▀▓▓▓▓▓▓▄     ▐▓▓▓▓▓▓     ▓▓▓▓▓   ▓▓▓▓▓▓     ▓▓▓▓▓   ▐▓▓▓▓▓▌\n▓▓▓▓▓▓▓▓▓▓ █▓▓▓▓▓▓▓▓▓ ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  ▓▓▓▓▓▓▓▓▓▓\n▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  ▓▓▓▓▓▓▓▓▓▓\n\n                           Trust math, not hardware.\n*/\n\npragma solidity 0.5.17;\n\n/// @title ECDSA Keep\n/// @notice Contract reflecting an ECDSA keep.\ncontract IBondedECDSAKeep {\n    /// @notice Returns public key of this keep.\n    /// @return Keeps's public key.\n    function getPublicKey() external view returns (bytes memory);\n\n    /// @notice Returns the amount of the keep's ETH bond in wei.\n    /// @return The amount of the keep's ETH bond in wei.\n    function checkBondAmount() external view returns (uint256);\n\n    /// @notice Calculates a signature over provided digest by the keep. Note that\n    /// signatures from the keep not explicitly requested by calling `sign`\n    /// will be provable as fraud via `submitSignatureFraud`.\n    /// @param _digest Digest to be signed.\n    function sign(bytes32 _digest) external;\n\n    /// @notice Distributes ETH reward evenly across keep signer beneficiaries.\n    /// @dev Only the value passed to this function is distributed.\n    function distributeETHReward() external payable;\n\n    /// @notice Distributes ERC20 reward evenly across keep signer beneficiaries.\n    /// @dev This works with any ERC20 token that implements a transferFrom\n    /// function.\n    /// This function only has authority over pre-approved\n    /// token amount. We don't explicitly check for allowance, SafeMath\n    /// subtraction overflow is enough protection.\n    /// @param _tokenAddress Address of the ERC20 token to distribute.\n    /// @param _value Amount of ERC20 token to distribute.\n    function distributeERC20Reward(address _tokenAddress, uint256 _value)\n        external;\n\n    /// @notice Seizes the signers' ETH bonds. After seizing bonds keep is\n    /// terminated so it will no longer respond to signing requests. Bonds can\n    /// be seized only when there is no signing in progress or requested signing\n    /// process has timed out. This function seizes all of signers' bonds.\n    /// The application may decide to return part of bonds later after they are\n    /// processed using returnPartialSignerBonds function.\n    function seizeSignerBonds() external;\n\n    /// @notice Returns partial signer's ETH bonds to the pool as an unbounded\n    /// value. This function is called after bonds have been seized and processed\n    /// by the privileged application after calling seizeSignerBonds function.\n    /// It is entirely up to the application if a part of signers' bonds is\n    /// returned. The application may decide for that but may also decide to\n    /// seize bonds and do not return anything.\n    function returnPartialSignerBonds() external payable;\n\n    /// @notice Submits a fraud proof for a valid signature from this keep that was\n    /// not first approved via a call to sign.\n    /// @dev The function expects the signed digest to be calculated as a sha256\n    /// hash of the preimage: `sha256(_preimage)`.\n    /// @param _v Signature's header byte: `27 + recoveryID`.\n    /// @param _r R part of ECDSA signature.\n    /// @param _s S part of ECDSA signature.\n    /// @param _signedDigest Digest for the provided signature. Result of hashing\n    /// the preimage.\n    /// @param _preimage Preimage of the hashed message.\n    /// @return True if fraud, error otherwise.\n    function submitSignatureFraud(\n        uint8 _v,\n        bytes32 _r,\n        bytes32 _s,\n        bytes32 _signedDigest,\n        bytes calldata _preimage\n    ) external returns (bool _isFraud);\n\n    /// @notice Closes keep when no longer needed. Releases bonds to the keep\n    /// members. Keep can be closed only when there is no signing in progress or\n    /// requested signing process has timed out.\n    /// @dev The function can be called only by the owner of the keep and only\n    /// if the keep has not been already closed.\n    function closeKeep() external;\n}\n",
  "sourcePath": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
  "ast": {
    "absolutePath": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
    "exportedSymbols": {
      "IBondedECDSAKeep": [
        11428
      ]
    },
    "id": 11429,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11378,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "1837:23:46"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@title ECDSA Keep\n @notice Contract reflecting an ECDSA keep.",
        "fullyImplemented": false,
        "id": 11428,
        "linearizedBaseContracts": [
          11428
        ],
        "name": "IBondedECDSAKeep",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": "@notice Returns public key of this keep.\n @return Keeps's public key.",
            "id": 11383,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getPublicKey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11379,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2069:2:46"
            },
            "returnParameters": {
              "id": 11382,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11381,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11383,
                  "src": "2095:12:46",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11380,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2095:5:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2094:14:46"
            },
            "scope": 11428,
            "src": "2048:61:46",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Returns the amount of the keep's ETH bond in wei.\n @return The amount of the keep's ETH bond in wei.",
            "id": 11388,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "checkBondAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11384,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2263:2:46"
            },
            "returnParameters": {
              "id": 11387,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11386,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11388,
                  "src": "2289:7:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11385,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2289:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2288:9:46"
            },
            "scope": 11428,
            "src": "2239:59:46",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Calculates a signature over provided digest by the keep. Note that\n signatures from the keep not explicitly requested by calling `sign`\n will be provable as fraud via `submitSignatureFraud`.\n @param _digest Digest to be signed.",
            "id": 11393,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "sign",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11390,
                  "name": "_digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 11393,
                  "src": "2583:15:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11389,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2583:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2582:17:46"
            },
            "returnParameters": {
              "id": 11392,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2608:0:46"
            },
            "scope": 11428,
            "src": "2569:40:46",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Distributes ETH reward evenly across keep signer beneficiaries.\n @dev Only the value passed to this function is distributed.",
            "id": 11396,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "distributeETHReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11394,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2791:2:46"
            },
            "returnParameters": {
              "id": 11395,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2810:0:46"
            },
            "scope": 11428,
            "src": "2763:48:46",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Distributes ERC20 reward evenly across keep signer beneficiaries.\n @dev This works with any ERC20 token that implements a transferFrom\n function.\n This function only has authority over pre-approved\n token amount. We don't explicitly check for allowance, SafeMath\n subtraction overflow is enough protection.\n @param _tokenAddress Address of the ERC20 token to distribute.\n @param _value Amount of ERC20 token to distribute.",
            "id": 11403,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "distributeERC20Reward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11401,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11398,
                  "name": "_tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 11403,
                  "src": "3336:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11397,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3336:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11400,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 11403,
                  "src": "3359:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11399,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3359:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3335:39:46"
            },
            "returnParameters": {
              "id": 11402,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3391:0:46"
            },
            "scope": 11428,
            "src": "3305:87:46",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Seizes the signers' ETH bonds. After seizing bonds keep is\n terminated so it will no longer respond to signing requests. Bonds can\n be seized only when there is no signing in progress or requested signing\n process has timed out. This function seizes all of signers' bonds.\n The application may decide to return part of bonds later after they are\n processed using returnPartialSignerBonds function.",
            "id": 11406,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "seizeSignerBonds",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11404,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3872:2:46"
            },
            "returnParameters": {
              "id": 11405,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3883:0:46"
            },
            "scope": 11428,
            "src": "3847:37:46",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Returns partial signer's ETH bonds to the pool as an unbounded\n value. This function is called after bonds have been seized and processed\n by the privileged application after calling seizeSignerBonds function.\n It is entirely up to the application if a part of signers' bonds is\n returned. The application may decide for that but may also decide to\n seize bonds and do not return anything.",
            "id": 11409,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "returnPartialSignerBonds",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11407,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4364:2:46"
            },
            "returnParameters": {
              "id": 11408,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4383:0:46"
            },
            "scope": 11428,
            "src": "4331:53:46",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Submits a fraud proof for a valid signature from this keep that was\n not first approved via a call to sign.\n @dev The function expects the signed digest to be calculated as a sha256\n hash of the preimage: `sha256(_preimage)`.\n @param _v Signature's header byte: `27 + recoveryID`.\n @param _r R part of ECDSA signature.\n @param _s S part of ECDSA signature.\n @param _signedDigest Digest for the provided signature. Result of hashing\n the preimage.\n @param _preimage Preimage of the hashed message.\n @return True if fraud, error otherwise.",
            "id": 11424,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "submitSignatureFraud",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11411,
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "scope": 11424,
                  "src": "5053:8:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 11410,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5053:5:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11413,
                  "name": "_r",
                  "nodeType": "VariableDeclaration",
                  "scope": 11424,
                  "src": "5071:10:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11412,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5071:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11415,
                  "name": "_s",
                  "nodeType": "VariableDeclaration",
                  "scope": 11424,
                  "src": "5091:10:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11414,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5091:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11417,
                  "name": "_signedDigest",
                  "nodeType": "VariableDeclaration",
                  "scope": 11424,
                  "src": "5111:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11416,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5111:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11419,
                  "name": "_preimage",
                  "nodeType": "VariableDeclaration",
                  "scope": 11424,
                  "src": "5142:24:46",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11418,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5142:5:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5043:129:46"
            },
            "returnParameters": {
              "id": 11423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11422,
                  "name": "_isFraud",
                  "nodeType": "VariableDeclaration",
                  "scope": 11424,
                  "src": "5191:13:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11421,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5191:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5190:15:46"
            },
            "scope": 11428,
            "src": "5014:192:46",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Closes keep when no longer needed. Releases bonds to the keep\n members. Keep can be closed only when there is no signing in progress or\n requested signing process has timed out.\n @dev The function can be called only by the owner of the keep and only\n if the keep has not been already closed.",
            "id": 11427,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "closeKeep",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11425,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5566:2:46"
            },
            "returnParameters": {
              "id": 11426,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5577:0:46"
            },
            "scope": 11428,
            "src": "5548:30:46",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 11429,
        "src": "1931:3649:46"
      }
    ],
    "src": "1837:3744:46"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
      "exportedSymbols": {
        "IBondedECDSAKeep": [
          11428
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.5",
            ".17"
          ]
        },
        "id": 11378,
        "name": "PragmaDirective",
        "src": "1837:23:46"
      },
      {
        "attributes": {
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "contract",
          "documentation": "@title ECDSA Keep\n @notice Contract reflecting an ECDSA keep.",
          "fullyImplemented": false,
          "linearizedBaseContracts": [
            11428
          ],
          "name": "IBondedECDSAKeep",
          "scope": 11429
        },
        "children": [
          {
            "attributes": {
              "body": null,
              "documentation": "@notice Returns public key of this keep.\n @return Keeps's public key.",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getPublicKey",
              "scope": 11428,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11379,
                "name": "ParameterList",
                "src": "2069:2:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 11383,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 11380,
                        "name": "ElementaryTypeName",
                        "src": "2095:5:46"
                      }
                    ],
                    "id": 11381,
                    "name": "VariableDeclaration",
                    "src": "2095:12:46"
                  }
                ],
                "id": 11382,
                "name": "ParameterList",
                "src": "2094:14:46"
              }
            ],
            "id": 11383,
            "name": "FunctionDefinition",
            "src": "2048:61:46"
          },
          {
            "attributes": {
              "body": null,
              "documentation": "@notice Returns the amount of the keep's ETH bond in wei.\n @return The amount of the keep's ETH bond in wei.",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "checkBondAmount",
              "scope": 11428,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11384,
                "name": "ParameterList",
                "src": "2263:2:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 11388,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 11385,
                        "name": "ElementaryTypeName",
                        "src": "2289:7:46"
                      }
                    ],
                    "id": 11386,
                    "name": "VariableDeclaration",
                    "src": "2289:7:46"
                  }
                ],
                "id": 11387,
                "name": "ParameterList",
                "src": "2288:9:46"
              }
            ],
            "id": 11388,
            "name": "FunctionDefinition",
            "src": "2239:59:46"
          },
          {
            "attributes": {
              "body": null,
              "documentation": "@notice Calculates a signature over provided digest by the keep. Note that\n signatures from the keep not explicitly requested by calling `sign`\n will be provable as fraud via `submitSignatureFraud`.\n @param _digest Digest to be signed.",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "sign",
              "scope": 11428,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_digest",
                      "scope": 11393,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 11389,
                        "name": "ElementaryTypeName",
                        "src": "2583:7:46"
                      }
                    ],
                    "id": 11390,
                    "name": "VariableDeclaration",
                    "src": "2583:15:46"
                  }
                ],
                "id": 11391,
                "name": "ParameterList",
                "src": "2582:17:46"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11392,
                "name": "ParameterList",
                "src": "2608:0:46"
              }
            ],
            "id": 11393,
            "name": "FunctionDefinition",
            "src": "2569:40:46"
          },
          {
            "attributes": {
              "body": null,
              "documentation": "@notice Distributes ETH reward evenly across keep signer beneficiaries.\n @dev Only the value passed to this function is distributed.",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "distributeETHReward",
              "scope": 11428,
              "stateMutability": "payable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11394,
                "name": "ParameterList",
                "src": "2791:2:46"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11395,
                "name": "ParameterList",
                "src": "2810:0:46"
              }
            ],
            "id": 11396,
            "name": "FunctionDefinition",
            "src": "2763:48:46"
          },
          {
            "attributes": {
              "body": null,
              "documentation": "@notice Distributes ERC20 reward evenly across keep signer beneficiaries.\n @dev This works with any ERC20 token that implements a transferFrom\n function.\n This function only has authority over pre-approved\n token amount. We don't explicitly check for allowance, SafeMath\n subtraction overflow is enough protection.\n @param _tokenAddress Address of the ERC20 token to distribute.\n @param _value Amount of ERC20 token to distribute.",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "distributeERC20Reward",
              "scope": 11428,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_tokenAddress",
                      "scope": 11403,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 11397,
                        "name": "ElementaryTypeName",
                        "src": "3336:7:46"
                      }
                    ],
                    "id": 11398,
                    "name": "VariableDeclaration",
                    "src": "3336:21:46"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_value",
                      "scope": 11403,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 11399,
                        "name": "ElementaryTypeName",
                        "src": "3359:7:46"
                      }
                    ],
                    "id": 11400,
                    "name": "VariableDeclaration",
                    "src": "3359:14:46"
                  }
                ],
                "id": 11401,
                "name": "ParameterList",
                "src": "3335:39:46"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11402,
                "name": "ParameterList",
                "src": "3391:0:46"
              }
            ],
            "id": 11403,
            "name": "FunctionDefinition",
            "src": "3305:87:46"
          },
          {
            "attributes": {
              "body": null,
              "documentation": "@notice Seizes the signers' ETH bonds. After seizing bonds keep is\n terminated so it will no longer respond to signing requests. Bonds can\n be seized only when there is no signing in progress or requested signing\n process has timed out. This function seizes all of signers' bonds.\n The application may decide to return part of bonds later after they are\n processed using returnPartialSignerBonds function.",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "seizeSignerBonds",
              "scope": 11428,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11404,
                "name": "ParameterList",
                "src": "3872:2:46"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11405,
                "name": "ParameterList",
                "src": "3883:0:46"
              }
            ],
            "id": 11406,
            "name": "FunctionDefinition",
            "src": "3847:37:46"
          },
          {
            "attributes": {
              "body": null,
              "documentation": "@notice Returns partial signer's ETH bonds to the pool as an unbounded\n value. This function is called after bonds have been seized and processed\n by the privileged application after calling seizeSignerBonds function.\n It is entirely up to the application if a part of signers' bonds is\n returned. The application may decide for that but may also decide to\n seize bonds and do not return anything.",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "returnPartialSignerBonds",
              "scope": 11428,
              "stateMutability": "payable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11407,
                "name": "ParameterList",
                "src": "4364:2:46"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11408,
                "name": "ParameterList",
                "src": "4383:0:46"
              }
            ],
            "id": 11409,
            "name": "FunctionDefinition",
            "src": "4331:53:46"
          },
          {
            "attributes": {
              "body": null,
              "documentation": "@notice Submits a fraud proof for a valid signature from this keep that was\n not first approved via a call to sign.\n @dev The function expects the signed digest to be calculated as a sha256\n hash of the preimage: `sha256(_preimage)`.\n @param _v Signature's header byte: `27 + recoveryID`.\n @param _r R part of ECDSA signature.\n @param _s S part of ECDSA signature.\n @param _signedDigest Digest for the provided signature. Result of hashing\n the preimage.\n @param _preimage Preimage of the hashed message.\n @return True if fraud, error otherwise.",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "submitSignatureFraud",
              "scope": 11428,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_v",
                      "scope": 11424,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 11410,
                        "name": "ElementaryTypeName",
                        "src": "5053:5:46"
                      }
                    ],
                    "id": 11411,
                    "name": "VariableDeclaration",
                    "src": "5053:8:46"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_r",
                      "scope": 11424,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 11412,
                        "name": "ElementaryTypeName",
                        "src": "5071:7:46"
                      }
                    ],
                    "id": 11413,
                    "name": "VariableDeclaration",
                    "src": "5071:10:46"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_s",
                      "scope": 11424,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 11414,
                        "name": "ElementaryTypeName",
                        "src": "5091:7:46"
                      }
                    ],
                    "id": 11415,
                    "name": "VariableDeclaration",
                    "src": "5091:10:46"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_signedDigest",
                      "scope": 11424,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 11416,
                        "name": "ElementaryTypeName",
                        "src": "5111:7:46"
                      }
                    ],
                    "id": 11417,
                    "name": "VariableDeclaration",
                    "src": "5111:21:46"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_preimage",
                      "scope": 11424,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 11418,
                        "name": "ElementaryTypeName",
                        "src": "5142:5:46"
                      }
                    ],
                    "id": 11419,
                    "name": "VariableDeclaration",
                    "src": "5142:24:46"
                  }
                ],
                "id": 11420,
                "name": "ParameterList",
                "src": "5043:129:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_isFraud",
                      "scope": 11424,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 11421,
                        "name": "ElementaryTypeName",
                        "src": "5191:4:46"
                      }
                    ],
                    "id": 11422,
                    "name": "VariableDeclaration",
                    "src": "5191:13:46"
                  }
                ],
                "id": 11423,
                "name": "ParameterList",
                "src": "5190:15:46"
              }
            ],
            "id": 11424,
            "name": "FunctionDefinition",
            "src": "5014:192:46"
          },
          {
            "attributes": {
              "body": null,
              "documentation": "@notice Closes keep when no longer needed. Releases bonds to the keep\n members. Keep can be closed only when there is no signing in progress or\n requested signing process has timed out.\n @dev The function can be called only by the owner of the keep and only\n if the keep has not been already closed.",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "closeKeep",
              "scope": 11428,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11425,
                "name": "ParameterList",
                "src": "5566:2:46"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 11426,
                "name": "ParameterList",
                "src": "5577:0:46"
              }
            ],
            "id": 11427,
            "name": "FunctionDefinition",
            "src": "5548:30:46"
          }
        ],
        "id": 11428,
        "name": "ContractDefinition",
        "src": "1931:3649:46"
      }
    ],
    "id": 11429,
    "name": "SourceUnit",
    "src": "1837:3744:46"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T11:52:09.382Z",
  "devdoc": {
    "methods": {
      "checkBondAmount()": {
        "return": "The amount of the keep's ETH bond in wei."
      },
      "closeKeep()": {
        "details": "The function can be called only by the owner of the keep and only if the keep has not been already closed."
      },
      "distributeERC20Reward(address,uint256)": {
        "details": "This works with any ERC20 token that implements a transferFrom function. This function only has authority over pre-approved token amount. We don't explicitly check for allowance, SafeMath subtraction overflow is enough protection.",
        "params": {
          "_tokenAddress": "Address of the ERC20 token to distribute.",
          "_value": "Amount of ERC20 token to distribute."
        }
      },
      "distributeETHReward()": {
        "details": "Only the value passed to this function is distributed."
      },
      "getPublicKey()": {
        "return": "Keeps's public key."
      },
      "sign(bytes32)": {
        "params": {
          "_digest": "Digest to be signed."
        }
      },
      "submitSignatureFraud(uint8,bytes32,bytes32,bytes32,bytes)": {
        "details": "The function expects the signed digest to be calculated as a sha256 hash of the preimage: `sha256(_preimage)`.",
        "params": {
          "_preimage": "Preimage of the hashed message.",
          "_r": "R part of ECDSA signature.",
          "_s": "S part of ECDSA signature.",
          "_signedDigest": "Digest for the provided signature. Result of hashing the preimage.",
          "_v": "Signature's header byte: `27 + recoveryID`."
        },
        "return": "True if fraud, error otherwise."
      }
    },
    "title": "ECDSA Keep"
  },
  "userdoc": {
    "methods": {
      "checkBondAmount()": {
        "notice": "Returns the amount of the keep's ETH bond in wei."
      },
      "closeKeep()": {
        "notice": "Closes keep when no longer needed. Releases bonds to the keep members. Keep can be closed only when there is no signing in progress or requested signing process has timed out."
      },
      "distributeERC20Reward(address,uint256)": {
        "notice": "Distributes ERC20 reward evenly across keep signer beneficiaries."
      },
      "distributeETHReward()": {
        "notice": "Distributes ETH reward evenly across keep signer beneficiaries."
      },
      "getPublicKey()": {
        "notice": "Returns public key of this keep."
      },
      "returnPartialSignerBonds()": {
        "notice": "Returns partial signer's ETH bonds to the pool as an unbounded value. This function is called after bonds have been seized and processed by the privileged application after calling seizeSignerBonds function. It is entirely up to the application if a part of signers' bonds is returned. The application may decide for that but may also decide to seize bonds and do not return anything."
      },
      "seizeSignerBonds()": {
        "notice": "Seizes the signers' ETH bonds. After seizing bonds keep is terminated so it will no longer respond to signing requests. Bonds can be seized only when there is no signing in progress or requested signing process has timed out. This function seizes all of signers' bonds. The application may decide to return part of bonds later after they are processed using returnPartialSignerBonds function."
      },
      "sign(bytes32)": {
        "notice": "Calculates a signature over provided digest by the keep. Note that signatures from the keep not explicitly requested by calling `sign` will be provable as fraud via `submitSignatureFraud`."
      },
      "submitSignatureFraud(uint8,bytes32,bytes32,bytes32,bytes)": {
        "notice": "Submits a fraud proof for a valid signature from this keep that was not first approved via a call to sign."
      }
    },
    "notice": "Contract reflecting an ECDSA keep."
  }
}