{ "contractName": "XBRTest", "abi": [ { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "string", "name": "from_name", "type": "string" }, { "internalType": "address", "name": "from_wallet", "type": "address" }, { "internalType": "string", "name": "to_name", "type": "string" }, { "internalType": "address", "name": "to_wallet", "type": "address" }, { "internalType": "string", "name": "contents", "type": "string" }, { "internalType": "bytes", "name": "sig_rsv", "type": "bytes" } ], "name": "test_verify1", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "string", "name": "from_name", "type": "string" }, { "internalType": "address", "name": "from_wallet", "type": "address" }, { "internalType": "string", "name": "to_name", "type": "string" }, { "internalType": "address", "name": "to_wallet", "type": "address" }, { "internalType": "string", "name": "contents", "type": "string" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "test_verify2", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "test", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" } ], "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"test\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"from_name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"from_wallet\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"to_name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"to_wallet\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"contents\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"sig_rsv\",\"type\":\"bytes\"}],\"name\":\"test_verify1\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"from_name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"from_wallet\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"to_name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"to_wallet\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"contents\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"test_verify2\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/travis/build/crossbario/xbr-protocol/contracts/XBRTest.sol\":\"XBRTest\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/travis/build/crossbario/xbr-protocol/contracts/XBRTest.sol\":{\"keccak256\":\"0xdf21a5e6fd289b78df9896c1defb54003d40283f0564e0e071c1cbf7a83f27d0\",\"urls\":[\"bzz-raw://c730fd7e6244fc97e33960ad6143b1f95a7be8aaed128bb67969474922be857b\",\"dweb:/ipfs/QmbctYdWfT3F7wWPaPRgDo1N1UDgawTjruTXeKaNLf8RBV\"]}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b506040805160c081018252600a6080820190815269115d1a195c8813585a5b60b21b60a08301528152815180830183526001808252603160f81b6020838101919091528301919091529181019190915273cccccccccccccccccccccccccccccccccccccccc606082015261008c906001600160e01b0361009416565b600055610117565b60006040518080610c8860529139604080519182900360520182208551805160209182012081880151805190830120888501516060808b015185890196909652878701939093529186015260808501526001600160a01b0390911660a0808501919091528251808503909101815260c09093019091528151910120915050919050565b610b62806101266000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80639c0319cf14610046578063ed40e6bc14610249578063f8a8fd6d146104ae575b600080fd5b610235600480360361012081101561005d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561008757600080fd5b82018360208201111561009957600080fd5b803590602001918460018302840111600160201b831117156100ba57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b81111561011d57600080fd5b82018360208201111561012f57600080fd5b803590602001918460018302840111600160201b8311171561015057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156101b357600080fd5b8201836020820111156101c557600080fd5b803590602001918460018302840111600160201b831117156101e657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505060ff83351693505050602081013590604001356104b6565b604080519115158252519081900360200190f35b610235600480360360e081101561025f57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561028957600080fd5b82018360208201111561029b57600080fd5b803590602001918460018302840111600160201b831117156102bc57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b81111561031f57600080fd5b82018360208201111561033157600080fd5b803590602001918460018302840111600160201b8311171561035257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156103b557600080fd5b8201836020820111156103c757600080fd5b803590602001918460018302840111600160201b831117156103e857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561043a57600080fd5b82018360208201111561044c57600080fd5b803590602001918460018302840111600160201b8311171561046d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506105d9945050505050565b610235610710565b60006104c0610a79565b506040805160a081018252606081018b81526001600160a01b03808c166080840152908252825180840184528a8152908916602082810191909152820152908101869052600080546105118361088b565b604051602001808061190160f01b815250600201838152602001828152602001925050506040516020818303038152906040528051906020012090508b6001600160a01b031660018288888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156105b4573d6000803e3d6000fd5b505050602060405103516001600160a01b031614925050509998505050505050505050565b6000806000806105e88561090e565b9250925092506105f6610a79565b506040805160a081018252606081018c81526001600160a01b03808d166080840152908252825180840184528b8152908a16602082810191909152820152908101879052600080546106478361088b565b604051602001808061190160f01b815250600201838152602001828152602001925050506040516020818303038152906040528051906020012090508c6001600160a01b031660018287878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156106ea573d6000803e3d6000fd5b505050602060405103516001600160a01b03161495505050505050979650505050505050565b600061071a610a79565b506040805160e081018252600360a0820181815262436f7760e81b60c0840152606080840191825273cd2a3d9f938e13cd947ec05abc7fe734df8dd82660808086019190915291845284519182018552818501928352622137b160e91b9082015290815273bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb6020828101919091528083019190915282518084018452600b81526a48656c6c6f2c20426f622160a81b9181019190915291810191909152600054601c907f4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d907f07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b91562907ff2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f1461083d57fe5b6108468461088b565b7fc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e1461086e57fe5b61087a84848484610939565b61088057fe5b600194505050505090565b60006040518080610abf604d9139604d01905060405180910390206108b38360000151610a12565b6108c08460200151610a12565b84604001518051906020012060405160200180858152602001848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60208101516040820151604183015160ff169190601b83101561093257601b830192505b9193909250565b6000806000546109488761088b565b604051602001808061190160f01b815250600201838152602001828152602001925050506040516020818303038152906040528051906020012090508560000151602001516001600160a01b031660018287878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156109f3573d6000803e3d6000fd5b505050602060405103516001600160a01b031614915050949350505050565b60006040518080610b0c6022913960408051918290036022018220855180516020918201208188015182860193909352848401526001600160a01b039091166060808501919091528251808503909101815260809093019091528151910120915050919050565b6040518060600160405280610a8c610aa6565b8152602001610a99610aa6565b8152602001606081525090565b6040805180820190915260608152600060208201529056fe4d61696c28506572736f6e2066726f6d2c506572736f6e20746f2c737472696e6720636f6e74656e747329506572736f6e28737472696e67206e616d652c616464726573732077616c6c657429506572736f6e28737472696e67206e616d652c616464726573732077616c6c657429a265627a7a7231582053c395045a7a5e1091c2b50240737735989e4cb9a418202d192b567d3f0c57ad64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80639c0319cf14610046578063ed40e6bc14610249578063f8a8fd6d146104ae575b600080fd5b610235600480360361012081101561005d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561008757600080fd5b82018360208201111561009957600080fd5b803590602001918460018302840111600160201b831117156100ba57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b81111561011d57600080fd5b82018360208201111561012f57600080fd5b803590602001918460018302840111600160201b8311171561015057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156101b357600080fd5b8201836020820111156101c557600080fd5b803590602001918460018302840111600160201b831117156101e657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505060ff83351693505050602081013590604001356104b6565b604080519115158252519081900360200190f35b610235600480360360e081101561025f57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561028957600080fd5b82018360208201111561029b57600080fd5b803590602001918460018302840111600160201b831117156102bc57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b81111561031f57600080fd5b82018360208201111561033157600080fd5b803590602001918460018302840111600160201b8311171561035257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156103b557600080fd5b8201836020820111156103c757600080fd5b803590602001918460018302840111600160201b831117156103e857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561043a57600080fd5b82018360208201111561044c57600080fd5b803590602001918460018302840111600160201b8311171561046d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506105d9945050505050565b610235610710565b60006104c0610a79565b506040805160a081018252606081018b81526001600160a01b03808c166080840152908252825180840184528a8152908916602082810191909152820152908101869052600080546105118361088b565b604051602001808061190160f01b815250600201838152602001828152602001925050506040516020818303038152906040528051906020012090508b6001600160a01b031660018288888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156105b4573d6000803e3d6000fd5b505050602060405103516001600160a01b031614925050509998505050505050505050565b6000806000806105e88561090e565b9250925092506105f6610a79565b506040805160a081018252606081018c81526001600160a01b03808d166080840152908252825180840184528b8152908a16602082810191909152820152908101879052600080546106478361088b565b604051602001808061190160f01b815250600201838152602001828152602001925050506040516020818303038152906040528051906020012090508c6001600160a01b031660018287878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156106ea573d6000803e3d6000fd5b505050602060405103516001600160a01b03161495505050505050979650505050505050565b600061071a610a79565b506040805160e081018252600360a0820181815262436f7760e81b60c0840152606080840191825273cd2a3d9f938e13cd947ec05abc7fe734df8dd82660808086019190915291845284519182018552818501928352622137b160e91b9082015290815273bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb6020828101919091528083019190915282518084018452600b81526a48656c6c6f2c20426f622160a81b9181019190915291810191909152600054601c907f4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d907f07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b91562907ff2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f1461083d57fe5b6108468461088b565b7fc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e1461086e57fe5b61087a84848484610939565b61088057fe5b600194505050505090565b60006040518080610abf604d9139604d01905060405180910390206108b38360000151610a12565b6108c08460200151610a12565b84604001518051906020012060405160200180858152602001848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60208101516040820151604183015160ff169190601b83101561093257601b830192505b9193909250565b6000806000546109488761088b565b604051602001808061190160f01b815250600201838152602001828152602001925050506040516020818303038152906040528051906020012090508560000151602001516001600160a01b031660018287878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156109f3573d6000803e3d6000fd5b505050602060405103516001600160a01b031614915050949350505050565b60006040518080610b0c6022913960408051918290036022018220855180516020918201208188015182860193909352848401526001600160a01b039091166060808501919091528251808503909101815260809093019091528151910120915050919050565b6040518060600160405280610a8c610aa6565b8152602001610a99610aa6565b8152602001606081525090565b6040805180820190915260608152600060208201529056fe4d61696c28506572736f6e2066726f6d2c506572736f6e20746f2c737472696e6720636f6e74656e747329506572736f6e28737472696e67206e616d652c616464726573732077616c6c657429506572736f6e28737472696e67206e616d652c616464726573732077616c6c657429a265627a7a7231582053c395045a7a5e1091c2b50240737735989e4cb9a418202d192b567d3f0c57ad64736f6c63430005100032", "sourceMap": "837:5152:7:-;;;1691:284;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1747:220:7;;;;;;;;;;;;;;;-1:-1:-1;;;1747:220:7;;;;;;;;;;;;;;;;;-1:-1:-1;;;1747:220:7;;;;;;;;;;;;;;-1:-1:-1;;;1747:220:7;;;;1914:42;-1:-1:-1;;;1747:220:7;1742:226;;-1:-1:-1;;;;;1742:4:7;:226;:::i;:::-;1723:16;:245;837:5152;;1981:349;2052:7;1297:109;;;;;;;;;;;;;;;;;;;2163:17;;2147:35;;;;;;;2212:20;;;;2196:38;;;;;;2248:20;;;;2282:30;;;;;2088:234;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2088:234:7;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2088:234:7;;;;;;;2078:245;;;;;;-1:-1:-1;;1981:349:7;;;:::o;837:5152::-;;;;;;;", "deployedSourceMap": "837:5152:7:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;837:5152:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4362:716;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;4362:716:7;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4362:716:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4362:716:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4362:716:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4362:716:7;;-1:-1:-1;;;;;4362:716:7;;;;;;;;-1:-1:-1;4362:716:7;;;;-1:-1:-1;4362:716:7;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;4362:716:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4362:716:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4362:716:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4362:716:7;;-1:-1:-1;;;;;4362:716:7;;;;;;;;-1:-1:-1;4362:716:7;;;;-1:-1:-1;4362:716:7;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;4362:716:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4362:716:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4362:716:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4362:716:7;;-1:-1:-1;;4362:716:7;;;;;-1:-1:-1;;;4362:716:7;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3581:775;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;3581:775:7;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3581:775:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3581:775:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3581:775:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3581:775:7;;-1:-1:-1;;;;;3581:775:7;;;;;;;;-1:-1:-1;3581:775:7;;;;-1:-1:-1;3581:775:7;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;3581:775:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3581:775:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3581:775:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3581:775:7;;-1:-1:-1;;;;;3581:775:7;;;;;;;;-1:-1:-1;3581:775:7;;;;-1:-1:-1;3581:775:7;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;3581:775:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3581:775:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3581:775:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3581:775:7;;;;;;;;-1:-1:-1;3581:775:7;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;3581:775:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3581:775:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3581:775:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3581:775:7;;-1:-1:-1;3581:775:7;;-1:-1:-1;;;;;3581:775:7:i;5084:903::-;;;:::i;4362:716::-;4572:4;4589:16;;:::i;:::-;-1:-1:-1;4608:266:7;;;4633:92;;;;;4608:266;;;4633:92;;;-1:-1:-1;;;;;4633:92:7;;;;;;;4608:266;;;4743:88;;;;;;;;;;;;;4633:92;4743:88;;;;;;;4608:266;;;-1:-1:-1;;;4608:266:7;;;-1:-1:-1;4966:16:7;;4996:10;4608:266;4996:4;:10::i;:::-;4912:104;;;;;;-1:-1:-1;;;4912:104:7;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4912:104:7;;;4902:115;;;;;;4885:132;;5065:6;-1:-1:-1;;;;;5035:36:7;:26;5045:6;5053:1;5056;5059;5035:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5035:26:7;;;;;;;;-1:-1:-1;;;;;5035:36:7;;5028:43;;;;4362:716;;;;;;;;;;;:::o;3581:775::-;3782:4;3800:7;3809:9;3820;3833:23;3848:7;3833:14;:23::i;:::-;3799:57;;;;;;3867:16;;:::i;:::-;-1:-1:-1;3886:266:7;;;3911:92;;;;;3886:266;;;3911:92;;;-1:-1:-1;;;;;3911:92:7;;;;;;;3886:266;;;4021:88;;;;;;;;;;;;;3911:92;4021:88;;;;;;;3886:266;;;-1:-1:-1;;;3886:266:7;;;-1:-1:-1;4244:16:7;;4274:10;3886:266;4274:4;:10::i;:::-;4190:104;;;;;;-1:-1:-1;;;4190:104:7;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4190:104:7;;;4180:115;;;;;;4163:132;;4343:6;-1:-1:-1;;;;;4313:36:7;:26;4323:6;4331:1;4334;4337;4313:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4313:26:7;;;;;;;;-1:-1:-1;;;;;4313:36:7;;4306:43;;;;;;;3581:775;;;;;;;;;:::o;5084:903::-;5121:4;5171:16;;:::i;:::-;-1:-1:-1;5190:329:7;;;5215:119;;;;;;;;;;;;-1:-1:-1;;;5215:119:7;;;;5190:329;;;;5215:119;;;5277:42;5215:119;;;;;;;;5190:329;;;5352:119;;;;;;;;;;;;;-1:-1:-1;;;5352:119:7;;;;;;;5414:42;5215:119;5352;;;;;;;5190:329;;;;;;;;;;;;;;;;;-1:-1:-1;;;5190:329:7;;;;;;;-1:-1:-1;;;5190:329:7;;;;-1:-1:-1;5735:16:7;5539:2;;5563:66;;5651;;5755;5735:86;5728:94;;;;5839:10;5844:4;5839;:10::i;:::-;5853:66;5839:80;5832:88;;;;5937:21;5944:4;5950:1;5953;5956;5937:6;:21::i;:::-;5930:29;;;;5976:4;5969:11;;;;;;5084:903;:::o;2564:247::-;2619:7;1549:104;;;;;;;;;;;;;;;;;;;2706:15;2711:4;:9;;;2706:4;:15::i;:::-;2735:13;2740:4;:7;;;2735:4;:13::i;:::-;2778:4;:13;;;2762:31;;;;;;2655:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2655:148:7;;;2645:159;;;;;;2638:166;;2564:247;;;:::o;3202:373::-;3372:2;3353:22;;3347:29;3419:2;3400:22;;3394:29;3470:2;3451:22;;3445:29;3476:3;3441:39;;3347:29;3507:2;3503:6;;3499:44;;;3530:2;3525:7;;;;3499:44;3202:373;;;;;:::o;2817:379::-;2905:4;2994:14;3075:16;;3105:10;3110:4;3105;:10::i;:::-;3021:104;;;;;;-1:-1:-1;;;3021:104:7;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3021:104:7;;;3011:115;;;;;;2994:132;;3173:4;:9;;;:16;;;-1:-1:-1;;;;;3143:46:7;:26;3153:6;3161:1;3164;3167;3143:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3143:26:7;;;;;;;;-1:-1:-1;;;;;3143:46:7;;3136:53;;;2817:379;;;;;;:::o;2336:222::-;2395:7;1448:61;;;;;;;;;;;;;;;;;;;2500:11;;2484:29;;;;;;;2527:13;;;;2431:119;;;;;;;;;;;-1:-1:-1;;;;;2431:119:7;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2431:119:7;;;;;;;2421:130;;;;;;-1:-1:-1;;2336:222:7;;;:::o;837:5152::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;837:5152:7;;;;;:::o", "source": "///////////////////////////////////////////////////////////////////////////////\n//\n// Copyright (C) 2018-2020 Crossbar.io Technologies GmbH and contributors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n///////////////////////////////////////////////////////////////////////////////\n\npragma solidity ^0.5.12;\n\n\ncontract XBRTest {\n // Adapted from: https://github.com/ethereum/EIPs/blob/master/assets/eip-712/Example.sol\n\n struct EIP712Domain {\n string name;\n string version;\n uint256 chainId;\n address verifyingContract;\n }\n\n struct Person {\n string name;\n address wallet;\n }\n\n struct Mail {\n Person from;\n Person to;\n string contents;\n }\n\n bytes32 constant EIP712DOMAIN_TYPEHASH = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n\n bytes32 constant PERSON_TYPEHASH = keccak256(\n \"Person(string name,address wallet)\"\n );\n\n bytes32 constant MAIL_TYPEHASH = keccak256(\n \"Mail(Person from,Person to,string contents)Person(string name,address wallet)\"\n );\n\n bytes32 DOMAIN_SEPARATOR;\n\n constructor () public {\n DOMAIN_SEPARATOR = hash(EIP712Domain({\n name: \"Ether Mail\",\n version: \"1\",\n chainId: 1,\n // verifyingContract: this\n verifyingContract: 0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC\n }));\n }\n\n function hash(EIP712Domain memory eip712Domain) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n EIP712DOMAIN_TYPEHASH,\n keccak256(bytes(eip712Domain.name)),\n keccak256(bytes(eip712Domain.version)),\n eip712Domain.chainId,\n eip712Domain.verifyingContract\n ));\n }\n\n function hash(Person memory person) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n PERSON_TYPEHASH,\n keccak256(bytes(person.name)),\n person.wallet\n ));\n }\n\n function hash(Mail memory mail) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n MAIL_TYPEHASH,\n hash(mail.from),\n hash(mail.to),\n keccak256(bytes(mail.contents))\n ));\n }\n\n function verify(Mail memory mail, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {\n // Note: we need to use `encodePacked` here instead of `encode`.\n bytes32 digest = keccak256(abi.encodePacked(\n \"\\x19\\x01\",\n DOMAIN_SEPARATOR,\n hash(mail)\n ));\n return ecrecover(digest, v, r, s) == mail.from.wallet;\n }\n\n function splitSignature (bytes memory signature_rsv) private pure returns (uint8 v, bytes32 r, bytes32 s) {\n\n assembly {\n r := mload(add(signature_rsv, 32))\n s := mload(add(signature_rsv, 64))\n v := and(mload(add(signature_rsv, 65)), 255)\n }\n if (v < 27) {\n v += 27;\n }\n return (v, r, s);\n }\n\n function test_verify1(address signer, string memory from_name, address from_wallet, string memory to_name,\n address to_wallet, string memory contents, bytes memory sig_rsv) public view returns (bool) {\n\n (uint8 v, bytes32 r, bytes32 s) = splitSignature(sig_rsv);\n\n Mail memory mail = Mail({\n from: Person({\n name: from_name,\n wallet: from_wallet\n }),\n to: Person({\n name: to_name,\n wallet: to_wallet\n }),\n contents: contents\n });\n\n bytes32 digest = keccak256(abi.encodePacked(\n \"\\x19\\x01\",\n DOMAIN_SEPARATOR,\n hash(mail)\n ));\n\n return ecrecover(digest, v, r, s) == signer;\n }\n\n function test_verify2(address signer, string memory from_name, address from_wallet, string memory to_name,\n address to_wallet, string memory contents, uint8 v, bytes32 r, bytes32 s) public view returns (bool) {\n\n Mail memory mail = Mail({\n from: Person({\n name: from_name,\n wallet: from_wallet\n }),\n to: Person({\n name: to_name,\n wallet: to_wallet\n }),\n contents: contents\n });\n\n bytes32 digest = keccak256(abi.encodePacked(\n \"\\x19\\x01\",\n DOMAIN_SEPARATOR,\n hash(mail)\n ));\n\n return ecrecover(digest, v, r, s) == signer;\n }\n\n function test() public view returns (bool) {\n // Example signed message\n Mail memory mail = Mail({\n from: Person({\n name: \"Cow\",\n wallet: 0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826\n }),\n to: Person({\n name: \"Bob\",\n wallet: 0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB\n }),\n contents: \"Hello, Bob!\"\n });\n uint8 v = 28;\n bytes32 r = 0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d;\n bytes32 s = 0x07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b91562;\n\n assert(DOMAIN_SEPARATOR == 0xf2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f);\n assert(hash(mail) == 0xc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e);\n assert(verify(mail, v, r, s));\n return true;\n }\n}\n", "sourcePath": "/home/travis/build/crossbario/xbr-protocol/contracts/XBRTest.sol", "ast": { "absolutePath": "/home/travis/build/crossbario/xbr-protocol/contracts/XBRTest.sol", "exportedSymbols": { "XBRTest": [ 4293 ] }, "id": 4294, "nodeType": "SourceUnit", "nodes": [ { "id": 3908, "literals": [ "solidity", "^", "0.5", ".12" ], "nodeType": "PragmaDirective", "src": "810:24:7" }, { "baseContracts": [], "contractDependencies": [], "contractKind": "contract", "documentation": null, "fullyImplemented": true, "id": 4293, "linearizedBaseContracts": [ 4293 ], "name": "XBRTest", "nodeType": "ContractDefinition", "nodes": [ { "canonicalName": "XBRTest.EIP712Domain", "id": 3917, "members": [ { "constant": false, "id": 3910, "name": "name", "nodeType": "VariableDeclaration", "scope": 3917, "src": "984:12:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" }, "typeName": { "id": 3909, "name": "string", "nodeType": "ElementaryTypeName", "src": "984:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3912, "name": "version", "nodeType": "VariableDeclaration", "scope": 3917, "src": "1006:15:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" }, "typeName": { "id": 3911, "name": "string", "nodeType": "ElementaryTypeName", "src": "1006:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3914, "name": "chainId", "nodeType": "VariableDeclaration", "scope": 3917, "src": "1031:15:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 3913, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1031:7:7", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3916, "name": "verifyingContract", "nodeType": "VariableDeclaration", "scope": 3917, "src": "1056:25:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 3915, "name": "address", "nodeType": "ElementaryTypeName", "src": "1056:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "name": "EIP712Domain", "nodeType": "StructDefinition", "scope": 4293, "src": "954:134:7", "visibility": "public" }, { "canonicalName": "XBRTest.Person", "id": 3922, "members": [ { "constant": false, "id": 3919, "name": "name", "nodeType": "VariableDeclaration", "scope": 3922, "src": "1118:11:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" }, "typeName": { "id": 3918, "name": "string", "nodeType": "ElementaryTypeName", "src": "1118:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3921, "name": "wallet", "nodeType": "VariableDeclaration", "scope": 3922, "src": "1139:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 3920, "name": "address", "nodeType": "ElementaryTypeName", "src": "1139:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "name": "Person", "nodeType": "StructDefinition", "scope": 4293, "src": "1094:66:7", "visibility": "public" }, { "canonicalName": "XBRTest.Mail", "id": 3929, "members": [ { "constant": false, "id": 3924, "name": "from", "nodeType": "VariableDeclaration", "scope": 3929, "src": "1188:11:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_storage_ptr", "typeString": "struct XBRTest.Person" }, "typeName": { "contractScope": null, "id": 3923, "name": "Person", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3922, "src": "1188:6:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_storage_ptr", "typeString": "struct XBRTest.Person" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3926, "name": "to", "nodeType": "VariableDeclaration", "scope": 3929, "src": "1209:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_storage_ptr", "typeString": "struct XBRTest.Person" }, "typeName": { "contractScope": null, "id": 3925, "name": "Person", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3922, "src": "1209:6:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_storage_ptr", "typeString": "struct XBRTest.Person" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3928, "name": "contents", "nodeType": "VariableDeclaration", "scope": 3929, "src": "1228:15:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" }, "typeName": { "id": 3927, "name": "string", "nodeType": "ElementaryTypeName", "src": "1228:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" } ], "name": "Mail", "nodeType": "StructDefinition", "scope": 4293, "src": "1166:84:7", "visibility": "public" }, { "constant": true, "id": 3934, "name": "EIP712DOMAIN_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 4293, "src": "1256:150:7", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3930, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1256:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", "id": 3932, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1316:84:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" }, "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" } ], "id": 3931, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "1297:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3933, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1297:109:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "visibility": "internal" }, { "constant": true, "id": 3939, "name": "PERSON_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 4293, "src": "1413:96:7", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3935, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1413:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "506572736f6e28737472696e67206e616d652c616464726573732077616c6c657429", "id": 3937, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1467:36:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_b9d8c78acf9b987311de6c7b45bb6a9c8e1bf361fa7fd3467a2163f994c79500", "typeString": "literal_string \"Person(string name,address wallet)\"" }, "value": "Person(string name,address wallet)" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_b9d8c78acf9b987311de6c7b45bb6a9c8e1bf361fa7fd3467a2163f994c79500", "typeString": "literal_string \"Person(string name,address wallet)\"" } ], "id": 3936, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "1448:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3938, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1448:61:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "visibility": "internal" }, { "constant": true, "id": 3944, "name": "MAIL_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 4293, "src": "1516:137:7", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3940, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1516:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "4d61696c28506572736f6e2066726f6d2c506572736f6e20746f2c737472696e6720636f6e74656e747329506572736f6e28737472696e67206e616d652c616464726573732077616c6c657429", "id": 3942, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1568:79:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_a0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2", "typeString": "literal_string \"Mail(Person from,Person to,string contents)Person(string name,address wallet)\"" }, "value": "Mail(Person from,Person to,string contents)Person(string name,address wallet)" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_a0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2", "typeString": "literal_string \"Mail(Person from,Person to,string contents)Person(string name,address wallet)\"" } ], "id": 3941, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "1549:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3943, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1549:104:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "visibility": "internal" }, { "constant": false, "id": 3946, "name": "DOMAIN_SEPARATOR", "nodeType": "VariableDeclaration", "scope": 4293, "src": "1660:24:7", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3945, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1660:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "body": { "id": 3960, "nodeType": "Block", "src": "1713:262:7", "statements": [ { "expression": { "argumentTypes": null, "id": 3958, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 3949, "name": "DOMAIN_SEPARATOR", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3946, "src": "1723:16:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "4574686572204d61696c", "id": 3952, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1780:12:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c70ef06638535b4881fafcac8287e210e3769ff1a8e91f1b95d6246e61e4d3c6", "typeString": "literal_string \"Ether Mail\"" }, "value": "Ether Mail" }, { "argumentTypes": null, "hexValue": "31", "id": 3953, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1815:3:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", "typeString": "literal_string \"1\"" }, "value": "1" }, { "argumentTypes": null, "hexValue": "31", "id": 3954, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1841:1:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" }, { "argumentTypes": null, "hexValue": "307843634343636363634343434363434343434343634363436363436343434363436363636363636343", "id": 3955, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1914:42:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" }, "value": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_c70ef06638535b4881fafcac8287e210e3769ff1a8e91f1b95d6246e61e4d3c6", "typeString": "literal_string \"Ether Mail\"" }, { "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", "typeString": "literal_string \"1\"" }, { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, { "typeIdentifier": "t_address_payable", "typeString": "address payable" } ], "id": 3951, "name": "EIP712Domain", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3917, "src": "1747:12:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_EIP712Domain_$3917_storage_ptr_$", "typeString": "type(struct XBRTest.EIP712Domain storage pointer)" } }, "id": 3956, "isConstant": false, "isLValue": false, "isPure": true, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "version", "chainId", "verifyingContract" ], "nodeType": "FunctionCall", "src": "1747:220:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory", "typeString": "struct XBRTest.EIP712Domain memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory", "typeString": "struct XBRTest.EIP712Domain memory" } ], "id": 3950, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 3992, "src": "1742:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_EIP712Domain_$3917_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.EIP712Domain memory) pure returns (bytes32)" } }, "id": 3957, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1742:226:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "src": "1723:245:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "id": 3959, "nodeType": "ExpressionStatement", "src": "1723:245:7" } ] }, "documentation": null, "id": 3961, "implemented": true, "kind": "constructor", "modifiers": [], "name": "", "nodeType": "FunctionDefinition", "parameters": { "id": 3947, "nodeType": "ParameterList", "parameters": [], "src": "1703:2:7" }, "returnParameters": { "id": 3948, "nodeType": "ParameterList", "parameters": [], "src": "1713:0:7" }, "scope": 4293, "src": "1691:284:7", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 3991, "nodeType": "Block", "src": "2061:269:7", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 3971, "name": "EIP712DOMAIN_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3934, "src": "2112:21:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 3974, "name": "eip712Domain", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3963, "src": "2163:12:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory_ptr", "typeString": "struct XBRTest.EIP712Domain memory" } }, "id": 3975, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "name", "nodeType": "MemberAccess", "referencedDeclaration": 3910, "src": "2163:17:7", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory", "typeString": "string memory" } ], "id": 3973, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "2157:5:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", "typeString": "type(bytes storage pointer)" }, "typeName": "bytes" }, "id": 3976, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2157:24:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 3972, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2147:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3977, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2147:35:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 3980, "name": "eip712Domain", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3963, "src": "2212:12:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory_ptr", "typeString": "struct XBRTest.EIP712Domain memory" } }, "id": 3981, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "version", "nodeType": "MemberAccess", "referencedDeclaration": 3912, "src": "2212:20:7", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory", "typeString": "string memory" } ], "id": 3979, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "2206:5:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", "typeString": "type(bytes storage pointer)" }, "typeName": "bytes" }, "id": 3982, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2206:27:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 3978, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2196:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3983, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2196:38:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 3984, "name": "eip712Domain", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3963, "src": "2248:12:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory_ptr", "typeString": "struct XBRTest.EIP712Domain memory" } }, "id": 3985, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "chainId", "nodeType": "MemberAccess", "referencedDeclaration": 3914, "src": "2248:20:7", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 3986, "name": "eip712Domain", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3963, "src": "2282:12:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory_ptr", "typeString": "struct XBRTest.EIP712Domain memory" } }, "id": 3987, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "verifyingContract", "nodeType": "MemberAccess", "referencedDeclaration": 3916, "src": "2282:30:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "expression": { "argumentTypes": null, "id": 3969, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "2088:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 3970, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "2088:10:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 3988, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2088:234:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 3968, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2078:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3989, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2078:245:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "functionReturnParameters": 3967, "id": 3990, "nodeType": "Return", "src": "2071:252:7" } ] }, "documentation": null, "id": 3992, "implemented": true, "kind": "function", "modifiers": [], "name": "hash", "nodeType": "FunctionDefinition", "parameters": { "id": 3964, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3963, "name": "eip712Domain", "nodeType": "VariableDeclaration", "scope": 3992, "src": "1995:32:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory_ptr", "typeString": "struct XBRTest.EIP712Domain" }, "typeName": { "contractScope": null, "id": 3962, "name": "EIP712Domain", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3917, "src": "1995:12:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_storage_ptr", "typeString": "struct XBRTest.EIP712Domain" } }, "value": null, "visibility": "internal" } ], "src": "1994:34:7" }, "returnParameters": { "id": 3967, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3966, "name": "", "nodeType": "VariableDeclaration", "scope": 3992, "src": "2052:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3965, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2052:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "2051:9:7" }, "scope": 4293, "src": "1981:349:7", "stateMutability": "pure", "superFunction": null, "visibility": "internal" }, { "body": { "id": 4014, "nodeType": "Block", "src": "2404:154:7", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4002, "name": "PERSON_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3939, "src": "2455:15:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4005, "name": "person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3994, "src": "2500:6:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory_ptr", "typeString": "struct XBRTest.Person memory" } }, "id": 4006, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "name", "nodeType": "MemberAccess", "referencedDeclaration": 3919, "src": "2500:11:7", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory", "typeString": "string memory" } ], "id": 4004, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "2494:5:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", "typeString": "type(bytes storage pointer)" }, "typeName": "bytes" }, "id": 4007, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2494:18:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4003, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2484:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4008, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2484:29:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4009, "name": "person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3994, "src": "2527:6:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory_ptr", "typeString": "struct XBRTest.Person memory" } }, "id": 4010, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "wallet", "nodeType": "MemberAccess", "referencedDeclaration": 3921, "src": "2527:13:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "expression": { "argumentTypes": null, "id": 4000, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "2431:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 4001, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "2431:10:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 4011, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2431:119:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 3999, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2421:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4012, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2421:130:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "functionReturnParameters": 3998, "id": 4013, "nodeType": "Return", "src": "2414:137:7" } ] }, "documentation": null, "id": 4015, "implemented": true, "kind": "function", "modifiers": [], "name": "hash", "nodeType": "FunctionDefinition", "parameters": { "id": 3995, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3994, "name": "person", "nodeType": "VariableDeclaration", "scope": 4015, "src": "2350:20:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory_ptr", "typeString": "struct XBRTest.Person" }, "typeName": { "contractScope": null, "id": 3993, "name": "Person", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3922, "src": "2350:6:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_storage_ptr", "typeString": "struct XBRTest.Person" } }, "value": null, "visibility": "internal" } ], "src": "2349:22:7" }, "returnParameters": { "id": 3998, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3997, "name": "", "nodeType": "VariableDeclaration", "scope": 4015, "src": "2395:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3996, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2395:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "2394:9:7" }, "scope": 4293, "src": "2336:222:7", "stateMutability": "pure", "superFunction": null, "visibility": "internal" }, { "body": { "id": 4043, "nodeType": "Block", "src": "2628:183:7", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4025, "name": "MAIL_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3944, "src": "2679:13:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4027, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4017, "src": "2711:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } }, "id": 4028, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "from", "nodeType": "MemberAccess", "referencedDeclaration": 3924, "src": "2711:9:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } ], "id": 4026, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4015, "src": "2706:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Person_$3922_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Person memory) pure returns (bytes32)" } }, "id": 4029, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2706:15:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4031, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4017, "src": "2740:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } }, "id": 4032, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "to", "nodeType": "MemberAccess", "referencedDeclaration": 3926, "src": "2740:7:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } ], "id": 4030, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4015, "src": "2735:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Person_$3922_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Person memory) pure returns (bytes32)" } }, "id": 4033, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2735:13:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4036, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4017, "src": "2778:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } }, "id": 4037, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "contents", "nodeType": "MemberAccess", "referencedDeclaration": 3928, "src": "2778:13:7", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory", "typeString": "string memory" } ], "id": 4035, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "2772:5:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", "typeString": "type(bytes storage pointer)" }, "typeName": "bytes" }, "id": 4038, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2772:20:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4034, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2762:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4039, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2762:31:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 4023, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "2655:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 4024, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "2655:10:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 4040, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2655:148:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4022, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2645:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4041, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2645:159:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "functionReturnParameters": 4021, "id": 4042, "nodeType": "Return", "src": "2638:166:7" } ] }, "documentation": null, "id": 4044, "implemented": true, "kind": "function", "modifiers": [], "name": "hash", "nodeType": "FunctionDefinition", "parameters": { "id": 4018, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4017, "name": "mail", "nodeType": "VariableDeclaration", "scope": 4044, "src": "2578:16:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail" }, "typeName": { "contractScope": null, "id": 4016, "name": "Mail", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3929, "src": "2578:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_storage_ptr", "typeString": "struct XBRTest.Mail" } }, "value": null, "visibility": "internal" } ], "src": "2577:18:7" }, "returnParameters": { "id": 4021, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4020, "name": "", "nodeType": "VariableDeclaration", "scope": 4044, "src": "2619:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4019, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2619:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "2618:9:7" }, "scope": 4293, "src": "2564:247:7", "stateMutability": "pure", "superFunction": null, "visibility": "internal" }, { "body": { "id": 4081, "nodeType": "Block", "src": "2911:285:7", "statements": [ { "assignments": [ 4058 ], "declarations": [ { "constant": false, "id": 4058, "name": "digest", "nodeType": "VariableDeclaration", "scope": 4081, "src": "2994:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4057, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2994:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4069, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "1901", "id": 4062, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "3051:10:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, "value": "\u0019\u0001" }, { "argumentTypes": null, "id": 4063, "name": "DOMAIN_SEPARATOR", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3946, "src": "3075:16:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4065, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4046, "src": "3110:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } ], "id": 4064, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4044, "src": "3105:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Mail_$3929_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Mail memory) pure returns (bytes32)" } }, "id": 4066, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3105:10:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 4060, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "3021:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 4061, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "3021:16:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 4067, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3021:104:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4059, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "3011:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4068, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3011:115:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "2994:132:7" }, { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 4079, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4071, "name": "digest", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4058, "src": "3153:6:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4072, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4048, "src": "3161:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 4073, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4050, "src": "3164:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4074, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4052, "src": "3167:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_uint8", "typeString": "uint8" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 4070, "name": "ecrecover", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6340, "src": "3143:9:7", "typeDescriptions": { "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" } }, "id": 4075, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3143:26:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4076, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4046, "src": "3173:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } }, "id": 4077, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "from", "nodeType": "MemberAccess", "referencedDeclaration": 3924, "src": "3173:9:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, "id": 4078, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "wallet", "nodeType": "MemberAccess", "referencedDeclaration": 3921, "src": "3173:16:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "3143:46:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 4056, "id": 4080, "nodeType": "Return", "src": "3136:53:7" } ] }, "documentation": null, "id": 4082, "implemented": true, "kind": "function", "modifiers": [], "name": "verify", "nodeType": "FunctionDefinition", "parameters": { "id": 4053, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4046, "name": "mail", "nodeType": "VariableDeclaration", "scope": 4082, "src": "2833:16:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail" }, "typeName": { "contractScope": null, "id": 4045, "name": "Mail", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3929, "src": "2833:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_storage_ptr", "typeString": "struct XBRTest.Mail" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4048, "name": "v", "nodeType": "VariableDeclaration", "scope": 4082, "src": "2851:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 4047, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "2851:5:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4050, "name": "r", "nodeType": "VariableDeclaration", "scope": 4082, "src": "2860:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4049, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2860:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4052, "name": "s", "nodeType": "VariableDeclaration", "scope": 4082, "src": "2871:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4051, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2871:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "2832:49:7" }, "returnParameters": { "id": 4056, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4055, "name": "", "nodeType": "VariableDeclaration", "scope": 4082, "src": "2905:4:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 4054, "name": "bool", "nodeType": "ElementaryTypeName", "src": "2905:4:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "2904:6:7" }, "scope": 4293, "src": "2817:379:7", "stateMutability": "view", "superFunction": null, "visibility": "internal" }, { "body": { "id": 4108, "nodeType": "Block", "src": "3308:267:7", "statements": [ { "externalReferences": [ { "r": { "declaration": 4089, "isOffset": false, "isSlot": false, "src": "3342:1:7", "valueSize": 1 } }, { "signature_rsv": { "declaration": 4084, "isOffset": false, "isSlot": false, "src": "3357:13:7", "valueSize": 1 } }, { "v": { "declaration": 4087, "isOffset": false, "isSlot": false, "src": "3436:1:7", "valueSize": 1 } }, { "s": { "declaration": 4091, "isOffset": false, "isSlot": false, "src": "3389:1:7", "valueSize": 1 } }, { "signature_rsv": { "declaration": 4084, "isOffset": false, "isSlot": false, "src": "3404:13:7", "valueSize": 1 } }, { "signature_rsv": { "declaration": 4084, "isOffset": false, "isSlot": false, "src": "3455:13:7", "valueSize": 1 } } ], "id": 4093, "nodeType": "InlineAssembly", "operations": "{\n r := mload(add(signature_rsv, 32))\n s := mload(add(signature_rsv, 64))\n v := and(mload(add(signature_rsv, 65)), 255)\n}", "src": "3319:171:7" }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "id": 4096, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 4094, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4087, "src": "3503:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "nodeType": "BinaryOperation", "operator": "<", "rightExpression": { "argumentTypes": null, "hexValue": "3237", "id": 4095, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "3507:2:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_27_by_1", "typeString": "int_const 27" }, "value": "27" }, "src": "3503:6:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 4102, "nodeType": "IfStatement", "src": "3499:44:7", "trueBody": { "id": 4101, "nodeType": "Block", "src": "3511:32:7", "statements": [ { "expression": { "argumentTypes": null, "id": 4099, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 4097, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4087, "src": "3525:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "nodeType": "Assignment", "operator": "+=", "rightHandSide": { "argumentTypes": null, "hexValue": "3237", "id": 4098, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "3530:2:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_27_by_1", "typeString": "int_const 27" }, "value": "27" }, "src": "3525:7:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "id": 4100, "nodeType": "ExpressionStatement", "src": "3525:7:7" } ] } }, { "expression": { "argumentTypes": null, "components": [ { "argumentTypes": null, "id": 4103, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4087, "src": "3560:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 4104, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4089, "src": "3563:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4105, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4091, "src": "3566:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "id": 4106, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "3559:9:7", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "tuple(uint8,bytes32,bytes32)" } }, "functionReturnParameters": 4092, "id": 4107, "nodeType": "Return", "src": "3552:16:7" } ] }, "documentation": null, "id": 4109, "implemented": true, "kind": "function", "modifiers": [], "name": "splitSignature", "nodeType": "FunctionDefinition", "parameters": { "id": 4085, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4084, "name": "signature_rsv", "nodeType": "VariableDeclaration", "scope": 4109, "src": "3227:26:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 4083, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "3227:5:7", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "3226:28:7" }, "returnParameters": { "id": 4092, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4087, "name": "v", "nodeType": "VariableDeclaration", "scope": 4109, "src": "3277:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 4086, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "3277:5:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4089, "name": "r", "nodeType": "VariableDeclaration", "scope": 4109, "src": "3286:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4088, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "3286:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4091, "name": "s", "nodeType": "VariableDeclaration", "scope": 4109, "src": "3297:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4090, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "3297:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "3276:31:7" }, "scope": 4293, "src": "3202:373:7", "stateMutability": "pure", "superFunction": null, "visibility": "private" }, { "body": { "id": 4174, "nodeType": "Block", "src": "3788:568:7", "statements": [ { "assignments": [ 4129, 4131, 4133 ], "declarations": [ { "constant": false, "id": 4129, "name": "v", "nodeType": "VariableDeclaration", "scope": 4174, "src": "3800:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 4128, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "3800:5:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4131, "name": "r", "nodeType": "VariableDeclaration", "scope": 4174, "src": "3809:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4130, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "3809:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4133, "name": "s", "nodeType": "VariableDeclaration", "scope": 4174, "src": "3820:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4132, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "3820:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4137, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4135, "name": "sig_rsv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4123, "src": "3848:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4134, "name": "splitSignature", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4109, "src": "3833:14:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (uint8,bytes32,bytes32)" } }, "id": 4136, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3833:23:7", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "tuple(uint8,bytes32,bytes32)" } }, "nodeType": "VariableDeclarationStatement", "src": "3799:57:7" }, { "assignments": [ 4139 ], "declarations": [ { "constant": false, "id": 4139, "name": "mail", "nodeType": "VariableDeclaration", "scope": 4174, "src": "3867:16:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail" }, "typeName": { "contractScope": null, "id": 4138, "name": "Mail", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3929, "src": "3867:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_storage_ptr", "typeString": "struct XBRTest.Mail" } }, "value": null, "visibility": "internal" } ], "id": 4151, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4142, "name": "from_name", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4113, "src": "3942:9:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, { "argumentTypes": null, "id": 4143, "name": "from_wallet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4115, "src": "3977:11:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 4141, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "3911:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4144, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "3911:92:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4146, "name": "to_name", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4117, "src": "4052:7:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, { "argumentTypes": null, "id": 4147, "name": "to_wallet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4119, "src": "4085:9:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 4145, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "4021:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4148, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "4021:88:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "id": 4149, "name": "contents", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4121, "src": "4133:8:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } ], "id": 4140, "name": "Mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3929, "src": "3886:4:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Mail_$3929_storage_ptr_$", "typeString": "type(struct XBRTest.Mail storage pointer)" } }, "id": 4150, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "from", "to", "contents" ], "nodeType": "FunctionCall", "src": "3886:266:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory", "typeString": "struct XBRTest.Mail memory" } }, "nodeType": "VariableDeclarationStatement", "src": "3867:285:7" }, { "assignments": [ 4153 ], "declarations": [ { "constant": false, "id": 4153, "name": "digest", "nodeType": "VariableDeclaration", "scope": 4174, "src": "4163:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4152, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "4163:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4164, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "1901", "id": 4157, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4220:10:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, "value": "\u0019\u0001" }, { "argumentTypes": null, "id": 4158, "name": "DOMAIN_SEPARATOR", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3946, "src": "4244:16:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4160, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4139, "src": "4279:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } ], "id": 4159, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4044, "src": "4274:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Mail_$3929_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Mail memory) pure returns (bytes32)" } }, "id": 4161, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4274:10:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 4155, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "4190:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 4156, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "4190:16:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 4162, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4190:104:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4154, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "4180:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4163, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4180:115:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "4163:132:7" }, { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 4172, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4166, "name": "digest", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4153, "src": "4323:6:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4167, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4129, "src": "4331:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 4168, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4131, "src": "4334:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4169, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4133, "src": "4337:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_uint8", "typeString": "uint8" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 4165, "name": "ecrecover", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6340, "src": "4313:9:7", "typeDescriptions": { "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" } }, "id": 4170, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4313:26:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "id": 4171, "name": "signer", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4111, "src": "4343:6:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "4313:36:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 4127, "id": 4173, "nodeType": "Return", "src": "4306:43:7" } ] }, "documentation": null, "id": 4175, "implemented": true, "kind": "function", "modifiers": [], "name": "test_verify1", "nodeType": "FunctionDefinition", "parameters": { "id": 4124, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4111, "name": "signer", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3603:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4110, "name": "address", "nodeType": "ElementaryTypeName", "src": "3603:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4113, "name": "from_name", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3619:23:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4112, "name": "string", "nodeType": "ElementaryTypeName", "src": "3619:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4115, "name": "from_wallet", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3644:19:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4114, "name": "address", "nodeType": "ElementaryTypeName", "src": "3644:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4117, "name": "to_name", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3665:21:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4116, "name": "string", "nodeType": "ElementaryTypeName", "src": "3665:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4119, "name": "to_wallet", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3696:17:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4118, "name": "address", "nodeType": "ElementaryTypeName", "src": "3696:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4121, "name": "contents", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3715:22:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4120, "name": "string", "nodeType": "ElementaryTypeName", "src": "3715:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4123, "name": "sig_rsv", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3739:20:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 4122, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "3739:5:7", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "3602:158:7" }, "returnParameters": { "id": 4127, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4126, "name": "", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3782:4:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 4125, "name": "bool", "nodeType": "ElementaryTypeName", "src": "3782:4:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "3781:6:7" }, "scope": 4293, "src": "3581:775:7", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { "id": 4234, "nodeType": "Block", "src": "4578:500:7", "statements": [ { "assignments": [ 4199 ], "declarations": [ { "constant": false, "id": 4199, "name": "mail", "nodeType": "VariableDeclaration", "scope": 4234, "src": "4589:16:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail" }, "typeName": { "contractScope": null, "id": 4198, "name": "Mail", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3929, "src": "4589:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_storage_ptr", "typeString": "struct XBRTest.Mail" } }, "value": null, "visibility": "internal" } ], "id": 4211, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4202, "name": "from_name", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4179, "src": "4664:9:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, { "argumentTypes": null, "id": 4203, "name": "from_wallet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4181, "src": "4699:11:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 4201, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "4633:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4204, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "4633:92:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4206, "name": "to_name", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4183, "src": "4774:7:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, { "argumentTypes": null, "id": 4207, "name": "to_wallet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4185, "src": "4807:9:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 4205, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "4743:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4208, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "4743:88:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "id": 4209, "name": "contents", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4187, "src": "4855:8:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } ], "id": 4200, "name": "Mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3929, "src": "4608:4:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Mail_$3929_storage_ptr_$", "typeString": "type(struct XBRTest.Mail storage pointer)" } }, "id": 4210, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "from", "to", "contents" ], "nodeType": "FunctionCall", "src": "4608:266:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory", "typeString": "struct XBRTest.Mail memory" } }, "nodeType": "VariableDeclarationStatement", "src": "4589:285:7" }, { "assignments": [ 4213 ], "declarations": [ { "constant": false, "id": 4213, "name": "digest", "nodeType": "VariableDeclaration", "scope": 4234, "src": "4885:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4212, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "4885:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4224, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "1901", "id": 4217, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4942:10:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, "value": "\u0019\u0001" }, { "argumentTypes": null, "id": 4218, "name": "DOMAIN_SEPARATOR", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3946, "src": "4966:16:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4220, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4199, "src": "5001:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } ], "id": 4219, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4044, "src": "4996:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Mail_$3929_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Mail memory) pure returns (bytes32)" } }, "id": 4221, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4996:10:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 4215, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "4912:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 4216, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "4912:16:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 4222, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4912:104:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4214, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "4902:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4223, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4902:115:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "4885:132:7" }, { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 4232, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4226, "name": "digest", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4213, "src": "5045:6:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4227, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4189, "src": "5053:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 4228, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4191, "src": "5056:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4229, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4193, "src": "5059:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_uint8", "typeString": "uint8" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 4225, "name": "ecrecover", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6340, "src": "5035:9:7", "typeDescriptions": { "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" } }, "id": 4230, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5035:26:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "id": 4231, "name": "signer", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4177, "src": "5065:6:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "5035:36:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 4197, "id": 4233, "nodeType": "Return", "src": "5028:43:7" } ] }, "documentation": null, "id": 4235, "implemented": true, "kind": "function", "modifiers": [], "name": "test_verify2", "nodeType": "FunctionDefinition", "parameters": { "id": 4194, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4177, "name": "signer", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4384:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4176, "name": "address", "nodeType": "ElementaryTypeName", "src": "4384:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4179, "name": "from_name", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4400:23:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4178, "name": "string", "nodeType": "ElementaryTypeName", "src": "4400:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4181, "name": "from_wallet", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4425:19:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4180, "name": "address", "nodeType": "ElementaryTypeName", "src": "4425:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4183, "name": "to_name", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4446:21:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4182, "name": "string", "nodeType": "ElementaryTypeName", "src": "4446:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4185, "name": "to_wallet", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4477:17:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4184, "name": "address", "nodeType": "ElementaryTypeName", "src": "4477:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4187, "name": "contents", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4496:22:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4186, "name": "string", "nodeType": "ElementaryTypeName", "src": "4496:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4189, "name": "v", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4520:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 4188, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "4520:5:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4191, "name": "r", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4529:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4190, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "4529:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4193, "name": "s", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4540:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4192, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "4540:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "4383:167:7" }, "returnParameters": { "id": 4197, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4196, "name": "", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4572:4:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 4195, "name": "bool", "nodeType": "ElementaryTypeName", "src": "4572:4:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "4571:6:7" }, "scope": 4293, "src": "4362:716:7", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { "id": 4291, "nodeType": "Block", "src": "5127:860:7", "statements": [ { "assignments": [ 4241 ], "declarations": [ { "constant": false, "id": 4241, "name": "mail", "nodeType": "VariableDeclaration", "scope": 4291, "src": "5171:16:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail" }, "typeName": { "contractScope": null, "id": 4240, "name": "Mail", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3929, "src": "5171:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_storage_ptr", "typeString": "struct XBRTest.Mail" } }, "value": null, "visibility": "internal" } ], "id": 4253, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "436f77", "id": 4244, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5246:5:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_8c1d2bd5348394761719da11ec67eedae9502d137e8940fee8ecd6f641ee1648", "typeString": "literal_string \"Cow\"" }, "value": "Cow" }, { "argumentTypes": null, "hexValue": "307843443261336439463933384531334344393437456330354162433746453733344466384444383236", "id": 4245, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5277:42:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" }, "value": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_8c1d2bd5348394761719da11ec67eedae9502d137e8940fee8ecd6f641ee1648", "typeString": "literal_string \"Cow\"" }, { "typeIdentifier": "t_address_payable", "typeString": "address payable" } ], "id": 4243, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "5215:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4246, "isConstant": false, "isLValue": false, "isPure": true, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "5215:119:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "426f62", "id": 4248, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5383:5:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_28cac318a86c8a0a6a9156c2dba2c8c2363677ba0514ef616592d81557e679b6", "typeString": "literal_string \"Bob\"" }, "value": "Bob" }, { "argumentTypes": null, "hexValue": "307862426242424242626242424262626242626242626262624242624262626262426242626242426242", "id": 4249, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5414:42:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" }, "value": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_28cac318a86c8a0a6a9156c2dba2c8c2363677ba0514ef616592d81557e679b6", "typeString": "literal_string \"Bob\"" }, { "typeIdentifier": "t_address_payable", "typeString": "address payable" } ], "id": 4247, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "5352:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4250, "isConstant": false, "isLValue": false, "isPure": true, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "5352:119:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "hexValue": "48656c6c6f2c20426f6221", "id": 4251, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5495:13:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_b5aadf3154a261abdd9086fc627b61efca26ae5702701d05cd2305f7c52a2fc8", "typeString": "literal_string \"Hello, Bob!\"" }, "value": "Hello, Bob!" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_stringliteral_b5aadf3154a261abdd9086fc627b61efca26ae5702701d05cd2305f7c52a2fc8", "typeString": "literal_string \"Hello, Bob!\"" } ], "id": 4242, "name": "Mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3929, "src": "5190:4:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Mail_$3929_storage_ptr_$", "typeString": "type(struct XBRTest.Mail storage pointer)" } }, "id": 4252, "isConstant": false, "isLValue": false, "isPure": true, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "from", "to", "contents" ], "nodeType": "FunctionCall", "src": "5190:329:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory", "typeString": "struct XBRTest.Mail memory" } }, "nodeType": "VariableDeclarationStatement", "src": "5171:348:7" }, { "assignments": [ 4255 ], "declarations": [ { "constant": false, "id": 4255, "name": "v", "nodeType": "VariableDeclaration", "scope": 4291, "src": "5529:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 4254, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "5529:5:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" } ], "id": 4257, "initialValue": { "argumentTypes": null, "hexValue": "3238", "id": 4256, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5539:2:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_28_by_1", "typeString": "int_const 28" }, "value": "28" }, "nodeType": "VariableDeclarationStatement", "src": "5529:12:7" }, { "assignments": [ 4259 ], "declarations": [ { "constant": false, "id": 4259, "name": "r", "nodeType": "VariableDeclaration", "scope": 4291, "src": "5551:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4258, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "5551:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4261, "initialValue": { "argumentTypes": null, "hexValue": "307834333535633437643633393234653861373265353039623635303239303532656236633239396435336130346531363763353737356664343636373531633964", "id": 4260, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5563:66:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_30456498978348419035113697096786286190221642508076327013477434142925027351709_by_1", "typeString": "int_const 3045...(69 digits omitted)...1709" }, "value": "0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d" }, "nodeType": "VariableDeclarationStatement", "src": "5551:78:7" }, { "assignments": [ 4263 ], "declarations": [ { "constant": false, "id": 4263, "name": "s", "nodeType": "VariableDeclaration", "scope": 4291, "src": "5639:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4262, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "5639:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4265, "initialValue": { "argumentTypes": null, "hexValue": "307830373239393933366433303463313533663634343364666130356634306666303037643732393131623666373233303766393936323331363035623931353632", "id": 4264, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5651:66:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_3239688114989807171223523113163838721254638492728567579547907301252041086306_by_1", "typeString": "int_const 3239...(68 digits omitted)...6306" }, "value": "0x07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b91562" }, "nodeType": "VariableDeclarationStatement", "src": "5639:78:7" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "id": 4269, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 4267, "name": "DOMAIN_SEPARATOR", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3946, "src": "5735:16:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "307866326365653337356661343262343231343338303430323566633434396465616664353063633033316361323537653062313934613635306139313230393066", "id": 4268, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5755:66:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_109825249729584807872825749361878700304363337622364782618362889211463320340751_by_1", "typeString": "int_const 1098...(70 digits omitted)...0751" }, "value": "0xf2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f" }, "src": "5735:86:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 4266, "name": "assert", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6337, "src": "5728:6:7", "typeDescriptions": { "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 4270, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5728:94:7", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 4271, "nodeType": "ExpressionStatement", "src": "5728:94:7" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "id": 4277, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4274, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4241, "src": "5844:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } ], "id": 4273, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4044, "src": "5839:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Mail_$3929_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Mail memory) pure returns (bytes32)" } }, "id": 4275, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5839:10:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "307863353263306565356438343236343437313830363239306133663263346365636663353439303632366266393132643031663234306437613237346233373165", "id": 4276, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5853:66:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_89183475262805136231107931379173003391419088052721114540770871634179195090718_by_1", "typeString": "int_const 8918...(69 digits omitted)...0718" }, "value": "0xc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e" }, "src": "5839:80:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 4272, "name": "assert", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6337, "src": "5832:6:7", "typeDescriptions": { "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 4278, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5832:88:7", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 4279, "nodeType": "ExpressionStatement", "src": "5832:88:7" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4282, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4241, "src": "5944:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } }, { "argumentTypes": null, "id": 4283, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4255, "src": "5950:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 4284, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4259, "src": "5953:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4285, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4263, "src": "5956:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" }, { "typeIdentifier": "t_uint8", "typeString": "uint8" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 4281, "name": "verify", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4082, "src": "5937:6:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_struct$_Mail_$3929_memory_ptr_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$", "typeString": "function (struct XBRTest.Mail memory,uint8,bytes32,bytes32) view returns (bool)" } }, "id": 4286, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5937:21:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 4280, "name": "assert", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6337, "src": "5930:6:7", "typeDescriptions": { "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 4287, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5930:29:7", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 4288, "nodeType": "ExpressionStatement", "src": "5930:29:7" }, { "expression": { "argumentTypes": null, "hexValue": "74727565", "id": 4289, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "5976:4:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, "functionReturnParameters": 4239, "id": 4290, "nodeType": "Return", "src": "5969:11:7" } ] }, "documentation": null, "id": 4292, "implemented": true, "kind": "function", "modifiers": [], "name": "test", "nodeType": "FunctionDefinition", "parameters": { "id": 4236, "nodeType": "ParameterList", "parameters": [], "src": "5097:2:7" }, "returnParameters": { "id": 4239, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4238, "name": "", "nodeType": "VariableDeclaration", "scope": 4292, "src": "5121:4:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 4237, "name": "bool", "nodeType": "ElementaryTypeName", "src": "5121:4:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "5120:6:7" }, "scope": 4293, "src": "5084:903:7", "stateMutability": "view", "superFunction": null, "visibility": "public" } ], "scope": 4294, "src": "837:5152:7" } ], "src": "810:5180:7" }, "legacyAST": { "absolutePath": "/home/travis/build/crossbario/xbr-protocol/contracts/XBRTest.sol", "exportedSymbols": { "XBRTest": [ 4293 ] }, "id": 4294, "nodeType": "SourceUnit", "nodes": [ { "id": 3908, "literals": [ "solidity", "^", "0.5", ".12" ], "nodeType": "PragmaDirective", "src": "810:24:7" }, { "baseContracts": [], "contractDependencies": [], "contractKind": "contract", "documentation": null, "fullyImplemented": true, "id": 4293, "linearizedBaseContracts": [ 4293 ], "name": "XBRTest", "nodeType": "ContractDefinition", "nodes": [ { "canonicalName": "XBRTest.EIP712Domain", "id": 3917, "members": [ { "constant": false, "id": 3910, "name": "name", "nodeType": "VariableDeclaration", "scope": 3917, "src": "984:12:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" }, "typeName": { "id": 3909, "name": "string", "nodeType": "ElementaryTypeName", "src": "984:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3912, "name": "version", "nodeType": "VariableDeclaration", "scope": 3917, "src": "1006:15:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" }, "typeName": { "id": 3911, "name": "string", "nodeType": "ElementaryTypeName", "src": "1006:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3914, "name": "chainId", "nodeType": "VariableDeclaration", "scope": 3917, "src": "1031:15:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 3913, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1031:7:7", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3916, "name": "verifyingContract", "nodeType": "VariableDeclaration", "scope": 3917, "src": "1056:25:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 3915, "name": "address", "nodeType": "ElementaryTypeName", "src": "1056:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "name": "EIP712Domain", "nodeType": "StructDefinition", "scope": 4293, "src": "954:134:7", "visibility": "public" }, { "canonicalName": "XBRTest.Person", "id": 3922, "members": [ { "constant": false, "id": 3919, "name": "name", "nodeType": "VariableDeclaration", "scope": 3922, "src": "1118:11:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" }, "typeName": { "id": 3918, "name": "string", "nodeType": "ElementaryTypeName", "src": "1118:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3921, "name": "wallet", "nodeType": "VariableDeclaration", "scope": 3922, "src": "1139:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 3920, "name": "address", "nodeType": "ElementaryTypeName", "src": "1139:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "name": "Person", "nodeType": "StructDefinition", "scope": 4293, "src": "1094:66:7", "visibility": "public" }, { "canonicalName": "XBRTest.Mail", "id": 3929, "members": [ { "constant": false, "id": 3924, "name": "from", "nodeType": "VariableDeclaration", "scope": 3929, "src": "1188:11:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_storage_ptr", "typeString": "struct XBRTest.Person" }, "typeName": { "contractScope": null, "id": 3923, "name": "Person", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3922, "src": "1188:6:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_storage_ptr", "typeString": "struct XBRTest.Person" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3926, "name": "to", "nodeType": "VariableDeclaration", "scope": 3929, "src": "1209:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_storage_ptr", "typeString": "struct XBRTest.Person" }, "typeName": { "contractScope": null, "id": 3925, "name": "Person", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3922, "src": "1209:6:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_storage_ptr", "typeString": "struct XBRTest.Person" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3928, "name": "contents", "nodeType": "VariableDeclaration", "scope": 3929, "src": "1228:15:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" }, "typeName": { "id": 3927, "name": "string", "nodeType": "ElementaryTypeName", "src": "1228:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" } ], "name": "Mail", "nodeType": "StructDefinition", "scope": 4293, "src": "1166:84:7", "visibility": "public" }, { "constant": true, "id": 3934, "name": "EIP712DOMAIN_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 4293, "src": "1256:150:7", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3930, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1256:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", "id": 3932, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1316:84:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" }, "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" } ], "id": 3931, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "1297:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3933, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1297:109:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "visibility": "internal" }, { "constant": true, "id": 3939, "name": "PERSON_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 4293, "src": "1413:96:7", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3935, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1413:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "506572736f6e28737472696e67206e616d652c616464726573732077616c6c657429", "id": 3937, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1467:36:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_b9d8c78acf9b987311de6c7b45bb6a9c8e1bf361fa7fd3467a2163f994c79500", "typeString": "literal_string \"Person(string name,address wallet)\"" }, "value": "Person(string name,address wallet)" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_b9d8c78acf9b987311de6c7b45bb6a9c8e1bf361fa7fd3467a2163f994c79500", "typeString": "literal_string \"Person(string name,address wallet)\"" } ], "id": 3936, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "1448:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3938, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1448:61:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "visibility": "internal" }, { "constant": true, "id": 3944, "name": "MAIL_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 4293, "src": "1516:137:7", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3940, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1516:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "4d61696c28506572736f6e2066726f6d2c506572736f6e20746f2c737472696e6720636f6e74656e747329506572736f6e28737472696e67206e616d652c616464726573732077616c6c657429", "id": 3942, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1568:79:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_a0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2", "typeString": "literal_string \"Mail(Person from,Person to,string contents)Person(string name,address wallet)\"" }, "value": "Mail(Person from,Person to,string contents)Person(string name,address wallet)" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_a0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2", "typeString": "literal_string \"Mail(Person from,Person to,string contents)Person(string name,address wallet)\"" } ], "id": 3941, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "1549:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3943, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1549:104:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "visibility": "internal" }, { "constant": false, "id": 3946, "name": "DOMAIN_SEPARATOR", "nodeType": "VariableDeclaration", "scope": 4293, "src": "1660:24:7", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3945, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1660:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "body": { "id": 3960, "nodeType": "Block", "src": "1713:262:7", "statements": [ { "expression": { "argumentTypes": null, "id": 3958, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 3949, "name": "DOMAIN_SEPARATOR", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3946, "src": "1723:16:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "4574686572204d61696c", "id": 3952, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1780:12:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c70ef06638535b4881fafcac8287e210e3769ff1a8e91f1b95d6246e61e4d3c6", "typeString": "literal_string \"Ether Mail\"" }, "value": "Ether Mail" }, { "argumentTypes": null, "hexValue": "31", "id": 3953, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1815:3:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", "typeString": "literal_string \"1\"" }, "value": "1" }, { "argumentTypes": null, "hexValue": "31", "id": 3954, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1841:1:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" }, { "argumentTypes": null, "hexValue": "307843634343636363634343434363434343434343634363436363436343434363436363636363636343", "id": 3955, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1914:42:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" }, "value": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_c70ef06638535b4881fafcac8287e210e3769ff1a8e91f1b95d6246e61e4d3c6", "typeString": "literal_string \"Ether Mail\"" }, { "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", "typeString": "literal_string \"1\"" }, { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, { "typeIdentifier": "t_address_payable", "typeString": "address payable" } ], "id": 3951, "name": "EIP712Domain", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3917, "src": "1747:12:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_EIP712Domain_$3917_storage_ptr_$", "typeString": "type(struct XBRTest.EIP712Domain storage pointer)" } }, "id": 3956, "isConstant": false, "isLValue": false, "isPure": true, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "version", "chainId", "verifyingContract" ], "nodeType": "FunctionCall", "src": "1747:220:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory", "typeString": "struct XBRTest.EIP712Domain memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory", "typeString": "struct XBRTest.EIP712Domain memory" } ], "id": 3950, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 3992, "src": "1742:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_EIP712Domain_$3917_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.EIP712Domain memory) pure returns (bytes32)" } }, "id": 3957, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1742:226:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "src": "1723:245:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "id": 3959, "nodeType": "ExpressionStatement", "src": "1723:245:7" } ] }, "documentation": null, "id": 3961, "implemented": true, "kind": "constructor", "modifiers": [], "name": "", "nodeType": "FunctionDefinition", "parameters": { "id": 3947, "nodeType": "ParameterList", "parameters": [], "src": "1703:2:7" }, "returnParameters": { "id": 3948, "nodeType": "ParameterList", "parameters": [], "src": "1713:0:7" }, "scope": 4293, "src": "1691:284:7", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 3991, "nodeType": "Block", "src": "2061:269:7", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 3971, "name": "EIP712DOMAIN_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3934, "src": "2112:21:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 3974, "name": "eip712Domain", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3963, "src": "2163:12:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory_ptr", "typeString": "struct XBRTest.EIP712Domain memory" } }, "id": 3975, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "name", "nodeType": "MemberAccess", "referencedDeclaration": 3910, "src": "2163:17:7", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory", "typeString": "string memory" } ], "id": 3973, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "2157:5:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", "typeString": "type(bytes storage pointer)" }, "typeName": "bytes" }, "id": 3976, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2157:24:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 3972, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2147:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3977, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2147:35:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 3980, "name": "eip712Domain", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3963, "src": "2212:12:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory_ptr", "typeString": "struct XBRTest.EIP712Domain memory" } }, "id": 3981, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "version", "nodeType": "MemberAccess", "referencedDeclaration": 3912, "src": "2212:20:7", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory", "typeString": "string memory" } ], "id": 3979, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "2206:5:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", "typeString": "type(bytes storage pointer)" }, "typeName": "bytes" }, "id": 3982, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2206:27:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 3978, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2196:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3983, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2196:38:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 3984, "name": "eip712Domain", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3963, "src": "2248:12:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory_ptr", "typeString": "struct XBRTest.EIP712Domain memory" } }, "id": 3985, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "chainId", "nodeType": "MemberAccess", "referencedDeclaration": 3914, "src": "2248:20:7", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 3986, "name": "eip712Domain", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3963, "src": "2282:12:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory_ptr", "typeString": "struct XBRTest.EIP712Domain memory" } }, "id": 3987, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "verifyingContract", "nodeType": "MemberAccess", "referencedDeclaration": 3916, "src": "2282:30:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "expression": { "argumentTypes": null, "id": 3969, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "2088:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 3970, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "2088:10:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 3988, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2088:234:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 3968, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2078:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 3989, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2078:245:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "functionReturnParameters": 3967, "id": 3990, "nodeType": "Return", "src": "2071:252:7" } ] }, "documentation": null, "id": 3992, "implemented": true, "kind": "function", "modifiers": [], "name": "hash", "nodeType": "FunctionDefinition", "parameters": { "id": 3964, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3963, "name": "eip712Domain", "nodeType": "VariableDeclaration", "scope": 3992, "src": "1995:32:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_memory_ptr", "typeString": "struct XBRTest.EIP712Domain" }, "typeName": { "contractScope": null, "id": 3962, "name": "EIP712Domain", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3917, "src": "1995:12:7", "typeDescriptions": { "typeIdentifier": "t_struct$_EIP712Domain_$3917_storage_ptr", "typeString": "struct XBRTest.EIP712Domain" } }, "value": null, "visibility": "internal" } ], "src": "1994:34:7" }, "returnParameters": { "id": 3967, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3966, "name": "", "nodeType": "VariableDeclaration", "scope": 3992, "src": "2052:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3965, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2052:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "2051:9:7" }, "scope": 4293, "src": "1981:349:7", "stateMutability": "pure", "superFunction": null, "visibility": "internal" }, { "body": { "id": 4014, "nodeType": "Block", "src": "2404:154:7", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4002, "name": "PERSON_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3939, "src": "2455:15:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4005, "name": "person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3994, "src": "2500:6:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory_ptr", "typeString": "struct XBRTest.Person memory" } }, "id": 4006, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "name", "nodeType": "MemberAccess", "referencedDeclaration": 3919, "src": "2500:11:7", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory", "typeString": "string memory" } ], "id": 4004, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "2494:5:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", "typeString": "type(bytes storage pointer)" }, "typeName": "bytes" }, "id": 4007, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2494:18:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4003, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2484:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4008, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2484:29:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4009, "name": "person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3994, "src": "2527:6:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory_ptr", "typeString": "struct XBRTest.Person memory" } }, "id": 4010, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "wallet", "nodeType": "MemberAccess", "referencedDeclaration": 3921, "src": "2527:13:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "expression": { "argumentTypes": null, "id": 4000, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "2431:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 4001, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "2431:10:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 4011, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2431:119:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 3999, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2421:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4012, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2421:130:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "functionReturnParameters": 3998, "id": 4013, "nodeType": "Return", "src": "2414:137:7" } ] }, "documentation": null, "id": 4015, "implemented": true, "kind": "function", "modifiers": [], "name": "hash", "nodeType": "FunctionDefinition", "parameters": { "id": 3995, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3994, "name": "person", "nodeType": "VariableDeclaration", "scope": 4015, "src": "2350:20:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory_ptr", "typeString": "struct XBRTest.Person" }, "typeName": { "contractScope": null, "id": 3993, "name": "Person", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3922, "src": "2350:6:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_storage_ptr", "typeString": "struct XBRTest.Person" } }, "value": null, "visibility": "internal" } ], "src": "2349:22:7" }, "returnParameters": { "id": 3998, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3997, "name": "", "nodeType": "VariableDeclaration", "scope": 4015, "src": "2395:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 3996, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2395:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "2394:9:7" }, "scope": 4293, "src": "2336:222:7", "stateMutability": "pure", "superFunction": null, "visibility": "internal" }, { "body": { "id": 4043, "nodeType": "Block", "src": "2628:183:7", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4025, "name": "MAIL_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3944, "src": "2679:13:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4027, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4017, "src": "2711:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } }, "id": 4028, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "from", "nodeType": "MemberAccess", "referencedDeclaration": 3924, "src": "2711:9:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } ], "id": 4026, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4015, "src": "2706:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Person_$3922_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Person memory) pure returns (bytes32)" } }, "id": 4029, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2706:15:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4031, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4017, "src": "2740:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } }, "id": 4032, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "to", "nodeType": "MemberAccess", "referencedDeclaration": 3926, "src": "2740:7:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } ], "id": 4030, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4015, "src": "2735:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Person_$3922_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Person memory) pure returns (bytes32)" } }, "id": 4033, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2735:13:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4036, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4017, "src": "2778:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } }, "id": 4037, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "contents", "nodeType": "MemberAccess", "referencedDeclaration": 3928, "src": "2778:13:7", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory", "typeString": "string memory" } ], "id": 4035, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "2772:5:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", "typeString": "type(bytes storage pointer)" }, "typeName": "bytes" }, "id": 4038, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2772:20:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4034, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2762:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4039, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2762:31:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 4023, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "2655:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 4024, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "2655:10:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 4040, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2655:148:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4022, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "2645:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4041, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2645:159:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "functionReturnParameters": 4021, "id": 4042, "nodeType": "Return", "src": "2638:166:7" } ] }, "documentation": null, "id": 4044, "implemented": true, "kind": "function", "modifiers": [], "name": "hash", "nodeType": "FunctionDefinition", "parameters": { "id": 4018, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4017, "name": "mail", "nodeType": "VariableDeclaration", "scope": 4044, "src": "2578:16:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail" }, "typeName": { "contractScope": null, "id": 4016, "name": "Mail", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3929, "src": "2578:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_storage_ptr", "typeString": "struct XBRTest.Mail" } }, "value": null, "visibility": "internal" } ], "src": "2577:18:7" }, "returnParameters": { "id": 4021, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4020, "name": "", "nodeType": "VariableDeclaration", "scope": 4044, "src": "2619:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4019, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2619:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "2618:9:7" }, "scope": 4293, "src": "2564:247:7", "stateMutability": "pure", "superFunction": null, "visibility": "internal" }, { "body": { "id": 4081, "nodeType": "Block", "src": "2911:285:7", "statements": [ { "assignments": [ 4058 ], "declarations": [ { "constant": false, "id": 4058, "name": "digest", "nodeType": "VariableDeclaration", "scope": 4081, "src": "2994:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4057, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2994:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4069, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "1901", "id": 4062, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "3051:10:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, "value": "\u0019\u0001" }, { "argumentTypes": null, "id": 4063, "name": "DOMAIN_SEPARATOR", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3946, "src": "3075:16:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4065, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4046, "src": "3110:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } ], "id": 4064, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4044, "src": "3105:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Mail_$3929_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Mail memory) pure returns (bytes32)" } }, "id": 4066, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3105:10:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 4060, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "3021:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 4061, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "3021:16:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 4067, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3021:104:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4059, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "3011:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4068, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3011:115:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "2994:132:7" }, { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 4079, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4071, "name": "digest", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4058, "src": "3153:6:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4072, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4048, "src": "3161:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 4073, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4050, "src": "3164:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4074, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4052, "src": "3167:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_uint8", "typeString": "uint8" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 4070, "name": "ecrecover", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6340, "src": "3143:9:7", "typeDescriptions": { "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" } }, "id": 4075, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3143:26:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4076, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4046, "src": "3173:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } }, "id": 4077, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "from", "nodeType": "MemberAccess", "referencedDeclaration": 3924, "src": "3173:9:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, "id": 4078, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "wallet", "nodeType": "MemberAccess", "referencedDeclaration": 3921, "src": "3173:16:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "3143:46:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 4056, "id": 4080, "nodeType": "Return", "src": "3136:53:7" } ] }, "documentation": null, "id": 4082, "implemented": true, "kind": "function", "modifiers": [], "name": "verify", "nodeType": "FunctionDefinition", "parameters": { "id": 4053, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4046, "name": "mail", "nodeType": "VariableDeclaration", "scope": 4082, "src": "2833:16:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail" }, "typeName": { "contractScope": null, "id": 4045, "name": "Mail", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3929, "src": "2833:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_storage_ptr", "typeString": "struct XBRTest.Mail" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4048, "name": "v", "nodeType": "VariableDeclaration", "scope": 4082, "src": "2851:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 4047, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "2851:5:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4050, "name": "r", "nodeType": "VariableDeclaration", "scope": 4082, "src": "2860:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4049, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2860:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4052, "name": "s", "nodeType": "VariableDeclaration", "scope": 4082, "src": "2871:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4051, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "2871:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "2832:49:7" }, "returnParameters": { "id": 4056, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4055, "name": "", "nodeType": "VariableDeclaration", "scope": 4082, "src": "2905:4:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 4054, "name": "bool", "nodeType": "ElementaryTypeName", "src": "2905:4:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "2904:6:7" }, "scope": 4293, "src": "2817:379:7", "stateMutability": "view", "superFunction": null, "visibility": "internal" }, { "body": { "id": 4108, "nodeType": "Block", "src": "3308:267:7", "statements": [ { "externalReferences": [ { "r": { "declaration": 4089, "isOffset": false, "isSlot": false, "src": "3342:1:7", "valueSize": 1 } }, { "signature_rsv": { "declaration": 4084, "isOffset": false, "isSlot": false, "src": "3357:13:7", "valueSize": 1 } }, { "v": { "declaration": 4087, "isOffset": false, "isSlot": false, "src": "3436:1:7", "valueSize": 1 } }, { "s": { "declaration": 4091, "isOffset": false, "isSlot": false, "src": "3389:1:7", "valueSize": 1 } }, { "signature_rsv": { "declaration": 4084, "isOffset": false, "isSlot": false, "src": "3404:13:7", "valueSize": 1 } }, { "signature_rsv": { "declaration": 4084, "isOffset": false, "isSlot": false, "src": "3455:13:7", "valueSize": 1 } } ], "id": 4093, "nodeType": "InlineAssembly", "operations": "{\n r := mload(add(signature_rsv, 32))\n s := mload(add(signature_rsv, 64))\n v := and(mload(add(signature_rsv, 65)), 255)\n}", "src": "3319:171:7" }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "id": 4096, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 4094, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4087, "src": "3503:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "nodeType": "BinaryOperation", "operator": "<", "rightExpression": { "argumentTypes": null, "hexValue": "3237", "id": 4095, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "3507:2:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_27_by_1", "typeString": "int_const 27" }, "value": "27" }, "src": "3503:6:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 4102, "nodeType": "IfStatement", "src": "3499:44:7", "trueBody": { "id": 4101, "nodeType": "Block", "src": "3511:32:7", "statements": [ { "expression": { "argumentTypes": null, "id": 4099, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 4097, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4087, "src": "3525:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "nodeType": "Assignment", "operator": "+=", "rightHandSide": { "argumentTypes": null, "hexValue": "3237", "id": 4098, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "3530:2:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_27_by_1", "typeString": "int_const 27" }, "value": "27" }, "src": "3525:7:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "id": 4100, "nodeType": "ExpressionStatement", "src": "3525:7:7" } ] } }, { "expression": { "argumentTypes": null, "components": [ { "argumentTypes": null, "id": 4103, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4087, "src": "3560:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 4104, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4089, "src": "3563:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4105, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4091, "src": "3566:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "id": 4106, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "3559:9:7", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "tuple(uint8,bytes32,bytes32)" } }, "functionReturnParameters": 4092, "id": 4107, "nodeType": "Return", "src": "3552:16:7" } ] }, "documentation": null, "id": 4109, "implemented": true, "kind": "function", "modifiers": [], "name": "splitSignature", "nodeType": "FunctionDefinition", "parameters": { "id": 4085, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4084, "name": "signature_rsv", "nodeType": "VariableDeclaration", "scope": 4109, "src": "3227:26:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 4083, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "3227:5:7", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "3226:28:7" }, "returnParameters": { "id": 4092, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4087, "name": "v", "nodeType": "VariableDeclaration", "scope": 4109, "src": "3277:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 4086, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "3277:5:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4089, "name": "r", "nodeType": "VariableDeclaration", "scope": 4109, "src": "3286:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4088, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "3286:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4091, "name": "s", "nodeType": "VariableDeclaration", "scope": 4109, "src": "3297:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4090, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "3297:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "3276:31:7" }, "scope": 4293, "src": "3202:373:7", "stateMutability": "pure", "superFunction": null, "visibility": "private" }, { "body": { "id": 4174, "nodeType": "Block", "src": "3788:568:7", "statements": [ { "assignments": [ 4129, 4131, 4133 ], "declarations": [ { "constant": false, "id": 4129, "name": "v", "nodeType": "VariableDeclaration", "scope": 4174, "src": "3800:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 4128, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "3800:5:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4131, "name": "r", "nodeType": "VariableDeclaration", "scope": 4174, "src": "3809:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4130, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "3809:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4133, "name": "s", "nodeType": "VariableDeclaration", "scope": 4174, "src": "3820:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4132, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "3820:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4137, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4135, "name": "sig_rsv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4123, "src": "3848:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4134, "name": "splitSignature", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4109, "src": "3833:14:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (uint8,bytes32,bytes32)" } }, "id": 4136, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3833:23:7", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "tuple(uint8,bytes32,bytes32)" } }, "nodeType": "VariableDeclarationStatement", "src": "3799:57:7" }, { "assignments": [ 4139 ], "declarations": [ { "constant": false, "id": 4139, "name": "mail", "nodeType": "VariableDeclaration", "scope": 4174, "src": "3867:16:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail" }, "typeName": { "contractScope": null, "id": 4138, "name": "Mail", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3929, "src": "3867:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_storage_ptr", "typeString": "struct XBRTest.Mail" } }, "value": null, "visibility": "internal" } ], "id": 4151, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4142, "name": "from_name", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4113, "src": "3942:9:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, { "argumentTypes": null, "id": 4143, "name": "from_wallet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4115, "src": "3977:11:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 4141, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "3911:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4144, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "3911:92:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4146, "name": "to_name", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4117, "src": "4052:7:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, { "argumentTypes": null, "id": 4147, "name": "to_wallet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4119, "src": "4085:9:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 4145, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "4021:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4148, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "4021:88:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "id": 4149, "name": "contents", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4121, "src": "4133:8:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } ], "id": 4140, "name": "Mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3929, "src": "3886:4:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Mail_$3929_storage_ptr_$", "typeString": "type(struct XBRTest.Mail storage pointer)" } }, "id": 4150, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "from", "to", "contents" ], "nodeType": "FunctionCall", "src": "3886:266:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory", "typeString": "struct XBRTest.Mail memory" } }, "nodeType": "VariableDeclarationStatement", "src": "3867:285:7" }, { "assignments": [ 4153 ], "declarations": [ { "constant": false, "id": 4153, "name": "digest", "nodeType": "VariableDeclaration", "scope": 4174, "src": "4163:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4152, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "4163:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4164, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "1901", "id": 4157, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4220:10:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, "value": "\u0019\u0001" }, { "argumentTypes": null, "id": 4158, "name": "DOMAIN_SEPARATOR", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3946, "src": "4244:16:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4160, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4139, "src": "4279:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } ], "id": 4159, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4044, "src": "4274:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Mail_$3929_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Mail memory) pure returns (bytes32)" } }, "id": 4161, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4274:10:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 4155, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "4190:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 4156, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "4190:16:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 4162, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4190:104:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4154, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "4180:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4163, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4180:115:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "4163:132:7" }, { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 4172, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4166, "name": "digest", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4153, "src": "4323:6:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4167, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4129, "src": "4331:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 4168, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4131, "src": "4334:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4169, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4133, "src": "4337:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_uint8", "typeString": "uint8" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 4165, "name": "ecrecover", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6340, "src": "4313:9:7", "typeDescriptions": { "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" } }, "id": 4170, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4313:26:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "id": 4171, "name": "signer", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4111, "src": "4343:6:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "4313:36:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 4127, "id": 4173, "nodeType": "Return", "src": "4306:43:7" } ] }, "documentation": null, "id": 4175, "implemented": true, "kind": "function", "modifiers": [], "name": "test_verify1", "nodeType": "FunctionDefinition", "parameters": { "id": 4124, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4111, "name": "signer", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3603:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4110, "name": "address", "nodeType": "ElementaryTypeName", "src": "3603:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4113, "name": "from_name", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3619:23:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4112, "name": "string", "nodeType": "ElementaryTypeName", "src": "3619:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4115, "name": "from_wallet", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3644:19:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4114, "name": "address", "nodeType": "ElementaryTypeName", "src": "3644:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4117, "name": "to_name", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3665:21:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4116, "name": "string", "nodeType": "ElementaryTypeName", "src": "3665:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4119, "name": "to_wallet", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3696:17:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4118, "name": "address", "nodeType": "ElementaryTypeName", "src": "3696:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4121, "name": "contents", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3715:22:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4120, "name": "string", "nodeType": "ElementaryTypeName", "src": "3715:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4123, "name": "sig_rsv", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3739:20:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 4122, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "3739:5:7", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "3602:158:7" }, "returnParameters": { "id": 4127, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4126, "name": "", "nodeType": "VariableDeclaration", "scope": 4175, "src": "3782:4:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 4125, "name": "bool", "nodeType": "ElementaryTypeName", "src": "3782:4:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "3781:6:7" }, "scope": 4293, "src": "3581:775:7", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { "id": 4234, "nodeType": "Block", "src": "4578:500:7", "statements": [ { "assignments": [ 4199 ], "declarations": [ { "constant": false, "id": 4199, "name": "mail", "nodeType": "VariableDeclaration", "scope": 4234, "src": "4589:16:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail" }, "typeName": { "contractScope": null, "id": 4198, "name": "Mail", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3929, "src": "4589:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_storage_ptr", "typeString": "struct XBRTest.Mail" } }, "value": null, "visibility": "internal" } ], "id": 4211, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4202, "name": "from_name", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4179, "src": "4664:9:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, { "argumentTypes": null, "id": 4203, "name": "from_wallet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4181, "src": "4699:11:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 4201, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "4633:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4204, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "4633:92:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4206, "name": "to_name", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4183, "src": "4774:7:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, { "argumentTypes": null, "id": 4207, "name": "to_wallet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4185, "src": "4807:9:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 4205, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "4743:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4208, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "4743:88:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "id": 4209, "name": "contents", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4187, "src": "4855:8:7", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } ], "id": 4200, "name": "Mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3929, "src": "4608:4:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Mail_$3929_storage_ptr_$", "typeString": "type(struct XBRTest.Mail storage pointer)" } }, "id": 4210, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "from", "to", "contents" ], "nodeType": "FunctionCall", "src": "4608:266:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory", "typeString": "struct XBRTest.Mail memory" } }, "nodeType": "VariableDeclarationStatement", "src": "4589:285:7" }, { "assignments": [ 4213 ], "declarations": [ { "constant": false, "id": 4213, "name": "digest", "nodeType": "VariableDeclaration", "scope": 4234, "src": "4885:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4212, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "4885:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4224, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "1901", "id": 4217, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4942:10:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, "value": "\u0019\u0001" }, { "argumentTypes": null, "id": 4218, "name": "DOMAIN_SEPARATOR", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3946, "src": "4966:16:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4220, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4199, "src": "5001:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } ], "id": 4219, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4044, "src": "4996:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Mail_$3929_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Mail memory) pure returns (bytes32)" } }, "id": 4221, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4996:10:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", "typeString": "literal_string \"\u0019\u0001\"" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 4215, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6335, "src": "4912:3:7", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 4216, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "4912:16:7", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 4222, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4912:104:7", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 4214, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6342, "src": "4902:9:7", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 4223, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4902:115:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "4885:132:7" }, { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 4232, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4226, "name": "digest", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4213, "src": "5045:6:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4227, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4189, "src": "5053:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 4228, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4191, "src": "5056:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4229, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4193, "src": "5059:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_uint8", "typeString": "uint8" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 4225, "name": "ecrecover", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6340, "src": "5035:9:7", "typeDescriptions": { "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" } }, "id": 4230, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5035:26:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "id": 4231, "name": "signer", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4177, "src": "5065:6:7", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "5035:36:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 4197, "id": 4233, "nodeType": "Return", "src": "5028:43:7" } ] }, "documentation": null, "id": 4235, "implemented": true, "kind": "function", "modifiers": [], "name": "test_verify2", "nodeType": "FunctionDefinition", "parameters": { "id": 4194, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4177, "name": "signer", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4384:14:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4176, "name": "address", "nodeType": "ElementaryTypeName", "src": "4384:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4179, "name": "from_name", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4400:23:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4178, "name": "string", "nodeType": "ElementaryTypeName", "src": "4400:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4181, "name": "from_wallet", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4425:19:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4180, "name": "address", "nodeType": "ElementaryTypeName", "src": "4425:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4183, "name": "to_name", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4446:21:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4182, "name": "string", "nodeType": "ElementaryTypeName", "src": "4446:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4185, "name": "to_wallet", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4477:17:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 4184, "name": "address", "nodeType": "ElementaryTypeName", "src": "4477:7:7", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4187, "name": "contents", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4496:22:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 4186, "name": "string", "nodeType": "ElementaryTypeName", "src": "4496:6:7", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4189, "name": "v", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4520:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 4188, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "4520:5:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4191, "name": "r", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4529:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4190, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "4529:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 4193, "name": "s", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4540:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4192, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "4540:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "4383:167:7" }, "returnParameters": { "id": 4197, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4196, "name": "", "nodeType": "VariableDeclaration", "scope": 4235, "src": "4572:4:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 4195, "name": "bool", "nodeType": "ElementaryTypeName", "src": "4572:4:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "4571:6:7" }, "scope": 4293, "src": "4362:716:7", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { "id": 4291, "nodeType": "Block", "src": "5127:860:7", "statements": [ { "assignments": [ 4241 ], "declarations": [ { "constant": false, "id": 4241, "name": "mail", "nodeType": "VariableDeclaration", "scope": 4291, "src": "5171:16:7", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail" }, "typeName": { "contractScope": null, "id": 4240, "name": "Mail", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3929, "src": "5171:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_storage_ptr", "typeString": "struct XBRTest.Mail" } }, "value": null, "visibility": "internal" } ], "id": 4253, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "436f77", "id": 4244, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5246:5:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_8c1d2bd5348394761719da11ec67eedae9502d137e8940fee8ecd6f641ee1648", "typeString": "literal_string \"Cow\"" }, "value": "Cow" }, { "argumentTypes": null, "hexValue": "307843443261336439463933384531334344393437456330354162433746453733344466384444383236", "id": 4245, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5277:42:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" }, "value": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_8c1d2bd5348394761719da11ec67eedae9502d137e8940fee8ecd6f641ee1648", "typeString": "literal_string \"Cow\"" }, { "typeIdentifier": "t_address_payable", "typeString": "address payable" } ], "id": 4243, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "5215:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4246, "isConstant": false, "isLValue": false, "isPure": true, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "5215:119:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "426f62", "id": 4248, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5383:5:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_28cac318a86c8a0a6a9156c2dba2c8c2363677ba0514ef616592d81557e679b6", "typeString": "literal_string \"Bob\"" }, "value": "Bob" }, { "argumentTypes": null, "hexValue": "307862426242424242626242424262626242626242626262624242624262626262426242626242426242", "id": 4249, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5414:42:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" }, "value": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_28cac318a86c8a0a6a9156c2dba2c8c2363677ba0514ef616592d81557e679b6", "typeString": "literal_string \"Bob\"" }, { "typeIdentifier": "t_address_payable", "typeString": "address payable" } ], "id": 4247, "name": "Person", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3922, "src": "5352:6:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Person_$3922_storage_ptr_$", "typeString": "type(struct XBRTest.Person storage pointer)" } }, "id": 4250, "isConstant": false, "isLValue": false, "isPure": true, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "name", "wallet" ], "nodeType": "FunctionCall", "src": "5352:119:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" } }, { "argumentTypes": null, "hexValue": "48656c6c6f2c20426f6221", "id": 4251, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5495:13:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_b5aadf3154a261abdd9086fc627b61efca26ae5702701d05cd2305f7c52a2fc8", "typeString": "literal_string \"Hello, Bob!\"" }, "value": "Hello, Bob!" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_struct$_Person_$3922_memory", "typeString": "struct XBRTest.Person memory" }, { "typeIdentifier": "t_stringliteral_b5aadf3154a261abdd9086fc627b61efca26ae5702701d05cd2305f7c52a2fc8", "typeString": "literal_string \"Hello, Bob!\"" } ], "id": 4242, "name": "Mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3929, "src": "5190:4:7", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Mail_$3929_storage_ptr_$", "typeString": "type(struct XBRTest.Mail storage pointer)" } }, "id": 4252, "isConstant": false, "isLValue": false, "isPure": true, "kind": "structConstructorCall", "lValueRequested": false, "names": [ "from", "to", "contents" ], "nodeType": "FunctionCall", "src": "5190:329:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory", "typeString": "struct XBRTest.Mail memory" } }, "nodeType": "VariableDeclarationStatement", "src": "5171:348:7" }, { "assignments": [ 4255 ], "declarations": [ { "constant": false, "id": 4255, "name": "v", "nodeType": "VariableDeclaration", "scope": 4291, "src": "5529:7:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 4254, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "5529:5:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" } ], "id": 4257, "initialValue": { "argumentTypes": null, "hexValue": "3238", "id": 4256, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5539:2:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_28_by_1", "typeString": "int_const 28" }, "value": "28" }, "nodeType": "VariableDeclarationStatement", "src": "5529:12:7" }, { "assignments": [ 4259 ], "declarations": [ { "constant": false, "id": 4259, "name": "r", "nodeType": "VariableDeclaration", "scope": 4291, "src": "5551:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4258, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "5551:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4261, "initialValue": { "argumentTypes": null, "hexValue": "307834333535633437643633393234653861373265353039623635303239303532656236633239396435336130346531363763353737356664343636373531633964", "id": 4260, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5563:66:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_30456498978348419035113697096786286190221642508076327013477434142925027351709_by_1", "typeString": "int_const 3045...(69 digits omitted)...1709" }, "value": "0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d" }, "nodeType": "VariableDeclarationStatement", "src": "5551:78:7" }, { "assignments": [ 4263 ], "declarations": [ { "constant": false, "id": 4263, "name": "s", "nodeType": "VariableDeclaration", "scope": 4291, "src": "5639:9:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 4262, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "5639:7:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 4265, "initialValue": { "argumentTypes": null, "hexValue": "307830373239393933366433303463313533663634343364666130356634306666303037643732393131623666373233303766393936323331363035623931353632", "id": 4264, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5651:66:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_3239688114989807171223523113163838721254638492728567579547907301252041086306_by_1", "typeString": "int_const 3239...(68 digits omitted)...6306" }, "value": "0x07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b91562" }, "nodeType": "VariableDeclarationStatement", "src": "5639:78:7" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "id": 4269, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 4267, "name": "DOMAIN_SEPARATOR", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3946, "src": "5735:16:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "307866326365653337356661343262343231343338303430323566633434396465616664353063633033316361323537653062313934613635306139313230393066", "id": 4268, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5755:66:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_109825249729584807872825749361878700304363337622364782618362889211463320340751_by_1", "typeString": "int_const 1098...(70 digits omitted)...0751" }, "value": "0xf2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f" }, "src": "5735:86:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 4266, "name": "assert", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6337, "src": "5728:6:7", "typeDescriptions": { "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 4270, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5728:94:7", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 4271, "nodeType": "ExpressionStatement", "src": "5728:94:7" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "id": 4277, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4274, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4241, "src": "5844:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } ], "id": 4273, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [ 3992, 4015, 4044 ], "referencedDeclaration": 4044, "src": "5839:4:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Mail_$3929_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (struct XBRTest.Mail memory) pure returns (bytes32)" } }, "id": 4275, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5839:10:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "307863353263306565356438343236343437313830363239306133663263346365636663353439303632366266393132643031663234306437613237346233373165", "id": 4276, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5853:66:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_89183475262805136231107931379173003391419088052721114540770871634179195090718_by_1", "typeString": "int_const 8918...(69 digits omitted)...0718" }, "value": "0xc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e" }, "src": "5839:80:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 4272, "name": "assert", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6337, "src": "5832:6:7", "typeDescriptions": { "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 4278, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5832:88:7", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 4279, "nodeType": "ExpressionStatement", "src": "5832:88:7" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 4282, "name": "mail", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4241, "src": "5944:4:7", "typeDescriptions": { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" } }, { "argumentTypes": null, "id": 4283, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4255, "src": "5950:1:7", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 4284, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4259, "src": "5953:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 4285, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4263, "src": "5956:1:7", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Mail_$3929_memory_ptr", "typeString": "struct XBRTest.Mail memory" }, { "typeIdentifier": "t_uint8", "typeString": "uint8" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 4281, "name": "verify", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4082, "src": "5937:6:7", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_struct$_Mail_$3929_memory_ptr_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$", "typeString": "function (struct XBRTest.Mail memory,uint8,bytes32,bytes32) view returns (bool)" } }, "id": 4286, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5937:21:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 4280, "name": "assert", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6337, "src": "5930:6:7", "typeDescriptions": { "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 4287, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5930:29:7", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 4288, "nodeType": "ExpressionStatement", "src": "5930:29:7" }, { "expression": { "argumentTypes": null, "hexValue": "74727565", "id": 4289, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "5976:4:7", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, "functionReturnParameters": 4239, "id": 4290, "nodeType": "Return", "src": "5969:11:7" } ] }, "documentation": null, "id": 4292, "implemented": true, "kind": "function", "modifiers": [], "name": "test", "nodeType": "FunctionDefinition", "parameters": { "id": 4236, "nodeType": "ParameterList", "parameters": [], "src": "5097:2:7" }, "returnParameters": { "id": 4239, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4238, "name": "", "nodeType": "VariableDeclaration", "scope": 4292, "src": "5121:4:7", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 4237, "name": "bool", "nodeType": "ElementaryTypeName", "src": "5121:4:7", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "5120:6:7" }, "scope": 4293, "src": "5084:903:7", "stateMutability": "view", "superFunction": null, "visibility": "public" } ], "scope": 4294, "src": "837:5152:7" } ], "src": "810:5180:7" }, "compiler": { "name": "solc", "version": "0.5.16+commit.9c3226ce.Emscripten.clang" }, "networks": {}, "schemaVersion": "3.1.0", "updatedAt": "2020-04-13T15:29:57.202Z", "devdoc": { "methods": {} }, "userdoc": { "methods": {} } }