{ "contractName": "Proxy", "abi": [ { "inputs": [ { "name": "_masterCopy", "type": "address" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "payable": true, "stateMutability": "payable", "type": "fallback" } ], "bytecode": "0x6060604052341561000f57600080fd5b6040516020806101108339810160405280805190602001909190505060008173ffffffffffffffffffffffffffffffffffffffff161415151561005157600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506070806100a06000396000f300606060405273ffffffffffffffffffffffffffffffffffffffff60005416366000803760008036600084600019f43d6000803e8060008114603f573d6000f35b3d6000fd00a165627a7a72305820daad8330a1c74b6650ef400638bc3fcb59dcd0b0341bff33bbe640bd2ffdaff60029", "deployedBytecode": "0x606060405273ffffffffffffffffffffffffffffffffffffffff60005416366000803760008036600084600019f43d6000803e8060008114603f573d6000f35b3d6000fd00a165627a7a72305820daad8330a1c74b6650ef400638bc3fcb59dcd0b0341bff33bbe640bd2ffdaff60029", "sourceMap": "190:887:3:-;;;357:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;445:1;430:11;:16;;;;422:25;;;;;;;;470:11;457:10;;:24;;;;;;;;;;;;;;;;;;357:131;190:887;;;;;;", "deployedSourceMap": "190:887:3:-;;;703:42;699:1;693:5;689:3;778:12;775:1;772;759:12;876:1;873;857:12;854:1;842:10;838:1;834:3;821:12;912:14;909:1;906;891:14;949:7;974:1;969:38;;;;1040:14;1037:1;1030:6;969:38;988:14;985:1;978:6", "source": "pragma solidity 0.4.19;\n\n\n/// @title Proxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.\n/// @author Stefan George - \ncontract Proxy {\n\n address masterCopy;\n\n /// @dev Constructor function sets address of master copy contract.\n /// @param _masterCopy Master copy address.\n function Proxy(address _masterCopy)\n public\n {\n require(_masterCopy != 0);\n masterCopy = _masterCopy;\n }\n\n /// @dev Fallback function forwards all transactions and returns all received return data.\n function ()\n external\n payable\n {\n assembly {\n let masterCopy := and(sload(0), 0xffffffffffffffffffffffffffffffffffffffff)\n calldatacopy(0, 0, calldatasize())\n let success := delegatecall(not(0), masterCopy, 0, calldatasize(), 0, 0)\n returndatacopy(0, 0, returndatasize())\n switch success\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n}\n", "sourcePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/Proxy.sol", "ast": { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/Proxy.sol", "exportedSymbols": { "Proxy": [ 1046 ] }, "id": 1047, "nodeType": "SourceUnit", "nodes": [ { "id": 1022, "literals": [ "solidity", "0.4", ".19" ], "nodeType": "PragmaDirective", "src": "0:23:3" }, { "baseContracts": [], "contractDependencies": [], "contractKind": "contract", "documentation": "@title Proxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.\n @author Stefan George - ", "fullyImplemented": true, "id": 1046, "linearizedBaseContracts": [ 1046 ], "name": "Proxy", "nodeType": "ContractDefinition", "nodes": [ { "constant": false, "id": 1024, "name": "masterCopy", "nodeType": "VariableDeclaration", "scope": 1046, "src": "212:18:3", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 1023, "name": "address", "nodeType": "ElementaryTypeName", "src": "212:7:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "body": { "id": 1039, "nodeType": "Block", "src": "412:76:3", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 1032, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 1030, "name": "_masterCopy", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1026, "src": "430:11:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 1031, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "445:1:3", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "430:16:3", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 1029, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2092, "src": "422:7:3", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 1033, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "422:25:3", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 1034, "nodeType": "ExpressionStatement", "src": "422:25:3" }, { "expression": { "argumentTypes": null, "id": 1037, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 1035, "name": "masterCopy", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1024, "src": "457:10:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "id": 1036, "name": "_masterCopy", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1026, "src": "470:11:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "457:24:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 1038, "nodeType": "ExpressionStatement", "src": "457:24:3" } ] }, "id": 1040, "implemented": true, "isConstructor": true, "isDeclaredConst": false, "modifiers": [], "name": "Proxy", "nodeType": "FunctionDefinition", "parameters": { "id": 1027, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 1026, "name": "_masterCopy", "nodeType": "VariableDeclaration", "scope": 1040, "src": "372:19:3", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 1025, "name": "address", "nodeType": "ElementaryTypeName", "src": "372:7:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "src": "371:21:3" }, "payable": false, "returnParameters": { "id": 1028, "nodeType": "ParameterList", "parameters": [], "src": "412:0:3" }, "scope": 1046, "src": "357:131:3", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 1044, "nodeType": "Block", "src": "638:437:3", "statements": [ { "externalReferences": [], "id": 1043, "nodeType": "InlineAssembly", "operations": "{\n let masterCopy := and(sload(0), 0xffffffffffffffffffffffffffffffffffffffff)\n calldatacopy(0, 0, calldatasize())\n let success := delegatecall(not(0), masterCopy, 0, calldatasize(), 0, 0)\n returndatacopy(0, 0, returndatasize())\n switch success\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n}", "src": "648:427:3" } ] }, "id": 1045, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "", "nodeType": "FunctionDefinition", "parameters": { "id": 1041, "nodeType": "ParameterList", "parameters": [], "src": "598:2:3" }, "payable": true, "returnParameters": { "id": 1042, "nodeType": "ParameterList", "parameters": [], "src": "638:0:3" }, "scope": 1046, "src": "589:486:3", "stateMutability": "payable", "superFunction": null, "visibility": "external" } ], "scope": 1047, "src": "190:887:3" } ], "src": "0:1078:3" }, "legacyAST": { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/Proxy.sol", "exportedSymbols": { "Proxy": [ 1046 ] }, "id": 1047, "nodeType": "SourceUnit", "nodes": [ { "id": 1022, "literals": [ "solidity", "0.4", ".19" ], "nodeType": "PragmaDirective", "src": "0:23:3" }, { "baseContracts": [], "contractDependencies": [], "contractKind": "contract", "documentation": "@title Proxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.\n @author Stefan George - ", "fullyImplemented": true, "id": 1046, "linearizedBaseContracts": [ 1046 ], "name": "Proxy", "nodeType": "ContractDefinition", "nodes": [ { "constant": false, "id": 1024, "name": "masterCopy", "nodeType": "VariableDeclaration", "scope": 1046, "src": "212:18:3", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 1023, "name": "address", "nodeType": "ElementaryTypeName", "src": "212:7:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "body": { "id": 1039, "nodeType": "Block", "src": "412:76:3", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 1032, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 1030, "name": "_masterCopy", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1026, "src": "430:11:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 1031, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "445:1:3", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "430:16:3", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 1029, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2092, "src": "422:7:3", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 1033, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "422:25:3", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 1034, "nodeType": "ExpressionStatement", "src": "422:25:3" }, { "expression": { "argumentTypes": null, "id": 1037, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 1035, "name": "masterCopy", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1024, "src": "457:10:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "id": 1036, "name": "_masterCopy", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1026, "src": "470:11:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "457:24:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 1038, "nodeType": "ExpressionStatement", "src": "457:24:3" } ] }, "id": 1040, "implemented": true, "isConstructor": true, "isDeclaredConst": false, "modifiers": [], "name": "Proxy", "nodeType": "FunctionDefinition", "parameters": { "id": 1027, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 1026, "name": "_masterCopy", "nodeType": "VariableDeclaration", "scope": 1040, "src": "372:19:3", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 1025, "name": "address", "nodeType": "ElementaryTypeName", "src": "372:7:3", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "src": "371:21:3" }, "payable": false, "returnParameters": { "id": 1028, "nodeType": "ParameterList", "parameters": [], "src": "412:0:3" }, "scope": 1046, "src": "357:131:3", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 1044, "nodeType": "Block", "src": "638:437:3", "statements": [ { "externalReferences": [], "id": 1043, "nodeType": "InlineAssembly", "operations": "{\n let masterCopy := and(sload(0), 0xffffffffffffffffffffffffffffffffffffffff)\n calldatacopy(0, 0, calldatasize())\n let success := delegatecall(not(0), masterCopy, 0, calldatasize(), 0, 0)\n returndatacopy(0, 0, returndatasize())\n switch success\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n}", "src": "648:427:3" } ] }, "id": 1045, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "", "nodeType": "FunctionDefinition", "parameters": { "id": 1041, "nodeType": "ParameterList", "parameters": [], "src": "598:2:3" }, "payable": true, "returnParameters": { "id": 1042, "nodeType": "ParameterList", "parameters": [], "src": "638:0:3" }, "scope": 1046, "src": "589:486:3", "stateMutability": "payable", "superFunction": null, "visibility": "external" } ], "scope": 1047, "src": "190:887:3" } ], "src": "0:1078:3" }, "compiler": { "name": "solc", "version": "0.4.19+commit.c4cbbb05.Emscripten.clang" }, "networks": {}, "schemaVersion": "2.0.0", "updatedAt": "2018-05-04T10:42:18.368Z" }