Update README and npm scripts for hardhat

This commit is contained in:
bumi 2022-04-25 09:07:24 -05:00
parent 24990de42a
commit 53dbc1e4ad
2 changed files with 25 additions and 125 deletions

132
README.md
View File

@ -50,7 +50,7 @@ development ganache.
To clear/reset the chain use (e.g. if you run out of funds on your devchain) To clear/reset the chain use (e.g. if you run out of funds on your devchain)
$ npm run devchain -- --reset (or aragon devchain --port 7545 --reset) $ npm run devchain --
We default to port 7545 for development to not get in conflict with the default We default to port 7545 for development to not get in conflict with the default
Ethereum RPC port. Ethereum RPC port.
@ -68,52 +68,35 @@ if you want to increase the block time to 10 seconds you can add
2. Compile contracts 2. Compile contracts
(compiled contracts will be in `/build`) (compiled artifacts will be in `/artifacts`)
$ npm run compile-contracts $ npm run compile-contracts
3. Deploy each app to the devchain 3. Deploy a new KreditsKit and create a new DAO with the latest app versions
(make sure you've run `npm install` for every app - see installation)
$ npm run deploy:apps
4. Deploy a new KreditsKit and create a new DAO with the latest app versions
$ npm run deploy:kit
$ npm run deploy:dao $ npm run deploy:dao
5. Execute seeds to create demo contributors, contributions, etc. (optional) 4. Execute seeds to create demo contributors, contributions, etc. (optional)
$ npm run seeds $ npm run seeds
**Step 2-5 is also summarized in `npm run bootstrap`** **Step 2-4 is also summarized in `npm run bootstrap`**
If you want to reset your local setup: 5. Show contract addresses
$ npm run reset // deploys a new kit and a new DAO $ cat lib/addresses.json
$ npm run reset:hard // deploys all apps and does reset
## Contract architecture ## Contract architecture
Contracts are organized in independent apps (see `/apps`) and are developed and We use the [OpenZeppelin hardhat proxy](https://www.npmjs.com/package/@openzeppelin/hardhat-upgrades) for deploying and managing upgradeable contracts. (see `scripts/create-proxy.js`)
deployed independently. Each app has a version and can be "installed" on the
Kredits DAO independently.
![](docs/kredits-diagram.png)
A DAO can be deployed using the `scripts/deploy-kit.js` script or with the
`npm run deploy:dao` command. This deploys a new Kredits DAO, installs the
latest app versions and sets the required permissions.
See each app in `/apps/*` for details.
Each contract is independent and is connected to its dependencies by storing the addresses of the other contracts.
## Helper scripts ## Helper scripts
`scripts/` contains some helper scripts to interact with the contracts from the `scripts/` contains some helper scripts to interact with the contracts from the
CLI. _At some point these should be moved into a real nice CLI._ CLI. _At some point these should be moved into a real nice CLI._
To run these scripts use `truffle exec`. For example: `truffle exec To run these scripts use `hardhat run`. For example: `hardhat run scripts/list-contributors.js --network localhost`. (NOTE: add `--network localhost` or the network you want to use)
scripts/add-proposal.js`.
Some scripts are also defined as npm script, see package.json. Some scripts are also defined as npm script, see package.json.
@ -128,116 +111,37 @@ Call any function on any contract:
Similar to cli.js but only provides a REPL with an initialized `kredits` Similar to cli.js but only provides a REPL with an initialized `kredits`
instance. instance.
$ truffle exec scripts/repl.js $ hardhat console --network localhost
### add-{contributor, contribution, proposal}.js ### add-{contributor, contribution, proposal}.js
Script to add a new entries to the contracts using the JS wrapper Script to add a new entries to the contracts using the JS wrapper
$ truffle exec scripts/add-{contributor, contribution, proposal}.js $ hardhat run scripts/add-{contributor, contribution, proposal}.js --network localhost
### list-{contributors, contributions, proposals}.js ### list-{contributors, contributions, proposals}.js
List contract entries List contract entries
$ truffle exec scripts/list-{contributors, contributions, proposals}.js $ hardhat run scripts/list-{contributors, contributions, proposals}.js --network localhost
### send-funds.js
Sends funds to an address. Helpful in development mode to for example fund a
metamask account.
$ truffle exec scripts/send-funds.js
### seeds.js ### seeds.js
Run seeds defined in `config/seeds.js`. Run seeds defined in `config/seeds.js`.
$ truffle exec scripts/seeds.js
or
$ npm run seeds $ npm run seeds
### current-address.js ### Get the contract addresses
Prints all known DAO addresses and the DAO address for the current network All contract addresses are stored in `lib/addresses.json`
$ truffle exec scripts/current-address.js $ cat lib/addresses.json
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
#### Kredits configuration options:
Configuration options can be set in an environment specific `kredits` object in the `arapp.json` or using a CLI parameter.
* daoFactory: Ethereum address of the used DAO Factory. On public networks we use [official aragon factories](https://github.com/aragon/deployments/tree/master/environments/)
* apmDomain: the ENS domain of the aragonPM (normally `open.aragonpm.eth`)
(please also see the [arapp.json related configuration options](https://hack.aragon.org/docs/cli-global-confg#the-arappjson-file))
### new-dao.js
Creates and configures a new DAO instance.
$ truffle exec script/new-dao.js
or
$ npm run deploy:dao
KreditsKit address is loaded 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
$ npm run deploy:apps
## Deployment
### Apps deployment
To deploy a new app version run:
$ aragon apm publish major --environment=NETWORK_TO_DEPLOY
### KreditsKit
deploy the KreditsKit as Kit to create new DAOs
$ truffle exec scripts/deploy-kit.js --network=NETWORK_TO_DEPLOY
### Creating a new DAO
make sure all apps and the KreditsKit are deployed, then create a new DAO:
$ truffle exec scripts/new-dao.js --network=NETWORK_TO_DEPLOY
## ACL / Permissions
## Upgradeable contracts ## Upgradeable contracts
We use aragonOS for upgradeability of the different contracts. Refer to the We use OpenZeppelin for an upgradeable contracts: [https://www.npmjs.com/package/@openzeppelin/hardhat-upgrades](https://www.npmjs.com/package/@openzeppelin/hardhat-upgrades)
[aragonOS upgradeablity documentation](https://hack.aragon.org/docs/upgradeability-intro)
for more details.
### Example Refer to the OpenZeppelin README and `scripts/create-proxy.js`
1. Setup (see #Bootstrap)
1. Deploy each contract/apps (see `/apps/*`)
2. Create a new DAO (see scripts/deploy-kit.js)
2. Update
1. Deploy a new Version of the contract/app (see `/apps/*`)
2. Use the `aragon dao upgrade` command to "install" the new version for the DAO
(`aragon dao upgrade <DAO address> <app name>`)
## Known Issues ## Known Issues

View File

@ -10,17 +10,13 @@
"wallet:create": "hardhat create-wallet", "wallet:create": "hardhat create-wallet",
"devchain": "hardhat node --network hardhat", "devchain": "hardhat node --network hardhat",
"deploy:dao": "hardhat run scripts/create-proxy.js --network localhost", "deploy:dao": "hardhat run scripts/create-proxy.js --network localhost",
"seed": "hardhat run scripts/seeds.js --network localhost", "seeds": "hardhat run scripts/seeds.js --network localhost",
"install-all": "./scripts/every-app.sh \"npm install\"", "install-all": "./scripts/every-app.sh \"npm install\"",
"postshrinkwrap": "node scripts/fix-package-lock.js &>/dev/null || true", "postshrinkwrap": "node scripts/fix-package-lock.js &>/dev/null || true",
"build-json": "npm run compile-contracts && node ./scripts/build-json.js", "build-json": "npm run compile-contracts && node ./scripts/build-json.js",
"repl": "truffle exec scripts/repl.js", "repl": "hardhat console --network localhost",
"seeds": "truffle exec scripts/seeds.js", "compile-contracts": "hardhat compile --force",
"compile-contracts": "truffle compile --all", "bootstrap": "npm run deploy:dao && npm run seeds",
"bootstrap": "npm run reset:hard && npm run seeds",
"reset": "npm run deploy:kit && npm run deploy:dao",
"reset:hard": "npm run compile-contracts && npm run deploy:apps && npm run reset",
"dao:address": "truffle exec scripts/current-address.js",
"lint:contracts": "solhint \"contracts/**/*.sol\" \"apps/*/contracts/**/*.sol\"", "lint:contracts": "solhint \"contracts/**/*.sol\" \"apps/*/contracts/**/*.sol\"",
"lint:contract-tests": "eslint apps/*/test", "lint:contract-tests": "eslint apps/*/test",
"lint:wrapper": "eslint lib/", "lint:wrapper": "eslint lib/",