From e1fea4ed97dad4c429e55984de79e7f98f3c0cdc Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Sun, 24 Mar 2019 22:11:24 +0100 Subject: [PATCH] refactor DAO deployment --- README.md | 30 ++++++ arapp.json | 6 +- contracts/KreditsKit.sol | 4 +- lib/addresses/KreditsKit.json | 1 + lib/addresses/dao.json | 2 +- package-lock.json | 189 +++++++++++++++++++++++++--------- package.json | 6 +- scripts/deploy-kit.js | 52 ++++------ scripts/new-dao.js | 44 ++++++++ truffle.js | 39 ++----- 10 files changed, 260 insertions(+), 113 deletions(-) create mode 100644 lib/addresses/KreditsKit.json create mode 100644 scripts/new-dao.js diff --git a/README.md b/README.md index 387db5a..ee3d1bd 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,36 @@ Prints all known DAO addresses and the DAO address for the current network or $ npm run dao:address +### deploy-kit.js + +Deploys a new KreditsKit that allows to create a new DAO + + $ truffle exec script/deploy-kit.js + or + $ npm run deploy:kit + +`ENS` address is required as environment variable. +`DAO_FACTORY` can optionally be set as environment variable. (see aragon) + +### new-dao.js + +Creates and configures a new DAO instance. + + $ truffle exec script/new-dao.js + or + $ npm run deploy:dao + +KreditsKit address is load from `lib/addresses/KreditsKit.json` or can be +configured through the `KREDITS_KIT` environment variable. + +### deploy-apps.sh + +Runs `npm install` for each app and publishes a new version. + + $ ./scripts/deploy-apps.sh + or + $ nppm run deploy:apps + ## ACL / Permissions diff --git a/arapp.json b/arapp.json index b0e894a..1f86e57 100644 --- a/arapp.json +++ b/arapp.json @@ -37,8 +37,12 @@ "network": "development", "appName": "dummy.aragonpm.eth" }, + "kovan": { + "network": "kovan", + "appName": "dummy.aragonpm.eth" + }, "default": { - "network": "rpc", + "network": "development", "appName": "dummy.aragonpm.eth" } }, diff --git a/contracts/KreditsKit.sol b/contracts/KreditsKit.sol index 87a7af3..27951bf 100644 --- a/contracts/KreditsKit.sol +++ b/contracts/KreditsKit.sol @@ -25,7 +25,7 @@ contract KreditsKit is KitBase, APMNamehashOpen, ACLSyntaxSugar { constructor (DAOFactory _fac, ENS _ens) public KitBase(_fac, _ens) {} - function newInstance() public returns (Kernel dao, ERCProxy proxy) { + function newInstance() public returns (Kernel dao) { address root = msg.sender; dao = fac.newDAO(this); ACL acl = ACL(dao.acl()); @@ -71,7 +71,7 @@ contract KreditsKit is KitBase, APMNamehashOpen, ACLSyntaxSugar { cleanupDAOPermissions(dao, acl, root); emit DeployInstance(dao); - //return dao; + return dao; } function _installApp(Kernel _dao, bytes32 _appId) internal returns (AragonApp) { diff --git a/lib/addresses/KreditsKit.json b/lib/addresses/KreditsKit.json new file mode 100644 index 0000000..f9fb2ee --- /dev/null +++ b/lib/addresses/KreditsKit.json @@ -0,0 +1 @@ +{"55632786":"0x4d97bd8efacf46b33c4438ed0b7b6aabfa2359fb"} \ No newline at end of file diff --git a/lib/addresses/dao.json b/lib/addresses/dao.json index 2038fa7..eafeaf1 100644 --- a/lib/addresses/dao.json +++ b/lib/addresses/dao.json @@ -1 +1 @@ -{"23827572":"0xe4e0e7fe54d9189df29a80c07ab733fc9a212761","65047207":"0xb67567175ac213f6f622b23d3d972d5b877c4813"} \ No newline at end of file +{"23827572":"0xe4e0e7fe54d9189df29a80c07ab733fc9a212761","55632786":"0x4fde16c57ddf6d4870d5edd599074bb50dc96f88","65047207":"0xb67567175ac213f6f622b23d3d972d5b877c4813"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index cc24541..8ff81a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2894,6 +2894,45 @@ } } }, + "eth-provider": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/eth-provider/-/eth-provider-0.2.1.tgz", + "integrity": "sha512-n9o0EgxYGDCnAmnQ5HJSAp77u/mWPvbztG0iGKvwj2fBTiyihLi61+wVJw/9INWUXZERGuM076jZqrDyY3OCzQ==", + "dev": true, + "requires": { + "ethereum-provider": "0.0.5", + "oboe": "2.1.4", + "uuid": "3.3.2", + "ws": "6.1.0", + "xhr2-cookies": "1.1.0" + }, + "dependencies": { + "oboe": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", + "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", + "dev": true, + "requires": { + "http-https": "^1.0.0" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "ws": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.0.tgz", + "integrity": "sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, "eth-query": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", @@ -2985,6 +3024,12 @@ "integrity": "sha1-Q812ac6VCnieFRABEY1NZfIQ7rc=", "dev": true }, + "ethereum-provider": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ethereum-provider/-/ethereum-provider-0.0.5.tgz", + "integrity": "sha512-YPRq+JZxbg4DvS3cQGsM9rs3gZCeu2LPJUtDGnywoSKk+L9QPkcJhELggrOJ/ahmcc0sfRfvxXtxknFyivU1+Q==", + "dev": true + }, "ethereumjs-abi": { "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#572d4bafe08a8a231137e1f9daeb0f8a23f197d2", "from": "git+https://github.com/ethereumjs/ethereumjs-abi.git", @@ -4607,8 +4652,7 @@ "bindings": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", - "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==", - "dev": true + "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" }, "bip39": { "version": "2.4.0", @@ -4627,7 +4671,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -4673,8 +4716,7 @@ "bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "dev": true + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" }, "body-parser": { "version": "1.18.3", @@ -4706,8 +4748,7 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, "browser-stdout": { "version": "1.3.1", @@ -4718,7 +4759,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -4866,8 +4906,7 @@ "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, "builtin-modules": { "version": "1.1.1", @@ -4976,7 +5015,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -5137,7 +5175,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -5150,7 +5187,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -5467,7 +5503,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "dev": true, "requires": { "browserify-aes": "^1.0.6", "create-hash": "^1.1.2", @@ -5506,7 +5541,6 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -5750,8 +5784,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, "eth-block-tracker": { "version": "2.3.1", @@ -5775,8 +5808,46 @@ "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", "dev": true, "requires": { - "ethereumjs-abi": "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7", + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", "ethereumjs-util": "^5.1.1" + }, + "dependencies": { + "ethereumjs-abi": { + "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#572d4bafe08a8a231137e1f9daeb0f8a23f197d2", + "from": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "dev": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + } } }, "ethereum-common": { @@ -5788,7 +5859,6 @@ "ethereumjs-abi": { "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7", "from": "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7", - "dev": true, "requires": { "bn.js": "^4.10.0", "ethereumjs-util": "^5.0.0" @@ -5959,7 +6029,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dev": true, "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -6054,7 +6123,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz", "integrity": "sha1-HItoeSV0RO9NPz+7rC3tEs2ZfZM=", - "dev": true, "requires": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" @@ -6070,7 +6138,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -6573,7 +6640,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -6583,7 +6649,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.0" @@ -6614,7 +6679,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -6790,8 +6854,7 @@ "is-hex-prefixed": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", - "dev": true + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" }, "is-natural-number": { "version": "4.0.1", @@ -6998,7 +7061,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "dev": true, "requires": { "bindings": "^1.2.1", "inherits": "^2.0.3", @@ -7354,7 +7416,6 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -7482,14 +7543,12 @@ "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { "version": "3.0.4", @@ -7593,8 +7652,7 @@ "nan": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, "nano-json-stream-parser": { "version": "0.1.2", @@ -8266,7 +8324,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -8275,8 +8332,7 @@ "rlp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz", - "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=", - "dev": true + "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=" }, "rustbn.js": { "version": "0.1.2", @@ -8287,8 +8343,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safer-buffer": { "version": "2.1.2", @@ -8328,7 +8383,6 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", - "dev": true, "requires": { "bindings": "^1.2.1", "bip66": "^1.1.3", @@ -8449,7 +8503,6 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -8683,7 +8736,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "dev": true, "requires": { "is-hex-prefixed": "1.0.0" } @@ -9391,19 +9443,62 @@ "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", "dev": true, "requires": { - "ethereumjs-abi": "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7", + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", "ethereumjs-util": "^5.1.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "ethereumjs-abi": { + "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#572d4bafe08a8a231137e1f9daeb0f8a23f197d2", + "from": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "dev": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + } + } + } } }, "ethereumjs-abi": { "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7", "from": "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7", - "dev": true, "requires": { "bn.js": "^4.10.0", "ethereumjs-util": "^5.0.0" } }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, "ws": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.0.tgz", @@ -9444,12 +9539,12 @@ "requires": { "underscore": "1.8.3", "web3-core-helpers": "1.0.0-beta.34", - "websocket": "websocket@git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" + "websocket": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible" }, "dependencies": { "websocket": { "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "from": "websocket@git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "from": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", "dev": true, "requires": { "debug": "^2.2.0", diff --git a/package.json b/package.json index 8c53f23..8cb3ab4 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,9 @@ "seeds": "truffle exec scripts/seeds.js", "compile-contracts": "aragon contracts compile --all", "bootstrap": "npm run reset && truffle exec scripts/seeds.js", - "reset": "npm run deploy:apps && npm run deploy:dao", - "deploy:dao": "npm run compile-contracts && ENS=0x5f6f7e8cc7346a11ca2def8f827b7a0b612c56a1 aragon contracts exec scripts/deploy-kit.js", + "reset": "npm run deploy:apps && npm run deploy:kit && npm run deploy:dao", + "deploy:kit": "npm run compile-contracts && ENS=0x5f6f7e8cc7346a11ca2def8f827b7a0b612c56a1 aragon contracts exec scripts/deploy-kit.js", + "deploy:dao": "aragon contracts exec scripts/new-dao.js", "deploy:apps": "./scripts/deploy-apps.sh", "devchain": "aragon devchain --port 7545", "dao:address": "truffle exec scripts/current-address.js", @@ -34,6 +35,7 @@ "@aragon/kits-base": "^1.0.0", "@aragon/os": "^4.1.0", "async-each-series": "^1.1.0", + "eth-provider": "^0.2.1", "openzeppelin-solidity": "^2.2.0", "promptly": "^3.0.3", "solc": "^0.4.25" diff --git a/scripts/deploy-kit.js b/scripts/deploy-kit.js index a76b352..77e7a6c 100644 --- a/scripts/deploy-kit.js +++ b/scripts/deploy-kit.js @@ -1,49 +1,39 @@ const deployDAOFactory = require('@aragon/os/scripts/deploy-daofactory.js') -const KreditsKit = artifacts.require('KreditsKit') const fs = require('fs'); const path = require('path'); const libPath = path.join(__dirname, '..', 'lib'); const addressesPath = path.join(libPath, 'addresses'); -const ensAddr = process.env.ENS +const KreditsKit = artifacts.require('KreditsKit') -module.exports = async (callback) => { +const ensAddr = process.env.ENS +const daoFactoryAddress = process.env.DAO_FACTORY + +module.exports = async function(callback) { if (!ensAddr) { callback(new Error("ENS address not found in environment variable ENS")) } + console.log(`Using ENS at: ${ensAddr}`); - deployDAOFactory(null, { artifacts, verbose: false }) - .catch(console.log) - .then((result) => { - const daoFactory = result.daoFactory + let daoFactory + if (daoFactoryAddress) { + daoFactory = DAOFactory.at(daoFactoryAddress) + } else { + daoFactory = (await deployDAOFactory(null, { artifacts, verbose: false })).daoFactory + } + console.log(`Using DAOFactory at: ${daoFactory.address}`) - KreditsKit.new(daoFactory.address, ensAddr) - .catch(console.log) - .then((kreditsKit) => { - console.log(kreditsKit.address) + let kreditsKit = await KreditsKit.new(daoFactory.address, ensAddr) - kreditsKit.newInstance().then((ret) => { - console.log(ret.logs); - const installedEvents = ret.logs.filter(log => log.event === 'InstalledApp').map(log => log.args) - const deployEvents = ret.logs.filter(log => log.event === 'DeployInstance').map(log => log.args) + const networkId = parseInt(web3.version.network); - if (deployEvents.length > 1) { - callback(new Error("More than one DAO was deployed. Something is wrong")) - } - const daoAddress = deployEvents[0].dao; - const networkId = parseInt(web3.version.network); + let addresseFile = path.join(addressesPath, `KreditsKit.json`); + let addresses = JSON.parse(fs.readFileSync(addresseFile)); - let addresseFile = path.join(addressesPath, `dao.json`); - let addresses = JSON.parse(fs.readFileSync(addresseFile)); + addresses[networkId] = kreditsKit.address; + fs.writeFileSync(addresseFile, JSON.stringify(addresses)); - addresses[networkId] = daoAddress; - fs.writeFileSync(addresseFile, JSON.stringify(addresses)); - - callback(); - }).catch((e) => { - console.log(e); - }) - }) - }) + console.log(`Deployed KreditsKit at: ${kreditsKit.address}`); + callback(); } diff --git a/scripts/new-dao.js b/scripts/new-dao.js new file mode 100644 index 0000000..f3ed2b3 --- /dev/null +++ b/scripts/new-dao.js @@ -0,0 +1,44 @@ +const fs = require('fs'); +const path = require('path'); +const libPath = path.join(__dirname, '..', 'lib'); +const addressesPath = path.join(libPath, 'addresses'); + +const KreditsKit = artifacts.require('KreditsKit') + +module.exports = async function(callback) { + const networkId = parseInt(web3.version.network); + + let kitAddresseFile = path.join(addressesPath, 'KreditsKit.json'); + let kitAddresses = JSON.parse(fs.readFileSync(kitAddresseFile)); + let kreditsKitAddress = process.env.KREDITS_KIT || kitAddresses[networkId] + if (!kreditsKitAddress) { + callback(new Error("KreditsKit address not found in environment variable KREDITS_KIT")) + } + console.log(`Using KreditsKit at: ${kreditsKitAddress}`); + + let kreditsKit = KreditsKit.at(kreditsKitAddress) + + kreditsKit.newInstance().then((ret) => { + console.log(ret.logs); + const installedEvents = ret.logs.filter(log => log.event === 'InstalledApp').map(log => log.args) + const deployEvents = ret.logs.filter(log => log.event === 'DeployInstance').map(log => log.args) + + if (deployEvents.length > 1) { + callback(new Error("More than one DAO was deployed. Something is wrong")) + } + const daoAddress = deployEvents[0].dao; + + let addresseFile = path.join(addressesPath, `dao.json`); + let addresses = JSON.parse(fs.readFileSync(addresseFile)); + + addresses[networkId] = daoAddress; + fs.writeFileSync(addresseFile, JSON.stringify(addresses)); + + console.log(`\n\nCreated new DAO at: ${daoAddress}`) + + callback(); + }).catch((err) => { + console.log('failed to create a new instance') + callback(err) + }) +} diff --git a/truffle.js b/truffle.js index d8c5df0..205fc3c 100644 --- a/truffle.js +++ b/truffle.js @@ -1,47 +1,28 @@ -/** - * https://github.com/aragon/aragonOS/blob/v4.0.0/truffle-config.js - */ const homedir = require('homedir') const path = require('path') +const provider = require('eth-provider') + const HDWalletProvider = require('truffle-hdwallet-provider') const HDWalletProviderPrivkey = require('truffle-hdwallet-provider-privkey') -const DEFAULT_MNEMONIC = 'explain tackle mirror kit van hammer degree position ginger unfair soup bonus' - -const defaultRPC = (network) => - `https://${network}.infura.io` - -const configFilePath = (filename) => - path.join(homedir(), `.aragon/${filename}`) - -const mnemonic = () => { - try { - return require(configFilePath('mnemonic.json')).mnemonic - } catch (e) { - return DEFAULT_MNEMONIC - } -} - const settingsForNetwork = (network) => { try { - return require(configFilePath(`${network}_key.json`)) + let settingsPath = process.env.KEY_FILE || path.join(homedir(), `.aragon/${network}.json`) + return require(settingsPath) } catch (e) { - return { } + return null; } } -// Lazily loaded provider const providerForNetwork = (network) => ( () => { - let { rpc, keys } = settingsForNetwork(network) - rpc = rpc || defaultRPC(network) - - if (!keys || keys.length == 0) { - return new HDWalletProvider(mnemonic(), rpc) + let settings = settingsForNetwork(network); + if (settings) { + return new HDWalletProviderPrivkey(settings.keys, settings.rpc) + } else { + return provider('frame'); } - - return new HDWalletProviderPrivkey(keys, rpc) } ) module.exports = {