@ethsub/sol
Version:
ethsub contracts
571 lines • 453 kB
JSON
{
"contractName": "GenericHandler",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "bridgeAddress",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "_bridgeAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "_contractAddressToDepositFunctionDepositerOffset",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "_contractAddressToDepositFunctionSignature",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "_contractAddressToExecuteFunctionSignature",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "_contractAddressToResourceID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "_contractWhitelist",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "_resourceIDToContractAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "resourceID",
"type": "bytes32"
},
{
"internalType": "address",
"name": "contractAddress",
"type": "address"
},
{
"internalType": "bytes4",
"name": "depositFunctionSig",
"type": "bytes4"
},
{
"internalType": "uint256",
"name": "depositFunctionDepositerOffset",
"type": "uint256"
},
{
"internalType": "bytes4",
"name": "executeFunctionSig",
"type": "bytes4"
}
],
"name": "setResource",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "resourceID",
"type": "bytes32"
},
{
"internalType": "address",
"name": "depositer",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "deposit",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "resourceID",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "executeProposal",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"_bridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractAddressToDepositFunctionDepositerOffset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractAddressToDepositFunctionSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractAddressToExecuteFunctionSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractAddressToResourceID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_resourceIDToContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"depositer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"depositFunctionSig\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"depositFunctionDepositerOffset\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"executeFunctionSig\",\"type\":\"bytes4\"}],\"name\":\"setResource\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"bridgeAddress\":\"Contract address of previously deployed Bridge.\"}},\"deposit(bytes32,address,bytes)\":{\"params\":{\"data\":\"Consists of: {resourceID}, {lenMetaData}, and {metaData} all padded to 32 bytes.\",\"depositer\":\"Address of the account making deposit in the Bridge contract.\",\"resourceID\":\"ResourceID used to find address of contract to be used for deposit.\"},\"returns\":{\"_0\":\"Returns the raw bytes returned from the call to {contractAddress}.\"}},\"executeProposal(bytes32,bytes)\":{\"params\":{\"data\":\"Consists of {resourceID}, {lenMetaData}, and {metaData}.\"}},\"setResource(bytes32,address,bytes4,uint256,bytes4)\":{\"params\":{\"contractAddress\":\"Address of contract to be called when a deposit is made and a deposited is executed.\",\"depositFunctionDepositerOffset\":\"Depositer address position offset in the metadata, in bytes.\",\"depositFunctionSig\":\"Function signature of method to be called in {contractAddress} when a deposit is made.\",\"executeFunctionSig\":\"Function signature of method to be called in {contractAddress} when a deposit is executed.\",\"resourceID\":\"ResourceID to be used when making deposits.\"}}},\"title\":\"Handles generic deposits and deposit executions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deposit(bytes32,address,bytes)\":{\"notice\":\"A deposit is initiatied by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: len(data) uint256 bytes 0 - 32 data bytes bytes 64 - END{contractAddress} is required to be whitelistedIf {_contractAddressToDepositFunctionSignature}[{contractAddress}] is set, {metaData} is expected to consist of needed function arguments.\"},\"executeProposal(bytes32,bytes)\":{\"notice\":\"Proposal execution should be initiated when a proposal is finalized in the Bridge contract.Data passed into the function should be constructed as follows: len(data) uint256 bytes 0 - 32 data bytes bytes 32 - END{contractAddress} is required to be whitelistedIf {_contractAddressToExecuteFunctionSignature}[{contractAddress}] is set, {metaData} is expected to consist of needed function arguments.\"},\"setResource(bytes32,address,bytes4,uint256,bytes4)\":{\"notice\":\"First verifies {_resourceIDToContractAddress}[{resourceID}] and {_contractAddressToResourceID}[{contractAddress}] are not already set, then sets {_resourceIDToContractAddress} with {contractAddress}, {_contractAddressToResourceID} with {resourceID}, {_contractAddressToDepositFunctionSignature} with {depositFunctionSig}, {_contractAddressToDepositFunctionDepositerOffset} with {depositFunctionDepositerOffset}, {_contractAddressToExecuteFunctionSignature} with {executeFunctionSig}, and {_contractWhitelist} to true for {contractAddress}.\"}},\"notice\":\"This contract is intended to be used with the Bridge contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/handlers/GenericHandler.sol\":\"GenericHandler\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/handlers/GenericHandler.sol\":{\"keccak256\":\"0x6d0039f35c896c5a217b9cb147b7627b9980382cdc86fabef6a34c051ae0785f\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://9412770b7555bdb49ec0e370ee4ccd84035de105383f077bc7872b70b6f9d421\",\"dweb:/ipfs/QmYmCbF2oceeXN3kqo7qYKJeLoAdkNEs8Pcm5Zu6uzHw4K\"]},\"project:/contracts/interfaces/IGenericHandler.sol\":{\"keccak256\":\"0xb08694c5d5e003ab884d7f22fd616d9603ae60a9d8d48901feb2c2daebfe0d40\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://310082dd159a2b23c4cf8589a19ef3e31146d2879145c452e4edf63b11389008\",\"dweb:/ipfs/QmRzAnt66RzitcJrwTfxQeK1X1GSo9TEQF7y3WWbYZYxGS\"]}},\"version\":1}",
"bytecode": "0x60a060405234801561001057600080fd5b50604051610b80380380610b8083398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c610aec610094600039806101a452806105de5250610aec6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063c54c2a1111610066578063c54c2a1114610141578063cb62446314610154578063de319d9914610167578063e248cff21461017c578063ec97d3b41461018f5761009e565b8063318c136e146100a35780637f79bea8146100c1578063a5c3a985146100e1578063aa50800b14610101578063b07e54bb14610121575b600080fd5b6100ab6101a2565b6040516100b8919061089f565b60405180910390f35b6100d46100cf36600461070c565b6101c6565b6040516100b891906108b3565b6100f46100ef36600461070c565b6101db565b6040516100b891906108c7565b61011461010f36600461070c565b6101f0565b6040516100b891906108be565b61013461012f3660046107af565b610202565b6040516100b891906108dc565b6100ab61014f36600461072e565b6103f5565b6100f461016236600461070c565b610410565b61017a610175366004610746565b610425565b005b61017a61018a366004610808565b610441565b61011461019d36600461070c565b6105c1565b7f000000000000000000000000000000000000000000000000000000000000000081565b60056020526000908152604090205460ff1681565b60046020526000908152604090205460e01b81565b60036020526000908152604090205481565b606061020c6105d3565b6000606061021c8486018661072e565b915061022e6020808401908688610a45565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508b815260208181526040808320546001600160a01b031680845260039092529091205494955093925050811590506102ce57828101602001516001600160a01b038916606082901c146102cc5760405162461bcd60e51b81526004016102c39061098c565b60405180910390fd5b505b6001600160a01b03821660009081526005602052604090205460ff166103065760405162461bcd60e51b81526004016102c3906109c3565b6001600160a01b03821660009081526002602052604090205460e01b6001600160e01b03198116156103e75760608185604051602001610347929190610852565b604051602081830303815290604052905060006060856001600160a01b0316836040516103749190610883565b6000604051808303816000865af19150503d80600081146103b1576040519150601f19603f3d011682016040523d82523d6000602084013e6103b6565b606091505b5091509150816103d85760405162461bcd60e51b81526004016102c390610a0e565b97506103ed9650505050505050565b50505050505b949350505050565b6000602081905290815260409020546001600160a01b031681565b60026020526000908152604090205460e01b81565b61042d6105d3565b61043a858585858561061d565b5050505050565b6104496105d3565b600060606104598385018561072e565b915061046b6020808401908587610a45565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525089815260208181526040808320546001600160a01b03168084526005909252909120549495509360ff1692506104e69150505760405162461bcd60e51b81526004016102c3906109c3565b6001600160a01b03811660009081526004602052604090205460e01b6001600160e01b03198116156105b85760608184604051602001610527929190610852565b60405160208183030381529060405290506000836001600160a01b0316826040516105529190610883565b6000604051808303816000865af19150503d806000811461058f576040519150601f19603f3d011682016040523d82523d6000602084013e610594565b606091505b50509050806105b55760405162461bcd60e51b81526004016102c390610946565b50505b50505050505050565b60016020526000908152604090205481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461061b5760405162461bcd60e51b81526004016102c39061090f565b565b60008581526020818152604080832080546001600160a01b039098166001600160a01b03199098168817905595825260018082528683209790975560028152858220805460e096871c63ffffffff199182161790915560038252868320949094556004815285822080549390951c92909316919091179092556005905220805460ff19169091179055565b80356001600160a01b03811681146106bf57600080fd5b92915050565b60008083601f8401126106d6578182fd5b50813567ffffffffffffffff8111156106ed578182fd5b60208301915083602082850101111561070557600080fd5b9250929050565b60006020828403121561071d578081fd5b61072783836106a8565b9392505050565b60006020828403121561073f578081fd5b5035919050565b600080600080600060a0868803121561075d578081fd5b8535945060208601356001600160a01b038116811461077a578182fd5b9350604086013561078a81610a9d565b92506060860135915060808601356107a181610a9d565b809150509295509295909350565b600080600080606085870312156107c4578384fd5b843593506107d586602087016106a8565b9250604085013567ffffffffffffffff8111156107f0578283fd5b6107fc878288016106c5565b95989497509550505050565b60008060006040848603121561081c578283fd5b83359250602084013567ffffffffffffffff811115610839578283fd5b610845868287016106c5565b9497909650939450505050565b6001600160e01b0319831681528151600090610875816004850160208701610a6d565b919091016004019392505050565b60008251610895818460208701610a6d565b9190910192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b60006020825282518060208401526108fb816040850160208701610a6d565b601f01601f19169190910160400192915050565b6020808252601e908201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604082015260600190565b60208082526026908201527f64656c656761746563616c6c20746f20636f6e7472616374416464726573732060408201526519985a5b195960d21b606082015260800190565b6020808252601f908201527f696e636f7272656374206465706f736974657220696e20746865206461746100604082015260600190565b6020808252602b908201527f70726f766964656420636f6e747261637441646472657373206973206e6f742060408201526a1dda1a5d195b1a5cdd195960aa1b606082015260800190565b6020808252601e908201527f63616c6c20746f20636f6e747261637441646472657373206661696c65640000604082015260600190565b60008085851115610a54578182fd5b83861115610a60578182fd5b5050820193919092039150565b60005b83811015610a88578181015183820152602001610a70565b83811115610a97576000848401525b50505050565b6001600160e01b031981168114610ab357600080fd5b5056fea26469706673582212206629f1b20a59266ba81cd21a0a9659a1ccffc5bda3d96cf6d3743ab5f1eab7cf64736f6c634300060c0033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063c54c2a1111610066578063c54c2a1114610141578063cb62446314610154578063de319d9914610167578063e248cff21461017c578063ec97d3b41461018f5761009e565b8063318c136e146100a35780637f79bea8146100c1578063a5c3a985146100e1578063aa50800b14610101578063b07e54bb14610121575b600080fd5b6100ab6101a2565b6040516100b8919061089f565b60405180910390f35b6100d46100cf36600461070c565b6101c6565b6040516100b891906108b3565b6100f46100ef36600461070c565b6101db565b6040516100b891906108c7565b61011461010f36600461070c565b6101f0565b6040516100b891906108be565b61013461012f3660046107af565b610202565b6040516100b891906108dc565b6100ab61014f36600461072e565b6103f5565b6100f461016236600461070c565b610410565b61017a610175366004610746565b610425565b005b61017a61018a366004610808565b610441565b61011461019d36600461070c565b6105c1565b7f000000000000000000000000000000000000000000000000000000000000000081565b60056020526000908152604090205460ff1681565b60046020526000908152604090205460e01b81565b60036020526000908152604090205481565b606061020c6105d3565b6000606061021c8486018661072e565b915061022e6020808401908688610a45565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508b815260208181526040808320546001600160a01b031680845260039092529091205494955093925050811590506102ce57828101602001516001600160a01b038916606082901c146102cc5760405162461bcd60e51b81526004016102c39061098c565b60405180910390fd5b505b6001600160a01b03821660009081526005602052604090205460ff166103065760405162461bcd60e51b81526004016102c3906109c3565b6001600160a01b03821660009081526002602052604090205460e01b6001600160e01b03198116156103e75760608185604051602001610347929190610852565b604051602081830303815290604052905060006060856001600160a01b0316836040516103749190610883565b6000604051808303816000865af19150503d80600081146103b1576040519150601f19603f3d011682016040523d82523d6000602084013e6103b6565b606091505b5091509150816103d85760405162461bcd60e51b81526004016102c390610a0e565b97506103ed9650505050505050565b50505050505b949350505050565b6000602081905290815260409020546001600160a01b031681565b60026020526000908152604090205460e01b81565b61042d6105d3565b61043a858585858561061d565b5050505050565b6104496105d3565b600060606104598385018561072e565b915061046b6020808401908587610a45565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525089815260208181526040808320546001600160a01b03168084526005909252909120549495509360ff1692506104e69150505760405162461bcd60e51b81526004016102c3906109c3565b6001600160a01b03811660009081526004602052604090205460e01b6001600160e01b03198116156105b85760608184604051602001610527929190610852565b60405160208183030381529060405290506000836001600160a01b0316826040516105529190610883565b6000604051808303816000865af19150503d806000811461058f576040519150601f19603f3d011682016040523d82523d6000602084013e610594565b606091505b50509050806105b55760405162461bcd60e51b81526004016102c390610946565b50505b50505050505050565b60016020526000908152604090205481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461061b5760405162461bcd60e51b81526004016102c39061090f565b565b60008581526020818152604080832080546001600160a01b039098166001600160a01b03199098168817905595825260018082528683209790975560028152858220805460e096871c63ffffffff199182161790915560038252868320949094556004815285822080549390951c92909316919091179092556005905220805460ff19169091179055565b80356001600160a01b03811681146106bf57600080fd5b92915050565b60008083601f8401126106d6578182fd5b50813567ffffffffffffffff8111156106ed578182fd5b60208301915083602082850101111561070557600080fd5b9250929050565b60006020828403121561071d578081fd5b61072783836106a8565b9392505050565b60006020828403121561073f578081fd5b5035919050565b600080600080600060a0868803121561075d578081fd5b8535945060208601356001600160a01b038116811461077a578182fd5b9350604086013561078a81610a9d565b92506060860135915060808601356107a181610a9d565b809150509295509295909350565b600080600080606085870312156107c4578384fd5b843593506107d586602087016106a8565b9250604085013567ffffffffffffffff8111156107f0578283fd5b6107fc878288016106c5565b95989497509550505050565b60008060006040848603121561081c578283fd5b83359250602084013567ffffffffffffffff811115610839578283fd5b610845868287016106c5565b9497909650939450505050565b6001600160e01b0319831681528151600090610875816004850160208701610a6d565b919091016004019392505050565b60008251610895818460208701610a6d565b9190910192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b60006020825282518060208401526108fb816040850160208701610a6d565b601f01601f19169190910160400192915050565b6020808252601e908201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604082015260600190565b60208082526026908201527f64656c656761746563616c6c20746f20636f6e7472616374416464726573732060408201526519985a5b195960d21b606082015260800190565b6020808252601f908201527f696e636f7272656374206465706f736974657220696e20746865206461746100604082015260600190565b6020808252602b908201527f70726f766964656420636f6e747261637441646472657373206973206e6f742060408201526a1dda1a5d195b1a5cdd195960aa1b606082015260800190565b6020808252601e908201527f63616c6c20746f20636f6e747261637441646472657373206661696c65640000604082015260600190565b60008085851115610a54578182fd5b83861115610a60578182fd5b5050820193919092039150565b60005b83811015610a88578181015183820152602001610a70565b83811115610a97576000848401525b50505050565b6001600160e01b031981168114610ab357600080fd5b5056fea26469706673582212206629f1b20a59266ba81cd21a0a9659a1ccffc5bda3d96cf6d3743ab5f1eab7cf64736f6c634300060c0033",
"immutableReferences": {
"9306": [
{
"length": 32,
"start": 420
},
{
"length": 32,
"start": 1502
}
]
},
"sourceMap": "320:7447:47:-:0;;;1484:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1559:30;;-1:-1:-1;;;;;;1559:30:47;;;320:7447;;146:263:-1;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;576:54;;701:35;;691:2;;-1:-1;;740:12;691:2;319:74;223:186;-1:-1;;;223:186::o;:::-;320:7447:47;;;;;;;;;;;",
"deployedSourceMap": "320:7447:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;369:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1134:51;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1002:77::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;848:84::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4062:1565::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;453:64::-;;;;;;:::i;:::-;;:::i;687:77::-;;;;;;:::i;:::-;;:::i;2769:366::-;;;;;;:::i;:::-;;:::i;:::-;;6290:769;;;;;;:::i;:::-;;:::i;562:64::-;;;;;;:::i;:::-;;:::i;369:39::-;;;:::o;1134:51::-;;;;;;;;;;;;;;;:::o;1002:77::-;;;;;;;;;;;;;;;:::o;848:84::-;;;;;;;;;;;;;:::o;4062:1565::-;4168:12;1224:13;:11;:13::i;:::-;4192:24:::1;4226:21;4272:27;::::0;;::::1;4283:4:::0;4272:27:::1;:::i;:::-;4258:41:::0;-1:-1:-1;4326:25:47::1;4331:2;4334:16:::0;;::::1;::::0;4326:4;;:25:::1;:::i;:::-;4309:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;4389:40:47;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;4389:40:47::1;4465:65:::0;;;:48:::1;:65:::0;;;;;;;4309:43;;-1:-1:-1;4389:40:47;4465:65;-1:-1:-1;;4544:19:47;;;-1:-1:-1;4540:594:47::1;;4749:39:::0;;;4767:2:::1;4749:39:::0;4743:46;-1:-1:-1;;;;;5042:45:47;::::1;5084:2;5063:23:::0;;::::1;5042:45;5034:89;;;;-1:-1:-1::0;;;5034:89:47::1;;;;;;;:::i;:::-;;;;;;;;;4540:594;;-1:-1:-1::0;;;;;5152:35:47;::::1;;::::0;;;:18:::1;:35;::::0;;;;;::::1;;5144:91;;;;-1:-1:-1::0;;;5144:91:47::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5259:59:47;::::1;5246:10;5259:59:::0;;;:42:::1;:59;::::0;;;;;::::1;;-1:-1:-1::0;;;;;;5332:16:47;::::1;::::0;5328:293:::1;;5364:21;5405:3;5410:8;5388:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5364:55;;5434:12;5448:28;5480:15;-1:-1:-1::0;;;;;5480:20:47::1;5501:8;5480:30;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5433:77;;;;5532:7;5524:50;;;;-1:-1:-1::0;;;5524:50:47::1;;;;;;;:::i;:::-;5595:15:::0;-1:-1:-1;5588:22:47::1;::::0;-1:-1:-1;;;;;;;5588:22:47::1;5328:293;1247:1;;;;;;4062:1565:::0;;;;;;:::o;453:64::-;;;;;;;;;;;;;-1:-1:-1;;;;;453:64:47;;:::o;687:77::-;;;;;;;;;;;;;;;:::o;2769:366::-;1224:13;:11;:13::i;:::-;3015:113:::1;3028:10;3040:15;3057:18;3077:30;3109:18;3015:12;:113::i;:::-;2769:366:::0;;;;;:::o;6290:769::-;1224:13;:11;:13::i;:::-;6386:24:::1;6420:21;6466:27;::::0;;::::1;6477:4:::0;6466:27:::1;:::i;:::-;6452:41:::0;-1:-1:-1;6520:25:47::1;6525:2;6528:16:::0;;::::1;::::0;6520:4;;:25:::1;:::i;:::-;6503:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;6583:40:47;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;6583:40:47::1;6641:35:::0;;;:18:::1;:35:::0;;;;;;;6503:43;;-1:-1:-1;6583:40:47;6641:35:::1;;::::0;-1:-1:-1;6633:91:47::1;::::0;-1:-1:-1;;6633:91:47::1;;;-1:-1:-1::0;;;6633:91:47::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6748:59:47;::::1;6735:10;6748:59:::0;;;:42:::1;:59;::::0;;;;;::::1;;-1:-1:-1::0;;;;;;6821:16:47;::::1;::::0;6817:236:::1;;6853:21;6894:3;6899:8;6877:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6853:55;;6923:12;6940:15;-1:-1:-1::0;;;;;6940:20:47::1;6961:8;6940:30;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6922:48;;;6992:7;6984:58;;;;-1:-1:-1::0;;;6984:58:47::1;;;;;;;:::i;:::-;6817:236;;;1247:1;;;;6290:769:::0;;;:::o;562:64::-;;;;;;;;;;;;;:::o;1261:124::-;1315:10;-1:-1:-1;;;;;1329:14:47;1315:28;;1307:71;;;;-1:-1:-1;;;1307:71:47;;;;;;;:::i;:::-;1261:124::o;7065:700::-;7291:28;:40;;;;;;;;;;;:58;;-1:-1:-1;;;;;7291:58:47;;;-1:-1:-1;;;;;;7291:58:47;;;;;;;7359:45;;;7291:58;7359:45;;;;;;:58;;;;7427:42;:59;;;;;:80;;;;;;-1:-1:-1;;7427:80:47;;;;;;;7517:48;:65;;;;;:98;;;;7625:42;:59;;;;;:80;;;;;;;;;;;;;;;;;7716:18;:35;;;:42;;-1:-1:-1;;7716:42:47;;;;;;7065:700::o;5:130:-1:-;72:20;;-1:-1;;;;;12443:54;;13109:35;;13099:2;;13158:1;;13148:12;13099:2;57:78;;;;:::o;428:336::-;;;542:3;535:4;527:6;523:17;519:27;509:2;;-1:-1;;550:12;509:2;-1:-1;580:20;;620:18;609:30;;606:2;;;-1:-1;;642:12;606:2;686:4;678:6;674:17;662:29;;737:3;686:4;717:17;678:6;703:32;;700:41;697:2;;;754:1;;744:12;697:2;502:262;;;;;:::o;909:241::-;;1013:2;1001:9;992:7;988:23;984:32;981:2;;;-1:-1;;1019:12;981:2;1081:53;1126:7;1102:22;1081:53;:::i;:::-;1071:63;975:175;-1:-1;;;975:175::o;1157:241::-;;1261:2;1249:9;1240:7;1236:23;1232:32;1229:2;;;-1:-1;;1267:12;1229:2;-1:-1;209:20;;1223:175;-1:-1;1223:175::o;1405:739::-;;;;;;1575:3;1563:9;1554:7;1550:23;1546:33;1543:2;;;-1:-1;;1582:12;1543:2;209:20;;;-1:-1;1734:2;1773:22;;72:20;-1:-1;;;;;12443:54;;13109:35;;13099:2;;-1:-1;;13148:12;13099:2;1742:63;-1:-1;1842:2;1880:22;;345:20;370:32;345:20;370:32;:::i;:::-;1850:62;-1:-1;1949:2;1988:22;;839:20;;-1:-1;2057:3;2096:22;;345:20;370:32;345:20;370:32;:::i;:::-;2066:62;;;;1537:607;;;;;;;;:::o;2151:615::-;;;;;2308:2;2296:9;2287:7;2283:23;2279:32;2276:2;;;-1:-1;;2314:12;2276:2;222:6;209:20;2366:63;;2484:53;2529:7;2466:2;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2602:2;2591:9;2587:18;2574:32;2626:18;2618:6;2615:30;2612:2;;;-1:-1;;2648:12;2612:2;2686:64;2742:7;2733:6;2722:9;2718:22;2686:64;:::i;:::-;2270:496;;;;-1:-1;2668:82;-1:-1;;;;2270:496::o;2773:490::-;;;;2913:2;2901:9;2892:7;2888:23;2884:32;2881:2;;;-1:-1;;2919:12;2881:2;222:6;209:20;2971:63;;3099:2;3088:9;3084:18;3071:32;3123:18;3115:6;3112:30;3109:2;;;-1:-1;;3145:12;3109:2;3183:64;3239:7;3230:6;3219:9;3215:22;3183:64;:::i;:::-;2875:388;;3165:82;;-1:-1;3165:82;;-1:-1;;;;2875:388::o;6765:405::-;-1:-1;;;;;;12291:78;;3938:36;;11099:12;;6765:405;;4762:52;11099:12;7032:1;7023:11;;4795:4;4784:16;;4762:52;:::i;:::-;4826:16;;;;7032:1;4826:16;;6925:245;-1:-1;;;6925:245::o;7177:271::-;;4651:5;11099:12;4762:52;4807:6;4802:3;4795:4;4788:5;4784:16;4762:52;:::i;:::-;4826:16;;;;;7311:137;-1:-1;;7311:137::o;7455:222::-;-1:-1;;;;;12443:54;;;;3589:37;;7582:2;7567:18;;7553:124::o;7684:210::-;12125:13;;12118:21;3703:34;;7805:2;7790:18;;7776:118::o;7901:222::-;3820:37;;;8028:2;8013:18;;7999:124::o;8130:218::-;-1:-1;;;;;;12291:78;;;;3938:36;;8255:2;8240:18;;8226:122::o;8355:306::-;;8500:2;8521:17;8514:47;4283:5;11099:12;11255:6;8500:2;8489:9;8485:18;11243:19;4376:52;4421:6;11283:14;8489:9;11283:14;8500:2;4402:5;4398:16;4376:52;:::i;:::-;13029:7;13013:14;-1:-1;;13009:28;4440:39;;;;11283:14;4440:39;;8471:190;-1:-1;;8471:190::o;8668:416::-;8868:2;8882:47;;;5079:2;8853:18;;;11243:19;5115:32;11283:14;;;5095:53;5167:12;;;8839:245::o;9091:416::-;9291:2;9305:47;;;5418:2;9276:18;;;11243:19;5454:34;11283:14;;;5434:55;-1:-1;;;5509:12;;;5502:30;5551:12;;;9262:245::o;9514:416::-;9714:2;9728:47;;;5802:2;9699:18;;;11243:19;5838:33;11283:14;;;5818:54;5891:12;;;9685:245::o;9937:416::-;10137:2;10151:47;;;6142:2;10122:18;;;11243:19;6178:34;11283:14;;;6158:55;-1:-1;;;6233:12;;;6226:35;6280:12;;;10108:245::o;10360:416::-;10560:2;10574:47;;;6531:2;10545:18;;;11243:19;6567:32;11283:14;;;6547:53;6619:12;;;10531:245::o;11636:318::-;;;11786:8;11774:10;11771:24;11768:2;;;-1:-1;;11798:12;11768:2;11833:6;11823:8;11820:20;11817:2;;;-1:-1;;11843:12;11817:2;-1:-1;;11875:31;;;11924:25;;;;;-1:-1;11762:192::o;12589:268::-;12654:1;12661:101;12675:6;12672:1;12669:13;12661:101;;;12742:11;;;12736:18;12723:11;;;12716:39;12697:2;12690:10;12661:101;;;12777:6;12774:1;12771:13;12768:2;;;12654:1;12833:6;12828:3;12824:16;12817:27;12768:2;;12638:219;;;:::o;13298:115::-;-1:-1;;;;;;12291:78;;13356:34;;13346:2;;13404:1;;13394:12;13346:2;13340:73;:::o",
"source": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.6.12;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IGenericHandler.sol\";\n\n/**\n @title Handles generic deposits and deposit executions.\n @author ChainSafe Systems.\n @notice This contract is intended to be used with the Bridge contract.\n */\ncontract GenericHandler is IGenericHandler {\n address public immutable _bridgeAddress;\n\n // resourceID => contract address\n mapping (bytes32 => address) public _resourceIDToContractAddress;\n\n // contract address => resourceID\n mapping (address => bytes32) public _contractAddressToResourceID;\n\n // contract address => deposit function signature\n mapping (address => bytes4) public _contractAddressToDepositFunctionSignature;\n\n // contract address => depositer address position offset in the metadata\n mapping (address => uint256) public _contractAddressToDepositFunctionDepositerOffset;\n\n // contract address => execute proposal function signature\n mapping (address => bytes4) public _contractAddressToExecuteFunctionSignature;\n\n // token contract address => is whitelisted\n mapping (address => bool) public _contractWhitelist;\n\n modifier onlyBridge() {\n _onlyBridge();\n _;\n }\n\n function _onlyBridge() private view {\n require(msg.sender == _bridgeAddress, \"sender must be bridge contract\");\n }\n\n /**\n @param bridgeAddress Contract address of previously deployed Bridge.\n */\n constructor(\n address bridgeAddress\n ) public {\n _bridgeAddress = bridgeAddress;\n }\n\n /**\n @notice First verifies {_resourceIDToContractAddress}[{resourceID}] and\n {_contractAddressToResourceID}[{contractAddress}] are not already set,\n then sets {_resourceIDToContractAddress} with {contractAddress},\n {_contractAddressToResourceID} with {resourceID},\n {_contractAddressToDepositFunctionSignature} with {depositFunctionSig},\n {_contractAddressToDepositFunctionDepositerOffset} with {depositFunctionDepositerOffset},\n {_contractAddressToExecuteFunctionSignature} with {executeFunctionSig},\n and {_contractWhitelist} to true for {contractAddress}.\n @param resourceID ResourceID to be used when making deposits.\n @param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n @param depositFunctionSig Function signature of method to be called in {contractAddress} when a deposit is made.\n @param depositFunctionDepositerOffset Depositer address position offset in the metadata, in bytes.\n @param executeFunctionSig Function signature of method to be called in {contractAddress} when a deposit is executed.\n */\n function setResource(\n bytes32 resourceID,\n address contractAddress,\n bytes4 depositFunctionSig,\n uint256 depositFunctionDepositerOffset,\n bytes4 executeFunctionSig\n ) external onlyBridge override {\n\n _setResource(resourceID, contractAddress, depositFunctionSig, depositFunctionDepositerOffset, executeFunctionSig);\n }\n\n /**\n @notice A deposit is initiatied by making a deposit in the Bridge contract.\n @param resourceID ResourceID used to find address of contract to be used for deposit.\n @param depositer Address of the account making deposit in the Bridge contract.\n @param data Consists of: {resourceID}, {lenMetaData}, and {metaData} all padded to 32 bytes.\n @notice Data passed into the function should be constructed as follows:\n len(data) uint256 bytes 0 - 32\n data bytes bytes 64 - END\n @notice {contractAddress} is required to be whitelisted\n @notice If {_contractAddressToDepositFunctionSignature}[{contractAddress}] is set,\n {metaData} is expected to consist of needed function arguments.\n @return Returns the raw bytes returned from the call to {contractAddress}.\n */\n function deposit(bytes32 resourceID, address depositer, bytes calldata data) external onlyBridge returns (bytes memory) {\n uint256 lenMetadata;\n bytes memory metadata;\n\n lenMetadata = abi.decode(data, (uint256));\n metadata = bytes(data[32:32 + lenMetadata]);\n\n address contractAddress = _resourceIDToContractAddress[resourceID];\n uint256 depositerOffset = _contractAddressToDepositFunctionDepositerOffset[contractAddress];\n if (depositerOffset > 0) {\n uint256 metadataDepositer;\n // Skipping 32 bytes of length prefix and depositerOffset bytes.\n assembly {\n metadataDepositer := mload(add(add(metadata, 32), depositerOffset))\n }\n // metadataDepositer contains 0xdepositerAddressdepositerAddressdeposite************************\n // Shift it 12 bytes right: 0x000000000000000000000000depositerAddressdepositerAddressdeposite\n require(depositer == address(metadataDepositer >> 96), 'incorrect depositer in the data');\n }\n\n require(_contractWhitelist[contractAddress], \"provided contractAddress is not whitelisted\");\n\n bytes4 sig = _contractAddressToDepositFunctionSignature[contractAddress];\n if (sig != bytes4(0)) {\n bytes memory callData = abi.encodePacked(sig, metadata);\n (bool success, bytes memory handlerResponse) = contractAddress.call(callData);\n require(success, \"call to contractAddress failed\");\n return handlerResponse;\n }\n }\n\n /**\n @notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\n @param data Consists of {resourceID}, {lenMetaData}, and {metaData}.\n @notice Data passed into the function should be constructed as follows:\n len(data) uint256 bytes 0 - 32\n data bytes bytes 32 - END\n @notice {contractAddress} is required to be whitelisted\n @notice If {_contractAddressToExecuteFunctionSignature}[{contractAddress}] is set,\n {metaData} is expected to consist of needed function arguments.\n */\n function executeProposal(bytes32 resourceID, bytes calldata data) external onlyBridge {\n uint256 lenMetadata;\n bytes memory metaData;\n\n lenMetadata = abi.decode(data, (uint256));\n metaData = bytes(data[32:32 + lenMetadata]);\n\n address contractAddress = _resourceIDToContractAddress[resourceID];\n require(_contractWhitelist[contractAddress], \"provided contractAddress is not whitelisted\");\n\n bytes4 sig = _contractAddressToExecuteFunctionSignature[contractAddress];\n if (sig != bytes4(0)) {\n bytes memory callData = abi.encodePacked(sig, metaData);\n (bool success,) = contractAddress.call(callData);\n require(success, \"delegatecall to contractAddress failed\");\n }\n }\n\n function _setResource(\n bytes32 resourceID,\n address contractAddress,\n bytes4 depositFunctionSig,\n uint256 depositFunctionDepositerOffset,\n bytes4 executeFunctionSig\n ) internal {\n _resourceIDToContractAddress[resourceID] = contractAddress;\n _contractAddressToResourceID[contractAddress] = resourceID;\n _contractAddressToDepositFunctionSignature[contractAddress] = depositFunctionSig;\n _contractAddressToDepositFunctionDepositerOffset[contractAddress] = depositFunctionDepositerOffset;\n _contractAddressToExecuteFunctionSignature[contractAddress] = executeFunctionSig;\n\n _contractWhitelist[contractAddress] = true;\n }\n}\n",
"sourcePath": "/home/sigo/w/deer/ethsub/packages/sol/contracts/handlers/GenericHandler.sol",
"ast": {
"absolutePath": "project:/contracts/handlers/GenericHandler.sol",
"exportedSymbols": {
"GenericHandler": [
9644
]
},
"id": 9645,
"license": "LGPL-3.0-only",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 9299,
"literals": [
"solidity",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "42:23:47"
},
{
"id": 9300,
"literals": [
"experimental",
"ABIEncoderV2"
],
"nodeType": "PragmaDirective",
"src": "66:33:47"
},
{
"absolutePath": "project:/contracts/interfaces/IGenericHandler.sol",
"file": "../interfaces/IGenericHandler.sol",
"id": 9301,
"nodeType": "ImportDirective",
"scope": 9645,
"sourceUnit": 9859,
"src": "101:43:47",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": false,
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 9303,
"name": "IGenericHandler",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 9858,
"src": "347:15:47",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IGenericHandler_$9858",
"typeString": "contract IGenericHandler"
}
},
"id": 9304,
"nodeType": "InheritanceSpecifier",
"src": "347:15:47"
}
],
"contractDependencies": [
9858
],
"contractKind": "contract",
"documentation": {
"id": 9302,
"nodeType": "StructuredDocumentation",
"src": "146:173:47",
"text": "@title Handles generic deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
},
"fullyImplemented": true,
"id": 9644,
"linearizedBaseContracts": [
9644,
9858
],
"name": "GenericHandler",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": false,
"functionSelector": "318c136e",
"id": 9306,
"mutability": "immutable",
"name": "_bridgeAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9644,
"src": "369:39:47",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9305,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "369:7:47",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "c54c2a11",
"id": 9310,
"mutability": "mutable",
"name": "_resourceIDToContractAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9644,
"src": "453:64:47",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
"typeString": "mapping(bytes32 => address)"
},
"typeName": {
"id": 9309,
"keyType": {
"id": 9307,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "462:7:47",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "Mapping",
"src": "453:28:47",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
"typeString": "mapping(bytes32 => address)"
},
"valueType": {
"id": 9308,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "473:7:47",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "ec97d3b4",
"id": 9314,
"mutability": "mutable",
"name": "_contractAddressToResourceID",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9644,
"src": "562:64:47",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
"typeString": "mapping(address => bytes32)"
},
"typeName": {
"id": 9313,
"keyType": {
"id": 9311,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "571:7:47",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Mapping",
"src": "562:28:47",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
"typeString": "mapping(address => bytes32)"
},
"valueType": {
"id": 9312,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "582:7:47",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "cb624463",
"id": 9318,
"mutability": "mutable",
"name": "_contractAddressToDepositFunctionSignature",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9644,
"src": "687:77:47",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
"typeString": "mapping(address => bytes4)"
},
"typeName": {
"id": 9317,
"keyType": {
"id": 9315,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "696:7:47",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Mapping",
"src": "687:27:47",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
"typeString": "mapping(address => bytes4)"
},
"valueType": {
"id": 9316,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "707:6:47",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "aa50800b",
"id": 9322,
"mutability": "mutable",
"name": "_contractAddressToDepositFunctionDepositerOffset",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9644,
"src": "848:84:47",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
"typeString": "mapping(address => uint256)"
},
"typeName": {
"id": 9321,
"keyType": {
"id": 9319,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "857:7:47",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Mapping",
"src": "848:28:47",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
"typeString": "mapping(address => uint256)"
},
"valueType": {
"id": 9320,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "868:7:47",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "a5c3a985",
"id": 9326,
"mutability": "mutable",
"name": "_contractAddressToExecuteFunctionSignature",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9644,
"src": "1002:77:47",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
"typeString": "mapping(address => bytes4)"
},
"typeName": {
"id": 9325,
"keyType": {
"id": 9323,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1011:7:47",
"typeDescriptions": {
"typeIden