{ "contractName": "MultiSendStruct", "abi": [ { "constant": false, "inputs": [ { "components": [ { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }, { "name": "data", "type": "bytes" } ], "name": "transactions", "type": "tuple[]" } ], "name": "multiSend", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x6060604052341561000f57600080fd5b6104338061001e6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632f6fda4a14610046575b600080fd5b341561005157600080fd5b61006660046100619036906102d1565b610068565b005b60006100726100e8565b600091505b82518210156100c957828281518110151561008e57fe5b9060200190602002015190506100b18160000151826020015183604001516100ce565b15156100bc57600080fd5b8180600101925050610077565b505050565b60008060008351602085018688600019f190509392505050565b606060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001610120610126565b81525090565b602060405190810160405280600081525090565b600061014682356103c0565b905092915050565b600082601f8301126000811461016357610168565b600080fd5b50813561017c6101778261035a565b610324565b9150818183526020840193506020810190508360005b838110156101c257813586016101a88882610233565b845260208401935060208301925050600181019050610192565b5050505092915050565b600082601f830112600081146101e1576101e6565b600080fd5b5081356101fa6101f58261038b565b610324565b915080825260208301602083018583830111600181146102195761021e565b600080fd5b5061022a8382846103ea565b50505092915050565b6000606082840312600181146102485761024d565b600080fd5b506102586060610324565b905060006102688482850161013a565b600083015250602061027c848285016102bd565b602083015250604082013567ffffffffffffffff81116001811461029f576102a4565b600080fd5b506102b1848285016101cc565b60408301525092915050565b60006102c982356103e0565b905092915050565b6000602082840312600181146102e6576102eb565b600080fd5b50600082013567ffffffffffffffff8111600181146103095761030e565b600080fd5b5061031b8482850161014e565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211176001811461034a5761034f565b600080fd5b508060405250919050565b600067ffffffffffffffff82116001811461037457610379565b600080fd5b50602082029050602081019050919050565b600067ffffffffffffffff8211600181146103a5576103aa565b600080fd5b50601f19601f8301169050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b828183376000838301525050505600a265627a7a72305820484c17df168e13c63e6cab3910c3609158f4993315f595b990932cc0a3f27c726c6578706572696d656e74616cf50037", "deployedBytecode": "0x606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632f6fda4a14610046575b600080fd5b341561005157600080fd5b61006660046100619036906102d1565b610068565b005b60006100726100e8565b600091505b82518210156100c957828281518110151561008e57fe5b9060200190602002015190506100b18160000151826020015183604001516100ce565b15156100bc57600080fd5b8180600101925050610077565b505050565b60008060008351602085018688600019f190509392505050565b606060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001610120610126565b81525090565b602060405190810160405280600081525090565b600061014682356103c0565b905092915050565b600082601f8301126000811461016357610168565b600080fd5b50813561017c6101778261035a565b610324565b9150818183526020840193506020810190508360005b838110156101c257813586016101a88882610233565b845260208401935060208301925050600181019050610192565b5050505092915050565b600082601f830112600081146101e1576101e6565b600080fd5b5081356101fa6101f58261038b565b610324565b915080825260208301602083018583830111600181146102195761021e565b600080fd5b5061022a8382846103ea565b50505092915050565b6000606082840312600181146102485761024d565b600080fd5b506102586060610324565b905060006102688482850161013a565b600083015250602061027c848285016102bd565b602083015250604082013567ffffffffffffffff81116001811461029f576102a4565b600080fd5b506102b1848285016101cc565b60408301525092915050565b60006102c982356103e0565b905092915050565b6000602082840312600181146102e6576102eb565b600080fd5b50600082013567ffffffffffffffff8111600181146103095761030e565b600080fd5b5061031b8482850161014e565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211176001811461034a5761034f565b600080fd5b508060405250919050565b600067ffffffffffffffff82116001811461037457610379565b600080fd5b50602082029050602081019050919050565b600067ffffffffffffffff8211600181146103a5576103aa565b600080fd5b50601f19601f8301169050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b828183376000838301525050505600a265627a7a72305820484c17df168e13c63e6cab3910c3609158f4993315f595b990932cc0a3f27c726c6578706572696d656e74616cf50037", "sourceMap": "339:772:10:-;;;;;;;;;;;;;;;;;", "deployedSourceMap": "339:772:10:-;;;;;;;;;;;;;;;;;;;;;;;;581:291;;;;;;;;;;;;;;;;;;;;;;;661:9;720:30;;:::i;:::-;673:1;661:13;;657:209;680:12;:19;676:1;:23;657:209;;;753:12;766:1;753:15;;;;;;;;;;;;;;;;;;720:48;;790:64;802:11;:14;;;818:11;:17;;;837:11;:16;;;790:11;:64::i;:::-;782:73;;;;;;;;701:3;;;;;;;657:209;;;581:291;;;:::o;878:231::-;972:12;1091:1;1088;1081:4;1075:5;1068:4;1062;1058:3;1051:5;1047:2;1043:1;1039:3;1034:4;1023:70;;1009:94;;;;;:::o;339:772::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:12;72:46;;;63:55;;57:66;;;;;175:756;;314:3;307:4;299:6;295:3;291;324:1;319:23;;;;284:58;;319:23;338:1;335;328:6;284:58;;375:6;362:12;397:105;412:89;494:6;412:89;;;397:105;;;388:114;;519:5;544:6;537:5;530:6;574:4;566:6;562:3;552:27;;596:4;591:3;587;580:21;;649:6;682:1;667:258;692:6;689:1;686:2;667:258;;;775:3;762:12;754:6;750:3;799:62;857:3;845:10;799:62;;;794:3;787:6;885:4;880:3;876;869:21;;913:4;908:3;904;897:21;;724:201;714:1;711;707:3;702:14;;667:258;;;671:14;277:654;;;;;;;;940:446;;1034:3;1027:4;1019:6;1015:3;1011;1044:1;1039:23;;;;1004:58;;1039:23;1058:1;1055;1048:6;1004:58;;1095:6;1082:12;1117:60;1132:44;1169:6;1132:44;;;1117:60;;;1108:69;;1197:6;1190:5;1183:6;1233:4;1225:6;1221:3;1266:4;1259:5;1255:3;1305;1296:6;1291:3;1287;1284:2;1315:1;1310:23;;;;1277:56;;1310:23;1329:1;1326;1319:6;1277:56;;1339:41;1373:6;1368:3;1363;1339:41;;;997:389;;;;;;;;1435:722;;1553:4;1541:9;1536:3;1532;1528;1564:1;1559:23;;;;1521:61;;1559:23;1578:1;1575;1568:6;1521:61;;1596:20;1611:4;1596:20;;;1587:29;;1664:1;1695:49;1740:3;1731:6;1720:9;1716:3;1695:49;;;1689:3;1682:5;1678:3;1671:6;1626:130;1807:2;1840:49;1885:3;1876:6;1865:9;1861:3;1840:49;;;1833:4;1826:5;1822:3;1815:6;1766:135;1979:2;1968:9;1964:3;1951:12;2007:18;1999:6;1996:2;2032:1;2027:23;;;;1989:61;;2027:23;2046:1;2043;2036:6;1989:61;;2081:54;2131:3;2122:6;2111:9;2107:3;2081:54;;;2074:4;2067:5;2063:3;2056:6;1911:236;1515:642;;;;;2164:118;;2231:46;2269:6;2256:12;2231:46;;;2222:55;;2216:66;;;;;2289:449;;2447:2;2435:9;2426:7;2422:3;2418;2456:1;2451:23;;;;2411:63;;2451:23;2470:1;2467;2460:6;2411:63;;2533:1;2522:9;2518:3;2505:12;2560:18;2552:6;2549:2;2585:1;2580:23;;;;2542:61;;2580:23;2599:1;2596;2589:6;2542:61;;2619:103;2714:7;2705:6;2694:9;2690:3;2619:103;;;2609:113;;2484:244;2405:333;;;;;2745:267;;2807:2;2801:5;2791:19;;2845:4;2837:6;2833:3;2948:6;2936:10;2933:2;2912:18;2900:10;2897:2;2894;2962:1;2957:23;;;;2887:93;;2957:23;2976:1;2973;2966:6;2887:93;;2996:10;2992:2;2985:6;2785:227;;;;;3019:294;;3207:18;3199:6;3196:2;3232:1;3227:23;;;;3189:61;;3227:23;3246:1;3243;3236:6;3189:61;;3275:4;3267:6;3263:3;3255:25;;3303:4;3297;3293:3;3285:23;;3126:187;;;;3320:265;;3463:18;3455:6;3452:2;3488:1;3483:23;;;;3445:61;;3483:23;3502:1;3499;3492:6;3445:61;;3546:4;3542:3;3535:4;3527:6;3523:3;3519;3511:41;;3575:4;3569;3565:3;3557:23;;3382:203;;;;3592:128;;3672:42;3665:5;3661:3;3650:65;;3644:76;;;;3727:79;;3796:5;3785:16;;3779:27;;;;3814:145;3895:6;3890:3;3885;3872:12;3951:1;3942:6;3937:3;3933;3926:6;3865:94;;;", "source": "pragma solidity ^0.4.19;\npragma experimental ABIEncoderV2;\n\n\n/// @title Multi Send - Allows to batch multiple transactions into one.\n/// @author Nick Dodson - \n/// @author Gonçalo Sá - \n/// @author Stefan George - \n/// @author Richard Meissner - \ncontract MultiSendStruct {\n\n struct Transaction {\n address to;\n uint256 value;\n bytes data;\n }\n\n /// @dev Sends multiple transactions and reverts all if one fails.\n /// @param transactions Encoded transactions.\n function multiSend(Transaction[] transactions)\n public\n {\n for(uint256 i = 0; i < transactions.length; i++) {\n Transaction memory transaction = transactions[i];\n require(executeCall(transaction.to, transaction.value, transaction.data));\n }\n }\n\n function executeCall(address to, uint256 value, bytes data)\n internal\n returns (bool success)\n {\n assembly {\n success := call(not(0), to, value, add(data, 0x20), mload(data), 0, 0)\n }\n }\n}\n", "sourcePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/libraries/MultiSendStruct.sol", "ast": { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/libraries/MultiSendStruct.sol", "exportedSymbols": { "MultiSendStruct": [ 2077 ] }, "id": 2078, "nodeType": "SourceUnit", "nodes": [ { "id": 2018, "literals": [ "solidity", "^", "0.4", ".19" ], "nodeType": "PragmaDirective", "src": "0:24:10" }, { "id": 2019, "literals": [ "experimental", "ABIEncoderV2" ], "nodeType": "PragmaDirective", "src": "25:33:10" }, { "baseContracts": [], "contractDependencies": [], "contractKind": "contract", "documentation": "@title Multi Send - Allows to batch multiple transactions into one.\n @author Nick Dodson - \n @author Gonçalo Sá - \n @author Stefan George - \n @author Richard Meissner - ", "fullyImplemented": true, "id": 2077, "linearizedBaseContracts": [ 2077 ], "name": "MultiSendStruct", "nodeType": "ContractDefinition", "nodes": [ { "canonicalName": "MultiSendStruct.Transaction", "id": 2026, "members": [ { "constant": false, "id": 2021, "name": "to", "nodeType": "VariableDeclaration", "scope": 2026, "src": "398:10:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 2020, "name": "address", "nodeType": "ElementaryTypeName", "src": "398:7:10", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 2023, "name": "value", "nodeType": "VariableDeclaration", "scope": 2026, "src": "416:13:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 2022, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "416:7:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 2025, "name": "data", "nodeType": "VariableDeclaration", "scope": 2026, "src": "437:10:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes storage pointer" }, "typeName": { "id": 2024, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "437:5:10", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes storage pointer" } }, "value": null, "visibility": "internal" } ], "name": "Transaction", "nodeType": "StructDefinition", "scope": 2077, "src": "371:83:10", "visibility": "public" }, { "body": { "id": 2062, "nodeType": "Block", "src": "647:225:10", "statements": [ { "body": { "id": 2060, "nodeType": "Block", "src": "706:160:10", "statements": [ { "assignments": [ 2044 ], "declarations": [ { "constant": false, "id": 2044, "name": "transaction", "nodeType": "VariableDeclaration", "scope": 2063, "src": "720:30:10", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory" }, "typeName": { "contractScope": null, "id": 2043, "name": "Transaction", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 2026, "src": "720:11:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_storage_ptr", "typeString": "struct MultiSendStruct.Transaction storage pointer" } }, "value": null, "visibility": "internal" } ], "id": 2048, "initialValue": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 2045, "name": "transactions", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2029, "src": "753:12:10", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Transaction_$2026_memory_$dyn_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory[] memory" } }, "id": 2047, "indexExpression": { "argumentTypes": null, "id": 2046, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2033, "src": "766:1:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "753:15:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_memory", "typeString": "struct MultiSendStruct.Transaction memory" } }, "nodeType": "VariableDeclarationStatement", "src": "720:48:10" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 2051, "name": "transaction", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2044, "src": "802:11:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory" } }, "id": 2052, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "to", "nodeType": "MemberAccess", "referencedDeclaration": 2021, "src": "802:14:10", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 2053, "name": "transaction", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2044, "src": "818:11:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory" } }, "id": 2054, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "value", "nodeType": "MemberAccess", "referencedDeclaration": 2023, "src": "818:17:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 2055, "name": "transaction", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2044, "src": "837:11:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory" } }, "id": 2056, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "data", "nodeType": "MemberAccess", "referencedDeclaration": 2025, "src": "837:16:10", "typeDescriptions": { "typeIdentifier": "t_bytes_memory", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes_memory", "typeString": "bytes memory" } ], "id": 2050, "name": "executeCall", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2076, "src": "790:11:10", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", "typeString": "function (address,uint256,bytes memory) returns (bool)" } }, "id": 2057, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "790:64:10", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 2049, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2092, "src": "782:7:10", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 2058, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "782:73:10", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 2059, "nodeType": "ExpressionStatement", "src": "782:73:10" } ] }, "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 2039, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 2036, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2033, "src": "676:1:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "<", "rightExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 2037, "name": "transactions", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2029, "src": "680:12:10", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Transaction_$2026_memory_$dyn_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory[] memory" } }, "id": 2038, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "680:19:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "676:23:10", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 2061, "initializationExpression": { "assignments": [ 2033 ], "declarations": [ { "constant": false, "id": 2033, "name": "i", "nodeType": "VariableDeclaration", "scope": 2063, "src": "661:9:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 2032, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "661:7:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 2035, "initialValue": { "argumentTypes": null, "hexValue": "30", "id": 2034, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "673:1:10", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "nodeType": "VariableDeclarationStatement", "src": "661:13:10" }, "loopExpression": { "expression": { "argumentTypes": null, "id": 2041, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "++", "prefix": false, "src": "701:3:10", "subExpression": { "argumentTypes": null, "id": 2040, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2033, "src": "701:1:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 2042, "nodeType": "ExpressionStatement", "src": "701:3:10" }, "nodeType": "ForStatement", "src": "657:209:10" } ] }, "id": 2063, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "multiSend", "nodeType": "FunctionDefinition", "parameters": { "id": 2030, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 2029, "name": "transactions", "nodeType": "VariableDeclaration", "scope": 2063, "src": "600:26:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Transaction_$2026_memory_$dyn_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory[] memory" }, "typeName": { "baseType": { "contractScope": null, "id": 2027, "name": "Transaction", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 2026, "src": "600:11:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_storage_ptr", "typeString": "struct MultiSendStruct.Transaction storage pointer" } }, "id": 2028, "length": null, "nodeType": "ArrayTypeName", "src": "600:13:10", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Transaction_$2026_storage_$dyn_storage_ptr", "typeString": "struct MultiSendStruct.Transaction storage ref[] storage pointer" } }, "value": null, "visibility": "internal" } ], "src": "599:28:10" }, "payable": false, "returnParameters": { "id": 2031, "nodeType": "ParameterList", "parameters": [], "src": "647:0:10" }, "scope": 2077, "src": "581:291:10", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 2075, "nodeType": "Block", "src": "990:119:10", "statements": [ { "externalReferences": [ { "data": { "declaration": 2069, "isOffset": false, "isSlot": false, "src": "1062:4:10", "valueSize": 1 } }, { "data": { "declaration": 2069, "isOffset": false, "isSlot": false, "src": "1081:4:10", "valueSize": 1 } }, { "success": { "declaration": 2072, "isOffset": false, "isSlot": false, "src": "1023:7:10", "valueSize": 1 } }, { "to": { "declaration": 2065, "isOffset": false, "isSlot": false, "src": "1047:2:10", "valueSize": 1 } }, { "value": { "declaration": 2067, "isOffset": false, "isSlot": false, "src": "1051:5:10", "valueSize": 1 } } ], "id": 2074, "nodeType": "InlineAssembly", "operations": "{\n success := call(not(0), to, value, add(data, 0x20), mload(data), 0, 0)\n}", "src": "1000:109:10" } ] }, "id": 2076, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "executeCall", "nodeType": "FunctionDefinition", "parameters": { "id": 2070, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 2065, "name": "to", "nodeType": "VariableDeclaration", "scope": 2076, "src": "899:10:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 2064, "name": "address", "nodeType": "ElementaryTypeName", "src": "899:7:10", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 2067, "name": "value", "nodeType": "VariableDeclaration", "scope": 2076, "src": "911:13:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 2066, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "911:7:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 2069, "name": "data", "nodeType": "VariableDeclaration", "scope": 2076, "src": "926:10:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, "typeName": { "id": 2068, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "926:5:10", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes storage pointer" } }, "value": null, "visibility": "internal" } ], "src": "898:39:10" }, "payable": false, "returnParameters": { "id": 2073, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 2072, "name": "success", "nodeType": "VariableDeclaration", "scope": 2076, "src": "972:12:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 2071, "name": "bool", "nodeType": "ElementaryTypeName", "src": "972:4:10", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "971:14:10" }, "scope": 2077, "src": "878:231:10", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" } ], "scope": 2078, "src": "339:772:10" } ], "src": "0:1112:10" }, "legacyAST": { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/libraries/MultiSendStruct.sol", "exportedSymbols": { "MultiSendStruct": [ 2077 ] }, "id": 2078, "nodeType": "SourceUnit", "nodes": [ { "id": 2018, "literals": [ "solidity", "^", "0.4", ".19" ], "nodeType": "PragmaDirective", "src": "0:24:10" }, { "id": 2019, "literals": [ "experimental", "ABIEncoderV2" ], "nodeType": "PragmaDirective", "src": "25:33:10" }, { "baseContracts": [], "contractDependencies": [], "contractKind": "contract", "documentation": "@title Multi Send - Allows to batch multiple transactions into one.\n @author Nick Dodson - \n @author Gonçalo Sá - \n @author Stefan George - \n @author Richard Meissner - ", "fullyImplemented": true, "id": 2077, "linearizedBaseContracts": [ 2077 ], "name": "MultiSendStruct", "nodeType": "ContractDefinition", "nodes": [ { "canonicalName": "MultiSendStruct.Transaction", "id": 2026, "members": [ { "constant": false, "id": 2021, "name": "to", "nodeType": "VariableDeclaration", "scope": 2026, "src": "398:10:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 2020, "name": "address", "nodeType": "ElementaryTypeName", "src": "398:7:10", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 2023, "name": "value", "nodeType": "VariableDeclaration", "scope": 2026, "src": "416:13:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 2022, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "416:7:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 2025, "name": "data", "nodeType": "VariableDeclaration", "scope": 2026, "src": "437:10:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes storage pointer" }, "typeName": { "id": 2024, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "437:5:10", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes storage pointer" } }, "value": null, "visibility": "internal" } ], "name": "Transaction", "nodeType": "StructDefinition", "scope": 2077, "src": "371:83:10", "visibility": "public" }, { "body": { "id": 2062, "nodeType": "Block", "src": "647:225:10", "statements": [ { "body": { "id": 2060, "nodeType": "Block", "src": "706:160:10", "statements": [ { "assignments": [ 2044 ], "declarations": [ { "constant": false, "id": 2044, "name": "transaction", "nodeType": "VariableDeclaration", "scope": 2063, "src": "720:30:10", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory" }, "typeName": { "contractScope": null, "id": 2043, "name": "Transaction", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 2026, "src": "720:11:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_storage_ptr", "typeString": "struct MultiSendStruct.Transaction storage pointer" } }, "value": null, "visibility": "internal" } ], "id": 2048, "initialValue": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 2045, "name": "transactions", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2029, "src": "753:12:10", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Transaction_$2026_memory_$dyn_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory[] memory" } }, "id": 2047, "indexExpression": { "argumentTypes": null, "id": 2046, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2033, "src": "766:1:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "753:15:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_memory", "typeString": "struct MultiSendStruct.Transaction memory" } }, "nodeType": "VariableDeclarationStatement", "src": "720:48:10" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 2051, "name": "transaction", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2044, "src": "802:11:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory" } }, "id": 2052, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "to", "nodeType": "MemberAccess", "referencedDeclaration": 2021, "src": "802:14:10", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 2053, "name": "transaction", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2044, "src": "818:11:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory" } }, "id": 2054, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "value", "nodeType": "MemberAccess", "referencedDeclaration": 2023, "src": "818:17:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 2055, "name": "transaction", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2044, "src": "837:11:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory" } }, "id": 2056, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "data", "nodeType": "MemberAccess", "referencedDeclaration": 2025, "src": "837:16:10", "typeDescriptions": { "typeIdentifier": "t_bytes_memory", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes_memory", "typeString": "bytes memory" } ], "id": 2050, "name": "executeCall", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2076, "src": "790:11:10", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", "typeString": "function (address,uint256,bytes memory) returns (bool)" } }, "id": 2057, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "790:64:10", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 2049, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2092, "src": "782:7:10", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 2058, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "782:73:10", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 2059, "nodeType": "ExpressionStatement", "src": "782:73:10" } ] }, "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 2039, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 2036, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2033, "src": "676:1:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "<", "rightExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 2037, "name": "transactions", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2029, "src": "680:12:10", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Transaction_$2026_memory_$dyn_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory[] memory" } }, "id": 2038, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "680:19:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "676:23:10", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 2061, "initializationExpression": { "assignments": [ 2033 ], "declarations": [ { "constant": false, "id": 2033, "name": "i", "nodeType": "VariableDeclaration", "scope": 2063, "src": "661:9:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 2032, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "661:7:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 2035, "initialValue": { "argumentTypes": null, "hexValue": "30", "id": 2034, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "673:1:10", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "nodeType": "VariableDeclarationStatement", "src": "661:13:10" }, "loopExpression": { "expression": { "argumentTypes": null, "id": 2041, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "++", "prefix": false, "src": "701:3:10", "subExpression": { "argumentTypes": null, "id": 2040, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2033, "src": "701:1:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 2042, "nodeType": "ExpressionStatement", "src": "701:3:10" }, "nodeType": "ForStatement", "src": "657:209:10" } ] }, "id": 2063, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "multiSend", "nodeType": "FunctionDefinition", "parameters": { "id": 2030, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 2029, "name": "transactions", "nodeType": "VariableDeclaration", "scope": 2063, "src": "600:26:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Transaction_$2026_memory_$dyn_memory_ptr", "typeString": "struct MultiSendStruct.Transaction memory[] memory" }, "typeName": { "baseType": { "contractScope": null, "id": 2027, "name": "Transaction", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 2026, "src": "600:11:10", "typeDescriptions": { "typeIdentifier": "t_struct$_Transaction_$2026_storage_ptr", "typeString": "struct MultiSendStruct.Transaction storage pointer" } }, "id": 2028, "length": null, "nodeType": "ArrayTypeName", "src": "600:13:10", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Transaction_$2026_storage_$dyn_storage_ptr", "typeString": "struct MultiSendStruct.Transaction storage ref[] storage pointer" } }, "value": null, "visibility": "internal" } ], "src": "599:28:10" }, "payable": false, "returnParameters": { "id": 2031, "nodeType": "ParameterList", "parameters": [], "src": "647:0:10" }, "scope": 2077, "src": "581:291:10", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 2075, "nodeType": "Block", "src": "990:119:10", "statements": [ { "externalReferences": [ { "data": { "declaration": 2069, "isOffset": false, "isSlot": false, "src": "1062:4:10", "valueSize": 1 } }, { "data": { "declaration": 2069, "isOffset": false, "isSlot": false, "src": "1081:4:10", "valueSize": 1 } }, { "success": { "declaration": 2072, "isOffset": false, "isSlot": false, "src": "1023:7:10", "valueSize": 1 } }, { "to": { "declaration": 2065, "isOffset": false, "isSlot": false, "src": "1047:2:10", "valueSize": 1 } }, { "value": { "declaration": 2067, "isOffset": false, "isSlot": false, "src": "1051:5:10", "valueSize": 1 } } ], "id": 2074, "nodeType": "InlineAssembly", "operations": "{\n success := call(not(0), to, value, add(data, 0x20), mload(data), 0, 0)\n}", "src": "1000:109:10" } ] }, "id": 2076, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "executeCall", "nodeType": "FunctionDefinition", "parameters": { "id": 2070, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 2065, "name": "to", "nodeType": "VariableDeclaration", "scope": 2076, "src": "899:10:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 2064, "name": "address", "nodeType": "ElementaryTypeName", "src": "899:7:10", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 2067, "name": "value", "nodeType": "VariableDeclaration", "scope": 2076, "src": "911:13:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 2066, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "911:7:10", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 2069, "name": "data", "nodeType": "VariableDeclaration", "scope": 2076, "src": "926:10:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, "typeName": { "id": 2068, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "926:5:10", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes storage pointer" } }, "value": null, "visibility": "internal" } ], "src": "898:39:10" }, "payable": false, "returnParameters": { "id": 2073, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 2072, "name": "success", "nodeType": "VariableDeclaration", "scope": 2076, "src": "972:12:10", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 2071, "name": "bool", "nodeType": "ElementaryTypeName", "src": "972:4:10", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "971:14:10" }, "scope": 2077, "src": "878:231:10", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" } ], "scope": 2078, "src": "339:772:10" } ], "src": "0:1112:10" }, "compiler": { "name": "solc", "version": "0.4.19+commit.c4cbbb05.Emscripten.clang" }, "networks": {}, "schemaVersion": "2.0.0", "updatedAt": "2018-05-04T10:42:18.395Z" }