diff --git a/README.md b/README.md index 6d15e16fc..214343362 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,12 @@ export MNEMONIC="" ``` zOS: +- Make sure that all dependencies use solcjs >0.5.0 +- Add `txParams['from'] = txParams['from'] || web3.currentProvider.getAddress(0)` in `Transactions.js` of the `zos-lib` module ```bash -zos push --network= -truffle --network= exec scripts/init_contracts.js +virtualenv env -p python3 +. env/bin/activate +python ./scripts/deploy_safe.py ``` Truffle: @@ -36,7 +39,7 @@ truffle deploy ``` Verify Contracts: - +- requires installed solc (>0.5.0) ```bash virtualenv env -p python3 . env/bin/activate diff --git a/contracts/GnosisSafe.sol b/contracts/GnosisSafe.sol index cab3f315e..b3d56dc06 100644 --- a/contracts/GnosisSafe.sol +++ b/contracts/GnosisSafe.sol @@ -15,7 +15,7 @@ contract GnosisSafe is MasterCopy, BaseSafe, SignatureDecoder, SecuredTokenTrans using SafeMath for uint256; string public constant NAME = "Gnosis Safe"; - string public constant VERSION = "0.0.2"; + string public constant VERSION = "0.1.0"; //keccak256( // "EIP712Domain(address verifyingContract)" diff --git a/contracts/modules/DailyLimitModule.sol b/contracts/modules/DailyLimitModule.sol index 8cbc5efcb..19e4cce52 100644 --- a/contracts/modules/DailyLimitModule.sol +++ b/contracts/modules/DailyLimitModule.sol @@ -10,7 +10,7 @@ import "../common/Enum.sol"; contract DailyLimitModule is Module { string public constant NAME = "Daily Limit Module"; - string public constant VERSION = "0.0.2"; + string public constant VERSION = "0.1.0"; // dailyLimits mapping maps token address to daily limit settings. mapping (address => DailyLimit) public dailyLimits; diff --git a/contracts/modules/SocialRecoveryModule.sol b/contracts/modules/SocialRecoveryModule.sol index 7da2a573a..9d79a0e75 100644 --- a/contracts/modules/SocialRecoveryModule.sol +++ b/contracts/modules/SocialRecoveryModule.sol @@ -10,7 +10,7 @@ import "../common/Enum.sol"; contract SocialRecoveryModule is Module { string public constant NAME = "Social Recovery Module"; - string public constant VERSION = "0.0.2"; + string public constant VERSION = "0.1.0"; uint256 public threshold; address[] public friends; diff --git a/contracts/modules/StateChannelModule.sol b/contracts/modules/StateChannelModule.sol index ef5bc9998..654694a8a 100644 --- a/contracts/modules/StateChannelModule.sol +++ b/contracts/modules/StateChannelModule.sol @@ -10,7 +10,7 @@ import "../common/SignatureDecoder.sol"; contract StateChannelModule is Module, SignatureDecoder { string public constant NAME = "State Channel Module"; - string public constant VERSION = "0.0.2"; + string public constant VERSION = "0.1.0"; // isExecuted mapping allows to check if a transaction (by hash) was already executed. mapping (bytes32 => uint256) public isExecuted; diff --git a/contracts/modules/WhitelistModule.sol b/contracts/modules/WhitelistModule.sol index 4bef36a86..c667c219c 100644 --- a/contracts/modules/WhitelistModule.sol +++ b/contracts/modules/WhitelistModule.sol @@ -10,7 +10,7 @@ import "../common/Enum.sol"; contract WhitelistModule is Module { string public constant NAME = "Whitelist Module"; - string public constant VERSION = "0.0.2"; + string public constant VERSION = "0.1.0"; // isWhitelisted mapping maps destination address to boolean. mapping (address => bool) public isWhitelisted; diff --git a/package.json b/package.json index c8b6728bc..1f92bef89 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,14 @@ { "name": "gnosis-safe", - "version": "0.0.2", + "version": "0.1.0", "description": "Ethereum multisig contract", "license": "GPL-3.0", "main": "index.js", "files": [ "contracts", - "test" + "test", + "zos.json", + "zos.*.json" ], "scripts": { "test-norpc": "truffle test", diff --git a/scripts/deploy_safe.py b/scripts/deploy_safe.py new file mode 100644 index 000000000..0ce83df5a --- /dev/null +++ b/scripts/deploy_safe.py @@ -0,0 +1,61 @@ +import os +import sys +import json +from subprocess import run + +network = os.environ.get('NETWORK') +if not network: + sys.exit("NETWORK not set in env") + +print("Deploy Safe to", network) + +with open('package.json') as f: + package = json.load(f) + +if os.path.exists("zos.json"): + os.remove("zos.json") + +run(["npx", "zos", "init", package.get("name"), package.get("version")]) + +run(["npx", "truffle", "compile"]) + +# Add and deploy GnosisSafe +run(["npx", "zos", "add", "GnosisSafe", "--skip-compile"]) +run(["npx", "zos", "push", "--network=" + network, "--skip-compile"]) + +# Add and deploy ProxyFactory +run(["npx", "zos", "add", "ProxyFactory", "--skip-compile"]) +run(["npx", "zos", "push", "--network=" + network, "--skip-compile"]) + +# Add and deploy CreateAndAddModules +run(["npx", "zos", "add", "CreateAndAddModules", "--skip-compile"]) +run(["npx", "zos", "push", "--network=" + network, "--skip-compile"]) + +# Add and deploy MultiSend +run(["npx", "zos", "add", "MultiSend", "--skip-compile"]) +run(["npx", "zos", "push", "--network=" + network, "--skip-compile"]) + +# Init contracts +run(["npx", "truffle", "--network=" + network, "exec", "scripts/init_contracts.js"]) + +# Publish zos package +run(["npx", "zos", "publish", "--network=" + network]) + +''' +Modules are disabled for now +''' +# Add and deploy DailyLimitModule +# run(["npx", "zos", "add", "DailyLimitModule", "--skip-compile"]) +# run(["npx", "zos", "push", "--network=" + network, "--skip-compile"]) + +# Add and deploy SocialRecoveryModule +# run(["npx", "zos", "add", "SocialRecoveryModule", "--skip-compile"]) +# run(["npx", "zos", "push", "--network=" + network, "--skip-compile"]) + +# Add and deploy StateChannelModule +# run(["npx", "zos", "add", "StateChannelModule", "--skip-compile"]) +# run(["npx", "zos", "push", "--network=" + network, "--skip-compile"]) + +# Add and deploy WhitelistModule +# run(["npx", "zos", "add", "WhitelistModule", "--skip-compile"]) +# run(["npx", "zos", "push", "--network=" + network, "--skip-compile"]) \ No newline at end of file diff --git a/scripts/init_contracts.js b/scripts/init_contracts.js index 2f52e8300..abce9d93a 100644 --- a/scripts/init_contracts.js +++ b/scripts/init_contracts.js @@ -10,7 +10,7 @@ const notOwnedAddress2 = "0x0000000000000000000000000000000000000003" const ignoreErrors = function(promise) { return promise.catch(function(error){ - console.log("Failed:", error.tx) + console.log("Failed:", error.tx || error.message) }) } @@ -31,10 +31,10 @@ module.exports = function(callback) { var zos = JSON.parse(fs.readFileSync('./zos.' + network + '.json')); Promise.all([ ignoreErrors(GnosisSafe.at(zos.contracts['GnosisSafe'].address).setup([notOwnedAddress, notOwnedAddress2], 2, 0, 0)), - ignoreErrors(StateChannelModule.at(zos.contracts['StateChannelModule'].address).setup()), - ignoreErrors(DailyLimitModule.at(zos.contracts['DailyLimitModule'].address).setup([],[])), - ignoreErrors(SocialRecoveryModule.at(zos.contracts['SocialRecoveryModule'].address).setup([notOwnedAddress, notOwnedAddress2], 2)), - ignoreErrors(WhitelistModule.at(zos.contracts['WhitelistModule'].address).setup([])), + //ignoreErrors(StateChannelModule.at(zos.contracts['StateChannelModule'].address).setup()), + //ignoreErrors(DailyLimitModule.at(zos.contracts['DailyLimitModule'].address).setup([],[])), + //ignoreErrors(SocialRecoveryModule.at(zos.contracts['SocialRecoveryModule'].address).setup([notOwnedAddress, notOwnedAddress2], 2)), + //ignoreErrors(WhitelistModule.at(zos.contracts['WhitelistModule'].address).setup([])), ]) .then(function(values) { values.forEach(function(resp) { diff --git a/truffle.js b/truffle.js index fb1fbac68..fff57c228 100644 --- a/truffle.js +++ b/truffle.js @@ -15,21 +15,26 @@ module.exports = { return new HDWalletProvider(mnemonic, 'https://rinkeby.infura.io/' + token) }, network_id: '4', - gas: 6700000, - gasPrice: 1000000000, // 1 Gwei + gasPrice: 25000000000, // 25 Gwei + }, + kovan: { + provider: () => { + return new HDWalletProvider(mnemonic, 'https://kovan.infura.io/' + token) + }, + network_id: '42', + gasPrice: 25000000000, // 25 Gwei }, mainnet: { provider: () => { return new HDWalletProvider(mnemonic, 'https://mainnet.infura.io/' + token) }, network_id: '1', - gas: 6700000, gasPrice: 25000000000, // 25 Gwei } }, solc: { optimizer: { - enabled: false + enabled: true }, }, }; diff --git a/zos.json b/zos.json index 83c24b836..314f171c4 100644 --- a/zos.json +++ b/zos.json @@ -1,15 +1,11 @@ { + "zosversion": "2", "name": "gnosis-safe", - "version": "0.0.2", - "lib": true, + "version": "0.1.0", "contracts": { "GnosisSafe": "GnosisSafe", + "ProxyFactory": "ProxyFactory", "CreateAndAddModules": "CreateAndAddModules", - "MultiSend": "MultiSend", - "DailyLimitModule": "DailyLimitModule", - "SocialRecoveryModule": "SocialRecoveryModule", - "StateChannelModule": "StateChannelModule", - "WhitelistModule": "WhitelistModule", - "ProxyFactory": "ProxyFactory" + "MultiSend": "MultiSend" } } \ No newline at end of file diff --git a/zos.kovan.json b/zos.kovan.json new file mode 100644 index 000000000..4be01c5f8 --- /dev/null +++ b/zos.kovan.json @@ -0,0 +1,182 @@ +{ + "contracts": { + "GnosisSafe": { + "address": "0x8942595a2dc5181df0465af0d7be08c8f23c93af", + "constructorCode": "608060405234801561001057600080fd5b506158ca80620000216000396000f3fe", + "bodyBytecodeHash": "4fcddedeb8aa08b4ab4b55651396372c2bb6122e88636f9228f95bcd059258dc", + "localBytecodeHash": "da3c317db7fc36fca0211c6c3e5b394230a244f1a62e98588f45485e9686b63f", + "deployedBytecodeHash": "da3c317db7fc36fca0211c6c3e5b394230a244f1a62e98588f45485e9686b63f", + "types": { + "t_address": { + "id": "t_address", + "kind": "elementary", + "label": "address" + }, + "t_mapping": { + "id": "t_mapping", + "valueType": "t_address", + "label": "mapping(key => address)", + "kind": "mapping" + }, + "t_uint256": { + "id": "t_uint256", + "kind": "elementary", + "label": "uint256" + }, + "t_bytes32": { + "id": "t_bytes32", + "kind": "elementary", + "label": "bytes32" + }, + "t_mapping": { + "id": "t_mapping", + "valueType": "t_uint256", + "label": "mapping(key => uint256)", + "kind": "mapping" + } + }, + "storage": [ + { + "contract": "MasterCopy", + "path": "contracts/common/MasterCopy.sol", + "label": "masterCopy", + "astId": 1740, + "type": "t_address", + "src": "465:18:9" + }, + { + "contract": "ModuleManager", + "path": "contracts/base/ModuleManager.sol", + "label": "modules", + "astId": 979, + "type": "t_mapping", + "src": "550:45:5" + }, + { + "contract": "OwnerManager", + "path": "contracts/base/OwnerManager.sol", + "label": "owners", + "astId": 1283, + "type": "t_mapping", + "src": "480:43:6" + }, + { + "contract": "OwnerManager", + "path": "contracts/base/OwnerManager.sol", + "label": "ownerCount", + "astId": 1285, + "type": "t_uint256", + "src": "529:18:6" + }, + { + "contract": "OwnerManager", + "path": "contracts/base/OwnerManager.sol", + "label": "threshold", + "astId": 1287, + "type": "t_uint256", + "src": "553:26:6" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "nonce", + "astId": 41, + "type": "t_uint256", + "src": "1557:20:0" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "domainSeparator", + "astId": 43, + "type": "t_bytes32", + "src": "1583:30:0" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "signedMessages", + "astId": 47, + "type": "t_mapping", + "src": "1716:49:0" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "approvedHashes", + "astId": 53, + "type": "t_mapping", + "src": "1876:69:0" + } + ], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } + }, + "ProxyFactory": { + "address": "0x88cd603a5dc47857d02865bbc7941b588c533263", + "constructorCode": "608060405234801561001057600080fd5b50610560806100206000396000f3fe", + "bodyBytecodeHash": "03897e0c4b90b86278b1de7df6841122c6864a19c208c83b89f1649b59237ee2", + "localBytecodeHash": "964a1c5c4857dce474c89ceeb91c9d7ca33dcb205f9bcc6a1ee8c54970596921", + "deployedBytecodeHash": "964a1c5c4857dce474c89ceeb91c9d7ca33dcb205f9bcc6a1ee8c54970596921", + "types": {}, + "storage": [], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } + }, + "CreateAndAddModules": { + "address": "0xcbf223ccb3264e447167d4772c312df403ab87f0", + "constructorCode": "608060405234801561001057600080fd5b506102e2806100206000396000f3fe", + "bodyBytecodeHash": "3f1bef8e42a5176d17fd5ee15e86baed6de4d458520547043900628174ab7011", + "localBytecodeHash": "c7d3d295d98039fc0b0401490d4e3a131ca6004645161018f5780f6e62ce54d3", + "deployedBytecodeHash": "c7d3d295d98039fc0b0401490d4e3a131ca6004645161018f5780f6e62ce54d3", + "types": {}, + "storage": [], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } + }, + "MultiSend": { + "address": "0xe74d6af1670fb6560dd61ee29eb57c7bc027ce4e", + "constructorCode": "608060405234801561001057600080fd5b506101c8806100206000396000f3fe", + "bodyBytecodeHash": "58eba12a004b48496cb944b7b298706b494b8be2860cd3dfe09680782f137695", + "localBytecodeHash": "6d7ca04270952b10d6bfedd61779fd066ebe62137c396bba5520b774cef03ae4", + "deployedBytecodeHash": "6d7ca04270952b10d6bfedd61779fd066ebe62137c396bba5520b774cef03ae4", + "types": {}, + "storage": [], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } + } + }, + "solidityLibs": {}, + "proxies": {}, + "zosversion": "2", + "version": "0.1.0", + "app": { + "address": "0x3c47f9098f9e7c6ea942f8a8d8ba8bcca03a958d" + }, + "package": { + "address": "0x304ee2f5077593b052c5f3a1266e87e029686ef2" + }, + "provider": { + "address": "0x05e7ae3b0bad5bfd1f681165cd9e5d0ea004b08d" + } +} \ No newline at end of file diff --git a/zos.mainnet.json b/zos.mainnet.json new file mode 100644 index 000000000..4be01c5f8 --- /dev/null +++ b/zos.mainnet.json @@ -0,0 +1,182 @@ +{ + "contracts": { + "GnosisSafe": { + "address": "0x8942595a2dc5181df0465af0d7be08c8f23c93af", + "constructorCode": "608060405234801561001057600080fd5b506158ca80620000216000396000f3fe", + "bodyBytecodeHash": "4fcddedeb8aa08b4ab4b55651396372c2bb6122e88636f9228f95bcd059258dc", + "localBytecodeHash": "da3c317db7fc36fca0211c6c3e5b394230a244f1a62e98588f45485e9686b63f", + "deployedBytecodeHash": "da3c317db7fc36fca0211c6c3e5b394230a244f1a62e98588f45485e9686b63f", + "types": { + "t_address": { + "id": "t_address", + "kind": "elementary", + "label": "address" + }, + "t_mapping": { + "id": "t_mapping", + "valueType": "t_address", + "label": "mapping(key => address)", + "kind": "mapping" + }, + "t_uint256": { + "id": "t_uint256", + "kind": "elementary", + "label": "uint256" + }, + "t_bytes32": { + "id": "t_bytes32", + "kind": "elementary", + "label": "bytes32" + }, + "t_mapping": { + "id": "t_mapping", + "valueType": "t_uint256", + "label": "mapping(key => uint256)", + "kind": "mapping" + } + }, + "storage": [ + { + "contract": "MasterCopy", + "path": "contracts/common/MasterCopy.sol", + "label": "masterCopy", + "astId": 1740, + "type": "t_address", + "src": "465:18:9" + }, + { + "contract": "ModuleManager", + "path": "contracts/base/ModuleManager.sol", + "label": "modules", + "astId": 979, + "type": "t_mapping", + "src": "550:45:5" + }, + { + "contract": "OwnerManager", + "path": "contracts/base/OwnerManager.sol", + "label": "owners", + "astId": 1283, + "type": "t_mapping", + "src": "480:43:6" + }, + { + "contract": "OwnerManager", + "path": "contracts/base/OwnerManager.sol", + "label": "ownerCount", + "astId": 1285, + "type": "t_uint256", + "src": "529:18:6" + }, + { + "contract": "OwnerManager", + "path": "contracts/base/OwnerManager.sol", + "label": "threshold", + "astId": 1287, + "type": "t_uint256", + "src": "553:26:6" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "nonce", + "astId": 41, + "type": "t_uint256", + "src": "1557:20:0" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "domainSeparator", + "astId": 43, + "type": "t_bytes32", + "src": "1583:30:0" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "signedMessages", + "astId": 47, + "type": "t_mapping", + "src": "1716:49:0" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "approvedHashes", + "astId": 53, + "type": "t_mapping", + "src": "1876:69:0" + } + ], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } + }, + "ProxyFactory": { + "address": "0x88cd603a5dc47857d02865bbc7941b588c533263", + "constructorCode": "608060405234801561001057600080fd5b50610560806100206000396000f3fe", + "bodyBytecodeHash": "03897e0c4b90b86278b1de7df6841122c6864a19c208c83b89f1649b59237ee2", + "localBytecodeHash": "964a1c5c4857dce474c89ceeb91c9d7ca33dcb205f9bcc6a1ee8c54970596921", + "deployedBytecodeHash": "964a1c5c4857dce474c89ceeb91c9d7ca33dcb205f9bcc6a1ee8c54970596921", + "types": {}, + "storage": [], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } + }, + "CreateAndAddModules": { + "address": "0xcbf223ccb3264e447167d4772c312df403ab87f0", + "constructorCode": "608060405234801561001057600080fd5b506102e2806100206000396000f3fe", + "bodyBytecodeHash": "3f1bef8e42a5176d17fd5ee15e86baed6de4d458520547043900628174ab7011", + "localBytecodeHash": "c7d3d295d98039fc0b0401490d4e3a131ca6004645161018f5780f6e62ce54d3", + "deployedBytecodeHash": "c7d3d295d98039fc0b0401490d4e3a131ca6004645161018f5780f6e62ce54d3", + "types": {}, + "storage": [], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } + }, + "MultiSend": { + "address": "0xe74d6af1670fb6560dd61ee29eb57c7bc027ce4e", + "constructorCode": "608060405234801561001057600080fd5b506101c8806100206000396000f3fe", + "bodyBytecodeHash": "58eba12a004b48496cb944b7b298706b494b8be2860cd3dfe09680782f137695", + "localBytecodeHash": "6d7ca04270952b10d6bfedd61779fd066ebe62137c396bba5520b774cef03ae4", + "deployedBytecodeHash": "6d7ca04270952b10d6bfedd61779fd066ebe62137c396bba5520b774cef03ae4", + "types": {}, + "storage": [], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } + } + }, + "solidityLibs": {}, + "proxies": {}, + "zosversion": "2", + "version": "0.1.0", + "app": { + "address": "0x3c47f9098f9e7c6ea942f8a8d8ba8bcca03a958d" + }, + "package": { + "address": "0x304ee2f5077593b052c5f3a1266e87e029686ef2" + }, + "provider": { + "address": "0x05e7ae3b0bad5bfd1f681165cd9e5d0ea004b08d" + } +} \ No newline at end of file diff --git a/zos.rinkeby.json b/zos.rinkeby.json index c4998d5ae..4be01c5f8 100644 --- a/zos.rinkeby.json +++ b/zos.rinkeby.json @@ -1,61 +1,182 @@ { "contracts": { "GnosisSafe": { - "address": "0x2727d69c0bd14b1ddd28371b8d97e808adc1c2f7", - "constructorCode": "608060405234801561001057600080fd5b506154e4806100206000396000f300", - "bodyBytecodeHash": "f2d068affc3ba0ab316ac49340f562969ca2904776f8e640109902c82a79b513", - "bytecodeHash": "713a8a57ac0636fc6e30329eff1420d0216bbed6635baae93e3ac293eeb3ab09" + "address": "0x8942595a2dc5181df0465af0d7be08c8f23c93af", + "constructorCode": "608060405234801561001057600080fd5b506158ca80620000216000396000f3fe", + "bodyBytecodeHash": "4fcddedeb8aa08b4ab4b55651396372c2bb6122e88636f9228f95bcd059258dc", + "localBytecodeHash": "da3c317db7fc36fca0211c6c3e5b394230a244f1a62e98588f45485e9686b63f", + "deployedBytecodeHash": "da3c317db7fc36fca0211c6c3e5b394230a244f1a62e98588f45485e9686b63f", + "types": { + "t_address": { + "id": "t_address", + "kind": "elementary", + "label": "address" + }, + "t_mapping": { + "id": "t_mapping", + "valueType": "t_address", + "label": "mapping(key => address)", + "kind": "mapping" + }, + "t_uint256": { + "id": "t_uint256", + "kind": "elementary", + "label": "uint256" + }, + "t_bytes32": { + "id": "t_bytes32", + "kind": "elementary", + "label": "bytes32" + }, + "t_mapping": { + "id": "t_mapping", + "valueType": "t_uint256", + "label": "mapping(key => uint256)", + "kind": "mapping" + } + }, + "storage": [ + { + "contract": "MasterCopy", + "path": "contracts/common/MasterCopy.sol", + "label": "masterCopy", + "astId": 1740, + "type": "t_address", + "src": "465:18:9" + }, + { + "contract": "ModuleManager", + "path": "contracts/base/ModuleManager.sol", + "label": "modules", + "astId": 979, + "type": "t_mapping", + "src": "550:45:5" + }, + { + "contract": "OwnerManager", + "path": "contracts/base/OwnerManager.sol", + "label": "owners", + "astId": 1283, + "type": "t_mapping", + "src": "480:43:6" + }, + { + "contract": "OwnerManager", + "path": "contracts/base/OwnerManager.sol", + "label": "ownerCount", + "astId": 1285, + "type": "t_uint256", + "src": "529:18:6" + }, + { + "contract": "OwnerManager", + "path": "contracts/base/OwnerManager.sol", + "label": "threshold", + "astId": 1287, + "type": "t_uint256", + "src": "553:26:6" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "nonce", + "astId": 41, + "type": "t_uint256", + "src": "1557:20:0" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "domainSeparator", + "astId": 43, + "type": "t_bytes32", + "src": "1583:30:0" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "signedMessages", + "astId": 47, + "type": "t_mapping", + "src": "1716:49:0" + }, + { + "contract": "GnosisSafe", + "path": "contracts/GnosisSafe.sol", + "label": "approvedHashes", + "astId": 53, + "type": "t_mapping", + "src": "1876:69:0" + } + ], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } }, - "MultiSend": { - "address": "0x607ecc85c613548367ebdee103d6d256d42d5978", - "constructorCode": "608060405234801561001057600080fd5b50610169806100206000396000f300", - "bodyBytecodeHash": "b336050657ea78b01f3b8f10f4ed2579b537d682fe6bf78c0aed832531c2c3bd", - "bytecodeHash": "1d6ee3e764c41da6c7c729d52605780d6f18b608f224f0e722eb66bc9b859128" + "ProxyFactory": { + "address": "0x88cd603a5dc47857d02865bbc7941b588c533263", + "constructorCode": "608060405234801561001057600080fd5b50610560806100206000396000f3fe", + "bodyBytecodeHash": "03897e0c4b90b86278b1de7df6841122c6864a19c208c83b89f1649b59237ee2", + "localBytecodeHash": "964a1c5c4857dce474c89ceeb91c9d7ca33dcb205f9bcc6a1ee8c54970596921", + "deployedBytecodeHash": "964a1c5c4857dce474c89ceeb91c9d7ca33dcb205f9bcc6a1ee8c54970596921", + "types": {}, + "storage": [], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } }, "CreateAndAddModules": { - "address": "0x5096cd7f7f5f2e621a480c1ae8969c03cb647a91", - "constructorCode": "608060405234801561001057600080fd5b50610275806100206000396000f300", - "bodyBytecodeHash": "014dde48ed40305fbc7d6a409e8626647ccc761a8adf25ae0ff3cf75898905bc", - "bytecodeHash": "4c5b0e0437fd4e8b5db9579a7df279540ef192879c30a54f3ef0c11c8d846bfc" - }, - "SocialRecoveryModule": { - "address": "0x96967d1f6bade086b8e31f04b14753f9649b3d9e", - "constructorCode": "608060405234801561001057600080fd5b50611790806100206000396000f300", - "bodyBytecodeHash": "35963f60daf59a337868cdce3ab94cde7c0f4bffcd4fd0fd0c8a2b0dd240f366", - "bytecodeHash": "83f0709fb919f9fa6b1ae5ee9d2cf7be03cbc7cd697f9a3c0a391ff1347df33a" - }, - "WhitelistModule": { - "address": "0xbb2d70bafda6dd0f8770713b71e7fecf74adfd95", - "constructorCode": "608060405234801561001057600080fd5b50611248806100206000396000f300", - "bodyBytecodeHash": "2710edd94d13331d31d9db2bc2d971bb07212c8447a35b6dbd9b008face113bc", - "bytecodeHash": "791dbd0a83b23783c0cb3cc9a096a588f8b8b591abc2bec4ee1ea75f842fe649" - }, - "DailyLimitModule": { - "address": "0x6e3a1f364c112736ca88ea113b70dcae53a4def6", - "constructorCode": "608060405234801561001057600080fd5b5061129b806100206000396000f300", - "bodyBytecodeHash": "61ba4605144d744fc1d8f910fbc171eba204ebb650c0f2fc224a4621662a622e", - "bytecodeHash": "052533ed554cd7a2fe277835d858de082f109dbbb79fc23a3dcd8292c5af8789" + "address": "0xcbf223ccb3264e447167d4772c312df403ab87f0", + "constructorCode": "608060405234801561001057600080fd5b506102e2806100206000396000f3fe", + "bodyBytecodeHash": "3f1bef8e42a5176d17fd5ee15e86baed6de4d458520547043900628174ab7011", + "localBytecodeHash": "c7d3d295d98039fc0b0401490d4e3a131ca6004645161018f5780f6e62ce54d3", + "deployedBytecodeHash": "c7d3d295d98039fc0b0401490d4e3a131ca6004645161018f5780f6e62ce54d3", + "types": {}, + "storage": [], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } }, - "StateChannelModule": { - "address": "0x46060a29a9ea946b2e37058288e029554a9d73c8", - "constructorCode": "608060405234801561001057600080fd5b5061117e806100206000396000f300", - "bodyBytecodeHash": "2aab73941bc3555c3f7b9e685564551e68566c640448bf910c428f3b5cdc2b6f", - "bytecodeHash": "9faddf6e4708c2f49b93b1192baeb22ca76db6d89a1206573383fa8e371a28ab" - }, - "ProxyFactory": { - "address": "0xf81e35398b5d09d891db0199064ff4a53e7ecae6", - "constructorCode": "608060405234801561001057600080fd5b506104dd806100206000396000f300", - "bodyBytecodeHash": "ec1d2a4b158836c61b9306fba2b86a5b023c8e32fe4b961e3c0e45eae058ed17", - "bytecodeHash": "7afda72bb14595ddbf74073f6703ee7ba6951fe93b080fed48df81659773f478" + "MultiSend": { + "address": "0xe74d6af1670fb6560dd61ee29eb57c7bc027ce4e", + "constructorCode": "608060405234801561001057600080fd5b506101c8806100206000396000f3fe", + "bodyBytecodeHash": "58eba12a004b48496cb944b7b298706b494b8be2860cd3dfe09680782f137695", + "localBytecodeHash": "6d7ca04270952b10d6bfedd61779fd066ebe62137c396bba5520b774cef03ae4", + "deployedBytecodeHash": "6d7ca04270952b10d6bfedd61779fd066ebe62137c396bba5520b774cef03ae4", + "types": {}, + "storage": [], + "warnings": { + "hasConstructor": false, + "hasSelfDestruct": false, + "hasDelegateCall": false, + "hasInitialValuesInDeclarations": false, + "uninitializedBaseContracts": [] + } } }, - "lib": true, - "frozen": false, + "solidityLibs": {}, + "proxies": {}, + "zosversion": "2", + "version": "0.1.0", + "app": { + "address": "0x3c47f9098f9e7c6ea942f8a8d8ba8bcca03a958d" + }, "package": { - "address": "0xff772479f61010b583e76fc8f42147ad229b0c05" + "address": "0x304ee2f5077593b052c5f3a1266e87e029686ef2" }, "provider": { - "address": "0xd4485b897271781ce0145e00ebb07a534b85c2fc" - }, - "version": "0.0.2" + "address": "0x05e7ae3b0bad5bfd1f681165cd9e5d0ea004b08d" + } } \ No newline at end of file