2018-05-04 14:04:04 +00:00
{
"contractName" : "CreateAndAddExtension" ,
"abi" : [
{
"constant" : false ,
"inputs" : [
{
"name" : "extension" ,
"type" : "address"
}
] ,
"name" : "addExtension" ,
"outputs" : [ ] ,
"payable" : false ,
"stateMutability" : "nonpayable" ,
"type" : "function"
} ,
{
"constant" : false ,
"inputs" : [
{
"name" : "proxyFactory" ,
"type" : "address"
} ,
{
"name" : "data" ,
"type" : "bytes"
}
] ,
"name" : "createAndAddExtension" ,
"outputs" : [ ] ,
"payable" : false ,
"stateMutability" : "nonpayable" ,
"type" : "function"
}
] ,
"bytecode" : "0x6060604052341561000f57600080fd5b61023f8061001e6000396000f30060606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063170ff3e11461005157806324aae6941461008a575b600080fd5b341561005c57600080fd5b610088600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610106565b005b341561009557600080fd5b610104600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061010b565b005b600080fd5b600061011783836101cc565b90503073ffffffffffffffffffffffffffffffffffffffff1663170ff3e1826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15156101b357600080fd5b6102c65a03f115156101c457600080fd5b505050505050565b600060405160208184516020860187600019f4600081146101ec576101f1565b600080fd5b5073ffffffffffffffffffffffffffffffffffffffff815116915050929150505600a165627a7a723058208120395f85344344c66227841e7bb657a31240594ca20234664dc785131ecbcd0029" ,
"deployedBytecode" : "0x60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063170ff3e11461005157806324aae6941461008a575b600080fd5b341561005c57600080fd5b610088600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610106565b005b341561009557600080fd5b610104600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061010b565b005b600080fd5b600061011783836101cc565b90503073ffffffffffffffffffffffffffffffffffffffff1663170ff3e1826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15156101b357600080fd5b6102c65a03f115156101c457600080fd5b505050505050565b600060405160208184516020860187600019f4600081146101ec576101f1565b600080fd5b5073ffffffffffffffffffffffffffffffffffffffff815116915050929150505600a165627a7a723058208120395f85344344c66227841e7bb657a31240594ca20234664dc785131ecbcd0029" ,
"sourceMap" : "199:1057:8:-;;;;;;;;;;;;;;;;;" ,
"deployedSourceMap" : "199:1057:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;364:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;638:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;364:87;436:8;;;638:196;732:19;754:35;770:12;784:4;754:15;:35::i;:::-;732:57;;799:4;:17;;;817:9;799:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;638:196;;;:::o;840:414::-;933:19;1011:4;1005:5;1109:4;1101:6;1094:4;1088:5;1081:4;1075;1071:3;1057:12;1053:1;1049:3;1036:12;1132:1;1127:23;;;;1029:121;;1127:23;1146:1;1143;1136:6;1029:121;;1195:42;1186:6;1180:5;1176:3;1163:75;;977:271;;;;;:::o" ,
"source" : "pragma solidity 0.4.19;\nimport \"../Extension.sol\";\n\n\n/// @title Create and Add Extension - Allows to create and add a new extension in one transaction.\n/// @author Stefan George - <stefan@gnosis.pm>\ncontract CreateAndAddExtension {\n\n /// @dev Function required to compile contract. Gnosis Safe function is called instead.\n /// @param extension Not used.\n function addExtension(Extension extension)\n public\n {\n revert();\n }\n\n /// @dev Allows to create and add a new extension in one transaction.\n /// @param proxyFactory Extension factory contract.\n /// @param data Extension constructor payload.\n function createAndAddExtension(address proxyFactory, bytes data)\n public\n {\n Extension extension = createExtension(proxyFactory, data);\n this.addExtension(extension);\n }\n\n function createExtension(address proxyFactory, bytes data)\n internal\n returns (Extension extension)\n {\n assembly {\n let output := mload(0x40)\n switch delegatecall(not(0), proxyFactory, add(data, 0x20), mload(data), output, 0x20)\n case 0 { revert(0, 0) }\n extension := and(mload(output), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n }\n}\n" ,
"sourcePath" : "/Users/apanizo/git/gnosis/safe-contracts/contracts/libraries/CreateAndAddExtension.sol" ,
"ast" : {
"absolutePath" : "/Users/apanizo/git/gnosis/safe-contracts/contracts/libraries/CreateAndAddExtension.sol" ,
"exportedSymbols" : {
"CreateAndAddExtension" : [
2006
]
} ,
"id" : 2007 ,
"nodeType" : "SourceUnit" ,
"nodes" : [
{
"id" : 1963 ,
"literals" : [
"solidity" ,
"0.4" ,
".19"
] ,
"nodeType" : "PragmaDirective" ,
"src" : "0:23:8"
} ,
{
"absolutePath" : "/Users/apanizo/git/gnosis/safe-contracts/contracts/Extension.sol" ,
"file" : "../Extension.sol" ,
"id" : 1964 ,
"nodeType" : "ImportDirective" ,
"scope" : 2007 ,
"sourceUnit" : 19 ,
"src" : "24:26:8" ,
"symbolAliases" : [ ] ,
"unitAlias" : ""
} ,
{
"baseContracts" : [ ] ,
"contractDependencies" : [ ] ,
"contractKind" : "contract" ,
"documentation" : "@title Create and Add Extension - Allows to create and add a new extension in one transaction.\n @author Stefan George - <stefan@gnosis.pm>" ,
"fullyImplemented" : true ,
"id" : 2006 ,
"linearizedBaseContracts" : [
2006
] ,
"name" : "CreateAndAddExtension" ,
"nodeType" : "ContractDefinition" ,
"nodes" : [
{
"body" : {
"id" : 1972 ,
"nodeType" : "Block" ,
"src" : "426:25:8" ,
"statements" : [
{
"expression" : {
"argumentTypes" : null ,
"arguments" : [ ] ,
"expression" : {
"argumentTypes" : [ ] ,
"id" : 1969 ,
"name" : "revert" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 2093 ,
"src" : "436:6:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_function_revert_pure$__$returns$__$" ,
"typeString" : "function () pure"
}
} ,
"id" : 1970 ,
"isConstant" : false ,
"isLValue" : false ,
"isPure" : false ,
"kind" : "functionCall" ,
"lValueRequested" : false ,
"names" : [ ] ,
"nodeType" : "FunctionCall" ,
"src" : "436:8:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_tuple$__$" ,
"typeString" : "tuple()"
}
} ,
"id" : 1971 ,
"nodeType" : "ExpressionStatement" ,
"src" : "436:8:8"
}
]
} ,
"id" : 1973 ,
"implemented" : true ,
"isConstructor" : false ,
"isDeclaredConst" : false ,
"modifiers" : [ ] ,
"name" : "addExtension" ,
"nodeType" : "FunctionDefinition" ,
"parameters" : {
"id" : 1967 ,
"nodeType" : "ParameterList" ,
"parameters" : [
{
"constant" : false ,
"id" : 1966 ,
"name" : "extension" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 1973 ,
"src" : "386:19:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
} ,
"typeName" : {
"contractScope" : null ,
"id" : 1965 ,
"name" : "Extension" ,
"nodeType" : "UserDefinedTypeName" ,
"referencedDeclaration" : 18 ,
"src" : "386:9:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
} ,
"value" : null ,
"visibility" : "internal"
}
] ,
"src" : "385:21:8"
} ,
"payable" : false ,
"returnParameters" : {
"id" : 1968 ,
"nodeType" : "ParameterList" ,
"parameters" : [ ] ,
"src" : "426:0:8"
} ,
"scope" : 2006 ,
"src" : "364:87:8" ,
"stateMutability" : "nonpayable" ,
"superFunction" : null ,
"visibility" : "public"
} ,
{
"body" : {
"id" : 1993 ,
"nodeType" : "Block" ,
"src" : "722:112:8" ,
"statements" : [
{
"assignments" : [
1981
] ,
"declarations" : [
{
"constant" : false ,
"id" : 1981 ,
"name" : "extension" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 1994 ,
"src" : "732:19:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
} ,
"typeName" : {
"contractScope" : null ,
"id" : 1980 ,
"name" : "Extension" ,
"nodeType" : "UserDefinedTypeName" ,
"referencedDeclaration" : 18 ,
"src" : "732:9:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
} ,
"value" : null ,
"visibility" : "internal"
}
] ,
"id" : 1986 ,
"initialValue" : {
"argumentTypes" : null ,
"arguments" : [
{
"argumentTypes" : null ,
"id" : 1983 ,
"name" : "proxyFactory" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 1975 ,
"src" : "770:12:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_address" ,
"typeString" : "address"
}
} ,
{
"argumentTypes" : null ,
"id" : 1984 ,
"name" : "data" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 1977 ,
"src" : "784:4:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_bytes_memory_ptr" ,
"typeString" : "bytes memory"
}
}
] ,
"expression" : {
"argumentTypes" : [
{
"typeIdentifier" : "t_address" ,
"typeString" : "address"
} ,
{
"typeIdentifier" : "t_bytes_memory_ptr" ,
"typeString" : "bytes memory"
}
] ,
"id" : 1982 ,
"name" : "createExtension" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 2005 ,
"src" : "754:15:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_Extension_$18_$" ,
"typeString" : "function (address,bytes memory) returns (contract Extension)"
}
} ,
"id" : 1985 ,
"isConstant" : false ,
"isLValue" : false ,
"isPure" : false ,
"kind" : "functionCall" ,
"lValueRequested" : false ,
"names" : [ ] ,
"nodeType" : "FunctionCall" ,
"src" : "754:35:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
} ,
"nodeType" : "VariableDeclarationStatement" ,
"src" : "732:57:8"
} ,
{
"expression" : {
"argumentTypes" : null ,
"arguments" : [
{
"argumentTypes" : null ,
"id" : 1990 ,
"name" : "extension" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 1981 ,
"src" : "817:9:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
}
] ,
"expression" : {
"argumentTypes" : [
{
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
] ,
"expression" : {
"argumentTypes" : null ,
"id" : 1987 ,
"name" : "this" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 2116 ,
"src" : "799:4:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_CreateAndAddExtension_$2006" ,
"typeString" : "contract CreateAndAddExtension"
}
} ,
"id" : 1989 ,
"isConstant" : false ,
"isLValue" : false ,
"isPure" : false ,
"lValueRequested" : false ,
"memberName" : "addExtension" ,
"nodeType" : "MemberAccess" ,
"referencedDeclaration" : 1973 ,
"src" : "799:17:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_function_external_nonpayable$_t_contract$_Extension_$18_$returns$__$" ,
"typeString" : "function (contract Extension) external"
}
} ,
"id" : 1991 ,
"isConstant" : false ,
"isLValue" : false ,
"isPure" : false ,
"kind" : "functionCall" ,
"lValueRequested" : false ,
"names" : [ ] ,
"nodeType" : "FunctionCall" ,
"src" : "799:28:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_tuple$__$" ,
"typeString" : "tuple()"
}
} ,
"id" : 1992 ,
"nodeType" : "ExpressionStatement" ,
"src" : "799:28:8"
}
]
} ,
"id" : 1994 ,
"implemented" : true ,
"isConstructor" : false ,
"isDeclaredConst" : false ,
"modifiers" : [ ] ,
"name" : "createAndAddExtension" ,
"nodeType" : "FunctionDefinition" ,
"parameters" : {
"id" : 1978 ,
"nodeType" : "ParameterList" ,
"parameters" : [
{
"constant" : false ,
"id" : 1975 ,
"name" : "proxyFactory" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 1994 ,
"src" : "669:20:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_address" ,
"typeString" : "address"
} ,
"typeName" : {
"id" : 1974 ,
"name" : "address" ,
"nodeType" : "ElementaryTypeName" ,
"src" : "669:7:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_address" ,
"typeString" : "address"
}
} ,
"value" : null ,
"visibility" : "internal"
} ,
{
"constant" : false ,
"id" : 1977 ,
"name" : "data" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 1994 ,
"src" : "691:10:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_bytes_memory_ptr" ,
"typeString" : "bytes memory"
} ,
"typeName" : {
"id" : 1976 ,
"name" : "bytes" ,
"nodeType" : "ElementaryTypeName" ,
"src" : "691:5:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_bytes_storage_ptr" ,
"typeString" : "bytes storage pointer"
}
} ,
"value" : null ,
"visibility" : "internal"
}
] ,
"src" : "668:34:8"
} ,
"payable" : false ,
"returnParameters" : {
"id" : 1979 ,
"nodeType" : "ParameterList" ,
"parameters" : [ ] ,
"src" : "722:0:8"
} ,
"scope" : 2006 ,
"src" : "638:196:8" ,
"stateMutability" : "nonpayable" ,
"superFunction" : null ,
"visibility" : "public"
} ,
{
"body" : {
"id" : 2004 ,
"nodeType" : "Block" ,
"src" : "958:296:8" ,
"statements" : [
{
"externalReferences" : [
{
"extension" : {
"declaration" : 2001 ,
"isOffset" : false ,
"isSlot" : false ,
"src" : "1163:9:8" ,
"valueSize" : 1
}
} ,
{
"data" : {
"declaration" : 1998 ,
"isOffset" : false ,
"isSlot" : false ,
"src" : "1075:4:8" ,
"valueSize" : 1
}
} ,
{
"data" : {
"declaration" : 1998 ,
"isOffset" : false ,
"isSlot" : false ,
"src" : "1094:4:8" ,
"valueSize" : 1
}
} ,
{
"proxyFactory" : {
"declaration" : 1996 ,
"isOffset" : false ,
"isSlot" : false ,
"src" : "1057:12:8" ,
"valueSize" : 1
}
}
] ,
"id" : 2003 ,
"nodeType" : "InlineAssembly" ,
"operations" : "{\n let output := mload(0x40)\n switch delegatecall(not(0), proxyFactory, add(data, 0x20), mload(data), output, 0x20)\n case 0 {\n revert(0, 0)\n }\n extension := and(mload(output), 0xffffffffffffffffffffffffffffffffffffffff)\n}" ,
"src" : "968:286:8"
}
]
} ,
"id" : 2005 ,
"implemented" : true ,
"isConstructor" : false ,
"isDeclaredConst" : false ,
"modifiers" : [ ] ,
"name" : "createExtension" ,
"nodeType" : "FunctionDefinition" ,
"parameters" : {
"id" : 1999 ,
"nodeType" : "ParameterList" ,
"parameters" : [
{
"constant" : false ,
"id" : 1996 ,
"name" : "proxyFactory" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 2005 ,
"src" : "865:20:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_address" ,
"typeString" : "address"
} ,
"typeName" : {
"id" : 1995 ,
"name" : "address" ,
"nodeType" : "ElementaryTypeName" ,
"src" : "865:7:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_address" ,
"typeString" : "address"
}
} ,
"value" : null ,
"visibility" : "internal"
} ,
{
"constant" : false ,
"id" : 1998 ,
"name" : "data" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 2005 ,
"src" : "887:10:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_bytes_memory_ptr" ,
"typeString" : "bytes memory"
} ,
"typeName" : {
"id" : 1997 ,
"name" : "bytes" ,
"nodeType" : "ElementaryTypeName" ,
"src" : "887:5:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_bytes_storage_ptr" ,
"typeString" : "bytes storage pointer"
}
} ,
"value" : null ,
"visibility" : "internal"
}
] ,
"src" : "864:34:8"
} ,
"payable" : false ,
"returnParameters" : {
"id" : 2002 ,
"nodeType" : "ParameterList" ,
"parameters" : [
{
"constant" : false ,
"id" : 2001 ,
"name" : "extension" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 2005 ,
"src" : "933:19:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
} ,
"typeName" : {
"contractScope" : null ,
"id" : 2000 ,
"name" : "Extension" ,
"nodeType" : "UserDefinedTypeName" ,
"referencedDeclaration" : 18 ,
"src" : "933:9:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
} ,
"value" : null ,
"visibility" : "internal"
}
] ,
"src" : "932:21:8"
} ,
"scope" : 2006 ,
"src" : "840:414:8" ,
"stateMutability" : "nonpayable" ,
"superFunction" : null ,
"visibility" : "internal"
}
] ,
"scope" : 2007 ,
"src" : "199:1057:8"
}
] ,
"src" : "0:1257:8"
} ,
"legacyAST" : {
"absolutePath" : "/Users/apanizo/git/gnosis/safe-contracts/contracts/libraries/CreateAndAddExtension.sol" ,
"exportedSymbols" : {
"CreateAndAddExtension" : [
2006
]
} ,
"id" : 2007 ,
"nodeType" : "SourceUnit" ,
"nodes" : [
{
"id" : 1963 ,
"literals" : [
"solidity" ,
"0.4" ,
".19"
] ,
"nodeType" : "PragmaDirective" ,
"src" : "0:23:8"
} ,
{
"absolutePath" : "/Users/apanizo/git/gnosis/safe-contracts/contracts/Extension.sol" ,
"file" : "../Extension.sol" ,
"id" : 1964 ,
"nodeType" : "ImportDirective" ,
"scope" : 2007 ,
"sourceUnit" : 19 ,
"src" : "24:26:8" ,
"symbolAliases" : [ ] ,
"unitAlias" : ""
} ,
{
"baseContracts" : [ ] ,
"contractDependencies" : [ ] ,
"contractKind" : "contract" ,
"documentation" : "@title Create and Add Extension - Allows to create and add a new extension in one transaction.\n @author Stefan George - <stefan@gnosis.pm>" ,
"fullyImplemented" : true ,
"id" : 2006 ,
"linearizedBaseContracts" : [
2006
] ,
"name" : "CreateAndAddExtension" ,
"nodeType" : "ContractDefinition" ,
"nodes" : [
{
"body" : {
"id" : 1972 ,
"nodeType" : "Block" ,
"src" : "426:25:8" ,
"statements" : [
{
"expression" : {
"argumentTypes" : null ,
"arguments" : [ ] ,
"expression" : {
"argumentTypes" : [ ] ,
"id" : 1969 ,
"name" : "revert" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 2093 ,
"src" : "436:6:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_function_revert_pure$__$returns$__$" ,
"typeString" : "function () pure"
}
} ,
"id" : 1970 ,
"isConstant" : false ,
"isLValue" : false ,
"isPure" : false ,
"kind" : "functionCall" ,
"lValueRequested" : false ,
"names" : [ ] ,
"nodeType" : "FunctionCall" ,
"src" : "436:8:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_tuple$__$" ,
"typeString" : "tuple()"
}
} ,
"id" : 1971 ,
"nodeType" : "ExpressionStatement" ,
"src" : "436:8:8"
}
]
} ,
"id" : 1973 ,
"implemented" : true ,
"isConstructor" : false ,
"isDeclaredConst" : false ,
"modifiers" : [ ] ,
"name" : "addExtension" ,
"nodeType" : "FunctionDefinition" ,
"parameters" : {
"id" : 1967 ,
"nodeType" : "ParameterList" ,
"parameters" : [
{
"constant" : false ,
"id" : 1966 ,
"name" : "extension" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 1973 ,
"src" : "386:19:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
} ,
"typeName" : {
"contractScope" : null ,
"id" : 1965 ,
"name" : "Extension" ,
"nodeType" : "UserDefinedTypeName" ,
"referencedDeclaration" : 18 ,
"src" : "386:9:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
} ,
"value" : null ,
"visibility" : "internal"
}
] ,
"src" : "385:21:8"
} ,
"payable" : false ,
"returnParameters" : {
"id" : 1968 ,
"nodeType" : "ParameterList" ,
"parameters" : [ ] ,
"src" : "426:0:8"
} ,
"scope" : 2006 ,
"src" : "364:87:8" ,
"stateMutability" : "nonpayable" ,
"superFunction" : null ,
"visibility" : "public"
} ,
{
"body" : {
"id" : 1993 ,
"nodeType" : "Block" ,
"src" : "722:112:8" ,
"statements" : [
{
"assignments" : [
1981
] ,
"declarations" : [
{
"constant" : false ,
"id" : 1981 ,
"name" : "extension" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 1994 ,
"src" : "732:19:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
} ,
"typeName" : {
"contractScope" : null ,
"id" : 1980 ,
"name" : "Extension" ,
"nodeType" : "UserDefinedTypeName" ,
"referencedDeclaration" : 18 ,
"src" : "732:9:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
} ,
"value" : null ,
"visibility" : "internal"
}
] ,
"id" : 1986 ,
"initialValue" : {
"argumentTypes" : null ,
"arguments" : [
{
"argumentTypes" : null ,
"id" : 1983 ,
"name" : "proxyFactory" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 1975 ,
"src" : "770:12:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_address" ,
"typeString" : "address"
}
} ,
{
"argumentTypes" : null ,
"id" : 1984 ,
"name" : "data" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 1977 ,
"src" : "784:4:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_bytes_memory_ptr" ,
"typeString" : "bytes memory"
}
}
] ,
"expression" : {
"argumentTypes" : [
{
"typeIdentifier" : "t_address" ,
"typeString" : "address"
} ,
{
"typeIdentifier" : "t_bytes_memory_ptr" ,
"typeString" : "bytes memory"
}
] ,
"id" : 1982 ,
"name" : "createExtension" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 2005 ,
"src" : "754:15:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_Extension_$18_$" ,
"typeString" : "function (address,bytes memory) returns (contract Extension)"
}
} ,
"id" : 1985 ,
"isConstant" : false ,
"isLValue" : false ,
"isPure" : false ,
"kind" : "functionCall" ,
"lValueRequested" : false ,
"names" : [ ] ,
"nodeType" : "FunctionCall" ,
"src" : "754:35:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
} ,
"nodeType" : "VariableDeclarationStatement" ,
"src" : "732:57:8"
} ,
{
"expression" : {
"argumentTypes" : null ,
"arguments" : [
{
"argumentTypes" : null ,
"id" : 1990 ,
"name" : "extension" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 1981 ,
"src" : "817:9:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
}
] ,
"expression" : {
"argumentTypes" : [
{
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
] ,
"expression" : {
"argumentTypes" : null ,
"id" : 1987 ,
"name" : "this" ,
"nodeType" : "Identifier" ,
"overloadedDeclarations" : [ ] ,
"referencedDeclaration" : 2116 ,
"src" : "799:4:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_CreateAndAddExtension_$2006" ,
"typeString" : "contract CreateAndAddExtension"
}
} ,
"id" : 1989 ,
"isConstant" : false ,
"isLValue" : false ,
"isPure" : false ,
"lValueRequested" : false ,
"memberName" : "addExtension" ,
"nodeType" : "MemberAccess" ,
"referencedDeclaration" : 1973 ,
"src" : "799:17:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_function_external_nonpayable$_t_contract$_Extension_$18_$returns$__$" ,
"typeString" : "function (contract Extension) external"
}
} ,
"id" : 1991 ,
"isConstant" : false ,
"isLValue" : false ,
"isPure" : false ,
"kind" : "functionCall" ,
"lValueRequested" : false ,
"names" : [ ] ,
"nodeType" : "FunctionCall" ,
"src" : "799:28:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_tuple$__$" ,
"typeString" : "tuple()"
}
} ,
"id" : 1992 ,
"nodeType" : "ExpressionStatement" ,
"src" : "799:28:8"
}
]
} ,
"id" : 1994 ,
"implemented" : true ,
"isConstructor" : false ,
"isDeclaredConst" : false ,
"modifiers" : [ ] ,
"name" : "createAndAddExtension" ,
"nodeType" : "FunctionDefinition" ,
"parameters" : {
"id" : 1978 ,
"nodeType" : "ParameterList" ,
"parameters" : [
{
"constant" : false ,
"id" : 1975 ,
"name" : "proxyFactory" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 1994 ,
"src" : "669:20:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_address" ,
"typeString" : "address"
} ,
"typeName" : {
"id" : 1974 ,
"name" : "address" ,
"nodeType" : "ElementaryTypeName" ,
"src" : "669:7:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_address" ,
"typeString" : "address"
}
} ,
"value" : null ,
"visibility" : "internal"
} ,
{
"constant" : false ,
"id" : 1977 ,
"name" : "data" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 1994 ,
"src" : "691:10:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_bytes_memory_ptr" ,
"typeString" : "bytes memory"
} ,
"typeName" : {
"id" : 1976 ,
"name" : "bytes" ,
"nodeType" : "ElementaryTypeName" ,
"src" : "691:5:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_bytes_storage_ptr" ,
"typeString" : "bytes storage pointer"
}
} ,
"value" : null ,
"visibility" : "internal"
}
] ,
"src" : "668:34:8"
} ,
"payable" : false ,
"returnParameters" : {
"id" : 1979 ,
"nodeType" : "ParameterList" ,
"parameters" : [ ] ,
"src" : "722:0:8"
} ,
"scope" : 2006 ,
"src" : "638:196:8" ,
"stateMutability" : "nonpayable" ,
"superFunction" : null ,
"visibility" : "public"
} ,
{
"body" : {
"id" : 2004 ,
"nodeType" : "Block" ,
"src" : "958:296:8" ,
"statements" : [
{
"externalReferences" : [
{
"extension" : {
"declaration" : 2001 ,
"isOffset" : false ,
"isSlot" : false ,
"src" : "1163:9:8" ,
"valueSize" : 1
}
} ,
{
"data" : {
"declaration" : 1998 ,
"isOffset" : false ,
"isSlot" : false ,
"src" : "1075:4:8" ,
"valueSize" : 1
}
} ,
{
"data" : {
"declaration" : 1998 ,
"isOffset" : false ,
"isSlot" : false ,
"src" : "1094:4:8" ,
"valueSize" : 1
}
} ,
{
"proxyFactory" : {
"declaration" : 1996 ,
"isOffset" : false ,
"isSlot" : false ,
"src" : "1057:12:8" ,
"valueSize" : 1
}
}
] ,
"id" : 2003 ,
"nodeType" : "InlineAssembly" ,
"operations" : "{\n let output := mload(0x40)\n switch delegatecall(not(0), proxyFactory, add(data, 0x20), mload(data), output, 0x20)\n case 0 {\n revert(0, 0)\n }\n extension := and(mload(output), 0xffffffffffffffffffffffffffffffffffffffff)\n}" ,
"src" : "968:286:8"
}
]
} ,
"id" : 2005 ,
"implemented" : true ,
"isConstructor" : false ,
"isDeclaredConst" : false ,
"modifiers" : [ ] ,
"name" : "createExtension" ,
"nodeType" : "FunctionDefinition" ,
"parameters" : {
"id" : 1999 ,
"nodeType" : "ParameterList" ,
"parameters" : [
{
"constant" : false ,
"id" : 1996 ,
"name" : "proxyFactory" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 2005 ,
"src" : "865:20:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_address" ,
"typeString" : "address"
} ,
"typeName" : {
"id" : 1995 ,
"name" : "address" ,
"nodeType" : "ElementaryTypeName" ,
"src" : "865:7:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_address" ,
"typeString" : "address"
}
} ,
"value" : null ,
"visibility" : "internal"
} ,
{
"constant" : false ,
"id" : 1998 ,
"name" : "data" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 2005 ,
"src" : "887:10:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_bytes_memory_ptr" ,
"typeString" : "bytes memory"
} ,
"typeName" : {
"id" : 1997 ,
"name" : "bytes" ,
"nodeType" : "ElementaryTypeName" ,
"src" : "887:5:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_bytes_storage_ptr" ,
"typeString" : "bytes storage pointer"
}
} ,
"value" : null ,
"visibility" : "internal"
}
] ,
"src" : "864:34:8"
} ,
"payable" : false ,
"returnParameters" : {
"id" : 2002 ,
"nodeType" : "ParameterList" ,
"parameters" : [
{
"constant" : false ,
"id" : 2001 ,
"name" : "extension" ,
"nodeType" : "VariableDeclaration" ,
"scope" : 2005 ,
"src" : "933:19:8" ,
"stateVariable" : false ,
"storageLocation" : "default" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
} ,
"typeName" : {
"contractScope" : null ,
"id" : 2000 ,
"name" : "Extension" ,
"nodeType" : "UserDefinedTypeName" ,
"referencedDeclaration" : 18 ,
"src" : "933:9:8" ,
"typeDescriptions" : {
"typeIdentifier" : "t_contract$_Extension_$18" ,
"typeString" : "contract Extension"
}
} ,
"value" : null ,
"visibility" : "internal"
}
] ,
"src" : "932:21:8"
} ,
"scope" : 2006 ,
"src" : "840:414:8" ,
"stateMutability" : "nonpayable" ,
"superFunction" : null ,
"visibility" : "internal"
}
] ,
"scope" : 2007 ,
"src" : "199:1057:8"
}
] ,
"src" : "0:1257:8"
} ,
"compiler" : {
"name" : "solc" ,
"version" : "0.4.19+commit.c4cbbb05.Emscripten.clang"
} ,
"networks" : {
"4" : {
"events" : { } ,
"links" : { } ,
"address" : "0xb19cd8c86c13dcade8f680a67e49aaa48c0817a9" ,
"transactionHash" : "0x11ae4fbe0e73a77a68f8229c126331e9fb4e6ff09ebee7e8b60890913a1ca440"
} ,
"42" : {
"events" : { } ,
"links" : { } ,
"address" : "0xce33c528bca2944d25eeadf7107a896018702a98" ,
"transactionHash" : "0x99b20dea53ddbbb9757e414a9a36289c379203be870619b55af681ee86d3b953"
} ,
"1525342778744" : {
"events" : { } ,
"links" : { } ,
"address" : "0x69c1cca644134e10f5f82fc28b3d45e136786dfc" ,
"transactionHash" : "0x2af139a9359ac4b51195eab08a5958d134195ea3793c8851e63b2657d6b1a1be"
2018-05-08 14:41:03 +00:00
} ,
"1525789101965" : {
"events" : { } ,
"links" : { } ,
"address" : "0xa8fd8a2a990b5a5b300a6dc712d1b85b5574ffd9" ,
"transactionHash" : "0x9477126b8b58fd22addc14218038766bb1723de3027fa4db33decd381eeb1b2d"
2018-05-04 14:04:04 +00:00
}
} ,
"schemaVersion" : "2.0.0" ,
2018-05-08 14:41:03 +00:00
"updatedAt" : "2018-05-08T14:18:44.024Z"
2018-05-04 14:04:04 +00:00
}