{
  "contractName": "Erc20Vault",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "depositVerifiers",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_verifier",
          "type": "address"
        }
      ],
      "name": "setDepositVerifier",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEffectiveDepositVerifier",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "newDepositVerifierMaturityTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract PlasmaFramework",
          "name": "_framework",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Erc20Withdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "depositor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "blknum",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DepositCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "nextDepositVerifier",
          "type": "address"
        }
      ],
      "name": "SetDepositVerifierCalled",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "depositTx",
          "type": "bytes"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.11+commit.c082d0b4\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"depositVerifiers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"}],\"name\":\"setDepositVerifier\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getEffectiveDepositVerifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"depositTx\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"newDepositVerifierMaturityTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract PlasmaFramework\",\"name\":\"_framework\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Erc20Withdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blknum\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"DepositCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nextDepositVerifier\",\"type\":\"address\"}],\"name\":\"SetDepositVerifierCalled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"deposit(bytes)\":{\"params\":{\"depositTx\":\"RLP-encoded transaction to act as the deposit\"}},\"getEffectiveDepositVerifier()\":{\"return\":\"Contract address of the deposit verifier\"},\"setDepositVerifier(address)\":{\"details\":\"emit SetDepositVerifierCalledWhen one contract is already set, the next one is effective after 2 * MIN_EXIT_PERIOD.     This is to protect deposit transactions already in mempool,     and also make sure user only needs to SE within first week when invalid vault is registered.     *      see: https://github.com/omisego/plasma-contracts/issues/412          https://github.com/omisego/plasma-contracts/issues/173\",\"params\":{\"_verifier\":\"Address of the verifier contract\"}},\"withdraw(address,address,uint256)\":{\"params\":{\"amount\":\"Amount to transfer\",\"receiver\":\"Address of the recipient\",\"token\":\"Address of ERC20 token contract\"}}}},\"userdoc\":{\"methods\":{\"deposit(bytes)\":{\"notice\":\"Deposits approved amount of ERC20 token(s) into the contract Once the deposit is recognized, the owner (depositor) can transact on the OmiseGO Network The approve function of the ERC20 token contract must be called before calling this function for at least the amount that is deposited into the contract\"},\"getEffectiveDepositVerifier()\":{\"notice\":\"Retrieves the currently effective deposit verifier contract address\"},\"setDepositVerifier(address)\":{\"notice\":\"Sets the deposit verifier contract, which may be called only by the operator\"},\"withdraw(address,address,uint256)\":{\"notice\":\"Withdraw ERC20 tokens that have successfully exited from the OmiseGO Network\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/Erc20Vault.sol\":\"Erc20Vault\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/BlockController.sol\":{\"keccak256\":\"0xac302eceee96e5a83b7fdfb43d23389f516ff4b7322e5e094d7ad0b3be177c0b\",\"urls\":[\"bzz-raw://cf36aec949574838af497c6448000226d20aea4d0a787c746dd10775166df8a3\",\"dweb:/ipfs/QmQvD1DZfeidC1xiC3fnzTbCcgTTG9MuN6NNwKn965bVvC\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/ExitGameController.sol\":{\"keccak256\":\"0x136c47ad99baab47c0a90499bf359706d1d34bb7de8573ce3f2868bf1440acd8\",\"urls\":[\"bzz-raw://d1291a1b667dc916958dd9d0be246fe6e7601bc0c08be6a7e11747214a94ef59\",\"dweb:/ipfs/QmampH1Xg4Z5KzToYR5Sngt36EFL45psZWtdfstSm9AVoS\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/PlasmaFramework.sol\":{\"keccak256\":\"0x4b017fa7cae50fcf79803255fe0ffe8183e8f3934d9ac46a48235986f4714179\",\"urls\":[\"bzz-raw://30974a631b8c13aedea212390fcc1cf75472dc3f49a9c52eb33fc07c04b545e1\",\"dweb:/ipfs/QmT15Bw5NtE7b1RvVcmRXcGkEAL9BpbbgKwMtJBphXTbLd\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/Protocol.sol\":{\"keccak256\":\"0x81e37c136c340d917e370c58894761aee710bbef727414685490e405bc0f18e8\",\"urls\":[\"bzz-raw://7a54192b587531dd1adc33202479142afdf116385bab22daa153b8d4439d7333\",\"dweb:/ipfs/QmT37F3SCsWLf93okFrx1LUUr6c2zXCj28u2sjXXFBef2X\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/interfaces/IExitProcessor.sol\":{\"keccak256\":\"0x93c31f7c8ff69c80bd30f9296a7b2059affedadefc0c2cfb5c992eb1f1885fa2\",\"urls\":[\"bzz-raw://d56cb65fd67b07cec3bb17f48c064df4ea892780bf21d87d717e6581feb92ffd\",\"dweb:/ipfs/QmZZGPdSSN81c2P1CBnrCQD9mRWntPUPUjm4vCgWsBqS14\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/models/BlockModel.sol\":{\"keccak256\":\"0x7d26be621a43e2b8855f6c71f91c886d3b48ed809f421a1eee9c165c803d0cf7\",\"urls\":[\"bzz-raw://850b2acb61d96e9eb09d8bf24617ecf47aa948d6754b2d09d0e0d2b949193a2d\",\"dweb:/ipfs/QmW8yoi4jZxHAJf4bNjtt3nGckaWUEX92ZbgrKpoRHJGRM\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/registries/ExitGameRegistry.sol\":{\"keccak256\":\"0x4695a609c60b6be59bbc49ed6d3b14725bcc2efcecd083f8cabbcd3ddb399e68\",\"urls\":[\"bzz-raw://d31ca9188c426bbb2e8cf0fca61a9d451497408ddb4708cfc78d543b75fcb274\",\"dweb:/ipfs/QmawYeD9CCd5chGoB62zVKpk5Q9zJxhUUGJu7hUaCF5JXM\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/registries/VaultRegistry.sol\":{\"keccak256\":\"0x7786b4b8b043026655fa872f11ec747ef600100cc73da38369e1e2fd5047c95a\",\"urls\":[\"bzz-raw://b957490e53281e516290455b78722627f5536e0bd6b9bc17777f3f7a93ed9b14\",\"dweb:/ipfs/QmbUEwWfkTCSPPNEjAJUEXwgCCY9cBPgAKJagRbYQ3PSLE\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/utils/ExitPriority.sol\":{\"keccak256\":\"0x18a6c6b1f8c072e693d855bc8991ea4c51951f9058fd116253a1b8ccb6fc1647\",\"urls\":[\"bzz-raw://a22420b5f647d6108be8a3de23b5dd561f65b12dd804ead7edf5384407a506f3\",\"dweb:/ipfs/QmTd986YDqtwQ1eXqUP4esUBKxGthieXJWkQTsMJzewXgA\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/utils/PriorityQueue.sol\":{\"keccak256\":\"0xf46de2038d5fbc06f1aba7f36e7e02ead27485044ccf25afc2b9ad84ea705991\",\"urls\":[\"bzz-raw://a23fd7ad08f351743c7599fa546a0b54586e7e319c00c3e9d41c3aa10546ec5d\",\"dweb:/ipfs/QmWH32SoQmhyy7CE8u8g412e1AosogVE3eEBjrAh9MABvb\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/utils/Quarantine.sol\":{\"keccak256\":\"0x1b685ea3de626e3d8961d0e384a67c3e87752874784cc2e59777857d130f2390\",\"urls\":[\"bzz-raw://28c30354aa580476f230c4d8e151d34337b923caabc6bccfe560d75ef37d446e\",\"dweb:/ipfs/Qmf9nCYFBhHDyMgHmxX5pSkqLpqb2W3XffPopdkJTHmnAA\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/utils/OnlyFromAddress.sol\":{\"keccak256\":\"0x54d4cb74bf5c448bb383ff4ffce898473739a5ba015e439dae1c092c70df943f\",\"urls\":[\"bzz-raw://5c9efbe363534d6746573b9b0dda687d257272c3ce0123b6a45bc7eef55a40b4\",\"dweb:/ipfs/QmZPLF1bKdU6DAZZcxWfMudUwzeubLxsSk14x8hvUMj15X\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/utils/PosLib.sol\":{\"keccak256\":\"0xd47b38ef93cf913b6b7a3bf608dec2c084108d090cc02b222da3d8eb39819d5f\",\"urls\":[\"bzz-raw://c42d551c21adfa400d08108673b29e4bd1eec70aaa469287571071df3f8f0bc1\",\"dweb:/ipfs/Qmepq632azqUDHt5ypVwmkTfeQG8uP1HYw8x1H3Hdg9K6R\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/Erc20Vault.sol\":{\"keccak256\":\"0x99455fccb574d1f38b9e60f67c34de83d25b8d424f4fea57230a31d2ccbe7b27\",\"urls\":[\"bzz-raw://c8675482faefd4d812c62bbefbafe7d0ead7283235d10be290141e018d4b9024\",\"dweb:/ipfs/QmaNCn1ViB8FV4sCfVgVoLnhqj9GvLUWMQMdFTPc8mZWab\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/Vault.sol\":{\"keccak256\":\"0x2db04ba824e64bb121c7a3733654774198011c3b5a264a068c24146dc359444f\",\"urls\":[\"bzz-raw://c047c9e255606d272deccb90edf90ad3eb1bc65780726a91b16792e8e469f577\",\"dweb:/ipfs/QmP6rJfCpRdgbEDaYMr7wgHxM8PyBSk5KAdtVTbkSRXYyF\"]},\"/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/verifiers/IErc20DepositVerifier.sol\":{\"keccak256\":\"0xb9fdb4eb58e0fdb99331aa279586d9832c235bd4d814eecf522e80df0878e1fa\",\"urls\":[\"bzz-raw://579e40e92506f413c80b229af603a38073bd38ae85cfe0634046b4579b8a43f8\",\"dweb:/ipfs/QmZBnfJT52kV3QzdCoWf3ykbeCnb9E6syVuW1DvnwRjqXC\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzz-raw://d0abb99bb8bfc2bc0a89902b8ed1dc0442ad08cc78cee64c291b3df6a27bcccc\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]},\"openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf6f89424e17870561dc23c5933c55c5726b66a68d51ad2a2c00c569a5f02f507\",\"urls\":[\"bzz-raw://005657a7ffbf6d12726ac0167b55be965dc473d43f061b605f883a54cc00ab4f\",\"dweb:/ipfs/QmaBzyvDQyNnn6DXQYewEtN9Go85orikSnW9PwNWqUGPEX\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}",
  "bytecode": "0x60806040527f800000000000000000000000000000000000000000000000000000000000000060135534801561003457600080fd5b5060405162000dc638038062000dc68339818101604052602081101561005957600080fd5b5051600080546001600160a01b0319166001600160a01b0383161790558061007f610095565b61008d90600190601061015b565b5050506101d2565b61009d610199565b6100a5610199565b6040805160006020808301829052602180840183905284518085039091018152604190930190935281519190920120905b601081101561015257818382601081106100ec57fe5b60209081029190910191909152604080517f010000000000000000000000000000000000000000000000000000000000000081840152602181018590526041808201959095528151808203909501855260610190528251920191909120906001016100d6565b50909150505b90565b8260108101928215610189579160200282015b8281111561018957825182559160200191906001019061016e565b506101959291506101b8565b5090565b6040518061020001604052806010906020820280388339509192915050565b61015891905b8082111561019557600081556001016101be565b610be480620001e26000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806302e9b07b146100675780632c6ce78b146100a057806352518b7f146100c857806398b1e06a146100d0578063a7e5994f14610140578063d9caed121461015a575b600080fd5b6100846004803603602081101561007d57600080fd5b5035610190565b604080516001600160a01b039092168252519081900360200190f35b6100c6600480360360208110156100b657600080fd5b50356001600160a01b03166101ad565b005b6100846103df565b6100c6600480360360208110156100e657600080fd5b81019060208101813564010000000081111561010157600080fd5b82018360208201111561011357600080fd5b8035906020019184600183028401116401000000008311171561013557600080fd5b50909250905061040e565b6101486105d7565b60408051918252519081900360200190f35b6100c66004803603606081101561017057600080fd5b506001600160a01b038135811691602081013590911690604001356105dd565b6011816002811061019d57fe5b01546001600160a01b0316905081565b6000809054906101000a90046001600160a01b03166001600160a01b0316634b0a72bc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101fa57600080fd5b505afa15801561020e573d6000803e3d6000fd5b505050506040513d602081101561022457600080fd5b5051336001600160a01b03821614610283576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206164647265737320697320756e617574686f72697a65640000604482015290519081900360640190fd5b6001600160a01b0382166102c85760405162461bcd60e51b815260040180806020018281038252602f815260200180610af8602f913960400191505060405180910390fd5b6011546001600160a01b031615610383576102e16103df565b601180546001600160a01b03199081166001600160a01b0393841617909155601280549091168483161790556000546040805163d4a2b4ef60e01b81529051919092169163d4a2b4ef916004808301926020929190829003018186803b15801561034a57600080fd5b505afa15801561035e573d6000803e3d6000fd5b505050506040513d602081101561037457600080fd5b5051600202420160135561039f565b601180546001600160a01b0319166001600160a01b0384161790555b604080516001600160a01b038416815290517f11e5a7570e0de4b31179f8c9cf5e8a1e6cfd23731ec7a5a06e3006d71dd321fd9181900360200190a15050565b600060135442101561040257601160005b01546001600160a01b0316905061040b565b601160016103f0565b90565b60006104186103df565b90506001600160a01b03811661045f5760405162461bcd60e51b8152600401808060200182810382526021815260200180610b276021913960400191505060405180910390fd5b604051635970e69f60e11b81523360248201819052306044830181905260606004840190815260648401869052600093849384936001600160a01b0388169363b2e1cd3e938b938b93909290918190608401868680828437600081840152601f19601f8201169050808301925050509550505050505060606040518083038186803b1580156104ed57600080fd5b505afa158015610501573d6000803e3d6000fd5b505050506040513d606081101561051757600080fd5b508051602082015160409092015190945090925090506105486001600160a01b03831684308463ffffffff6106f916565b600061058987878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061075992505050565b6040805184815290519192506001600160a01b03851691839133917f18569122d84f30025bb8dffb33563f1bdbfb9637f21552b11b8305686e9cb3079181900360200190a450505050505050565b60135481565b60005460408051632d0816d760e11b815233600482015290516001600160a01b0390921691635a102dae91602480820192602092909190829003018186803b15801561062857600080fd5b505afa15801561063c573d6000803e3d6000fd5b505050506040513d602081101561065257600080fd5b505161068f5760405162461bcd60e51b815260040180806020018281038252603e815260200180610b72603e913960400191505060405180910390fd5b6106a96001600160a01b038316848363ffffffff6107eb16565b816001600160a01b0316836001600160a01b03167fcd43b20ab5058a2a0a057681c9d3754aa8971fe74dacc8b6e4be0a49dae13101836040518082815260200191505060405180910390a3505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610753908590610842565b50505050565b600080610765836109fa565b60008054604080516317cb58d360e31b815260048101859052905193945091926001600160a01b039091169163be5ac69891602480830192602092919082900301818787803b1580156107b757600080fd5b505af11580156107cb573d6000803e3d6000fd5b505050506040513d60208110156107e157600080fd5b5051949350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261083d908490610842565b505050565b610854826001600160a01b0316610af1565b6108a5576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106108e35780518252601f1990920191602091820191016108c4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610945576040519150601f19603f3d011682016040523d82523d6000602084013e61094a565b606091505b5091509150816109a1576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610753578080602001905160208110156109bd57600080fd5b50516107535760405162461bcd60e51b815260040180806020018281038252602a815260200180610b48602a913960400191505060405180910390fd5b60405160006020808301828152845192938493849387939260210191908401908083835b60208310610a3d5780518252601f199092019160209182019101610a1e565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405280519060200120905060008090505b6010811015610aea57600160f81b8260018360108110610a9d57fe5b0154604080516001600160f81b0319909416602080860191909152602185019390935260418085019290925280518085039092018252606190930190925281519101209150600101610a81565b5092915050565b3b15159056fe43616e6e6f742073657420616e20656d7074792061646472657373206173206465706f7369742076657269666965724465706f73697420766572696669657220686173206e6f74206265656e207365745361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656443616c6c65642066726f6d2061206e6f6e2d72656769737465726564206f722071756172616e74696e656420657869742067616d6520636f6e7472616374a265627a7a72315820a15dfb55c467c1a592f52c680819c223ec00eb4f895f64cd21eda539dff25b8564736f6c634300050b0032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806302e9b07b146100675780632c6ce78b146100a057806352518b7f146100c857806398b1e06a146100d0578063a7e5994f14610140578063d9caed121461015a575b600080fd5b6100846004803603602081101561007d57600080fd5b5035610190565b604080516001600160a01b039092168252519081900360200190f35b6100c6600480360360208110156100b657600080fd5b50356001600160a01b03166101ad565b005b6100846103df565b6100c6600480360360208110156100e657600080fd5b81019060208101813564010000000081111561010157600080fd5b82018360208201111561011357600080fd5b8035906020019184600183028401116401000000008311171561013557600080fd5b50909250905061040e565b6101486105d7565b60408051918252519081900360200190f35b6100c66004803603606081101561017057600080fd5b506001600160a01b038135811691602081013590911690604001356105dd565b6011816002811061019d57fe5b01546001600160a01b0316905081565b6000809054906101000a90046001600160a01b03166001600160a01b0316634b0a72bc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101fa57600080fd5b505afa15801561020e573d6000803e3d6000fd5b505050506040513d602081101561022457600080fd5b5051336001600160a01b03821614610283576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206164647265737320697320756e617574686f72697a65640000604482015290519081900360640190fd5b6001600160a01b0382166102c85760405162461bcd60e51b815260040180806020018281038252602f815260200180610af8602f913960400191505060405180910390fd5b6011546001600160a01b031615610383576102e16103df565b601180546001600160a01b03199081166001600160a01b0393841617909155601280549091168483161790556000546040805163d4a2b4ef60e01b81529051919092169163d4a2b4ef916004808301926020929190829003018186803b15801561034a57600080fd5b505afa15801561035e573d6000803e3d6000fd5b505050506040513d602081101561037457600080fd5b5051600202420160135561039f565b601180546001600160a01b0319166001600160a01b0384161790555b604080516001600160a01b038416815290517f11e5a7570e0de4b31179f8c9cf5e8a1e6cfd23731ec7a5a06e3006d71dd321fd9181900360200190a15050565b600060135442101561040257601160005b01546001600160a01b0316905061040b565b601160016103f0565b90565b60006104186103df565b90506001600160a01b03811661045f5760405162461bcd60e51b8152600401808060200182810382526021815260200180610b276021913960400191505060405180910390fd5b604051635970e69f60e11b81523360248201819052306044830181905260606004840190815260648401869052600093849384936001600160a01b0388169363b2e1cd3e938b938b93909290918190608401868680828437600081840152601f19601f8201169050808301925050509550505050505060606040518083038186803b1580156104ed57600080fd5b505afa158015610501573d6000803e3d6000fd5b505050506040513d606081101561051757600080fd5b508051602082015160409092015190945090925090506105486001600160a01b03831684308463ffffffff6106f916565b600061058987878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061075992505050565b6040805184815290519192506001600160a01b03851691839133917f18569122d84f30025bb8dffb33563f1bdbfb9637f21552b11b8305686e9cb3079181900360200190a450505050505050565b60135481565b60005460408051632d0816d760e11b815233600482015290516001600160a01b0390921691635a102dae91602480820192602092909190829003018186803b15801561062857600080fd5b505afa15801561063c573d6000803e3d6000fd5b505050506040513d602081101561065257600080fd5b505161068f5760405162461bcd60e51b815260040180806020018281038252603e815260200180610b72603e913960400191505060405180910390fd5b6106a96001600160a01b038316848363ffffffff6107eb16565b816001600160a01b0316836001600160a01b03167fcd43b20ab5058a2a0a057681c9d3754aa8971fe74dacc8b6e4be0a49dae13101836040518082815260200191505060405180910390a3505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610753908590610842565b50505050565b600080610765836109fa565b60008054604080516317cb58d360e31b815260048101859052905193945091926001600160a01b039091169163be5ac69891602480830192602092919082900301818787803b1580156107b757600080fd5b505af11580156107cb573d6000803e3d6000fd5b505050506040513d60208110156107e157600080fd5b5051949350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261083d908490610842565b505050565b610854826001600160a01b0316610af1565b6108a5576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106108e35780518252601f1990920191602091820191016108c4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610945576040519150601f19603f3d011682016040523d82523d6000602084013e61094a565b606091505b5091509150816109a1576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610753578080602001905160208110156109bd57600080fd5b50516107535760405162461bcd60e51b815260040180806020018281038252602a815260200180610b48602a913960400191505060405180910390fd5b60405160006020808301828152845192938493849387939260210191908401908083835b60208310610a3d5780518252601f199092019160209182019101610a1e565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405280519060200120905060008090505b6010811015610aea57600160f81b8260018360108110610a9d57fe5b0154604080516001600160f81b0319909416602080860191909152602185019390935260418085019290925280518085039092018252606190930190925281519101209150600101610a81565b5092915050565b3b15159056fe43616e6e6f742073657420616e20656d7074792061646472657373206173206465706f7369742076657269666965724465706f73697420766572696669657220686173206e6f74206265656e207365745361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656443616c6c65642066726f6d2061206e6f6e2d72656769737465726564206f722071756172616e74696e656420657869742067616d6520636f6e7472616374a265627a7a72315820a15dfb55c467c1a592f52c680819c223ec00eb4f895f64cd21eda539dff25b8564736f6c634300050b0032",
  "sourceMap": "273:1903:96:-;;;1015:8:98;962:61;;618:67:96;8:9:-1;5:2;;;30:1;27;20:12;5:2;618:67:96;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;618:67:96;1114:9:98;:22;;-1:-1:-1;;;;;;1114:22:98;-1:-1:-1;;;;;1114:22:98;;;;;618:67:96;1159:15:98;:13;:15::i;:::-;1146:28;;:10;;:28;;:::i;:::-;;1057:124;618:67:96;273:1903;;1294:378:98;1341:18;;:::i;:::-;1371:25;;:::i;:::-;1435:39;;;1406:16;1435:39;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1435:39:98;;;;;;;1425:50;;;;;;;;1485:158;1506:2;1502:1;:6;1485:158;;;1541:8;1529:6;1536:1;1529:9;;;;;;;;;;;;;;;:20;;;;1584:47;;;1601:9;1584:47;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1584:47:98;;;;1574:58;;;;;;;;;456:4;1510:3;1485:158;;;-1:-1:-1;1659:6:98;;-1:-1:-1;;1294:378:98;;:::o;273:1903:96:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;273:1903:96;;;-1:-1:-1;273:1903:96;:::i;:::-;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;273:1903:96;;;-1:-1:-1;;273:1903:96:o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "273:1903:96:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;273:1903:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;922:34:98;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;922:34:98;;:::i;:::-;;;;-1:-1:-1;;;;;922:34:98;;;;;;;;;;;;;;2670:560;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2670:560:98;-1:-1:-1;;;;;2670:560:98;;:::i;:::-;;3391:240;;;:::i;1117:578:96:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1117:578:96;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;1117:578:96;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1117:578:96;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1117:578:96;;-1:-1:-1;1117:578:96;-1:-1:-1;1117:578:96;:::i;962:61:98:-;;;:::i;:::-;;;;;;;;;;;;;;;;1944:230:96;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1944:230:96;;;;;;;;;;;;;;;;;:::i;922:34:98:-;;;;;;;;;;;;-1:-1:-1;;;;;922:34:98;;-1:-1:-1;922:34:98;:::o;2670:560::-;2733:9;;;;;;;;;-1:-1:-1;;;;;2733:9:98;-1:-1:-1;;;;;2733:23:98;;:25;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2733:25:98;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2733:25:98;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2733:25:98;109:10:91;-1:-1:-1;;;;;109:20:91;;;101:63;;;;;-1:-1:-1;;;101:63:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2778:23:98;;2770:83;;;;-1:-1:-1;;;2770:83:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2868:16;:19;-1:-1:-1;;;;;2868:19:98;:33;2864:309;;2939:29;:27;:29::i;:::-;2917:16;:51;;-1:-1:-1;;;;;;2917:51:98;;;-1:-1:-1;;;;;2917:51:98;;;;;;;2982:19;:31;;;;;;;;;;;-1:-1:-1;3075:9:98;:25;;;-1:-1:-1;;;3075:25:98;;;;:9;;;;;:23;;:25;;;;;;;;;;;;;;:9;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;3075:25:98;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3075:25:98;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3075:25:98;3071:1;:29;3065:3;:35;3027;:73;2864:309;;;3131:16;:31;;-1:-1:-1;;;;;;3131:31:98;-1:-1:-1;;;;;3131:31:98;;;;;2864:309;3188:35;;;-1:-1:-1;;;;;3188:35:98;;;;;;;;;;;;;;;2670:560;;:::o;3391:240::-;3451:7;3480:35;;3474:3;:41;3470:155;;;3538:16;3555:1;3538:19;;;-1:-1:-1;;;;;3538:19:98;;-1:-1:-1;3531:26:98;;3470:155;3595:16;3612:1;3595:19;;3470:155;3391:240;:::o;1117:578:96:-;1179:23;1205:35;:33;:35::i;:::-;1179:61;-1:-1:-1;;;;;;1258:29:96;;1250:75;;;;-1:-1:-1;;;1250:75:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1389:96;;-1:-1:-1;;;1389:96:96;;1459:10;1389:96;;;;;;1479:4;1389:96;;;;;;;;;;;;;;;;;;;1337:17;;;;;;-1:-1:-1;;;;;1389:58:96;;;;;1448:9;;;;1459:10;;1479:4;;1389:96;;;;1448:9;;;;1389:96;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1389:96:96;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1389:96:96;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1389:96:96;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1389:96:96;;;;;;;;;;;;;-1:-1:-1;1389:96:96;;-1:-1:-1;1389:96:96;-1:-1:-1;1496:64:96;-1:-1:-1;;;;;1496:30:96;;1389:96;1546:4;1389:96;1496:64;:30;:64;:::i;:::-;1571:14;1588:35;1613:9;;1588:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1588:24:96;;-1:-1:-1;;;1588:35:96:i;:::-;1639:49;;;;;;;;1571:52;;-1:-1:-1;;;;;;1639:49:96;;;1571:52;;1654:10;;1639:49;;;;;;;;;1117:578;;;;;;;:::o;962:61:98:-;;;;:::o;1944:230:96:-;1875:9:98;;1858:59;;;-1:-1:-1;;;1858:59:98;;1906:10;1858:59;;;;;;-1:-1:-1;;;;;1875:9:98;;;;1858:47;;:59;;;;;;;;;;;;;;;1875:9;1858:59;;;5:2:-1;;;;30:1;27;20:12;5:2;1858:59:98;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1858:59:98;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1858:59:98;1837:168;;;;-1:-1:-1;;;1837:168:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2069:44:96;-1:-1:-1;;;;;2069:26:96;;2096:8;2106:6;2069:44;:26;:44;:::i;:::-;2153:5;-1:-1:-1;;;;;2128:39:96;2143:8;-1:-1:-1;;;;;2128:39:96;;2160:6;2128:39;;;;;;;;;;;;;;;;;;1944:230;;;:::o;842:202:112:-;968:68;;;-1:-1:-1;;;;;968:68:112;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;968:68:112;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;942:95:112;;961:5;;942:18;:95::i;:::-;842:202;;;;:::o;3802:240:98:-;3872:7;3891:12;3906:30;3926:9;3906:19;:30::i;:::-;3947:21;3971:9;;:34;;;-1:-1:-1;;;3971:34:98;;;;;;;;;;3891:45;;-1:-1:-1;3947:21:98;;-1:-1:-1;;;;;3971:9:98;;;;:28;;:34;;;;;;;;;;;;;;3947:21;3971:9;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;3971:34:98;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3971:34:98;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3971:34:98;;3802:240;-1:-1:-1;;;;3802:240:98:o;662:174:112:-;770:58;;;-1:-1:-1;;;;;770:58:112;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;770:58:112;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;744:85:112;;763:5;;744:18;:85::i;:::-;662:174;;;:::o;2621:1095::-;3216:27;3224:5;-1:-1:-1;;;;;3216:25:112;;:27::i;:::-;3208:71;;;;;-1:-1:-1;;;3208:71:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;3350:12;3364:23;3399:5;-1:-1:-1;;;;;3391:19:112;3411:4;3391:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3391:25:112;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;3349:67:112;;;;3434:7;3426:52;;;;;-1:-1:-1;;;3426:52:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3493:17;;:21;3489:221;;3633:10;3622:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3622:30:112;3614:85;;;;-1:-1:-1;;;3614:85:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4048:316:98;4167:38;;4123:7;4167:38;;;;;;;;;4123:7;;;;;;4195:9;;4167:38;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4167:38:98;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4167:38:98;;;4157:49;;;;;;4142:64;;4221:6;4230:1;4221:10;;4216:121;4237:2;4233:1;:6;4216:121;;;-1:-1:-1;;;4305:4:98;456;4322:1;4311:13;;;;;;;;;4277:48;;;-1:-1:-1;;;;;;4277:48:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4277:48:98;;;;;;;4267:59;;;;;;-1:-1:-1;4277:48:98;4241:3;4216:121;;;-1:-1:-1;4353:4:98;4048:316;-1:-1:-1;;4048:316:98:o;542:413:113:-;902:20;940:8;;;542:413::o",
  "source": "pragma solidity 0.5.11;\n\nimport \"./Vault.sol\";\nimport \"./verifiers/IErc20DepositVerifier.sol\";\nimport \"../framework/PlasmaFramework.sol\";\n\nimport \"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\";\n\ncontract Erc20Vault is Vault {\n    using SafeERC20 for IERC20;\n\n    event Erc20Withdrawn(\n        address indexed receiver,\n        address indexed token,\n        uint256 amount\n    );\n\n    event DepositCreated(\n        address indexed depositor,\n        uint256 indexed blknum,\n        address indexed token,\n        uint256 amount\n    );\n\n    constructor(PlasmaFramework _framework) public Vault(_framework) {}\n\n    /**\n     * @notice Deposits approved amount of ERC20 token(s) into the contract\n     * Once the deposit is recognized, the owner (depositor) can transact on the OmiseGO Network\n     * The approve function of the ERC20 token contract must be called before calling this function\n     * for at least the amount that is deposited into the contract\n     * @param depositTx RLP-encoded transaction to act as the deposit\n     */\n    function deposit(bytes calldata depositTx) external {\n        address depositVerifier = super.getEffectiveDepositVerifier();\n        require(depositVerifier != address(0), \"Deposit verifier has not been set\");\n\n        (address depositor, address token, uint256 amount) = IErc20DepositVerifier(depositVerifier)\n            .verify(depositTx, msg.sender, address(this));\n\n        IERC20(token).safeTransferFrom(depositor, address(this), amount);\n\n        uint256 blknum = super.submitDepositBlock(depositTx);\n\n        emit DepositCreated(msg.sender, blknum, token, amount);\n    }\n\n    /**\n    * @notice Withdraw ERC20 tokens that have successfully exited from the OmiseGO Network\n    * @param receiver Address of the recipient\n    * @param token Address of ERC20 token contract\n    * @param amount Amount to transfer\n    */\n    function withdraw(address payable receiver, address token, uint256 amount) external onlyFromNonQuarantinedExitGame {\n        IERC20(token).safeTransfer(receiver, amount);\n        emit Erc20Withdrawn(receiver, token, amount);\n    }\n}\n",
  "sourcePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/Erc20Vault.sol",
  "ast": {
    "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/Erc20Vault.sol",
    "exportedSymbols": {
      "Erc20Vault": [
        15262
      ]
    },
    "id": 15263,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 15133,
        "literals": [
          "solidity",
          "0.5",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:96"
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/Vault.sol",
        "file": "./Vault.sol",
        "id": 15134,
        "nodeType": "ImportDirective",
        "scope": 15263,
        "sourceUnit": 15664,
        "src": "25:21:96",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/verifiers/IErc20DepositVerifier.sol",
        "file": "./verifiers/IErc20DepositVerifier.sol",
        "id": 15135,
        "nodeType": "ImportDirective",
        "scope": 15263,
        "sourceUnit": 15966,
        "src": "47:47:96",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/PlasmaFramework.sol",
        "file": "../framework/PlasmaFramework.sol",
        "id": 15136,
        "nodeType": "ImportDirective",
        "scope": 15263,
        "sourceUnit": 12153,
        "src": "95:42:96",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
        "id": 15137,
        "nodeType": "ImportDirective",
        "scope": 15263,
        "sourceUnit": 17051,
        "src": "139:64:96",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol",
        "id": 15138,
        "nodeType": "ImportDirective",
        "scope": 15263,
        "sourceUnit": 17270,
        "src": "204:67:96",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 15139,
              "name": "Vault",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15663,
              "src": "296:5:96",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Vault_$15663",
                "typeString": "contract Vault"
              }
            },
            "id": 15140,
            "nodeType": "InheritanceSpecifier",
            "src": "296:5:96"
          }
        ],
        "contractDependencies": [
          14291,
          15663
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 15262,
        "linearizedBaseContracts": [
          15262,
          15663,
          14291
        ],
        "name": "Erc20Vault",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 15143,
            "libraryName": {
              "contractScope": null,
              "id": 15141,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 17269,
              "src": "314:9:96",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$17269",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "308:27:96",
            "typeName": {
              "contractScope": null,
              "id": 15142,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 17050,
              "src": "328:6:96",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$17050",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 15151,
            "name": "Erc20Withdrawn",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 15150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15145,
                  "indexed": true,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 15151,
                  "src": "371:24:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15144,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "371:7:96",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15147,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 15151,
                  "src": "405:21:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15146,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "405:7:96",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15149,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 15151,
                  "src": "436:14:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15148,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "436:7:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "361:95:96"
            },
            "src": "341:116:96"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 15161,
            "name": "DepositCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 15160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15153,
                  "indexed": true,
                  "name": "depositor",
                  "nodeType": "VariableDeclaration",
                  "scope": 15161,
                  "src": "493:25:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "493:7:96",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15155,
                  "indexed": true,
                  "name": "blknum",
                  "nodeType": "VariableDeclaration",
                  "scope": 15161,
                  "src": "528:22:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15154,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "528:7:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15157,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 15161,
                  "src": "560:21:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15156,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "560:7:96",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15159,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 15161,
                  "src": "591:14:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15158,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "591:7:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "483:128:96"
            },
            "src": "463:149:96"
          },
          {
            "body": {
              "id": 15169,
              "nodeType": "Block",
              "src": "683:2:96",
              "statements": []
            },
            "documentation": null,
            "id": 15170,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 15166,
                    "name": "_framework",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15163,
                    "src": "671:10:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PlasmaFramework_$12152",
                      "typeString": "contract PlasmaFramework"
                    }
                  }
                ],
                "id": 15167,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 15165,
                  "name": "Vault",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 15663,
                  "src": "665:5:96",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Vault_$15663_$",
                    "typeString": "type(contract Vault)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "665:17:96"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15163,
                  "name": "_framework",
                  "nodeType": "VariableDeclaration",
                  "scope": 15170,
                  "src": "630:26:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_PlasmaFramework_$12152",
                    "typeString": "contract PlasmaFramework"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 15162,
                    "name": "PlasmaFramework",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12152,
                    "src": "630:15:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PlasmaFramework_$12152",
                      "typeString": "contract PlasmaFramework"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "629:28:96"
            },
            "returnParameters": {
              "id": 15168,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "683:0:96"
            },
            "scope": 15262,
            "src": "618:67:96",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15234,
              "nodeType": "Block",
              "src": "1169:526:96",
              "statements": [
                {
                  "assignments": [
                    15176
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15176,
                      "name": "depositVerifier",
                      "nodeType": "VariableDeclaration",
                      "scope": 15234,
                      "src": "1179:23:96",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15175,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1179:7:96",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15180,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 15177,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17386,
                        "src": "1205:5:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_Erc20Vault_$15262",
                          "typeString": "contract super Erc20Vault"
                        }
                      },
                      "id": 15178,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getEffectiveDepositVerifier",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15594,
                      "src": "1205:33:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 15179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1205:35:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1179:61:96"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 15186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 15182,
                          "name": "depositVerifier",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15176,
                          "src": "1258:15:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 15184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1285:1:96",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 15183,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1277:7:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 15185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1277:10:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1258:29:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f73697420766572696669657220686173206e6f74206265656e20736574",
                        "id": 15187,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1289:35:96",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b42006fba6f0d3356831fe67edf97c0fb3b90293873f1de2d7507016ee49ec70",
                          "typeString": "literal_string \"Deposit verifier has not been set\""
                        },
                        "value": "Deposit verifier has not been set"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b42006fba6f0d3356831fe67edf97c0fb3b90293873f1de2d7507016ee49ec70",
                          "typeString": "literal_string \"Deposit verifier has not been set\""
                        }
                      ],
                      "id": 15181,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17306,
                        17307
                      ],
                      "referencedDeclaration": 17307,
                      "src": "1250:7:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1250:75:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15189,
                  "nodeType": "ExpressionStatement",
                  "src": "1250:75:96"
                },
                {
                  "assignments": [
                    15191,
                    15193,
                    15195
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15191,
                      "name": "depositor",
                      "nodeType": "VariableDeclaration",
                      "scope": 15234,
                      "src": "1337:17:96",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15190,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1337:7:96",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 15193,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 15234,
                      "src": "1356:13:96",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15192,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1356:7:96",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 15195,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 15234,
                      "src": "1371:14:96",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15194,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1371:7:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15207,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15200,
                        "name": "depositTx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15172,
                        "src": "1448:9:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 15201,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17303,
                          "src": "1459:3:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 15202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1459:10:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15204,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17385,
                            "src": "1479:4:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Erc20Vault_$15262",
                              "typeString": "contract Erc20Vault"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Erc20Vault_$15262",
                              "typeString": "contract Erc20Vault"
                            }
                          ],
                          "id": 15203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1471:7:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 15205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1471:13:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15197,
                            "name": "depositVerifier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15176,
                            "src": "1411:15:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 15196,
                          "name": "IErc20DepositVerifier",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15965,
                          "src": "1389:21:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IErc20DepositVerifier_$15965_$",
                            "typeString": "type(contract IErc20DepositVerifier)"
                          }
                        },
                        "id": 15198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1389:38:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IErc20DepositVerifier_$15965",
                          "typeString": "contract IErc20DepositVerifier"
                        }
                      },
                      "id": 15199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "verify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15964,
                      "src": "1389:58:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$_t_address_$_t_address_$returns$_t_address_$_t_address_$_t_uint256_$",
                        "typeString": "function (bytes memory,address,address) view external returns (address,address,uint256)"
                      }
                    },
                    "id": 15206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1389:96:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                      "typeString": "tuple(address,address,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1336:149:96"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15212,
                        "name": "depositor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15191,
                        "src": "1527:9:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15214,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17385,
                            "src": "1546:4:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Erc20Vault_$15262",
                              "typeString": "contract Erc20Vault"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Erc20Vault_$15262",
                              "typeString": "contract Erc20Vault"
                            }
                          ],
                          "id": 15213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1538:7:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 15215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1538:13:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15216,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15195,
                        "src": "1553:6:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15209,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15193,
                            "src": "1503:5:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 15208,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17050,
                          "src": "1496:6:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$17050_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 15210,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1496:13:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$17050",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 15211,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17108,
                      "src": "1496:30:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17050_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$17050_$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 15217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1496:64:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15218,
                  "nodeType": "ExpressionStatement",
                  "src": "1496:64:96"
                },
                {
                  "assignments": [
                    15220
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15220,
                      "name": "blknum",
                      "nodeType": "VariableDeclaration",
                      "scope": 15234,
                      "src": "1571:14:96",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15219,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1571:7:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15225,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15223,
                        "name": "depositTx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15172,
                        "src": "1613:9:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 15221,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17386,
                        "src": "1588:5:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_Erc20Vault_$15262",
                          "typeString": "contract super Erc20Vault"
                        }
                      },
                      "id": 15222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "submitDepositBlock",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15617,
                      "src": "1588:24:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (bytes memory) returns (uint256)"
                      }
                    },
                    "id": 15224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1588:35:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1571:52:96"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 15227,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17303,
                          "src": "1654:3:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 15228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1654:10:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15229,
                        "name": "blknum",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15220,
                        "src": "1666:6:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15230,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15193,
                        "src": "1674:5:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15231,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15195,
                        "src": "1681:6:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15226,
                      "name": "DepositCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15161,
                      "src": "1639:14:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,address,uint256)"
                      }
                    },
                    "id": 15232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1639:49:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15233,
                  "nodeType": "EmitStatement",
                  "src": "1634:54:96"
                }
              ]
            },
            "documentation": "@notice Deposits approved amount of ERC20 token(s) into the contract\nOnce the deposit is recognized, the owner (depositor) can transact on the OmiseGO Network\nThe approve function of the ERC20 token contract must be called before calling this function\nfor at least the amount that is deposited into the contract\n@param depositTx RLP-encoded transaction to act as the deposit",
            "id": 15235,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15173,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15172,
                  "name": "depositTx",
                  "nodeType": "VariableDeclaration",
                  "scope": 15235,
                  "src": "1134:24:96",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 15171,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1134:5:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1133:26:96"
            },
            "returnParameters": {
              "id": 15174,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1169:0:96"
            },
            "scope": 15262,
            "src": "1117:578:96",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 15260,
              "nodeType": "Block",
              "src": "2059:115:96",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15250,
                        "name": "receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15237,
                        "src": "2096:8:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15251,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15241,
                        "src": "2106:6:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15247,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15239,
                            "src": "2076:5:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 15246,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17050,
                          "src": "2069:6:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$17050_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 15248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2069:13:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$17050",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 15249,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17083,
                      "src": "2069:26:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17050_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$17050_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 15252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2069:44:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15253,
                  "nodeType": "ExpressionStatement",
                  "src": "2069:44:96"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15255,
                        "name": "receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15237,
                        "src": "2143:8:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15256,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15239,
                        "src": "2153:5:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15257,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15241,
                        "src": "2160:6:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15254,
                      "name": "Erc20Withdrawn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15151,
                      "src": "2128:14:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15258,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2128:39:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15259,
                  "nodeType": "EmitStatement",
                  "src": "2123:44:96"
                }
              ]
            },
            "documentation": "@notice Withdraw ERC20 tokens that have successfully exited from the OmiseGO Network\n@param receiver Address of the recipient\n@param token Address of ERC20 token contract\n@param amount Amount to transfer",
            "id": 15261,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 15244,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 15243,
                  "name": "onlyFromNonQuarantinedExitGame",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 15511,
                  "src": "2028:30:96",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2028:30:96"
              }
            ],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15237,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 15261,
                  "src": "1962:24:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 15236,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1962:15:96",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15239,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 15261,
                  "src": "1988:13:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15238,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1988:7:96",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15241,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 15261,
                  "src": "2003:14:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15240,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2003:7:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1961:57:96"
            },
            "returnParameters": {
              "id": 15245,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2059:0:96"
            },
            "scope": 15262,
            "src": "1944:230:96",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 15263,
        "src": "273:1903:96"
      }
    ],
    "src": "0:2177:96"
  },
  "legacyAST": {
    "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/Erc20Vault.sol",
    "exportedSymbols": {
      "Erc20Vault": [
        15262
      ]
    },
    "id": 15263,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 15133,
        "literals": [
          "solidity",
          "0.5",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:96"
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/Vault.sol",
        "file": "./Vault.sol",
        "id": 15134,
        "nodeType": "ImportDirective",
        "scope": 15263,
        "sourceUnit": 15664,
        "src": "25:21:96",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/vaults/verifiers/IErc20DepositVerifier.sol",
        "file": "./verifiers/IErc20DepositVerifier.sol",
        "id": 15135,
        "nodeType": "ImportDirective",
        "scope": 15263,
        "sourceUnit": 15966,
        "src": "47:47:96",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/nocholas/plasma-contracts/plasma_framework/contracts/src/framework/PlasmaFramework.sol",
        "file": "../framework/PlasmaFramework.sol",
        "id": 15136,
        "nodeType": "ImportDirective",
        "scope": 15263,
        "sourceUnit": 12153,
        "src": "95:42:96",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
        "id": 15137,
        "nodeType": "ImportDirective",
        "scope": 15263,
        "sourceUnit": 17051,
        "src": "139:64:96",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol",
        "id": 15138,
        "nodeType": "ImportDirective",
        "scope": 15263,
        "sourceUnit": 17270,
        "src": "204:67:96",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 15139,
              "name": "Vault",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15663,
              "src": "296:5:96",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Vault_$15663",
                "typeString": "contract Vault"
              }
            },
            "id": 15140,
            "nodeType": "InheritanceSpecifier",
            "src": "296:5:96"
          }
        ],
        "contractDependencies": [
          14291,
          15663
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 15262,
        "linearizedBaseContracts": [
          15262,
          15663,
          14291
        ],
        "name": "Erc20Vault",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 15143,
            "libraryName": {
              "contractScope": null,
              "id": 15141,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 17269,
              "src": "314:9:96",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$17269",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "308:27:96",
            "typeName": {
              "contractScope": null,
              "id": 15142,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 17050,
              "src": "328:6:96",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$17050",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 15151,
            "name": "Erc20Withdrawn",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 15150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15145,
                  "indexed": true,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 15151,
                  "src": "371:24:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15144,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "371:7:96",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15147,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 15151,
                  "src": "405:21:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15146,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "405:7:96",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15149,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 15151,
                  "src": "436:14:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15148,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "436:7:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "361:95:96"
            },
            "src": "341:116:96"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 15161,
            "name": "DepositCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 15160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15153,
                  "indexed": true,
                  "name": "depositor",
                  "nodeType": "VariableDeclaration",
                  "scope": 15161,
                  "src": "493:25:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "493:7:96",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15155,
                  "indexed": true,
                  "name": "blknum",
                  "nodeType": "VariableDeclaration",
                  "scope": 15161,
                  "src": "528:22:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15154,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "528:7:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15157,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 15161,
                  "src": "560:21:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15156,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "560:7:96",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15159,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 15161,
                  "src": "591:14:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15158,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "591:7:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "483:128:96"
            },
            "src": "463:149:96"
          },
          {
            "body": {
              "id": 15169,
              "nodeType": "Block",
              "src": "683:2:96",
              "statements": []
            },
            "documentation": null,
            "id": 15170,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 15166,
                    "name": "_framework",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15163,
                    "src": "671:10:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PlasmaFramework_$12152",
                      "typeString": "contract PlasmaFramework"
                    }
                  }
                ],
                "id": 15167,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 15165,
                  "name": "Vault",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 15663,
                  "src": "665:5:96",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Vault_$15663_$",
                    "typeString": "type(contract Vault)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "665:17:96"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15163,
                  "name": "_framework",
                  "nodeType": "VariableDeclaration",
                  "scope": 15170,
                  "src": "630:26:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_PlasmaFramework_$12152",
                    "typeString": "contract PlasmaFramework"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 15162,
                    "name": "PlasmaFramework",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12152,
                    "src": "630:15:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PlasmaFramework_$12152",
                      "typeString": "contract PlasmaFramework"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "629:28:96"
            },
            "returnParameters": {
              "id": 15168,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "683:0:96"
            },
            "scope": 15262,
            "src": "618:67:96",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15234,
              "nodeType": "Block",
              "src": "1169:526:96",
              "statements": [
                {
                  "assignments": [
                    15176
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15176,
                      "name": "depositVerifier",
                      "nodeType": "VariableDeclaration",
                      "scope": 15234,
                      "src": "1179:23:96",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15175,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1179:7:96",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15180,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 15177,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17386,
                        "src": "1205:5:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_Erc20Vault_$15262",
                          "typeString": "contract super Erc20Vault"
                        }
                      },
                      "id": 15178,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getEffectiveDepositVerifier",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15594,
                      "src": "1205:33:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 15179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1205:35:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1179:61:96"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 15186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 15182,
                          "name": "depositVerifier",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15176,
                          "src": "1258:15:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 15184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1285:1:96",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 15183,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1277:7:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 15185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1277:10:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1258:29:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f73697420766572696669657220686173206e6f74206265656e20736574",
                        "id": 15187,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1289:35:96",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b42006fba6f0d3356831fe67edf97c0fb3b90293873f1de2d7507016ee49ec70",
                          "typeString": "literal_string \"Deposit verifier has not been set\""
                        },
                        "value": "Deposit verifier has not been set"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b42006fba6f0d3356831fe67edf97c0fb3b90293873f1de2d7507016ee49ec70",
                          "typeString": "literal_string \"Deposit verifier has not been set\""
                        }
                      ],
                      "id": 15181,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17306,
                        17307
                      ],
                      "referencedDeclaration": 17307,
                      "src": "1250:7:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1250:75:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15189,
                  "nodeType": "ExpressionStatement",
                  "src": "1250:75:96"
                },
                {
                  "assignments": [
                    15191,
                    15193,
                    15195
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15191,
                      "name": "depositor",
                      "nodeType": "VariableDeclaration",
                      "scope": 15234,
                      "src": "1337:17:96",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15190,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1337:7:96",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 15193,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 15234,
                      "src": "1356:13:96",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 15192,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1356:7:96",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 15195,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 15234,
                      "src": "1371:14:96",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15194,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1371:7:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15207,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15200,
                        "name": "depositTx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15172,
                        "src": "1448:9:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 15201,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17303,
                          "src": "1459:3:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 15202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1459:10:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15204,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17385,
                            "src": "1479:4:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Erc20Vault_$15262",
                              "typeString": "contract Erc20Vault"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Erc20Vault_$15262",
                              "typeString": "contract Erc20Vault"
                            }
                          ],
                          "id": 15203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1471:7:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 15205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1471:13:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15197,
                            "name": "depositVerifier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15176,
                            "src": "1411:15:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 15196,
                          "name": "IErc20DepositVerifier",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15965,
                          "src": "1389:21:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IErc20DepositVerifier_$15965_$",
                            "typeString": "type(contract IErc20DepositVerifier)"
                          }
                        },
                        "id": 15198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1389:38:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IErc20DepositVerifier_$15965",
                          "typeString": "contract IErc20DepositVerifier"
                        }
                      },
                      "id": 15199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "verify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15964,
                      "src": "1389:58:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$_t_address_$_t_address_$returns$_t_address_$_t_address_$_t_uint256_$",
                        "typeString": "function (bytes memory,address,address) view external returns (address,address,uint256)"
                      }
                    },
                    "id": 15206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1389:96:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                      "typeString": "tuple(address,address,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1336:149:96"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15212,
                        "name": "depositor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15191,
                        "src": "1527:9:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15214,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17385,
                            "src": "1546:4:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Erc20Vault_$15262",
                              "typeString": "contract Erc20Vault"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Erc20Vault_$15262",
                              "typeString": "contract Erc20Vault"
                            }
                          ],
                          "id": 15213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1538:7:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 15215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1538:13:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15216,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15195,
                        "src": "1553:6:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15209,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15193,
                            "src": "1503:5:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 15208,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17050,
                          "src": "1496:6:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$17050_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 15210,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1496:13:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$17050",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 15211,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17108,
                      "src": "1496:30:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17050_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$17050_$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 15217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1496:64:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15218,
                  "nodeType": "ExpressionStatement",
                  "src": "1496:64:96"
                },
                {
                  "assignments": [
                    15220
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15220,
                      "name": "blknum",
                      "nodeType": "VariableDeclaration",
                      "scope": 15234,
                      "src": "1571:14:96",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15219,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1571:7:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15225,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15223,
                        "name": "depositTx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15172,
                        "src": "1613:9:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 15221,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17386,
                        "src": "1588:5:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_Erc20Vault_$15262",
                          "typeString": "contract super Erc20Vault"
                        }
                      },
                      "id": 15222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "submitDepositBlock",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15617,
                      "src": "1588:24:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (bytes memory) returns (uint256)"
                      }
                    },
                    "id": 15224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1588:35:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1571:52:96"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 15227,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17303,
                          "src": "1654:3:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 15228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1654:10:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15229,
                        "name": "blknum",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15220,
                        "src": "1666:6:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15230,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15193,
                        "src": "1674:5:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15231,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15195,
                        "src": "1681:6:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15226,
                      "name": "DepositCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15161,
                      "src": "1639:14:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,address,uint256)"
                      }
                    },
                    "id": 15232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1639:49:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15233,
                  "nodeType": "EmitStatement",
                  "src": "1634:54:96"
                }
              ]
            },
            "documentation": "@notice Deposits approved amount of ERC20 token(s) into the contract\nOnce the deposit is recognized, the owner (depositor) can transact on the OmiseGO Network\nThe approve function of the ERC20 token contract must be called before calling this function\nfor at least the amount that is deposited into the contract\n@param depositTx RLP-encoded transaction to act as the deposit",
            "id": 15235,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15173,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15172,
                  "name": "depositTx",
                  "nodeType": "VariableDeclaration",
                  "scope": 15235,
                  "src": "1134:24:96",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 15171,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1134:5:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1133:26:96"
            },
            "returnParameters": {
              "id": 15174,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1169:0:96"
            },
            "scope": 15262,
            "src": "1117:578:96",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 15260,
              "nodeType": "Block",
              "src": "2059:115:96",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15250,
                        "name": "receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15237,
                        "src": "2096:8:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15251,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15241,
                        "src": "2106:6:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15247,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15239,
                            "src": "2076:5:96",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 15246,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17050,
                          "src": "2069:6:96",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$17050_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 15248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2069:13:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$17050",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 15249,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17083,
                      "src": "2069:26:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17050_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$17050_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 15252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2069:44:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15253,
                  "nodeType": "ExpressionStatement",
                  "src": "2069:44:96"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15255,
                        "name": "receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15237,
                        "src": "2143:8:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15256,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15239,
                        "src": "2153:5:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15257,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15241,
                        "src": "2160:6:96",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15254,
                      "name": "Erc20Withdrawn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15151,
                      "src": "2128:14:96",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 15258,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2128:39:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15259,
                  "nodeType": "EmitStatement",
                  "src": "2123:44:96"
                }
              ]
            },
            "documentation": "@notice Withdraw ERC20 tokens that have successfully exited from the OmiseGO Network\n@param receiver Address of the recipient\n@param token Address of ERC20 token contract\n@param amount Amount to transfer",
            "id": 15261,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 15244,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 15243,
                  "name": "onlyFromNonQuarantinedExitGame",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 15511,
                  "src": "2028:30:96",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2028:30:96"
              }
            ],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15237,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 15261,
                  "src": "1962:24:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 15236,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1962:15:96",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15239,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 15261,
                  "src": "1988:13:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15238,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1988:7:96",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15241,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 15261,
                  "src": "2003:14:96",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15240,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2003:7:96",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1961:57:96"
            },
            "returnParameters": {
              "id": 15245,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2059:0:96"
            },
            "scope": 15262,
            "src": "1944:230:96",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 15263,
        "src": "273:1903:96"
      }
    ],
    "src": "0:2177:96"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.11+commit.c082d0b4.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.16",
  "updatedAt": "2020-02-19T07:32:15.001Z",
  "devdoc": {
    "methods": {
      "deposit(bytes)": {
        "params": {
          "depositTx": "RLP-encoded transaction to act as the deposit"
        }
      },
      "getEffectiveDepositVerifier()": {
        "return": "Contract address of the deposit verifier"
      },
      "setDepositVerifier(address)": {
        "details": "emit SetDepositVerifierCalledWhen one contract is already set, the next one is effective after 2 * MIN_EXIT_PERIOD.     This is to protect deposit transactions already in mempool,     and also make sure user only needs to SE within first week when invalid vault is registered.     *      see: https://github.com/omisego/plasma-contracts/issues/412          https://github.com/omisego/plasma-contracts/issues/173",
        "params": {
          "_verifier": "Address of the verifier contract"
        }
      },
      "withdraw(address,address,uint256)": {
        "params": {
          "amount": "Amount to transfer",
          "receiver": "Address of the recipient",
          "token": "Address of ERC20 token contract"
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "deposit(bytes)": {
        "notice": "Deposits approved amount of ERC20 token(s) into the contract Once the deposit is recognized, the owner (depositor) can transact on the OmiseGO Network The approve function of the ERC20 token contract must be called before calling this function for at least the amount that is deposited into the contract"
      },
      "getEffectiveDepositVerifier()": {
        "notice": "Retrieves the currently effective deposit verifier contract address"
      },
      "setDepositVerifier(address)": {
        "notice": "Sets the deposit verifier contract, which may be called only by the operator"
      },
      "withdraw(address,address,uint256)": {
        "notice": "Withdraw ERC20 tokens that have successfully exited from the OmiseGO Network"
      }
    }
  }
}