{
  "abi": [
    {
      "inputs": [],
      "name": "AccountingExtension_InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AccountingExtension_InsufficientFunds",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AccountingExtension_UnauthorizedModule",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AccountingExtension_UnauthorizedUser",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_bonder",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Bonded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_depositor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Deposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_payer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Paid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Released",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_withdrawer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Withdrew",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ORACLE",
      "outputs": [
        {
          "internalType": "contract IOracle",
          "name": "_oracle",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_module",
          "type": "address"
        }
      ],
      "name": "approveModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonder",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "bond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonder",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "bond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_bondToken",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        }
      ],
      "name": "bondedAmountOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_payer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "pay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bonder",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_requestId",
          "type": "bytes32"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "release",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_module",
          "type": "address"
        }
      ],
      "name": "revokeModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "userApprovedModules",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_approvedModules",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "ORACLE()": "38013f02",
    "approveModule(address)": "17825ef3",
    "balanceOf(address,address)": "f7888aec",
    "bond(address,bytes32,address,uint256)": "bba9f26f",
    "bond(address,bytes32,address,uint256,address)": "4aa90d16",
    "bondedAmountOf(address,address,bytes32)": "3c802fc5",
    "deposit(address,uint256)": "47e7ef24",
    "pay(bytes32,address,address,address,uint256)": "cab0e418",
    "release(address,bytes32,address,uint256)": "a6d09dc8",
    "revokeModule(address)": "a69748b8",
    "userApprovedModules(address)": "96fa9e10",
    "withdraw(address,uint256)": "f3fef3a3"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccountingExtension_InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountingExtension_InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountingExtension_UnauthorizedModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountingExtension_UnauthorizedUser\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_depositor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Paid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_withdrawer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrew\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ORACLE\",\"outputs\":[{\"internalType\":\"contract IOracle\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_module\",\"type\":\"address\"}],\"name\":\"approveModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonder\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonder\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_bondToken\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"}],\"name\":\"bondedAmountOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"pay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonder\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_module\",\"type\":\"address\"}],\"name\":\"revokeModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"userApprovedModules\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_approvedModules\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Bonded(bytes32,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` bonded\",\"_bonder\":\"The user who is getting its tokens bonded\",\"_token\":\"The address of the token being bonded\"}},\"Deposited(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` deposited\",\"_depositor\":\"The user who deposited the tokens\",\"_token\":\"The address of the token deposited by the user\"}},\"Paid(bytes32,address,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` transferred\",\"_beneficiary\":\"The user receiving the tokens\",\"_payer\":\"The user who is getting its tokens transferred\",\"_token\":\"The address of the token being transferred\"}},\"Released(bytes32,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` released\",\"_beneficiary\":\"The user who is getting its tokens released\",\"_token\":\"The address of the token being released\"}},\"Withdrew(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` withdrawn\",\"_token\":\"The address of the token withdrawn by the user\",\"_withdrawer\":\"The user who withdrew the tokens\"}}},\"kind\":\"dev\",\"methods\":{\"approveModule(address)\":{\"params\":{\"_module\":\"The address of the module to be approved\"}},\"balanceOf(address,address)\":{\"params\":{\"_token\":\"The token deposited\",\"_user\":\"The address of the user with deposited tokens\"},\"returns\":{\"_amount\":\"The amount of `_token` deposited\"}},\"bond(address,bytes32,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` to bond\",\"_bonder\":\"The address of the user to bond tokens for\",\"_requestId\":\"The id of the request the user is bonding for\",\"_token\":\"The address of the token being bonded\"}},\"bond(address,bytes32,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of `_token` to bond\",\"_bonder\":\"The address of the user to bond tokens for\",\"_requestId\":\"The id of the request the user is bonding for\",\"_sender\":\"The address starting the propose call on the Oracle\",\"_token\":\"The address of the token being bonded\"}},\"bondedAmountOf(address,address,bytes32)\":{\"params\":{\"_bondToken\":\"The token bonded\",\"_requestId\":\"The id of the request the user bonded for\",\"_user\":\"The address of the user with bonded tokens\"},\"returns\":{\"_amount\":\"The amount of `_bondToken` bonded\"}},\"deposit(address,uint256)\":{\"details\":\"The user must have approved the accounting extension to transfer the tokens.\",\"params\":{\"_amount\":\"The amount of `_token` to deposit\",\"_token\":\"The address of the token being deposited\"}},\"pay(bytes32,address,address,address,uint256)\":{\"details\":\"Only the virtual balances in the accounting extension are modified. The token contract is not called nor its balances modified.\",\"params\":{\"_amount\":\"The amount of `_token` being transferred\",\"_payer\":\"The address of the user paying the tokens\",\"_receiver\":\"The address of the user receiving the tokens\",\"_requestId\":\"The id of the request handling the user's tokens\",\"_token\":\"The address of the token being transferred\"}},\"release(address,bytes32,address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` to release\",\"_bonder\":\"The address of the user to release tokens for\",\"_requestId\":\"The id of the request where the tokens were bonded\",\"_token\":\"The address of the token being released\"}},\"revokeModule(address)\":{\"params\":{\"_module\":\"The address of the module to be revoked\"}},\"userApprovedModules(address)\":{\"params\":{\"_user\":\"The address of the user\"},\"returns\":{\"_approvedModules\":\"The array of all modules approved by the user\"}},\"withdraw(address,uint256)\":{\"params\":{\"_amount\":\"The amount of `_token` to withdraw\",\"_token\":\"The address of the token being withdrawn\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AccountingExtension_InsufficientAllowance()\":[{\"notice\":\"Thrown when the module bonding user tokens hasn't been approved by the user.\"}],\"AccountingExtension_InsufficientFunds()\":[{\"notice\":\"Thrown when the account doesn't have enough balance to bond/withdraw or not enough bonded to release/pay\"}],\"AccountingExtension_UnauthorizedModule()\":[{\"notice\":\"Thrown when an `onlyAllowedModule` function is called by something else than a module being used in the corresponding request\"}],\"AccountingExtension_UnauthorizedUser()\":[{\"notice\":\"Thrown when an `onlyParticipant` function is called with an address that is not part of the request.\"}]},\"events\":{\"Bonded(bytes32,address,address,uint256)\":{\"notice\":\"User's funds have been bonded\"},\"Deposited(address,address,uint256)\":{\"notice\":\"A user deposited tokens into the accounting extension\"},\"Paid(bytes32,address,address,address,uint256)\":{\"notice\":\"A payment between users has been made\"},\"Released(bytes32,address,address,uint256)\":{\"notice\":\"User's funds have been released\"},\"Withdrew(address,address,uint256)\":{\"notice\":\"A user withdrew tokens from the accounting extension\"}},\"kind\":\"user\",\"methods\":{\"ORACLE()\":{\"notice\":\"Returns the interface for the Oracle contract\"},\"approveModule(address)\":{\"notice\":\"Allows a user to approve a module for bonding tokens\"},\"balanceOf(address,address)\":{\"notice\":\"Returns the amount of a token a user has deposited\"},\"bond(address,bytes32,address,uint256)\":{\"notice\":\"Allows a allowed module to bond a user's tokens for a request\"},\"bond(address,bytes32,address,uint256,address)\":{\"notice\":\"Allows a valid module to bond a user's tokens for a request\"},\"bondedAmountOf(address,address,bytes32)\":{\"notice\":\"Returns the amount of a token a user has bonded\"},\"deposit(address,uint256)\":{\"notice\":\"Transfers tokens from a user and updates his virtual balance\"},\"pay(bytes32,address,address,address,uint256)\":{\"notice\":\"Allows a allowed module to transfer bonded tokens from one user to another\"},\"release(address,bytes32,address,uint256)\":{\"notice\":\"Allows a valid module to release a user's tokens\"},\"revokeModule(address)\":{\"notice\":\"Allows a user to revoke a module's approval for bonding tokens\"},\"userApprovedModules(address)\":{\"notice\":\"Returns a list of all modules a user has approved\"},\"withdraw(address,uint256)\":{\"notice\":\"Allows an user to withdraw deposited tokens\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/extensions/IAccountingExtension.sol\":\"IAccountingExtension\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@defi-wonderland/=node_modules/@defi-wonderland/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solmate/=node_modules/solmate/src/\"]},\"sources\":{\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/IModule.sol\":{\"keccak256\":\"0x72c2f68e8c2b749d9ae745269c706b137a640d6bd6f65f966238b547d61e3a05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4edb1aae7c4abd875d2da44a2dd83781c3c0a3d059edf2d1f2be1c44f865456f\",\"dweb:/ipfs/QmbEHy8tENha1ANEEZADpH4THmqC8aHyCXxFYPw4tS5mf4\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/IOracle.sol\":{\"keccak256\":\"0x606262b4bb3b1447b1f6afef8a1b49088956b168a4b066f6f60da4712b95d3cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a763cdb6ba9f12a93e3d5238d6d3235c5c0c229df94793927f9d2abe00542823\",\"dweb:/ipfs/QmbAbfVyCiHvNvhHxc5r8tK5GUuVBATo15Ma5MirhZPtE6\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/dispute/IDisputeModule.sol\":{\"keccak256\":\"0x21707db43d55ba040893ef0ffefa7f9740c6e03b94d750637e6b2c047a16baa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ae582ca2fdd6fc82c650333066c95a917221282ad7ef15ea62fb4a31e4ed864d\",\"dweb:/ipfs/QmdxvkpNCK46uYv31TxAtxCiRPSoxbT4hrs94WQfR4ctTM\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/finality/IFinalityModule.sol\":{\"keccak256\":\"0xf6f465732ee119879e3317227f9cf6468055f4f98acdb4365f5b4eacda32948e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82e1928a7bbc5bce95e1b83d917e1470c72a0bec7494f6f42471b21c0f2b641e\",\"dweb:/ipfs/QmSjaBsNhzCfQd5xwZa98LNYSZ1TqAqo6inRTGD31ua4L8\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/request/IRequestModule.sol\":{\"keccak256\":\"0xefa5dd3334a1676cca1c1860c66c16adb1e399917742476d15de8737b5cb0032\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://03bcff0500f4054b5f71b0badd1779f8dfaa7fc74fc64788991438a1d9d2d14d\",\"dweb:/ipfs/QmdDjbGPgBfbbyT26Xtt9uBD7nYnhSK43fa9skfuBrfjCc\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/resolution/IResolutionModule.sol\":{\"keccak256\":\"0x36e75a87661b234be605a7455c88eaf4e7cbc9f5b4ea08133dd6d9d5af8d6bc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://232536c4e8b2e9114035e57360976ff24931459fb22a026114d392d3e315ea67\",\"dweb:/ipfs/QmPYKU5RDGMqTZZzCCvVy7ssush4EQGgCCbzbeGpnejGno\"]},\"node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/response/IResponseModule.sol\":{\"keccak256\":\"0xd0610065a22a8d3323427d871a73b835e4d0dffb3afe4bb7e8bbee81b8b9ed1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c72dcbd36f11e87fc21c922684e5524f0c83830dc945ac92614ea1cd770a1bf\",\"dweb:/ipfs/QmfYnQfSDd2jS9QEAdpmDF6wVXWqitQpmJsSeEHs1mtUQP\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"solidity/interfaces/extensions/IAccountingExtension.sol\":{\"keccak256\":\"0x31b990f92e67ce2b480ca97fcc54d44dddaa82fa60259439d8556bfbb7963d0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://23e6ef2026bf40ef58f625b7377c70e4988902ae14df333e9be35129a57a87f0\",\"dweb:/ipfs/QmW1RfXvujkVHqXazdeTKshba9rX6kzSCRfZKBwLi38Ue5\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.19+commit.7dd6d404"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [],
          "type": "error",
          "name": "AccountingExtension_InsufficientAllowance"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "AccountingExtension_InsufficientFunds"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "AccountingExtension_UnauthorizedModule"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "AccountingExtension_UnauthorizedUser"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "_bonder",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Bonded",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_depositor",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Deposited",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "_beneficiary",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "_payer",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Paid",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "_beneficiary",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Released",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_withdrawer",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Withdrew",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "ORACLE",
          "outputs": [
            {
              "internalType": "contract IOracle",
              "name": "_oracle",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_module",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approveModule"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_user",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_bonder",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "_sender",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "bond"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_bonder",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "bond"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_user",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "_bondToken",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "bondedAmountOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "deposit"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "_payer",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_receiver",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "pay"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_bonder",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "_requestId",
              "type": "bytes32"
            },
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "release"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_module",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "revokeModule"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "userApprovedModules",
          "outputs": [
            {
              "internalType": "address[]",
              "name": "_approvedModules",
              "type": "address[]"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract IERC20",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "withdraw"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "approveModule(address)": {
            "params": {
              "_module": "The address of the module to be approved"
            }
          },
          "balanceOf(address,address)": {
            "params": {
              "_token": "The token deposited",
              "_user": "The address of the user with deposited tokens"
            },
            "returns": {
              "_amount": "The amount of `_token` deposited"
            }
          },
          "bond(address,bytes32,address,uint256)": {
            "params": {
              "_amount": "The amount of `_token` to bond",
              "_bonder": "The address of the user to bond tokens for",
              "_requestId": "The id of the request the user is bonding for",
              "_token": "The address of the token being bonded"
            }
          },
          "bond(address,bytes32,address,uint256,address)": {
            "params": {
              "_amount": "The amount of `_token` to bond",
              "_bonder": "The address of the user to bond tokens for",
              "_requestId": "The id of the request the user is bonding for",
              "_sender": "The address starting the propose call on the Oracle",
              "_token": "The address of the token being bonded"
            }
          },
          "bondedAmountOf(address,address,bytes32)": {
            "params": {
              "_bondToken": "The token bonded",
              "_requestId": "The id of the request the user bonded for",
              "_user": "The address of the user with bonded tokens"
            },
            "returns": {
              "_amount": "The amount of `_bondToken` bonded"
            }
          },
          "deposit(address,uint256)": {
            "details": "The user must have approved the accounting extension to transfer the tokens.",
            "params": {
              "_amount": "The amount of `_token` to deposit",
              "_token": "The address of the token being deposited"
            }
          },
          "pay(bytes32,address,address,address,uint256)": {
            "details": "Only the virtual balances in the accounting extension are modified. The token contract is not called nor its balances modified.",
            "params": {
              "_amount": "The amount of `_token` being transferred",
              "_payer": "The address of the user paying the tokens",
              "_receiver": "The address of the user receiving the tokens",
              "_requestId": "The id of the request handling the user's tokens",
              "_token": "The address of the token being transferred"
            }
          },
          "release(address,bytes32,address,uint256)": {
            "params": {
              "_amount": "The amount of `_token` to release",
              "_bonder": "The address of the user to release tokens for",
              "_requestId": "The id of the request where the tokens were bonded",
              "_token": "The address of the token being released"
            }
          },
          "revokeModule(address)": {
            "params": {
              "_module": "The address of the module to be revoked"
            }
          },
          "userApprovedModules(address)": {
            "params": {
              "_user": "The address of the user"
            },
            "returns": {
              "_approvedModules": "The array of all modules approved by the user"
            }
          },
          "withdraw(address,uint256)": {
            "params": {
              "_amount": "The amount of `_token` to withdraw",
              "_token": "The address of the token being withdrawn"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "ORACLE()": {
            "notice": "Returns the interface for the Oracle contract"
          },
          "approveModule(address)": {
            "notice": "Allows a user to approve a module for bonding tokens"
          },
          "balanceOf(address,address)": {
            "notice": "Returns the amount of a token a user has deposited"
          },
          "bond(address,bytes32,address,uint256)": {
            "notice": "Allows a allowed module to bond a user's tokens for a request"
          },
          "bond(address,bytes32,address,uint256,address)": {
            "notice": "Allows a valid module to bond a user's tokens for a request"
          },
          "bondedAmountOf(address,address,bytes32)": {
            "notice": "Returns the amount of a token a user has bonded"
          },
          "deposit(address,uint256)": {
            "notice": "Transfers tokens from a user and updates his virtual balance"
          },
          "pay(bytes32,address,address,address,uint256)": {
            "notice": "Allows a allowed module to transfer bonded tokens from one user to another"
          },
          "release(address,bytes32,address,uint256)": {
            "notice": "Allows a valid module to release a user's tokens"
          },
          "revokeModule(address)": {
            "notice": "Allows a user to revoke a module's approval for bonding tokens"
          },
          "userApprovedModules(address)": {
            "notice": "Returns a list of all modules a user has approved"
          },
          "withdraw(address,uint256)": {
            "notice": "Allows an user to withdraw deposited tokens"
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@defi-wonderland/=node_modules/@defi-wonderland/",
        "@openzeppelin/=node_modules/@openzeppelin/",
        "ds-test/=node_modules/ds-test/src/",
        "forge-std/=node_modules/forge-std/src/",
        "solmate/=node_modules/solmate/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 10000
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "solidity/interfaces/extensions/IAccountingExtension.sol": "IAccountingExtension"
      },
      "libraries": {}
    },
    "sources": {
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/IModule.sol": {
        "keccak256": "0x72c2f68e8c2b749d9ae745269c706b137a640d6bd6f65f966238b547d61e3a05",
        "urls": [
          "bzz-raw://4edb1aae7c4abd875d2da44a2dd83781c3c0a3d059edf2d1f2be1c44f865456f",
          "dweb:/ipfs/QmbEHy8tENha1ANEEZADpH4THmqC8aHyCXxFYPw4tS5mf4"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/IOracle.sol": {
        "keccak256": "0x606262b4bb3b1447b1f6afef8a1b49088956b168a4b066f6f60da4712b95d3cf",
        "urls": [
          "bzz-raw://a763cdb6ba9f12a93e3d5238d6d3235c5c0c229df94793927f9d2abe00542823",
          "dweb:/ipfs/QmbAbfVyCiHvNvhHxc5r8tK5GUuVBATo15Ma5MirhZPtE6"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/dispute/IDisputeModule.sol": {
        "keccak256": "0x21707db43d55ba040893ef0ffefa7f9740c6e03b94d750637e6b2c047a16baa4",
        "urls": [
          "bzz-raw://ae582ca2fdd6fc82c650333066c95a917221282ad7ef15ea62fb4a31e4ed864d",
          "dweb:/ipfs/QmdxvkpNCK46uYv31TxAtxCiRPSoxbT4hrs94WQfR4ctTM"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/finality/IFinalityModule.sol": {
        "keccak256": "0xf6f465732ee119879e3317227f9cf6468055f4f98acdb4365f5b4eacda32948e",
        "urls": [
          "bzz-raw://82e1928a7bbc5bce95e1b83d917e1470c72a0bec7494f6f42471b21c0f2b641e",
          "dweb:/ipfs/QmSjaBsNhzCfQd5xwZa98LNYSZ1TqAqo6inRTGD31ua4L8"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/request/IRequestModule.sol": {
        "keccak256": "0xefa5dd3334a1676cca1c1860c66c16adb1e399917742476d15de8737b5cb0032",
        "urls": [
          "bzz-raw://03bcff0500f4054b5f71b0badd1779f8dfaa7fc74fc64788991438a1d9d2d14d",
          "dweb:/ipfs/QmdDjbGPgBfbbyT26Xtt9uBD7nYnhSK43fa9skfuBrfjCc"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/resolution/IResolutionModule.sol": {
        "keccak256": "0x36e75a87661b234be605a7455c88eaf4e7cbc9f5b4ea08133dd6d9d5af8d6bc6",
        "urls": [
          "bzz-raw://232536c4e8b2e9114035e57360976ff24931459fb22a026114d392d3e315ea67",
          "dweb:/ipfs/QmPYKU5RDGMqTZZzCCvVy7ssush4EQGgCCbzbeGpnejGno"
        ],
        "license": "MIT"
      },
      "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/modules/response/IResponseModule.sol": {
        "keccak256": "0xd0610065a22a8d3323427d871a73b835e4d0dffb3afe4bb7e8bbee81b8b9ed1b",
        "urls": [
          "bzz-raw://8c72dcbd36f11e87fc21c922684e5524f0c83830dc945ac92614ea1cd770a1bf",
          "dweb:/ipfs/QmfYnQfSDd2jS9QEAdpmDF6wVXWqitQpmJsSeEHs1mtUQP"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305",
        "urls": [
          "bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5",
          "dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"
        ],
        "license": "MIT"
      },
      "solidity/interfaces/extensions/IAccountingExtension.sol": {
        "keccak256": "0x31b990f92e67ce2b480ca97fcc54d44dddaa82fa60259439d8556bfbb7963d0e",
        "urls": [
          "bzz-raw://23e6ef2026bf40ef58f625b7377c70e4988902ae14df333e9be35129a57a87f0",
          "dweb:/ipfs/QmW1RfXvujkVHqXazdeTKshba9rX6kzSCRfZKBwLi38Ue5"
        ],
        "license": "MIT"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "solidity/interfaces/extensions/IAccountingExtension.sol",
    "id": 42581,
    "exportedSymbols": {
      "IAccountingExtension": [
        42580
      ],
      "IERC20": [
        2822
      ],
      "IOracle": [
        2282
      ]
    },
    "nodeType": "SourceUnit",
    "src": "32:7799:59",
    "nodes": [
      {
        "id": 42379,
        "nodeType": "PragmaDirective",
        "src": "32:24:59",
        "nodes": [],
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".19"
        ]
      },
      {
        "id": 42381,
        "nodeType": "ImportDirective",
        "src": "58:70:59",
        "nodes": [],
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 42581,
        "sourceUnit": 2823,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42380,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 2822,
              "src": "66:6:59",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42383,
        "nodeType": "ImportDirective",
        "src": "129:96:59",
        "nodes": [],
        "absolutePath": "node_modules/@defi-wonderland/prophet-core-contracts/solidity/interfaces/IOracle.sol",
        "file": "@defi-wonderland/prophet-core-contracts/solidity/interfaces/IOracle.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 42581,
        "sourceUnit": 2283,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42382,
              "name": "IOracle",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 2282,
              "src": "137:7:59",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42580,
        "nodeType": "ContractDefinition",
        "src": "371:7459:59",
        "nodes": [
          {
            "id": 42393,
            "nodeType": "EventDefinition",
            "src": "834:84:59",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 42384,
              "nodeType": "StructuredDocumentation",
              "src": "579:252:59",
              "text": " @notice A user deposited tokens into the accounting extension\n @param _depositor The user who deposited the tokens\n @param _token The address of the token deposited by the user\n @param _amount The amount of `_token` deposited"
            },
            "eventSelector": "8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7",
            "name": "Deposited",
            "nameLocation": "840:9:59",
            "parameters": {
              "id": 42392,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42386,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_depositor",
                  "nameLocation": "866:10:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42393,
                  "src": "850:26:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42385,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "850:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42389,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "893:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42393,
                  "src": "878:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42388,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42387,
                      "name": "IERC20",
                      "nameLocations": [
                        "878:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "878:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "878:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42391,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "909:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42393,
                  "src": "901:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42390,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "901:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "849:68:59"
            }
          },
          {
            "id": 42403,
            "nodeType": "EventDefinition",
            "src": "1176:84:59",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 42394,
              "nodeType": "StructuredDocumentation",
              "src": "922:251:59",
              "text": " @notice A user withdrew tokens from the accounting extension\n @param _withdrawer The user who withdrew the tokens\n @param _token The address of the token withdrawn by the user\n @param _amount The amount of `_token` withdrawn"
            },
            "eventSelector": "0472be967f9a37138dfea1875af44784cafb79f92044ab33d7d6958eddd9ca6c",
            "name": "Withdrew",
            "nameLocation": "1182:8:59",
            "parameters": {
              "id": 42402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42396,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_withdrawer",
                  "nameLocation": "1207:11:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42403,
                  "src": "1191:27:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42395,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1191:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42399,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "1235:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42403,
                  "src": "1220:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42398,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42397,
                      "name": "IERC20",
                      "nameLocations": [
                        "1220:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "1220:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "1220:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42401,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "1251:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42403,
                  "src": "1243:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42400,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1243:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1190:69:59"
            }
          },
          {
            "id": 42417,
            "nodeType": "EventDefinition",
            "src": "1565:133:59",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 42404,
              "nodeType": "StructuredDocumentation",
              "src": "1264:298:59",
              "text": " @notice A payment between users has been made\n @param _beneficiary The user receiving the tokens\n @param _payer The user who is getting its tokens transferred\n @param _token The address of the token being transferred\n @param _amount The amount of `_token` transferred"
            },
            "eventSelector": "060bb954af967ecb7aa08a0072a7f8fe308ceee2f5d15f4a9d4a5275a5fe79e9",
            "name": "Paid",
            "nameLocation": "1571:4:59",
            "parameters": {
              "id": 42416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42406,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "1597:10:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42417,
                  "src": "1581:26:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42405,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1581:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42408,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_beneficiary",
                  "nameLocation": "1625:12:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42417,
                  "src": "1609:28:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42407,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1609:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42410,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_payer",
                  "nameLocation": "1655:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42417,
                  "src": "1639:22:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1639:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42413,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "1670:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42417,
                  "src": "1663:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42412,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42411,
                      "name": "IERC20",
                      "nameLocations": [
                        "1663:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "1663:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "1663:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42415,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "1686:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42417,
                  "src": "1678:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42414,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1678:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1575:122:59"
            }
          },
          {
            "id": 42429,
            "nodeType": "EventDefinition",
            "src": "1926:106:59",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 42418,
              "nodeType": "StructuredDocumentation",
              "src": "1702:221:59",
              "text": " @notice User's funds have been bonded\n @param _bonder The user who is getting its tokens bonded\n @param _token The address of the token being bonded\n @param _amount The amount of `_token` bonded"
            },
            "eventSelector": "46f04ddc1effd1becc7cb7611a7fd2f9b672b1f0ab34ad69a51023d1abe9e5c1",
            "name": "Bonded",
            "nameLocation": "1932:6:59",
            "parameters": {
              "id": 42428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42420,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "1955:10:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42429,
                  "src": "1939:26:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42419,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1939:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42422,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_bonder",
                  "nameLocation": "1983:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42429,
                  "src": "1967:23:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42421,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1967:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42425,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "2007:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42429,
                  "src": "1992:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42424,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42423,
                      "name": "IERC20",
                      "nameLocations": [
                        "1992:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "1992:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "1992:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42427,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "2023:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42429,
                  "src": "2015:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42426,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2015:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1938:93:59"
            }
          },
          {
            "id": 42441,
            "nodeType": "EventDefinition",
            "src": "2273:113:59",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 42430,
              "nodeType": "StructuredDocumentation",
              "src": "2036:234:59",
              "text": " @notice User's funds have been released\n @param _beneficiary The user who is getting its tokens released\n @param _token The address of the token being released\n @param _amount The amount of `_token` released"
            },
            "eventSelector": "f841af1340fe1d6814e6ec7893c8cc8939c12ee8d084afe073c5b10dc8fc794c",
            "name": "Released",
            "nameLocation": "2279:8:59",
            "parameters": {
              "id": 42440,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42432,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "2304:10:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42441,
                  "src": "2288:26:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42431,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2288:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42434,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_beneficiary",
                  "nameLocation": "2332:12:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42441,
                  "src": "2316:28:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42433,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2316:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42437,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "2361:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42441,
                  "src": "2346:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42436,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42435,
                      "name": "IERC20",
                      "nameLocations": [
                        "2346:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "2346:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "2346:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42439,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "2377:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42441,
                  "src": "2369:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42438,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2369:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2287:98:59"
            }
          },
          {
            "id": 42444,
            "nodeType": "ErrorDefinition",
            "src": "2698:46:59",
            "nodes": [],
            "documentation": {
              "id": 42442,
              "nodeType": "StructuredDocumentation",
              "src": "2563:132:59",
              "text": " @notice Thrown when the account doesn't have enough balance to bond/withdraw\n or not enough bonded to release/pay"
            },
            "errorSelector": "81faf715",
            "name": "AccountingExtension_InsufficientFunds",
            "nameLocation": "2704:37:59",
            "parameters": {
              "id": 42443,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2741:2:59"
            }
          },
          {
            "id": 42447,
            "nodeType": "ErrorDefinition",
            "src": "2850:50:59",
            "nodes": [],
            "documentation": {
              "id": 42445,
              "nodeType": "StructuredDocumentation",
              "src": "2748:99:59",
              "text": " @notice Thrown when the module bonding user tokens hasn't been approved by the user."
            },
            "errorSelector": "8588eb25",
            "name": "AccountingExtension_InsufficientAllowance",
            "nameLocation": "2856:41:59",
            "parameters": {
              "id": 42446,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2897:2:59"
            }
          },
          {
            "id": 42450,
            "nodeType": "ErrorDefinition",
            "src": "3060:47:59",
            "nodes": [],
            "documentation": {
              "id": 42448,
              "nodeType": "StructuredDocumentation",
              "src": "2904:153:59",
              "text": " @notice Thrown when an `onlyAllowedModule` function is called by something\n else than a module being used in the corresponding request"
            },
            "errorSelector": "9e6e2015",
            "name": "AccountingExtension_UnauthorizedModule",
            "nameLocation": "3066:38:59",
            "parameters": {
              "id": 42449,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3104:2:59"
            }
          },
          {
            "id": 42453,
            "nodeType": "ErrorDefinition",
            "src": "3242:45:59",
            "nodes": [],
            "documentation": {
              "id": 42451,
              "nodeType": "StructuredDocumentation",
              "src": "3111:128:59",
              "text": " @notice Thrown when an `onlyParticipant` function is called with an address\n that is not part of the request."
            },
            "errorSelector": "907c2e1d",
            "name": "AccountingExtension_UnauthorizedUser",
            "nameLocation": "3248:36:59",
            "parameters": {
              "id": 42452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3284:2:59"
            }
          },
          {
            "id": 42460,
            "nodeType": "FunctionDefinition",
            "src": "3536:58:59",
            "nodes": [],
            "documentation": {
              "id": 42454,
              "nodeType": "StructuredDocumentation",
              "src": "3465:68:59",
              "text": " @notice Returns the interface for the Oracle contract"
            },
            "functionSelector": "38013f02",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ORACLE",
            "nameLocation": "3545:6:59",
            "parameters": {
              "id": 42455,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3551:2:59"
            },
            "returnParameters": {
              "id": 42459,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42458,
                  "mutability": "mutable",
                  "name": "_oracle",
                  "nameLocation": "3585:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42460,
                  "src": "3577:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOracle_$2282",
                    "typeString": "contract IOracle"
                  },
                  "typeName": {
                    "id": 42457,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42456,
                      "name": "IOracle",
                      "nameLocations": [
                        "3577:7:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2282,
                      "src": "3577:7:59"
                    },
                    "referencedDeclaration": 2282,
                    "src": "3577:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracle_$2282",
                      "typeString": "contract IOracle"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3576:17:59"
            },
            "scope": 42580,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42473,
            "nodeType": "FunctionDefinition",
            "src": "3892:113:59",
            "nodes": [],
            "documentation": {
              "id": 42461,
              "nodeType": "StructuredDocumentation",
              "src": "3598:291:59",
              "text": " @notice Returns the amount of a token a user has bonded\n @param _user The address of the user with bonded tokens\n @param _bondToken The token bonded\n @param _requestId The id of the request the user bonded for\n @return _amount The amount of `_bondToken` bonded"
            },
            "functionSelector": "3c802fc5",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "bondedAmountOf",
            "nameLocation": "3901:14:59",
            "parameters": {
              "id": 42469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42463,
                  "mutability": "mutable",
                  "name": "_user",
                  "nameLocation": "3924:5:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42473,
                  "src": "3916:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42462,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3916:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42466,
                  "mutability": "mutable",
                  "name": "_bondToken",
                  "nameLocation": "3938:10:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42473,
                  "src": "3931:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42465,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42464,
                      "name": "IERC20",
                      "nameLocations": [
                        "3931:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "3931:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "3931:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42468,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "3958:10:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42473,
                  "src": "3950:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42467,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3950:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3915:54:59"
            },
            "returnParameters": {
              "id": 42472,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42471,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "3996:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42473,
                  "src": "3988:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42470,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3988:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3987:17:59"
            },
            "scope": 42580,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42484,
            "nodeType": "FunctionDefinition",
            "src": "4242:89:59",
            "nodes": [],
            "documentation": {
              "id": 42474,
              "nodeType": "StructuredDocumentation",
              "src": "4009:230:59",
              "text": " @notice Returns the amount of a token a user has deposited\n @param _user The address of the user with deposited tokens\n @param _token The token deposited\n @return _amount The amount of `_token` deposited"
            },
            "functionSelector": "f7888aec",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "4251:9:59",
            "parameters": {
              "id": 42480,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42476,
                  "mutability": "mutable",
                  "name": "_user",
                  "nameLocation": "4269:5:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42484,
                  "src": "4261:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42475,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4261:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42479,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "4283:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42484,
                  "src": "4276:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42478,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42477,
                      "name": "IERC20",
                      "nameLocations": [
                        "4276:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "4276:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "4276:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4260:30:59"
            },
            "returnParameters": {
              "id": 42483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42482,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "4322:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42484,
                  "src": "4314:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42481,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4314:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4313:17:59"
            },
            "scope": 42580,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42493,
            "nodeType": "FunctionDefinition",
            "src": "4794:58:59",
            "nodes": [],
            "documentation": {
              "id": 42485,
              "nodeType": "StructuredDocumentation",
              "src": "4507:284:59",
              "text": " @notice Transfers tokens from a user and updates his virtual balance\n @dev The user must have approved the accounting extension to transfer the tokens.\n @param _token The address of the token being deposited\n @param _amount The amount of `_token` to deposit"
            },
            "functionSelector": "47e7ef24",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "deposit",
            "nameLocation": "4803:7:59",
            "parameters": {
              "id": 42491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42488,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "4818:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42493,
                  "src": "4811:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42487,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42486,
                      "name": "IERC20",
                      "nameLocations": [
                        "4811:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "4811:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "4811:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42490,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "4834:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42493,
                  "src": "4826:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42489,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4826:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4810:32:59"
            },
            "returnParameters": {
              "id": 42492,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4851:0:59"
            },
            "scope": 42580,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42502,
            "nodeType": "FunctionDefinition",
            "src": "5040:59:59",
            "nodes": [],
            "documentation": {
              "id": 42494,
              "nodeType": "StructuredDocumentation",
              "src": "4856:181:59",
              "text": " @notice Allows an user to withdraw deposited tokens\n @param _token The address of the token being withdrawn\n @param _amount The amount of `_token` to withdraw"
            },
            "functionSelector": "f3fef3a3",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "withdraw",
            "nameLocation": "5049:8:59",
            "parameters": {
              "id": 42500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42497,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "5065:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42502,
                  "src": "5058:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42496,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42495,
                      "name": "IERC20",
                      "nameLocations": [
                        "5058:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "5058:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "5058:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42499,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "5081:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42502,
                  "src": "5073:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42498,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5073:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5057:32:59"
            },
            "returnParameters": {
              "id": 42501,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5098:0:59"
            },
            "scope": 42580,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42517,
            "nodeType": "FunctionDefinition",
            "src": "5669:109:59",
            "nodes": [],
            "documentation": {
              "id": 42503,
              "nodeType": "StructuredDocumentation",
              "src": "5103:563:59",
              "text": " @notice Allows a allowed module to transfer bonded tokens from one user to another\n @dev Only the virtual balances in the accounting extension are modified. The token contract\n is not called nor its balances modified.\n @param _requestId The id of the request handling the user's tokens\n @param _payer The address of the user paying the tokens\n @param _receiver The address of the user receiving the tokens\n @param _token The address of the token being transferred\n @param _amount The amount of `_token` being transferred"
            },
            "functionSelector": "cab0e418",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "pay",
            "nameLocation": "5678:3:59",
            "parameters": {
              "id": 42515,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42505,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "5690:10:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42517,
                  "src": "5682:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42504,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5682:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42507,
                  "mutability": "mutable",
                  "name": "_payer",
                  "nameLocation": "5710:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42517,
                  "src": "5702:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42506,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5702:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42509,
                  "mutability": "mutable",
                  "name": "_receiver",
                  "nameLocation": "5726:9:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42517,
                  "src": "5718:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42508,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5718:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42512,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "5744:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42517,
                  "src": "5737:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42511,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42510,
                      "name": "IERC20",
                      "nameLocations": [
                        "5737:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "5737:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "5737:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42514,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "5760:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42517,
                  "src": "5752:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42513,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5752:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5681:87:59"
            },
            "returnParameters": {
              "id": 42516,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5777:0:59"
            },
            "scope": 42580,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42530,
            "nodeType": "FunctionDefinition",
            "src": "6109:92:59",
            "nodes": [],
            "documentation": {
              "id": 42518,
              "nodeType": "StructuredDocumentation",
              "src": "5782:324:59",
              "text": " @notice Allows a allowed module to bond a user's tokens for a request\n @param _bonder The address of the user to bond tokens for\n @param _requestId The id of the request the user is bonding for\n @param _token The address of the token being bonded\n @param _amount The amount of `_token` to bond"
            },
            "functionSelector": "bba9f26f",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "bond",
            "nameLocation": "6118:4:59",
            "parameters": {
              "id": 42528,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42520,
                  "mutability": "mutable",
                  "name": "_bonder",
                  "nameLocation": "6131:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42530,
                  "src": "6123:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42519,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6123:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42522,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "6148:10:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42530,
                  "src": "6140:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42521,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6140:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42525,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "6167:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42530,
                  "src": "6160:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42524,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42523,
                      "name": "IERC20",
                      "nameLocations": [
                        "6160:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "6160:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "6160:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42527,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "6183:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42530,
                  "src": "6175:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42526,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6175:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6122:69:59"
            },
            "returnParameters": {
              "id": 42529,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6200:0:59"
            },
            "scope": 42580,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42545,
            "nodeType": "FunctionDefinition",
            "src": "6602:109:59",
            "nodes": [],
            "documentation": {
              "id": 42531,
              "nodeType": "StructuredDocumentation",
              "src": "6205:394:59",
              "text": " @notice Allows a valid module to bond a user's tokens for a request\n @param _bonder The address of the user to bond tokens for\n @param _requestId The id of the request the user is bonding for\n @param _token The address of the token being bonded\n @param _amount The amount of `_token` to bond\n @param _sender The address starting the propose call on the Oracle"
            },
            "functionSelector": "4aa90d16",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "bond",
            "nameLocation": "6611:4:59",
            "parameters": {
              "id": 42543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42533,
                  "mutability": "mutable",
                  "name": "_bonder",
                  "nameLocation": "6624:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42545,
                  "src": "6616:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42532,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6616:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42535,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "6641:10:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42545,
                  "src": "6633:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42534,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6633:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42538,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "6660:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42545,
                  "src": "6653:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42537,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42536,
                      "name": "IERC20",
                      "nameLocations": [
                        "6653:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "6653:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "6653:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42540,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "6676:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42545,
                  "src": "6668:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42539,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6668:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42542,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nameLocation": "6693:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42545,
                  "src": "6685:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42541,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6685:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6615:86:59"
            },
            "returnParameters": {
              "id": 42544,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6710:0:59"
            },
            "scope": 42580,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42558,
            "nodeType": "FunctionDefinition",
            "src": "7042:95:59",
            "nodes": [],
            "documentation": {
              "id": 42546,
              "nodeType": "StructuredDocumentation",
              "src": "6715:324:59",
              "text": " @notice Allows a valid module to release a user's tokens\n @param _bonder The address of the user to release tokens for\n @param _requestId The id of the request where the tokens were bonded\n @param _token The address of the token being released\n @param _amount The amount of `_token` to release"
            },
            "functionSelector": "a6d09dc8",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "release",
            "nameLocation": "7051:7:59",
            "parameters": {
              "id": 42556,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42548,
                  "mutability": "mutable",
                  "name": "_bonder",
                  "nameLocation": "7067:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42558,
                  "src": "7059:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42547,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7059:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42550,
                  "mutability": "mutable",
                  "name": "_requestId",
                  "nameLocation": "7084:10:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42558,
                  "src": "7076:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42549,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7076:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42553,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "7103:6:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42558,
                  "src": "7096:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2822",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 42552,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 42551,
                      "name": "IERC20",
                      "nameLocations": [
                        "7096:6:59"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2822,
                      "src": "7096:6:59"
                    },
                    "referencedDeclaration": 2822,
                    "src": "7096:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2822",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42555,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "7119:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42558,
                  "src": "7111:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42554,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7111:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7058:69:59"
            },
            "returnParameters": {
              "id": 42557,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7136:0:59"
            },
            "scope": 42580,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42564,
            "nodeType": "FunctionDefinition",
            "src": "7280:49:59",
            "nodes": [],
            "documentation": {
              "id": 42559,
              "nodeType": "StructuredDocumentation",
              "src": "7141:136:59",
              "text": " @notice Allows a user to approve a module for bonding tokens\n @param _module The address of the module to be approved"
            },
            "functionSelector": "17825ef3",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "approveModule",
            "nameLocation": "7289:13:59",
            "parameters": {
              "id": 42562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42561,
                  "mutability": "mutable",
                  "name": "_module",
                  "nameLocation": "7311:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42564,
                  "src": "7303:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42560,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7303:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7302:17:59"
            },
            "returnParameters": {
              "id": 42563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7328:0:59"
            },
            "scope": 42580,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42570,
            "nodeType": "FunctionDefinition",
            "src": "7481:48:59",
            "nodes": [],
            "documentation": {
              "id": 42565,
              "nodeType": "StructuredDocumentation",
              "src": "7333:145:59",
              "text": " @notice Allows a user to revoke a module's approval for bonding tokens\n @param _module The address of the module to be revoked"
            },
            "functionSelector": "a69748b8",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "revokeModule",
            "nameLocation": "7490:12:59",
            "parameters": {
              "id": 42568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42567,
                  "mutability": "mutable",
                  "name": "_module",
                  "nameLocation": "7511:7:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42570,
                  "src": "7503:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42566,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7503:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7502:17:59"
            },
            "returnParameters": {
              "id": 42569,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7528:0:59"
            },
            "scope": 42580,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42579,
            "nodeType": "FunctionDefinition",
            "src": "7726:102:59",
            "nodes": [],
            "documentation": {
              "id": 42571,
              "nodeType": "StructuredDocumentation",
              "src": "7533:190:59",
              "text": " @notice Returns a list of all modules a user has approved\n @param _user The address of the user\n @return _approvedModules The array of all modules approved by the user"
            },
            "functionSelector": "96fa9e10",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "userApprovedModules",
            "nameLocation": "7735:19:59",
            "parameters": {
              "id": 42574,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42573,
                  "mutability": "mutable",
                  "name": "_user",
                  "nameLocation": "7763:5:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42579,
                  "src": "7755:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42572,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7755:7:59",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7754:15:59"
            },
            "returnParameters": {
              "id": 42578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42577,
                  "mutability": "mutable",
                  "name": "_approvedModules",
                  "nameLocation": "7810:16:59",
                  "nodeType": "VariableDeclaration",
                  "scope": 42579,
                  "src": "7793:33:59",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 42575,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "7793:7:59",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 42576,
                    "nodeType": "ArrayTypeName",
                    "src": "7793:9:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7792:35:59"
            },
            "scope": 42580,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IAccountingExtension",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          42580
        ],
        "name": "IAccountingExtension",
        "nameLocation": "381:20:59",
        "scope": 42581,
        "usedErrors": [
          42444,
          42447,
          42450,
          42453
        ]
      }
    ],
    "license": "MIT"
  },
  "id": 59
}