Skip to content

Instantly share code, notes, and snippets.

@kyriediculous
Created August 23, 2019 22:24
Show Gist options
  • Save kyriediculous/6c32563a16315d828fc91237e0a040df to your computer and use it in GitHub Desktop.
Save kyriediculous/6c32563a16315d828fc91237e0a040df to your computer and use it in GitHub Desktop.
{
"contractName": "Wallet",
"abi": [
{
"inputs": [
{
"name": "_master",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
},
{
"constant": true,
"inputs": [
{
"name": "_raw",
"type": "bytes32"
},
{
"name": "_sig",
"type": "bytes"
}
],
"name": "getSigner",
"outputs": [
{
"name": "signer",
"type": "address"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_target",
"type": "address"
},
{
"name": "_value",
"type": "uint256"
},
{
"name": "_data",
"type": "bytes"
},
{
"name": "_sig",
"type": "bytes"
}
],
"name": "isValidSignature",
"outputs": [
{
"name": "isValid",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_target",
"type": "address[]"
},
{
"name": "_value",
"type": "uint256[]"
},
{
"name": "_data",
"type": "bytes[]"
},
{
"name": "_dataHashSignature",
"type": "bytes[]"
},
{
"name": "_nonce",
"type": "uint256[]"
}
],
"name": "execute",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.5.8+commit.23d335f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"_target\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"},{\"name\":\"_sig\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"name\":\"isValid\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_target\",\"type\":\"address[]\"},{\"name\":\"_value\",\"type\":\"uint256[]\"},{\"name\":\"_data\",\"type\":\"bytes[]\"},{\"name\":\"_dataHashSignature\",\"type\":\"bytes[]\"},{\"name\":\"_nonce\",\"type\":\"uint256[]\"}],\"name\":\"execute\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_raw\",\"type\":\"bytes32\"},{\"name\":\"_sig\",\"type\":\"bytes\"}],\"name\":\"getSigner\",\"outputs\":[{\"name\":\"signer\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_master\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"author\":\"Nico Vergauwen <vergauwennico@gmail.com>\",\"methods\":{\"constructor\":{\"params\":{\"_master\":\"(address) Ethereum address for the master \"}},\"execute(address[],uint256[],bytes[],bytes[],uint256[])\":{\"details\":\"Anyone can execute this but only transactions signed by master or actor (if valid method) are accepted \",\"params\":{\"_data\":\"(bytes[]) Array of ABI encoded transaction data \",\"_dataHashSignature\":\"(bytes[]) Array of transaction signatures for the respective transaction data\",\"_target\":\"(address[]) Array of contract addresses\",\"_value\":\"(uint256[]) Array of wei amounts being sent in the respective transactions \"},\"return\":\"(bool) returns true if all transactions in the batch succeeded\"},\"getSigner(bytes32,bytes)\":{\"params\":{\"_raw\":\"(bytes32) keccak256 hash of the ABI encoded transaction data \",\"_sig\":\"(bytes) the signature resulting from signing 'raw'\"},\"return\":\"signer (address) the EOA that signed the data \"},\"isValidSignature(address,uint256,bytes,bytes)\":{\"params\":{\"_data\":\"(bytes) data being send in the transaction \",\"_sig\":\"(bytes) the signature of the transaction data \",\"_target\":\"(address) contract target address \",\"_value\":\"(uint256) Wei amount being send in the transaction \"},\"return\":\"isValid (bool) true/false based on whether the signer is master or an actor that has access rights to the method at 'target'\"}},\"title\":\"Wallet\"},\"userdoc\":{\"methods\":{\"constructor\":\"Sets the master address upon deployment\",\"execute(address[],uint256[],bytes[],bytes[],uint256[])\":{\"notice\":\"Execute a batch of meta transactions atomically\"},\"getSigner(bytes32,bytes)\":{\"notice\":\"Get the signer of a transaction through ecrecover\"},\"isValidSignature(address,uint256,bytes,bytes)\":{\"notice\":\"Checks whether the signer is an authorized EOA\"}},\"notice\":\"Wallet contract that can execute meta transactions on behalf of authorized signers\"}},\"settings\":{\"compilationTarget\":{\"/Users/nico/Desktop/ethberlin/eth-wallet/contracts/Wallet.sol\":\"Wallet\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/nico/Desktop/ethberlin/eth-wallet/contracts/Wallet.sol\":{\"keccak256\":\"0xe130b550f38cfa56e2a574fff988c7ff4895d49406a7f61b62492ce0c131a51e\",\"urls\":[\"bzzr://4ddb0daa8e42f596fef1cf1b034416c90ec29a9658c4aea8f617b79e7f4171ee\"]},\"/Users/nico/Desktop/ethberlin/eth-wallet/contracts/libs/ECTools.sol\":{\"keccak256\":\"0x47fedf30ca0232a112a7ad98fd4faa201ec56c463502e324ed00c01834f29488\",\"urls\":[\"bzzr://87a3b08221fedcb6a42b77eafccdc9c1244da08eed3cd01babdeb58f3ecf18a6\"]}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b50604051602080610f57833981018060405261002f919081019061008a565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506100fc565b600081519050610084816100e5565b92915050565b60006020828403121561009c57600080fd5b60006100aa84828501610075565b91505092915050565b60006100be826100c5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6100ee816100b3565b81146100f957600080fd5b50565b610e4c8061010b6000396000f3fe6080604052600436106100345760003560e01c80633cffe599146100365780638a7d339214610073578063f7b2ec0d146100b0575b005b34801561004257600080fd5b5061005d6004803603610058919081019061070b565b6100ed565b60405161006a9190610b02565b60405180910390f35b34801561007f57600080fd5b5061009a6004803603610095919081019061079e565b610191565b6040516100a79190610b02565b60405180910390f35b3480156100bc57600080fd5b506100d760048036036100d2919081019061088d565b6103d9565b6040516100e49190610ae7565b60405180910390f35b60008085858560405160200161010593929190610a97565b604051602081830303815290604052805190602001209050600061012982856103d9565b90506000602086015190506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149350505050949350505050565b60008585858560008090505b8451811015610214576101fe8582815181106101b557fe5b60200260200101518583815181106101c957fe5b60200260200101518584815181106101dd57fe5b60200260200101518585815181106101f157fe5b60200260200101516100ed565b61020757600080fd5b808060010191505061019d565b5060088a51111561025a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025190610b8d565b60405180910390fd5b60008090505b8a518110156103c75760015487828151811061027857fe5b6020026020010151116102c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b790610b6d565b60405180910390fd5b60008b82815181106102ce57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168b83815181106102f857fe5b60200260200101518b848151811061030c57fe5b60200260200101516040516103219190610ad0565b60006040518083038185875af1925050503d806000811461035e576040519150601f19603f3d011682016040523d82523d6000602084013e610363565b606091505b50509050600160008154809291906001019190505550806103b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b090610b4d565b60405180910390fd5b508080600101915050610260565b50600194505050505095945050505050565b600073__ECTools_______________________________63380388f184846040518363ffffffff1660e01b8152600401610414929190610b1d565b60206040518083038186803b15801561042c57600080fd5b505af4158015610440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061046491908101906106e2565b905092915050565b60008135905061047b81610dcd565b92915050565b60008151905061049081610dcd565b92915050565b600082601f8301126104a757600080fd5b81356104ba6104b582610bda565b610bad565b915081818352602084019350602081019050838560208402820111156104df57600080fd5b60005b8381101561050f57816104f5888261046c565b8452602084019350602083019250506001810190506104e2565b5050505092915050565b600082601f83011261052a57600080fd5b813561053d61053882610c02565b610bad565b9150818183526020840193506020810190508360005b8381101561058357813586016105698882610625565b845260208401935060208301925050600181019050610553565b5050505092915050565b600082601f83011261059e57600080fd5b81356105b16105ac82610c2a565b610bad565b915081818352602084019350602081019050838560208402820111156105d657600080fd5b60005b8381101561060657816105ec88826106cd565b8452602084019350602083019250506001810190506105d9565b5050505092915050565b60008135905061061f81610de4565b92915050565b600082601f83011261063657600080fd5b813561064961064482610c52565b610bad565b9150808252602083016020830185838301111561066557600080fd5b610670838284610d3f565b50505092915050565b600082601f83011261068a57600080fd5b813561069d61069882610c7e565b610bad565b915080825260208301602083018583830111156106b957600080fd5b6106c4838284610d3f565b50505092915050565b6000813590506106dc81610dfb565b92915050565b6000602082840312156106f457600080fd5b600061070284828501610481565b91505092915050565b6000806000806080858703121561072157600080fd5b600061072f8782880161046c565b9450506020610740878288016106cd565b935050604085013567ffffffffffffffff81111561075d57600080fd5b61076987828801610679565b925050606085013567ffffffffffffffff81111561078657600080fd5b61079287828801610679565b91505092959194509250565b600080600080600060a086880312156107b657600080fd5b600086013567ffffffffffffffff8111156107d057600080fd5b6107dc88828901610496565b955050602086013567ffffffffffffffff8111156107f957600080fd5b6108058882890161058d565b945050604086013567ffffffffffffffff81111561082257600080fd5b61082e88828901610519565b935050606086013567ffffffffffffffff81111561084b57600080fd5b61085788828901610519565b925050608086013567ffffffffffffffff81111561087457600080fd5b6108808882890161058d565b9150509295509295909350565b600080604083850312156108a057600080fd5b60006108ae85828601610610565b925050602083013567ffffffffffffffff8111156108cb57600080fd5b6108d785828601610679565b9150509250929050565b6108ea81610ced565b82525050565b6109016108fc82610ced565b610d81565b82525050565b61091081610cff565b82525050565b61091f81610d0b565b82525050565b600061093082610cb5565b61093a8185610cc0565b935061094a818560208601610d4e565b61095381610daf565b840191505092915050565b600061096982610cb5565b6109738185610cd1565b9350610983818560208601610d4e565b80840191505092915050565b600061099a82610caa565b6109a48185610cd1565b93506109b4818560208601610d4e565b80840191505092915050565b60006109cd601683610cdc565b91507f4578637574696e67204d6574615478204661696c6564000000000000000000006000830152602082019050919050565b6000610a0d600d83610cdc565b91507f6e6f6e636520746f6f206c6f77000000000000000000000000000000000000006000830152602082019050919050565b6000610a4d601d83610cdc565b91507f546f6f206d616e792062617463686564207472616e73616374696f6e730000006000830152602082019050919050565b610a91610a8c82610d35565b610da5565b82525050565b6000610aa382866108f0565b601482019150610ab38285610a80565b602082019150610ac3828461095e565b9150819050949350505050565b6000610adc828461098f565b915081905092915050565b6000602082019050610afc60008301846108e1565b92915050565b6000602082019050610b176000830184610907565b92915050565b6000604082019050610b326000830185610916565b8181036020830152610b448184610925565b90509392505050565b60006020820190508181036000830152610b66816109c0565b9050919050565b60006020820190508181036000830152610b8681610a00565b9050919050565b60006020820190508181036000830152610ba681610a40565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715610bd057600080fd5b8060405250919050565b600067ffffffffffffffff821115610bf157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c1957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c4157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c6957600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115610c9557600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610cf882610d15565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610d6c578082015181840152602081019050610d51565b83811115610d7b576000848401525b50505050565b6000610d8c82610d93565b9050919050565b6000610d9e82610dc0565b9050919050565b6000819050919050565b6000601f19601f8301169050919050565b60008160601b9050919050565b610dd681610ced565b8114610de157600080fd5b50565b610ded81610d0b565b8114610df857600080fd5b50565b610e0481610d35565b8114610e0f57600080fd5b5056fea265627a7a72305820675fac2da4d83f8076562cc3b227d5ee761f090ca895e548e954c662ee19456a6c6578706572696d656e74616cf50037",
"deployedBytecode": "0x6080604052600436106100345760003560e01c80633cffe599146100365780638a7d339214610073578063f7b2ec0d146100b0575b005b34801561004257600080fd5b5061005d6004803603610058919081019061070b565b6100ed565b60405161006a9190610b02565b60405180910390f35b34801561007f57600080fd5b5061009a6004803603610095919081019061079e565b610191565b6040516100a79190610b02565b60405180910390f35b3480156100bc57600080fd5b506100d760048036036100d2919081019061088d565b6103d9565b6040516100e49190610ae7565b60405180910390f35b60008085858560405160200161010593929190610a97565b604051602081830303815290604052805190602001209050600061012982856103d9565b90506000602086015190506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149350505050949350505050565b60008585858560008090505b8451811015610214576101fe8582815181106101b557fe5b60200260200101518583815181106101c957fe5b60200260200101518584815181106101dd57fe5b60200260200101518585815181106101f157fe5b60200260200101516100ed565b61020757600080fd5b808060010191505061019d565b5060088a51111561025a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025190610b8d565b60405180910390fd5b60008090505b8a518110156103c75760015487828151811061027857fe5b6020026020010151116102c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b790610b6d565b60405180910390fd5b60008b82815181106102ce57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168b83815181106102f857fe5b60200260200101518b848151811061030c57fe5b60200260200101516040516103219190610ad0565b60006040518083038185875af1925050503d806000811461035e576040519150601f19603f3d011682016040523d82523d6000602084013e610363565b606091505b50509050600160008154809291906001019190505550806103b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b090610b4d565b60405180910390fd5b508080600101915050610260565b50600194505050505095945050505050565b600073__ECTools_______________________________63380388f184846040518363ffffffff1660e01b8152600401610414929190610b1d565b60206040518083038186803b15801561042c57600080fd5b505af4158015610440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061046491908101906106e2565b905092915050565b60008135905061047b81610dcd565b92915050565b60008151905061049081610dcd565b92915050565b600082601f8301126104a757600080fd5b81356104ba6104b582610bda565b610bad565b915081818352602084019350602081019050838560208402820111156104df57600080fd5b60005b8381101561050f57816104f5888261046c565b8452602084019350602083019250506001810190506104e2565b5050505092915050565b600082601f83011261052a57600080fd5b813561053d61053882610c02565b610bad565b9150818183526020840193506020810190508360005b8381101561058357813586016105698882610625565b845260208401935060208301925050600181019050610553565b5050505092915050565b600082601f83011261059e57600080fd5b81356105b16105ac82610c2a565b610bad565b915081818352602084019350602081019050838560208402820111156105d657600080fd5b60005b8381101561060657816105ec88826106cd565b8452602084019350602083019250506001810190506105d9565b5050505092915050565b60008135905061061f81610de4565b92915050565b600082601f83011261063657600080fd5b813561064961064482610c52565b610bad565b9150808252602083016020830185838301111561066557600080fd5b610670838284610d3f565b50505092915050565b600082601f83011261068a57600080fd5b813561069d61069882610c7e565b610bad565b915080825260208301602083018583830111156106b957600080fd5b6106c4838284610d3f565b50505092915050565b6000813590506106dc81610dfb565b92915050565b6000602082840312156106f457600080fd5b600061070284828501610481565b91505092915050565b6000806000806080858703121561072157600080fd5b600061072f8782880161046c565b9450506020610740878288016106cd565b935050604085013567ffffffffffffffff81111561075d57600080fd5b61076987828801610679565b925050606085013567ffffffffffffffff81111561078657600080fd5b61079287828801610679565b91505092959194509250565b600080600080600060a086880312156107b657600080fd5b600086013567ffffffffffffffff8111156107d057600080fd5b6107dc88828901610496565b955050602086013567ffffffffffffffff8111156107f957600080fd5b6108058882890161058d565b945050604086013567ffffffffffffffff81111561082257600080fd5b61082e88828901610519565b935050606086013567ffffffffffffffff81111561084b57600080fd5b61085788828901610519565b925050608086013567ffffffffffffffff81111561087457600080fd5b6108808882890161058d565b9150509295509295909350565b600080604083850312156108a057600080fd5b60006108ae85828601610610565b925050602083013567ffffffffffffffff8111156108cb57600080fd5b6108d785828601610679565b9150509250929050565b6108ea81610ced565b82525050565b6109016108fc82610ced565b610d81565b82525050565b61091081610cff565b82525050565b61091f81610d0b565b82525050565b600061093082610cb5565b61093a8185610cc0565b935061094a818560208601610d4e565b61095381610daf565b840191505092915050565b600061096982610cb5565b6109738185610cd1565b9350610983818560208601610d4e565b80840191505092915050565b600061099a82610caa565b6109a48185610cd1565b93506109b4818560208601610d4e565b80840191505092915050565b60006109cd601683610cdc565b91507f4578637574696e67204d6574615478204661696c6564000000000000000000006000830152602082019050919050565b6000610a0d600d83610cdc565b91507f6e6f6e636520746f6f206c6f77000000000000000000000000000000000000006000830152602082019050919050565b6000610a4d601d83610cdc565b91507f546f6f206d616e792062617463686564207472616e73616374696f6e730000006000830152602082019050919050565b610a91610a8c82610d35565b610da5565b82525050565b6000610aa382866108f0565b601482019150610ab38285610a80565b602082019150610ac3828461095e565b9150819050949350505050565b6000610adc828461098f565b915081905092915050565b6000602082019050610afc60008301846108e1565b92915050565b6000602082019050610b176000830184610907565b92915050565b6000604082019050610b326000830185610916565b8181036020830152610b448184610925565b90509392505050565b60006020820190508181036000830152610b66816109c0565b9050919050565b60006020820190508181036000830152610b8681610a00565b9050919050565b60006020820190508181036000830152610ba681610a40565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715610bd057600080fd5b8060405250919050565b600067ffffffffffffffff821115610bf157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c1957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c4157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c6957600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115610c9557600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610cf882610d15565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610d6c578082015181840152602081019050610d51565b83811115610d7b576000848401525b50505050565b6000610d8c82610d93565b9050919050565b6000610d9e82610dc0565b9050919050565b6000819050919050565b6000601f19601f8301169050919050565b60008160601b9050919050565b610dd681610ced565b8114610de157600080fd5b50565b610ded81610d0b565b8114610df857600080fd5b50565b610e0481610d35565b8114610e0f57600080fd5b5056fea265627a7a72305820675fac2da4d83f8076562cc3b227d5ee761f090ca895e548e954c662ee19456a6c6578706572696d656e74616cf50037",
"sourceMap": "265:3412:1:-;;;1064:77;8:9:-1;5:2;;;30:1;27;20:12;5:2;1064:77:1;;;;;;;;;;;;;;;;;;;;;;1127:7;1118:6;;:16;;;;;;;;;;;;;;;;;;1064:77;265:3412;;5:150:-1;;97:6;91:13;82:22;;109:41;144:5;109:41;;;76:79;;;;;162:279;;285:2;273:9;264:7;260:23;256:32;253:2;;;301:1;298;291:12;253:2;336:1;353:72;417:7;408:6;397:9;393:22;353:72;;;343:82;;315:116;247:194;;;;;448:99;;518:24;536:5;518:24;;;507:35;;501:46;;;;554:121;;627:42;620:5;616:54;605:65;;599:76;;;;682:133;759:32;785:5;759:32;;;752:5;749:43;739:2;;806:1;803;796:12;739:2;733:82;;265:3412:1;;;;;;;",
"deployedSourceMap": "265:3412:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2103:405;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2103:405:1;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3114:561;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3114:561:1;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1491:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1491:138:1;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2103:405;2222:12;2246:16;2292:7;2301:6;2309:5;2275:40;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2275:40:1;;;2265:51;;;;;;2246:70;;2326:14;2343:25;2353:8;2363:4;2343:9;:25::i;:::-;2326:42;;2378:13;2451:4;2444:5;2440:16;2434:23;2424:33;;2494:6;;;;;;;;;;;2484:16;;:6;:16;;;2476:25;;;;;2103:405;;;;;;:::o;3114:561::-;3342:4;3289:7;3298:6;3306:5;3313:18;799:6;806:1;799:8;;795:133;812:6;:13;809:1;:16;795:133;;;854:68;871:6;878:1;871:9;;;;;;;;;;;;;;882:5;888:1;882:8;;;;;;;;;;;;;;892:4;897:1;892:7;;;;;;;;;;;;;;901:17;919:1;901:20;;;;;;;;;;;;;;854:16;:68::i;:::-;846:77;;;;;;827:3;;;;;;;795:133;;;;3378:1;3360:7;:14;:19;;3352:61;;;;;;;;;;;;;;;;;;;;;;3427:6;3434:1;3427:8;;3423:231;3440:7;:14;3437:1;:17;3423:231;;;3493:5;;3483:6;3490:1;3483:9;;;;;;;;;;;;;;:15;3475:41;;;;;;;;;;;;;;;;;;;;;;3522:12;3539:7;3547:1;3539:10;;;;;;;;;;;;;;:15;;3561:6;3568:1;3561:9;;;;;;;;;;;;;;3572:5;3578:1;3572:8;;;;;;;;;;;;;;3539:42;;;;;;;;;;;;;;;;;;;;;;;;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;;3521:60:1;;;3595:5;;:7;;;;;;;;;;;;;3615;3607:42;;;;;;;;;;;;;;;;;;;;;;3423:231;3456:3;;;;;;;3423:231;;;;3664:4;3657:11;;3114:561;;;;;;;;;;;:::o;1491:138::-;1563:14;1590:7;:23;1614:4;1620;1590:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1590:35:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1590:35:1;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1590:35:1;;;;;;;;;1583:42;;1491:138;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;301:707;;418:3;411:4;403:6;399:17;395:27;385:2;;436:1;433;426:12;385:2;473:6;460:20;495:80;510:64;567:6;510:64;;;495:80;;;486:89;;592:5;617:6;610:5;603:21;647:4;639:6;635:17;625:27;;669:4;664:3;660:14;653:21;;722:6;769:3;761:4;753:6;749:17;744:3;740:27;737:36;734:2;;;786:1;783;776:12;734:2;811:1;796:206;821:6;818:1;815:13;796:206;;;879:3;901:37;934:3;922:10;901:37;;;896:3;889:50;962:4;957:3;953:14;946:21;;990:4;985:3;981:14;974:21;;853:149;843:1;840;836:9;831:14;;796:206;;;800:14;378:630;;;;;;;;1032:693;;1154:3;1147:4;1139:6;1135:17;1131:27;1121:2;;1172:1;1169;1162:12;1121:2;1209:6;1196:20;1231:85;1246:69;1308:6;1246:69;;;1231:85;;;1222:94;;1333:5;1358:6;1351:5;1344:21;1388:4;1380:6;1376:17;1366:27;;1410:4;1405:3;1401:14;1394:21;;1463:6;1496:1;1481:238;1506:6;1503:1;1500:13;1481:238;;;1589:3;1576:17;1568:6;1564:30;1613:42;1651:3;1639:10;1613:42;;;1608:3;1601:55;1679:4;1674:3;1670:14;1663:21;;1707:4;1702:3;1698:14;1691:21;;1538:181;1528:1;1525;1521:9;1516:14;;1481:238;;;1485:14;1114:611;;;;;;;;1751:707;;1868:3;1861:4;1853:6;1849:17;1845:27;1835:2;;1886:1;1883;1876:12;1835:2;1923:6;1910:20;1945:80;1960:64;2017:6;1960:64;;;1945:80;;;1936:89;;2042:5;2067:6;2060:5;2053:21;2097:4;2089:6;2085:17;2075:27;;2119:4;2114:3;2110:14;2103:21;;2172:6;2219:3;2211:4;2203:6;2199:17;2194:3;2190:27;2187:36;2184:2;;;2236:1;2233;2226:12;2184:2;2261:1;2246:206;2271:6;2268:1;2265:13;2246:206;;;2329:3;2351:37;2384:3;2372:10;2351:37;;;2346:3;2339:50;2412:4;2407:3;2403:14;2396:21;;2440:4;2435:3;2431:14;2424:21;;2303:149;2293:1;2290;2286:9;2281:14;;2246:206;;;2250:14;1828:630;;;;;;;;2466:130;;2546:6;2533:20;2524:29;;2558:33;2585:5;2558:33;;;2518:78;;;;;2604:432;;2701:3;2694:4;2686:6;2682:17;2678:27;2668:2;;2719:1;2716;2709:12;2668:2;2756:6;2743:20;2778:60;2793:44;2830:6;2793:44;;;2778:60;;;2769:69;;2858:6;2851:5;2844:21;2894:4;2886:6;2882:17;2927:4;2920:5;2916:16;2962:3;2953:6;2948:3;2944:16;2941:25;2938:2;;;2979:1;2976;2969:12;2938:2;2989:41;3023:6;3018:3;3013;2989:41;;;2661:375;;;;;;;;3045:440;;3146:3;3139:4;3131:6;3127:17;3123:27;3113:2;;3164:1;3161;3154:12;3113:2;3201:6;3188:20;3223:64;3238:48;3279:6;3238:48;;;3223:64;;;3214:73;;3307:6;3300:5;3293:21;3343:4;3335:6;3331:17;3376:4;3369:5;3365:16;3411:3;3402:6;3397:3;3393:16;3390:25;3387:2;;;3428:1;3425;3418:12;3387:2;3438:41;3472:6;3467:3;3462;3438:41;;;3106:379;;;;;;;;3493:130;;3573:6;3560:20;3551:29;;3585:33;3612:5;3585:33;;;3545:78;;;;;3630:263;;3745:2;3733:9;3724:7;3720:23;3716:32;3713:2;;;3761:1;3758;3751:12;3713:2;3796:1;3813:64;3869:7;3860:6;3849:9;3845:22;3813:64;;;3803:74;;3775:108;3707:186;;;;;3900:825;;;;;4073:3;4061:9;4052:7;4048:23;4044:33;4041:2;;;4090:1;4087;4080:12;4041:2;4125:1;4142:53;4187:7;4178:6;4167:9;4163:22;4142:53;;;4132:63;;4104:97;4232:2;4250:53;4295:7;4286:6;4275:9;4271:22;4250:53;;;4240:63;;4211:98;4368:2;4357:9;4353:18;4340:32;4392:18;4384:6;4381:30;4378:2;;;4424:1;4421;4414:12;4378:2;4444:62;4498:7;4489:6;4478:9;4474:22;4444:62;;;4434:72;;4319:193;4571:2;4560:9;4556:18;4543:32;4595:18;4587:6;4584:30;4581:2;;;4627:1;4624;4617:12;4581:2;4647:62;4701:7;4692:6;4681:9;4677:22;4647:62;;;4637:72;;4522:193;4035:690;;;;;;;;4732:1443;;;;;;5039:3;5027:9;5018:7;5014:23;5010:33;5007:2;;;5056:1;5053;5046:12;5007:2;5119:1;5108:9;5104:17;5091:31;5142:18;5134:6;5131:30;5128:2;;;5174:1;5171;5164:12;5128:2;5194:78;5264:7;5255:6;5244:9;5240:22;5194:78;;;5184:88;;5070:208;5337:2;5326:9;5322:18;5309:32;5361:18;5353:6;5350:30;5347:2;;;5393:1;5390;5383:12;5347:2;5413:78;5483:7;5474:6;5463:9;5459:22;5413:78;;;5403:88;;5288:209;5556:2;5545:9;5541:18;5528:32;5580:18;5572:6;5569:30;5566:2;;;5612:1;5609;5602:12;5566:2;5632:83;5707:7;5698:6;5687:9;5683:22;5632:83;;;5622:93;;5507:214;5780:2;5769:9;5765:18;5752:32;5804:18;5796:6;5793:30;5790:2;;;5836:1;5833;5826:12;5790:2;5856:83;5931:7;5922:6;5911:9;5907:22;5856:83;;;5846:93;;5731:214;6004:3;5993:9;5989:19;5976:33;6029:18;6021:6;6018:30;6015:2;;;6061:1;6058;6051:12;6015:2;6081:78;6151:7;6142:6;6131:9;6127:22;6081:78;;;6071:88;;5955:210;5001:1174;;;;;;;;;6182:470;;;6312:2;6300:9;6291:7;6287:23;6283:32;6280:2;;;6328:1;6325;6318:12;6280:2;6363:1;6380:53;6425:7;6416:6;6405:9;6401:22;6380:53;;;6370:63;;6342:97;6498:2;6487:9;6483:18;6470:32;6522:18;6514:6;6511:30;6508:2;;;6554:1;6551;6544:12;6508:2;6574:62;6628:7;6619:6;6608:9;6604:22;6574:62;;;6564:72;;6449:193;6274:378;;;;;;6659:113;6742:24;6760:5;6742:24;;;6737:3;6730:37;6724:48;;;6779:152;6880:45;6900:24;6918:5;6900:24;;;6880:45;;;6875:3;6868:58;6862:69;;;6938:104;7015:21;7030:5;7015:21;;;7010:3;7003:34;6997:45;;;7049:121;7140:24;7158:5;7140:24;;;7135:3;7128:37;7122:48;;;7177:359;;7295:38;7327:5;7295:38;;;7345:78;7416:6;7411:3;7345:78;;;7338:85;;7428:52;7473:6;7468:3;7461:4;7454:5;7450:16;7428:52;;;7501:29;7523:6;7501:29;;;7496:3;7492:39;7485:46;;7275:261;;;;;;7543:356;;7671:38;7703:5;7671:38;;;7721:88;7802:6;7797:3;7721:88;;;7714:95;;7814:52;7859:6;7854:3;7847:4;7840:5;7836:16;7814:52;;;7887:6;7882:3;7878:16;7871:23;;7651:248;;;;;;7906:348;;8030:34;8058:5;8030:34;;;8076:88;8157:6;8152:3;8076:88;;;8069:95;;8169:52;8214:6;8209:3;8202:4;8195:5;8191:16;8169:52;;;8242:6;8237:3;8233:16;8226:23;;8010:244;;;;;;8262:364;;8422:67;8486:2;8481:3;8422:67;;;8415:74;;8522:66;8518:1;8513:3;8509:11;8502:87;8617:2;8612:3;8608:12;8601:19;;8408:218;;;;8635:364;;8795:67;8859:2;8854:3;8795:67;;;8788:74;;8895:66;8891:1;8886:3;8882:11;8875:87;8990:2;8985:3;8981:12;8974:19;;8781:218;;;;9008:364;;9168:67;9232:2;9227:3;9168:67;;;9161:74;;9268:66;9264:1;9259:3;9255:11;9248:87;9363:2;9358:3;9354:12;9347:19;;9154:218;;;;9380:152;9481:45;9501:24;9519:5;9501:24;;;9481:45;;;9476:3;9469:58;9463:69;;;9539:540;;9732:75;9803:3;9794:6;9732:75;;;9829:2;9824:3;9820:12;9813:19;;9843:75;9914:3;9905:6;9843:75;;;9940:2;9935:3;9931:12;9924:19;;9961:93;10050:3;10041:6;9961:93;;;9954:100;;10071:3;10064:10;;9720:359;;;;;;;10086:254;;10226:89;10311:3;10302:6;10226:89;;;10219:96;;10332:3;10325:10;;10207:133;;;;;10347:213;;10465:2;10454:9;10450:18;10442:26;;10479:71;10547:1;10536:9;10532:17;10523:6;10479:71;;;10436:124;;;;;10567:201;;10679:2;10668:9;10664:18;10656:26;;10693:65;10755:1;10744:9;10740:17;10731:6;10693:65;;;10650:118;;;;;10775:432;;10947:2;10936:9;10932:18;10924:26;;10961:79;11037:1;11026:9;11022:17;11013:6;10961:79;;;11088:9;11082:4;11078:20;11073:2;11062:9;11058:18;11051:48;11113:84;11192:4;11183:6;11113:84;;;11105:92;;10918:289;;;;;;11214:407;;11405:2;11394:9;11390:18;11382:26;;11455:9;11449:4;11445:20;11441:1;11430:9;11426:17;11419:47;11480:131;11606:4;11480:131;;;11472:139;;11376:245;;;;11628:407;;11819:2;11808:9;11804:18;11796:26;;11869:9;11863:4;11859:20;11855:1;11844:9;11840:17;11833:47;11894:131;12020:4;11894:131;;;11886:139;;11790:245;;;;12042:407;;12233:2;12222:9;12218:18;12210:26;;12283:9;12277:4;12273:20;12269:1;12258:9;12254:17;12247:47;12308:131;12434:4;12308:131;;;12300:139;;12204:245;;;;12456:256;;12518:2;12512:9;12502:19;;12556:4;12548:6;12544:17;12655:6;12643:10;12640:22;12619:18;12607:10;12604:34;12601:62;12598:2;;;12676:1;12673;12666:12;12598:2;12696:10;12692:2;12685:22;12496:216;;;;;12719:258;;12878:18;12870:6;12867:30;12864:2;;;12910:1;12907;12900:12;12864:2;12939:4;12931:6;12927:17;12919:25;;12967:4;12961;12957:15;12949:23;;12801:176;;;;12984:263;;13148:18;13140:6;13137:30;13134:2;;;13180:1;13177;13170:12;13134:2;13209:4;13201:6;13197:17;13189:25;;13237:4;13231;13227:15;13219:23;;13071:176;;;;13254:258;;13413:18;13405:6;13402:30;13399:2;;;13445:1;13442;13435:12;13399:2;13474:4;13466:6;13462:17;13454:25;;13502:4;13496;13492:15;13484:23;;13336:176;;;;13519:254;;13658:18;13650:6;13647:30;13644:2;;;13690:1;13687;13680:12;13644:2;13734:4;13730:9;13723:4;13715:6;13711:17;13707:33;13699:41;;13763:4;13757;13753:15;13745:23;;13581:192;;;;13780:258;;13923:18;13915:6;13912:30;13909:2;;;13955:1;13952;13945:12;13909:2;13999:4;13995:9;13988:4;13980:6;13976:17;13972:33;13964:41;;14028:4;14022;14018:15;14010:23;;13846:192;;;;14045:87;;14121:5;14115:12;14105:22;;14099:33;;;;14139:91;;14219:5;14213:12;14203:22;;14197:33;;;;14238:170;;14360:6;14355:3;14348:19;14397:4;14392:3;14388:14;14373:29;;14341:67;;;;;14417:144;;14552:3;14537:18;;14530:31;;;;;14570:163;;14685:6;14680:3;14673:19;14722:4;14717:3;14713:14;14698:29;;14666:67;;;;;14741:91;;14803:24;14821:5;14803:24;;;14792:35;;14786:46;;;;14839:85;;14912:5;14905:13;14898:21;14887:32;;14881:43;;;;14931:72;;14993:5;14982:16;;14976:27;;;;15010:121;;15083:42;15076:5;15072:54;15061:65;;15055:76;;;;15138:72;;15200:5;15189:16;;15183:27;;;;15218:145;15299:6;15294:3;15289;15276:30;15355:1;15346:6;15341:3;15337:16;15330:27;15269:94;;;;15372:268;15437:1;15444:101;15458:6;15455:1;15452:13;15444:101;;;15534:1;15529:3;15525:11;15519:18;15515:1;15510:3;15506:11;15499:39;15480:2;15477:1;15473:10;15468:15;;15444:101;;;15560:6;15557:1;15554:13;15551:2;;;15625:1;15616:6;15611:3;15607:16;15600:27;15551:2;15421:219;;;;;15648:95;;15712:26;15732:5;15712:26;;;15701:37;;15695:48;;;;15750:89;;15814:20;15828:5;15814:20;;;15803:31;;15797:42;;;;15846:74;;15910:5;15899:16;;15893:27;;;;15927:97;;16015:2;16011:7;16006:2;15999:5;15995:14;15991:28;15981:38;;15975:49;;;;16033:81;;16102:5;16098:2;16094:14;16082:26;;16075:39;;;;16123:117;16192:24;16210:5;16192:24;;;16185:5;16182:35;16172:2;;16231:1;16228;16221:12;16172:2;16166:74;;16247:117;16316:24;16334:5;16316:24;;;16309:5;16306:35;16296:2;;16355:1;16352;16345:12;16296:2;16290:74;;16371:117;16440:24;16458:5;16440:24;;;16433:5;16430:35;16420:2;;16479:1;16476;16469:12;16420:2;16414:74;",
"source": "pragma solidity >=0.4.21 <0.6.0;\npragma experimental ABIEncoderV2;\n\nimport './libs/ECTools.sol';\n\n/// @title Wallet\n/// @author Nico Vergauwen <vergauwennico@gmail.com>\n/// @notice Wallet contract that can execute meta transactions on behalf of authorized signers\ncontract Wallet {\n\n /// @notice master owner \n address payable master;\n\n /// @notice nonce\n uint256 nonce; \n\n /// @dev Access modifier that requires 'msg.sender' to be 'master'\n modifier onlyMaster() {\n require(msg.sender == master, \"Unauthorized\");\n _;\n }\n\n /// @dev Access modifier that checks whether meta transactions are signed by authorized EOA's\n modifier onlyMasterOrActor(address[] memory target, uint256[] memory value, bytes[] memory data, bytes[] memory dataHashSignature) {\n\t\tfor(uint i=0; i< target.length; i++) {\n require(isValidSignature(target[i], value[i], data[i], dataHashSignature[i]));\n\t\t}\n\t\t_;\n\t}\n\n /// @notice Sets the master address upon deployment\n /// @param _master (address) Ethereum address for the master \n constructor(address payable _master) public {\n master = _master;\n }\n\n /// @notice Fallback \n function() external payable {}\n\n /// @notice Get the signer of a transaction through ecrecover\n /// @param _raw (bytes32) keccak256 hash of the ABI encoded transaction data \n /// @param _sig (bytes) the signature resulting from signing 'raw'\n /// @return signer (address) the EOA that signed the data \n function getSigner(bytes32 _raw, bytes memory _sig) public pure returns(address signer) {\n\t\treturn ECTools.prefixedRecover(_raw, _sig);\n\t}\n\n /// @notice Checks whether the signer is an authorized EOA\n /// @param _target (address) contract target address \n /// @param _value (uint256) Wei amount being send in the transaction \n /// @param _data (bytes) data being send in the transaction \n /// @param _sig (bytes) the signature of the transaction data \n /// @return isValid (bool) true/false based on whether the signer is master or an actor that has access rights to the method at 'target'\n function isValidSignature(address _target, uint256 _value, bytes memory _data, bytes memory _sig) public view returns (bool isValid) {\n bytes32 dataHash = keccak256(abi.encodePacked(_target, _value, _data));\n address signer = getSigner(dataHash, _sig);\n bytes4 method;\n assembly {\n method := mload(add(_data, 0x20))\n }\n return (signer == master);\n }\n\n /// @notice Execute a batch of meta transactions atomically\n /// @dev Anyone can execute this but only transactions signed by master or actor (if valid method) are accepted \n /// @param _target (address[]) Array of contract addresses\n /// @param _value (uint256[]) Array of wei amounts being sent in the respective transactions \n /// @param _data (bytes[]) Array of ABI encoded transaction data \n /// @param _dataHashSignature (bytes[]) Array of transaction signatures for the respective transaction data\n /// @return (bool) returns true if all transactions in the batch succeeded\n\tfunction execute(address[] memory _target, uint256[] memory _value, bytes[] memory _data, bytes[] memory _dataHashSignature, uint256[] memory _nonce) public onlyMasterOrActor(_target, _value, _data, _dataHashSignature) returns (bool) {\n\t\trequire(_target.length <= 8, 'Too many batched transactions');\n for(uint i=0; i< _target.length; i++) {\n require(_nonce[i]>nonce, \"nonce too low\");\n\t\t\t(bool success,) = _target[i].call.value(_value[i])(_data[i]);\n nonce++;\n\t\t\trequire(success, 'Excuting MetaTx Failed');\n\t\t}\n\t\treturn true;\n }\n}",
"sourcePath": "/Users/nico/Desktop/ethberlin/eth-wallet/contracts/Wallet.sol",
"ast": {
"absolutePath": "/Users/nico/Desktop/ethberlin/eth-wallet/contracts/Wallet.sol",
"exportedSymbols": {
"Wallet": [
277
]
},
"id": 278,
"nodeType": "SourceUnit",
"nodes": [
{
"id": 58,
"literals": [
"solidity",
">=",
"0.4",
".21",
"<",
"0.6",
".0"
],
"nodeType": "PragmaDirective",
"src": "0:32:1"
},
{
"id": 59,
"literals": [
"experimental",
"ABIEncoderV2"
],
"nodeType": "PragmaDirective",
"src": "33:33:1"
},
{
"absolutePath": "/Users/nico/Desktop/ethberlin/eth-wallet/contracts/libs/ECTools.sol",
"file": "./libs/ECTools.sol",
"id": 60,
"nodeType": "ImportDirective",
"scope": 278,
"sourceUnit": 384,
"src": "68:28:1",
"symbolAliases": [],
"unitAlias": ""
},
{
"baseContracts": [],
"contractDependencies": [],
"contractKind": "contract",
"documentation": "@title Wallet\n @author Nico Vergauwen <vergauwennico@gmail.com>\n @notice Wallet contract that can execute meta transactions on behalf of authorized signers",
"fullyImplemented": true,
"id": 277,
"linearizedBaseContracts": [
277
],
"name": "Wallet",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": false,
"id": 62,
"name": "master",
"nodeType": "VariableDeclaration",
"scope": 277,
"src": "318:22:1",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 61,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "318:15:1",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 64,
"name": "nonce",
"nodeType": "VariableDeclaration",
"scope": 277,
"src": "369:13:1",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 63,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "369:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"body": {
"id": 75,
"nodeType": "Block",
"src": "483:73:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"id": 70,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 67,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 398,
"src": "501:3:1",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 68,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "501:10:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 69,
"name": "master",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 62,
"src": "515:6:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "501:20:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "556e617574686f72697a6564",
"id": 71,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "523:14:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_1b2638459828301e8cd6c7c02856073bacf975379e0867f689bb14feacb780c5",
"typeString": "literal_string \"Unauthorized\""
},
"value": "Unauthorized"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_1b2638459828301e8cd6c7c02856073bacf975379e0867f689bb14feacb780c5",
"typeString": "literal_string \"Unauthorized\""
}
],
"id": 66,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
401,
402
],
"referencedDeclaration": 402,
"src": "493:7:1",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 72,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "493:45:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 73,
"nodeType": "ExpressionStatement",
"src": "493:45:1"
},
{
"id": 74,
"nodeType": "PlaceholderStatement",
"src": "548:1:1"
}
]
},
"documentation": "@dev Access modifier that requires 'msg.sender' to be 'master'",
"id": 76,
"name": "onlyMaster",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 65,
"nodeType": "ParameterList",
"parameters": [],
"src": "480:2:1"
},
"src": "461:95:1",
"visibility": "internal"
},
{
"body": {
"id": 121,
"nodeType": "Block",
"src": "791:145:1",
"statements": [
{
"body": {
"id": 118,
"nodeType": "Block",
"src": "832:96:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 103,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 79,
"src": "871:6:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
"id": 105,
"indexExpression": {
"argumentTypes": null,
"id": 104,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "878:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "871:9:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 106,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 82,
"src": "882:5:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[] memory"
}
},
"id": 108,
"indexExpression": {
"argumentTypes": null,
"id": 107,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "888:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "882:8:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 109,
"name": "data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 85,
"src": "892:4:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes memory[] memory"
}
},
"id": 111,
"indexExpression": {
"argumentTypes": null,
"id": 110,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "897:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "892:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
}
},
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 112,
"name": "dataHashSignature",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 88,
"src": "901:17:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes memory[] memory"
}
},
"id": 114,
"indexExpression": {
"argumentTypes": null,
"id": 113,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "919:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "901:20:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
}
],
"id": 102,
"name": "isValidSignature",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 193,
"src": "854:16:1",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
"typeString": "function (address,uint256,bytes memory,bytes memory) view returns (bool)"
}
},
"id": 115,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "854:68:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
],
"id": 101,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
401,
402
],
"referencedDeclaration": 401,
"src": "846:7:1",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
"typeString": "function (bool) pure"
}
},
"id": 116,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "846:77:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 117,
"nodeType": "ExpressionStatement",
"src": "846:77:1"
}
]
},
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 97,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 94,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "809:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 95,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 79,
"src": "812:6:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
"id": 96,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "812:13:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "809:16:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 119,
"initializationExpression": {
"assignments": [
91
],
"declarations": [
{
"constant": false,
"id": 91,
"name": "i",
"nodeType": "VariableDeclaration",
"scope": 119,
"src": "799:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 90,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "799:4:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 93,
"initialValue": {
"argumentTypes": null,
"hexValue": "30",
"id": 92,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "806:1:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "799:8:1"
},
"loopExpression": {
"expression": {
"argumentTypes": null,
"id": 99,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "827:3:1",
"subExpression": {
"argumentTypes": null,
"id": 98,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "827:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 100,
"nodeType": "ExpressionStatement",
"src": "827:3:1"
},
"nodeType": "ForStatement",
"src": "795:133:1"
},
{
"id": 120,
"nodeType": "PlaceholderStatement",
"src": "931:1:1"
}
]
},
"documentation": "@dev Access modifier that checks whether meta transactions are signed by authorized EOA's",
"id": 122,
"name": "onlyMasterOrActor",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 89,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 79,
"name": "target",
"nodeType": "VariableDeclaration",
"scope": 122,
"src": "687:23:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[]"
},
"typeName": {
"baseType": {
"id": 77,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "687:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 78,
"length": null,
"nodeType": "ArrayTypeName",
"src": "687:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
"typeString": "address[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 82,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 122,
"src": "712:22:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 80,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "712:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 81,
"length": null,
"nodeType": "ArrayTypeName",
"src": "712:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 85,
"name": "data",
"nodeType": "VariableDeclaration",
"scope": 122,
"src": "736:19:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes[]"
},
"typeName": {
"baseType": {
"id": 83,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "736:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"id": 84,
"length": null,
"nodeType": "ArrayTypeName",
"src": "736:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
"typeString": "bytes[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 88,
"name": "dataHashSignature",
"nodeType": "VariableDeclaration",
"scope": 122,
"src": "757:32:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes[]"
},
"typeName": {
"baseType": {
"id": 86,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "757:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"id": 87,
"length": null,
"nodeType": "ArrayTypeName",
"src": "757:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
"typeString": "bytes[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "686:104:1"
},
"src": "660:276:1",
"visibility": "internal"
},
{
"body": {
"id": 131,
"nodeType": "Block",
"src": "1108:33:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 129,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 127,
"name": "master",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 62,
"src": "1118:6:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 128,
"name": "_master",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 124,
"src": "1127:7:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "1118:16:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"id": 130,
"nodeType": "ExpressionStatement",
"src": "1118:16:1"
}
]
},
"documentation": "@notice Sets the master address upon deployment\n @param _master (address) Ethereum address for the master ",
"id": 132,
"implemented": true,
"kind": "constructor",
"modifiers": [],
"name": "",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 125,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 124,
"name": "_master",
"nodeType": "VariableDeclaration",
"scope": 132,
"src": "1076:23:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 123,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1076:15:1",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1075:25:1"
},
"returnParameters": {
"id": 126,
"nodeType": "ParameterList",
"parameters": [],
"src": "1108:0:1"
},
"scope": 277,
"src": "1064:77:1",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 135,
"nodeType": "Block",
"src": "1201:2:1",
"statements": []
},
"documentation": "@notice Fallback ",
"id": 136,
"implemented": true,
"kind": "fallback",
"modifiers": [],
"name": "",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 133,
"nodeType": "ParameterList",
"parameters": [],
"src": "1181:2:1"
},
"returnParameters": {
"id": 134,
"nodeType": "ParameterList",
"parameters": [],
"src": "1201:0:1"
},
"scope": 277,
"src": "1173:30:1",
"stateMutability": "payable",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 151,
"nodeType": "Block",
"src": "1579:50:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 147,
"name": "_raw",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 138,
"src": "1614:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"argumentTypes": null,
"id": 148,
"name": "_sig",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 140,
"src": "1620:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"expression": {
"argumentTypes": null,
"id": 145,
"name": "ECTools",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 383,
"src": "1590:7:1",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_ECTools_$383_$",
"typeString": "type(library ECTools)"
}
},
"id": 146,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "prefixedRecover",
"nodeType": "MemberAccess",
"referencedDeclaration": 382,
"src": "1590:23:1",
"typeDescriptions": {
"typeIdentifier": "t_function_delegatecall_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
"typeString": "function (bytes32,bytes memory) pure returns (address)"
}
},
"id": 149,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1590:35:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"functionReturnParameters": 144,
"id": 150,
"nodeType": "Return",
"src": "1583:42:1"
}
]
},
"documentation": "@notice Get the signer of a transaction through ecrecover\n @param _raw (bytes32) keccak256 hash of the ABI encoded transaction data \n @param _sig (bytes) the signature resulting from signing 'raw'\n @return signer (address) the EOA that signed the data ",
"id": 152,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getSigner",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 141,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 138,
"name": "_raw",
"nodeType": "VariableDeclaration",
"scope": 152,
"src": "1510:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 137,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1510:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 140,
"name": "_sig",
"nodeType": "VariableDeclaration",
"scope": 152,
"src": "1524:17:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 139,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "1524:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1509:33:1"
},
"returnParameters": {
"id": 144,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 143,
"name": "signer",
"nodeType": "VariableDeclaration",
"scope": 152,
"src": "1563:14:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 142,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1563:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1562:16:1"
},
"scope": 277,
"src": "1491:138:1",
"stateMutability": "pure",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 192,
"nodeType": "Block",
"src": "2236:272:1",
"statements": [
{
"assignments": [
166
],
"declarations": [
{
"constant": false,
"id": 166,
"name": "dataHash",
"nodeType": "VariableDeclaration",
"scope": 192,
"src": "2246:16:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 165,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2246:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 175,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 170,
"name": "_target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 154,
"src": "2292:7:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 171,
"name": "_value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 156,
"src": "2301:6:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 172,
"name": "_data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 158,
"src": "2309:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"expression": {
"argumentTypes": null,
"id": 168,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 385,
"src": "2275:3:1",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 169,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2275:16:1",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 173,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2275:40:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 167,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 392,
"src": "2265:9:1",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 174,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2265:51:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "2246:70:1"
},
{
"assignments": [
177
],
"declarations": [
{
"constant": false,
"id": 177,
"name": "signer",
"nodeType": "VariableDeclaration",
"scope": 192,
"src": "2326:14:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 176,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2326:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 182,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 179,
"name": "dataHash",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 166,
"src": "2353:8:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"argumentTypes": null,
"id": 180,
"name": "_sig",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 160,
"src": "2363:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 178,
"name": "getSigner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 152,
"src": "2343:9:1",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
"typeString": "function (bytes32,bytes memory) pure returns (address)"
}
},
"id": 181,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2343:25:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "2326:42:1"
},
{
"assignments": [
184
],
"declarations": [
{
"constant": false,
"id": 184,
"name": "method",
"nodeType": "VariableDeclaration",
"scope": 192,
"src": "2378:13:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 183,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "2378:6:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 185,
"initialValue": null,
"nodeType": "VariableDeclarationStatement",
"src": "2378:13:1"
},
{
"externalReferences": [
{
"method": {
"declaration": 184,
"isOffset": false,
"isSlot": false,
"src": "2424:6:1",
"valueSize": 1
}
},
{
"_data": {
"declaration": 158,
"isOffset": false,
"isSlot": false,
"src": "2444:5:1",
"valueSize": 1
}
}
],
"id": 186,
"nodeType": "InlineAssembly",
"operations": "{\n method := mload(add(_data, 0x20))\n}",
"src": "2401:66:1"
},
{
"expression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 189,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 187,
"name": "signer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 177,
"src": "2484:6:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 188,
"name": "master",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 62,
"src": "2494:6:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "2484:16:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"id": 190,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "2483:18:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 164,
"id": 191,
"nodeType": "Return",
"src": "2476:25:1"
}
]
},
"documentation": "@notice Checks whether the signer is an authorized EOA\n @param _target (address) contract target address \n @param _value (uint256) Wei amount being send in the transaction \n @param _data (bytes) data being send in the transaction \n @param _sig (bytes) the signature of the transaction data \n @return isValid (bool) true/false based on whether the signer is master or an actor that has access rights to the method at 'target'",
"id": 193,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "isValidSignature",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 161,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 154,
"name": "_target",
"nodeType": "VariableDeclaration",
"scope": 193,
"src": "2129:15:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 153,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2129:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 156,
"name": "_value",
"nodeType": "VariableDeclaration",
"scope": 193,
"src": "2146:14:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 155,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2146:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 158,
"name": "_data",
"nodeType": "VariableDeclaration",
"scope": 193,
"src": "2162:18:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 157,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "2162:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 160,
"name": "_sig",
"nodeType": "VariableDeclaration",
"scope": 193,
"src": "2182:17:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 159,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "2182:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2128:72:1"
},
"returnParameters": {
"id": 164,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 163,
"name": "isValid",
"nodeType": "VariableDeclaration",
"scope": 193,
"src": "2222:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 162,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2222:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2221:14:1"
},
"scope": 277,
"src": "2103:405:1",
"stateMutability": "view",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 275,
"nodeType": "Block",
"src": "3348:327:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 223,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 220,
"name": "_target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 196,
"src": "3360:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
"id": 221,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3360:14:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "38",
"id": 222,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3378:1:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_8_by_1",
"typeString": "int_const 8"
},
"value": "8"
},
"src": "3360:19:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "546f6f206d616e792062617463686564207472616e73616374696f6e73",
"id": 224,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3381:31:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_d8b879c93aab434e63503f746a4a99040742d041f4eddec625551a17301b4e50",
"typeString": "literal_string \"Too many batched transactions\""
},
"value": "Too many batched transactions"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_d8b879c93aab434e63503f746a4a99040742d041f4eddec625551a17301b4e50",
"typeString": "literal_string \"Too many batched transactions\""
}
],
"id": 219,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
401,
402
],
"referencedDeclaration": 402,
"src": "3352:7:1",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 225,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3352:61:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 226,
"nodeType": "ExpressionStatement",
"src": "3352:61:1"
},
{
"body": {
"id": 271,
"nodeType": "Block",
"src": "3461:193:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 243,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 239,
"name": "_nonce",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 208,
"src": "3483:6:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[] memory"
}
},
"id": 241,
"indexExpression": {
"argumentTypes": null,
"id": 240,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3490:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3483:9:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"id": 242,
"name": "nonce",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 64,
"src": "3493:5:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3483:15:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "6e6f6e636520746f6f206c6f77",
"id": 244,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3500:15:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_6b1b1f0d9202e6cc83eefff4868a5797647d3677db175d9e109a8489a7e54e4e",
"typeString": "literal_string \"nonce too low\""
},
"value": "nonce too low"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_6b1b1f0d9202e6cc83eefff4868a5797647d3677db175d9e109a8489a7e54e4e",
"typeString": "literal_string \"nonce too low\""
}
],
"id": 238,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
401,
402
],
"referencedDeclaration": 402,
"src": "3475:7:1",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 245,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3475:41:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 246,
"nodeType": "ExpressionStatement",
"src": "3475:41:1"
},
{
"assignments": [
248,
null
],
"declarations": [
{
"constant": false,
"id": 248,
"name": "success",
"nodeType": "VariableDeclaration",
"scope": 271,
"src": "3522:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 247,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3522:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
null
],
"id": 262,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 258,
"name": "_data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 202,
"src": "3572:5:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes memory[] memory"
}
},
"id": 260,
"indexExpression": {
"argumentTypes": null,
"id": 259,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3578:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3572:8:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
}
],
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 254,
"name": "_value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 199,
"src": "3561:6:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[] memory"
}
},
"id": 256,
"indexExpression": {
"argumentTypes": null,
"id": 255,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3568:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3561:9:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 249,
"name": "_target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 196,
"src": "3539:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
"id": 251,
"indexExpression": {
"argumentTypes": null,
"id": 250,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3547:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3539:10:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 252,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "call",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3539:15:1",
"typeDescriptions": {
"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
}
},
"id": 253,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3539:21:1",
"typeDescriptions": {
"typeIdentifier": "t_function_setvalue_nonpayable$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$",
"typeString": "function (uint256) returns (function (bytes memory) payable returns (bool,bytes memory))"
}
},
"id": 257,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3539:32:1",
"typeDescriptions": {
"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
}
},
"id": 261,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3539:42:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "tuple(bool,bytes memory)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "3521:60:1"
},
{
"expression": {
"argumentTypes": null,
"id": 264,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "3595:7:1",
"subExpression": {
"argumentTypes": null,
"id": 263,
"name": "nonce",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 64,
"src": "3595:5:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 265,
"nodeType": "ExpressionStatement",
"src": "3595:7:1"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 267,
"name": "success",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 248,
"src": "3615:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4578637574696e67204d6574615478204661696c6564",
"id": 268,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3624:24:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_3c418fc6f99f0c5ea946cb134c7aa98b961cc4f4e0ce0ed71cf2cbda177b5940",
"typeString": "literal_string \"Excuting MetaTx Failed\""
},
"value": "Excuting MetaTx Failed"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_3c418fc6f99f0c5ea946cb134c7aa98b961cc4f4e0ce0ed71cf2cbda177b5940",
"typeString": "literal_string \"Excuting MetaTx Failed\""
}
],
"id": 266,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
401,
402
],
"referencedDeclaration": 402,
"src": "3607:7:1",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 269,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3607:42:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 270,
"nodeType": "ExpressionStatement",
"src": "3607:42:1"
}
]
},
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 234,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 231,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3437:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 232,
"name": "_target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 196,
"src": "3440:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
"id": 233,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3440:14:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3437:17:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 272,
"initializationExpression": {
"assignments": [
228
],
"declarations": [
{
"constant": false,
"id": 228,
"name": "i",
"nodeType": "VariableDeclaration",
"scope": 272,
"src": "3427:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 227,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "3427:4:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 230,
"initialValue": {
"argumentTypes": null,
"hexValue": "30",
"id": 229,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3434:1:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "3427:8:1"
},
"loopExpression": {
"expression": {
"argumentTypes": null,
"id": 236,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "3456:3:1",
"subExpression": {
"argumentTypes": null,
"id": 235,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3456:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 237,
"nodeType": "ExpressionStatement",
"src": "3456:3:1"
},
"nodeType": "ForStatement",
"src": "3423:231:1"
},
{
"expression": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 273,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3664:4:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"functionReturnParameters": 218,
"id": 274,
"nodeType": "Return",
"src": "3657:11:1"
}
]
},
"documentation": "@notice Execute a batch of meta transactions atomically\n @dev Anyone can execute this but only transactions signed by master or actor (if valid method) are accepted \n @param _target (address[]) Array of contract addresses\n @param _value (uint256[]) Array of wei amounts being sent in the respective transactions \n @param _data (bytes[]) Array of ABI encoded transaction data \n @param _dataHashSignature (bytes[]) Array of transaction signatures for the respective transaction data\n @return (bool) returns true if all transactions in the batch succeeded",
"id": 276,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 211,
"name": "_target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 196,
"src": "3289:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
{
"argumentTypes": null,
"id": 212,
"name": "_value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 199,
"src": "3298:6:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[] memory"
}
},
{
"argumentTypes": null,
"id": 213,
"name": "_data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 202,
"src": "3306:5:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes memory[] memory"
}
},
{
"argumentTypes": null,
"id": 214,
"name": "_dataHashSignature",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 205,
"src": "3313:18:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes memory[] memory"
}
}
],
"id": 215,
"modifierName": {
"argumentTypes": null,
"id": 210,
"name": "onlyMasterOrActor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 122,
"src": "3271:17:1",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_bytes_memory_$dyn_memory_ptr_$_t_array$_t_bytes_memory_$dyn_memory_ptr_$",
"typeString": "modifier (address[] memory,uint256[] memory,bytes memory[] memory,bytes memory[] memory)"
}
},
"nodeType": "ModifierInvocation",
"src": "3271:61:1"
}
],
"name": "execute",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 209,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 196,
"name": "_target",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3131:24:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[]"
},
"typeName": {
"baseType": {
"id": 194,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3131:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 195,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3131:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
"typeString": "address[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 199,
"name": "_value",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3157:23:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 197,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3157:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 198,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3157:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 202,
"name": "_data",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3182:20:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes[]"
},
"typeName": {
"baseType": {
"id": 200,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "3182:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"id": 201,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3182:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
"typeString": "bytes[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 205,
"name": "_dataHashSignature",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3204:33:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes[]"
},
"typeName": {
"baseType": {
"id": 203,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "3204:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"id": 204,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3204:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
"typeString": "bytes[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 208,
"name": "_nonce",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3239:23:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 206,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3239:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 207,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3239:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3130:133:1"
},
"returnParameters": {
"id": 218,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 217,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3342:4:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 216,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3342:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3341:6:1"
},
"scope": 277,
"src": "3114:561:1",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
}
],
"scope": 278,
"src": "265:3412:1"
}
],
"src": "0:3677:1"
},
"legacyAST": {
"absolutePath": "/Users/nico/Desktop/ethberlin/eth-wallet/contracts/Wallet.sol",
"exportedSymbols": {
"Wallet": [
277
]
},
"id": 278,
"nodeType": "SourceUnit",
"nodes": [
{
"id": 58,
"literals": [
"solidity",
">=",
"0.4",
".21",
"<",
"0.6",
".0"
],
"nodeType": "PragmaDirective",
"src": "0:32:1"
},
{
"id": 59,
"literals": [
"experimental",
"ABIEncoderV2"
],
"nodeType": "PragmaDirective",
"src": "33:33:1"
},
{
"absolutePath": "/Users/nico/Desktop/ethberlin/eth-wallet/contracts/libs/ECTools.sol",
"file": "./libs/ECTools.sol",
"id": 60,
"nodeType": "ImportDirective",
"scope": 278,
"sourceUnit": 384,
"src": "68:28:1",
"symbolAliases": [],
"unitAlias": ""
},
{
"baseContracts": [],
"contractDependencies": [],
"contractKind": "contract",
"documentation": "@title Wallet\n @author Nico Vergauwen <vergauwennico@gmail.com>\n @notice Wallet contract that can execute meta transactions on behalf of authorized signers",
"fullyImplemented": true,
"id": 277,
"linearizedBaseContracts": [
277
],
"name": "Wallet",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": false,
"id": 62,
"name": "master",
"nodeType": "VariableDeclaration",
"scope": 277,
"src": "318:22:1",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 61,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "318:15:1",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 64,
"name": "nonce",
"nodeType": "VariableDeclaration",
"scope": 277,
"src": "369:13:1",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 63,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "369:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"body": {
"id": 75,
"nodeType": "Block",
"src": "483:73:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"id": 70,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 67,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 398,
"src": "501:3:1",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 68,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "501:10:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 69,
"name": "master",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 62,
"src": "515:6:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "501:20:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "556e617574686f72697a6564",
"id": 71,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "523:14:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_1b2638459828301e8cd6c7c02856073bacf975379e0867f689bb14feacb780c5",
"typeString": "literal_string \"Unauthorized\""
},
"value": "Unauthorized"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_1b2638459828301e8cd6c7c02856073bacf975379e0867f689bb14feacb780c5",
"typeString": "literal_string \"Unauthorized\""
}
],
"id": 66,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
401,
402
],
"referencedDeclaration": 402,
"src": "493:7:1",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 72,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "493:45:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 73,
"nodeType": "ExpressionStatement",
"src": "493:45:1"
},
{
"id": 74,
"nodeType": "PlaceholderStatement",
"src": "548:1:1"
}
]
},
"documentation": "@dev Access modifier that requires 'msg.sender' to be 'master'",
"id": 76,
"name": "onlyMaster",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 65,
"nodeType": "ParameterList",
"parameters": [],
"src": "480:2:1"
},
"src": "461:95:1",
"visibility": "internal"
},
{
"body": {
"id": 121,
"nodeType": "Block",
"src": "791:145:1",
"statements": [
{
"body": {
"id": 118,
"nodeType": "Block",
"src": "832:96:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 103,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 79,
"src": "871:6:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
"id": 105,
"indexExpression": {
"argumentTypes": null,
"id": 104,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "878:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "871:9:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 106,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 82,
"src": "882:5:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[] memory"
}
},
"id": 108,
"indexExpression": {
"argumentTypes": null,
"id": 107,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "888:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "882:8:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 109,
"name": "data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 85,
"src": "892:4:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes memory[] memory"
}
},
"id": 111,
"indexExpression": {
"argumentTypes": null,
"id": 110,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "897:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "892:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
}
},
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 112,
"name": "dataHashSignature",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 88,
"src": "901:17:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes memory[] memory"
}
},
"id": 114,
"indexExpression": {
"argumentTypes": null,
"id": 113,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "919:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "901:20:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
}
],
"id": 102,
"name": "isValidSignature",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 193,
"src": "854:16:1",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
"typeString": "function (address,uint256,bytes memory,bytes memory) view returns (bool)"
}
},
"id": 115,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "854:68:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
],
"id": 101,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
401,
402
],
"referencedDeclaration": 401,
"src": "846:7:1",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
"typeString": "function (bool) pure"
}
},
"id": 116,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "846:77:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 117,
"nodeType": "ExpressionStatement",
"src": "846:77:1"
}
]
},
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 97,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 94,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "809:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 95,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 79,
"src": "812:6:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
"id": 96,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "812:13:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "809:16:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 119,
"initializationExpression": {
"assignments": [
91
],
"declarations": [
{
"constant": false,
"id": 91,
"name": "i",
"nodeType": "VariableDeclaration",
"scope": 119,
"src": "799:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 90,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "799:4:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 93,
"initialValue": {
"argumentTypes": null,
"hexValue": "30",
"id": 92,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "806:1:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "799:8:1"
},
"loopExpression": {
"expression": {
"argumentTypes": null,
"id": 99,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "827:3:1",
"subExpression": {
"argumentTypes": null,
"id": 98,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 91,
"src": "827:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 100,
"nodeType": "ExpressionStatement",
"src": "827:3:1"
},
"nodeType": "ForStatement",
"src": "795:133:1"
},
{
"id": 120,
"nodeType": "PlaceholderStatement",
"src": "931:1:1"
}
]
},
"documentation": "@dev Access modifier that checks whether meta transactions are signed by authorized EOA's",
"id": 122,
"name": "onlyMasterOrActor",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 89,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 79,
"name": "target",
"nodeType": "VariableDeclaration",
"scope": 122,
"src": "687:23:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[]"
},
"typeName": {
"baseType": {
"id": 77,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "687:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 78,
"length": null,
"nodeType": "ArrayTypeName",
"src": "687:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
"typeString": "address[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 82,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 122,
"src": "712:22:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 80,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "712:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 81,
"length": null,
"nodeType": "ArrayTypeName",
"src": "712:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 85,
"name": "data",
"nodeType": "VariableDeclaration",
"scope": 122,
"src": "736:19:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes[]"
},
"typeName": {
"baseType": {
"id": 83,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "736:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"id": 84,
"length": null,
"nodeType": "ArrayTypeName",
"src": "736:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
"typeString": "bytes[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 88,
"name": "dataHashSignature",
"nodeType": "VariableDeclaration",
"scope": 122,
"src": "757:32:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes[]"
},
"typeName": {
"baseType": {
"id": 86,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "757:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"id": 87,
"length": null,
"nodeType": "ArrayTypeName",
"src": "757:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
"typeString": "bytes[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "686:104:1"
},
"src": "660:276:1",
"visibility": "internal"
},
{
"body": {
"id": 131,
"nodeType": "Block",
"src": "1108:33:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 129,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 127,
"name": "master",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 62,
"src": "1118:6:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 128,
"name": "_master",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 124,
"src": "1127:7:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "1118:16:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"id": 130,
"nodeType": "ExpressionStatement",
"src": "1118:16:1"
}
]
},
"documentation": "@notice Sets the master address upon deployment\n @param _master (address) Ethereum address for the master ",
"id": 132,
"implemented": true,
"kind": "constructor",
"modifiers": [],
"name": "",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 125,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 124,
"name": "_master",
"nodeType": "VariableDeclaration",
"scope": 132,
"src": "1076:23:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 123,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1076:15:1",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1075:25:1"
},
"returnParameters": {
"id": 126,
"nodeType": "ParameterList",
"parameters": [],
"src": "1108:0:1"
},
"scope": 277,
"src": "1064:77:1",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 135,
"nodeType": "Block",
"src": "1201:2:1",
"statements": []
},
"documentation": "@notice Fallback ",
"id": 136,
"implemented": true,
"kind": "fallback",
"modifiers": [],
"name": "",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 133,
"nodeType": "ParameterList",
"parameters": [],
"src": "1181:2:1"
},
"returnParameters": {
"id": 134,
"nodeType": "ParameterList",
"parameters": [],
"src": "1201:0:1"
},
"scope": 277,
"src": "1173:30:1",
"stateMutability": "payable",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 151,
"nodeType": "Block",
"src": "1579:50:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 147,
"name": "_raw",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 138,
"src": "1614:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"argumentTypes": null,
"id": 148,
"name": "_sig",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 140,
"src": "1620:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"expression": {
"argumentTypes": null,
"id": 145,
"name": "ECTools",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 383,
"src": "1590:7:1",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_ECTools_$383_$",
"typeString": "type(library ECTools)"
}
},
"id": 146,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "prefixedRecover",
"nodeType": "MemberAccess",
"referencedDeclaration": 382,
"src": "1590:23:1",
"typeDescriptions": {
"typeIdentifier": "t_function_delegatecall_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
"typeString": "function (bytes32,bytes memory) pure returns (address)"
}
},
"id": 149,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1590:35:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"functionReturnParameters": 144,
"id": 150,
"nodeType": "Return",
"src": "1583:42:1"
}
]
},
"documentation": "@notice Get the signer of a transaction through ecrecover\n @param _raw (bytes32) keccak256 hash of the ABI encoded transaction data \n @param _sig (bytes) the signature resulting from signing 'raw'\n @return signer (address) the EOA that signed the data ",
"id": 152,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getSigner",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 141,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 138,
"name": "_raw",
"nodeType": "VariableDeclaration",
"scope": 152,
"src": "1510:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 137,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1510:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 140,
"name": "_sig",
"nodeType": "VariableDeclaration",
"scope": 152,
"src": "1524:17:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 139,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "1524:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1509:33:1"
},
"returnParameters": {
"id": 144,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 143,
"name": "signer",
"nodeType": "VariableDeclaration",
"scope": 152,
"src": "1563:14:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 142,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1563:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1562:16:1"
},
"scope": 277,
"src": "1491:138:1",
"stateMutability": "pure",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 192,
"nodeType": "Block",
"src": "2236:272:1",
"statements": [
{
"assignments": [
166
],
"declarations": [
{
"constant": false,
"id": 166,
"name": "dataHash",
"nodeType": "VariableDeclaration",
"scope": 192,
"src": "2246:16:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 165,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2246:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 175,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 170,
"name": "_target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 154,
"src": "2292:7:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 171,
"name": "_value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 156,
"src": "2301:6:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 172,
"name": "_data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 158,
"src": "2309:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"expression": {
"argumentTypes": null,
"id": 168,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 385,
"src": "2275:3:1",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 169,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2275:16:1",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 173,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2275:40:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 167,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 392,
"src": "2265:9:1",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 174,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2265:51:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "2246:70:1"
},
{
"assignments": [
177
],
"declarations": [
{
"constant": false,
"id": 177,
"name": "signer",
"nodeType": "VariableDeclaration",
"scope": 192,
"src": "2326:14:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 176,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2326:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 182,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 179,
"name": "dataHash",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 166,
"src": "2353:8:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"argumentTypes": null,
"id": 180,
"name": "_sig",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 160,
"src": "2363:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 178,
"name": "getSigner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 152,
"src": "2343:9:1",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
"typeString": "function (bytes32,bytes memory) pure returns (address)"
}
},
"id": 181,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2343:25:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "2326:42:1"
},
{
"assignments": [
184
],
"declarations": [
{
"constant": false,
"id": 184,
"name": "method",
"nodeType": "VariableDeclaration",
"scope": 192,
"src": "2378:13:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 183,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "2378:6:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 185,
"initialValue": null,
"nodeType": "VariableDeclarationStatement",
"src": "2378:13:1"
},
{
"externalReferences": [
{
"method": {
"declaration": 184,
"isOffset": false,
"isSlot": false,
"src": "2424:6:1",
"valueSize": 1
}
},
{
"_data": {
"declaration": 158,
"isOffset": false,
"isSlot": false,
"src": "2444:5:1",
"valueSize": 1
}
}
],
"id": 186,
"nodeType": "InlineAssembly",
"operations": "{\n method := mload(add(_data, 0x20))\n}",
"src": "2401:66:1"
},
{
"expression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 189,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 187,
"name": "signer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 177,
"src": "2484:6:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 188,
"name": "master",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 62,
"src": "2494:6:1",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "2484:16:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"id": 190,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "2483:18:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 164,
"id": 191,
"nodeType": "Return",
"src": "2476:25:1"
}
]
},
"documentation": "@notice Checks whether the signer is an authorized EOA\n @param _target (address) contract target address \n @param _value (uint256) Wei amount being send in the transaction \n @param _data (bytes) data being send in the transaction \n @param _sig (bytes) the signature of the transaction data \n @return isValid (bool) true/false based on whether the signer is master or an actor that has access rights to the method at 'target'",
"id": 193,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "isValidSignature",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 161,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 154,
"name": "_target",
"nodeType": "VariableDeclaration",
"scope": 193,
"src": "2129:15:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 153,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2129:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 156,
"name": "_value",
"nodeType": "VariableDeclaration",
"scope": 193,
"src": "2146:14:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 155,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2146:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 158,
"name": "_data",
"nodeType": "VariableDeclaration",
"scope": 193,
"src": "2162:18:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 157,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "2162:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 160,
"name": "_sig",
"nodeType": "VariableDeclaration",
"scope": 193,
"src": "2182:17:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 159,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "2182:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2128:72:1"
},
"returnParameters": {
"id": 164,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 163,
"name": "isValid",
"nodeType": "VariableDeclaration",
"scope": 193,
"src": "2222:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 162,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2222:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2221:14:1"
},
"scope": 277,
"src": "2103:405:1",
"stateMutability": "view",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 275,
"nodeType": "Block",
"src": "3348:327:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 223,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 220,
"name": "_target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 196,
"src": "3360:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
"id": 221,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3360:14:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "38",
"id": 222,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3378:1:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_8_by_1",
"typeString": "int_const 8"
},
"value": "8"
},
"src": "3360:19:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "546f6f206d616e792062617463686564207472616e73616374696f6e73",
"id": 224,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3381:31:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_d8b879c93aab434e63503f746a4a99040742d041f4eddec625551a17301b4e50",
"typeString": "literal_string \"Too many batched transactions\""
},
"value": "Too many batched transactions"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_d8b879c93aab434e63503f746a4a99040742d041f4eddec625551a17301b4e50",
"typeString": "literal_string \"Too many batched transactions\""
}
],
"id": 219,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
401,
402
],
"referencedDeclaration": 402,
"src": "3352:7:1",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 225,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3352:61:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 226,
"nodeType": "ExpressionStatement",
"src": "3352:61:1"
},
{
"body": {
"id": 271,
"nodeType": "Block",
"src": "3461:193:1",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 243,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 239,
"name": "_nonce",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 208,
"src": "3483:6:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[] memory"
}
},
"id": 241,
"indexExpression": {
"argumentTypes": null,
"id": 240,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3490:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3483:9:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"id": 242,
"name": "nonce",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 64,
"src": "3493:5:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3483:15:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "6e6f6e636520746f6f206c6f77",
"id": 244,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3500:15:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_6b1b1f0d9202e6cc83eefff4868a5797647d3677db175d9e109a8489a7e54e4e",
"typeString": "literal_string \"nonce too low\""
},
"value": "nonce too low"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_6b1b1f0d9202e6cc83eefff4868a5797647d3677db175d9e109a8489a7e54e4e",
"typeString": "literal_string \"nonce too low\""
}
],
"id": 238,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
401,
402
],
"referencedDeclaration": 402,
"src": "3475:7:1",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 245,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3475:41:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 246,
"nodeType": "ExpressionStatement",
"src": "3475:41:1"
},
{
"assignments": [
248,
null
],
"declarations": [
{
"constant": false,
"id": 248,
"name": "success",
"nodeType": "VariableDeclaration",
"scope": 271,
"src": "3522:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 247,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3522:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
null
],
"id": 262,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 258,
"name": "_data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 202,
"src": "3572:5:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes memory[] memory"
}
},
"id": 260,
"indexExpression": {
"argumentTypes": null,
"id": 259,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3578:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3572:8:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory",
"typeString": "bytes memory"
}
],
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 254,
"name": "_value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 199,
"src": "3561:6:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[] memory"
}
},
"id": 256,
"indexExpression": {
"argumentTypes": null,
"id": 255,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3568:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3561:9:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 249,
"name": "_target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 196,
"src": "3539:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
"id": 251,
"indexExpression": {
"argumentTypes": null,
"id": 250,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3547:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3539:10:1",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 252,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "call",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3539:15:1",
"typeDescriptions": {
"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
}
},
"id": 253,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3539:21:1",
"typeDescriptions": {
"typeIdentifier": "t_function_setvalue_nonpayable$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$",
"typeString": "function (uint256) returns (function (bytes memory) payable returns (bool,bytes memory))"
}
},
"id": 257,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3539:32:1",
"typeDescriptions": {
"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
}
},
"id": 261,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3539:42:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "tuple(bool,bytes memory)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "3521:60:1"
},
{
"expression": {
"argumentTypes": null,
"id": 264,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "3595:7:1",
"subExpression": {
"argumentTypes": null,
"id": 263,
"name": "nonce",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 64,
"src": "3595:5:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 265,
"nodeType": "ExpressionStatement",
"src": "3595:7:1"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 267,
"name": "success",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 248,
"src": "3615:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4578637574696e67204d6574615478204661696c6564",
"id": 268,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3624:24:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_3c418fc6f99f0c5ea946cb134c7aa98b961cc4f4e0ce0ed71cf2cbda177b5940",
"typeString": "literal_string \"Excuting MetaTx Failed\""
},
"value": "Excuting MetaTx Failed"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_3c418fc6f99f0c5ea946cb134c7aa98b961cc4f4e0ce0ed71cf2cbda177b5940",
"typeString": "literal_string \"Excuting MetaTx Failed\""
}
],
"id": 266,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
401,
402
],
"referencedDeclaration": 402,
"src": "3607:7:1",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 269,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3607:42:1",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 270,
"nodeType": "ExpressionStatement",
"src": "3607:42:1"
}
]
},
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 234,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 231,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3437:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 232,
"name": "_target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 196,
"src": "3440:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
"id": 233,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3440:14:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3437:17:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 272,
"initializationExpression": {
"assignments": [
228
],
"declarations": [
{
"constant": false,
"id": 228,
"name": "i",
"nodeType": "VariableDeclaration",
"scope": 272,
"src": "3427:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 227,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "3427:4:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 230,
"initialValue": {
"argumentTypes": null,
"hexValue": "30",
"id": 229,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3434:1:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "3427:8:1"
},
"loopExpression": {
"expression": {
"argumentTypes": null,
"id": 236,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "3456:3:1",
"subExpression": {
"argumentTypes": null,
"id": 235,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "3456:1:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 237,
"nodeType": "ExpressionStatement",
"src": "3456:3:1"
},
"nodeType": "ForStatement",
"src": "3423:231:1"
},
{
"expression": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 273,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3664:4:1",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"functionReturnParameters": 218,
"id": 274,
"nodeType": "Return",
"src": "3657:11:1"
}
]
},
"documentation": "@notice Execute a batch of meta transactions atomically\n @dev Anyone can execute this but only transactions signed by master or actor (if valid method) are accepted \n @param _target (address[]) Array of contract addresses\n @param _value (uint256[]) Array of wei amounts being sent in the respective transactions \n @param _data (bytes[]) Array of ABI encoded transaction data \n @param _dataHashSignature (bytes[]) Array of transaction signatures for the respective transaction data\n @return (bool) returns true if all transactions in the batch succeeded",
"id": 276,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 211,
"name": "_target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 196,
"src": "3289:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[] memory"
}
},
{
"argumentTypes": null,
"id": 212,
"name": "_value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 199,
"src": "3298:6:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[] memory"
}
},
{
"argumentTypes": null,
"id": 213,
"name": "_data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 202,
"src": "3306:5:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes memory[] memory"
}
},
{
"argumentTypes": null,
"id": 214,
"name": "_dataHashSignature",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 205,
"src": "3313:18:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes memory[] memory"
}
}
],
"id": 215,
"modifierName": {
"argumentTypes": null,
"id": 210,
"name": "onlyMasterOrActor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 122,
"src": "3271:17:1",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_bytes_memory_$dyn_memory_ptr_$_t_array$_t_bytes_memory_$dyn_memory_ptr_$",
"typeString": "modifier (address[] memory,uint256[] memory,bytes memory[] memory,bytes memory[] memory)"
}
},
"nodeType": "ModifierInvocation",
"src": "3271:61:1"
}
],
"name": "execute",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 209,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 196,
"name": "_target",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3131:24:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[]"
},
"typeName": {
"baseType": {
"id": 194,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3131:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 195,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3131:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
"typeString": "address[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 199,
"name": "_value",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3157:23:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 197,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3157:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 198,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3157:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 202,
"name": "_data",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3182:20:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes[]"
},
"typeName": {
"baseType": {
"id": 200,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "3182:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"id": 201,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3182:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
"typeString": "bytes[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 205,
"name": "_dataHashSignature",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3204:33:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
"typeString": "bytes[]"
},
"typeName": {
"baseType": {
"id": 203,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "3204:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"id": 204,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3204:7:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
"typeString": "bytes[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 208,
"name": "_nonce",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3239:23:1",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 206,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3239:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 207,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3239:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3130:133:1"
},
"returnParameters": {
"id": 218,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 217,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 276,
"src": "3342:4:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 216,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3342:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3341:6:1"
},
"scope": 277,
"src": "3114:561:1",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
}
],
"scope": 278,
"src": "265:3412:1"
}
],
"src": "0:3677:1"
},
"compiler": {
"name": "solc",
"version": "0.5.8+commit.23d335f2.Emscripten.clang"
},
"networks": {},
"schemaVersion": "3.0.11",
"updatedAt": "2019-08-23T21:36:47.628Z",
"devdoc": {
"author": "Nico Vergauwen <vergauwennico@gmail.com>",
"methods": {
"constructor": {
"params": {
"_master": "(address) Ethereum address for the master "
}
},
"execute(address[],uint256[],bytes[],bytes[],uint256[])": {
"details": "Anyone can execute this but only transactions signed by master or actor (if valid method) are accepted ",
"params": {
"_data": "(bytes[]) Array of ABI encoded transaction data ",
"_dataHashSignature": "(bytes[]) Array of transaction signatures for the respective transaction data",
"_target": "(address[]) Array of contract addresses",
"_value": "(uint256[]) Array of wei amounts being sent in the respective transactions "
},
"return": "(bool) returns true if all transactions in the batch succeeded"
},
"getSigner(bytes32,bytes)": {
"params": {
"_raw": "(bytes32) keccak256 hash of the ABI encoded transaction data ",
"_sig": "(bytes) the signature resulting from signing 'raw'"
},
"return": "signer (address) the EOA that signed the data "
},
"isValidSignature(address,uint256,bytes,bytes)": {
"params": {
"_data": "(bytes) data being send in the transaction ",
"_sig": "(bytes) the signature of the transaction data ",
"_target": "(address) contract target address ",
"_value": "(uint256) Wei amount being send in the transaction "
},
"return": "isValid (bool) true/false based on whether the signer is master or an actor that has access rights to the method at 'target'"
}
},
"title": "Wallet"
},
"userdoc": {
"methods": {
"constructor": "Sets the master address upon deployment",
"execute(address[],uint256[],bytes[],bytes[],uint256[])": {
"notice": "Execute a batch of meta transactions atomically"
},
"getSigner(bytes32,bytes)": {
"notice": "Get the signer of a transaction through ecrecover"
},
"isValidSignature(address,uint256,bytes,bytes)": {
"notice": "Checks whether the signer is an authorized EOA"
}
},
"notice": "Wallet contract that can execute meta transactions on behalf of authorized signers"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment