|
||
---|---|---|
.ganache-db | ||
.gitea | ||
.github | ||
.openzeppelin | ||
config | ||
contracts | ||
deployments/rinkeby | ||
docs | ||
lib | ||
scripts | ||
test/contracts | ||
.dockerignore | ||
.drone.yml | ||
.eslintignore | ||
.eslintrc.js | ||
.gitignore | ||
.nvmrc | ||
.solhint.json | ||
Dockerfile | ||
hardhat.config.js | ||
package-lock.json | ||
package.json | ||
README.md | ||
truffle.js |
Kredits Contracts
This repository contains the Solidity smart contracts and the JavaScript API wrapper for Kosmos Kredits.
Development
Installation
App dependencies
All requirements are defined in package.json
.
$ npm install
Local development chain
We use hardhat as development environment for the smart contracts.
To run a local development chain run:
$ npm run devchain # or: hardhat node --network hardhat
Bootstrap
-
Run an EVM node and ipfs
$ npm run devchain $ ipfs daemon
-
Compile contracts and build ABIs
(compiled artifacts will be in `/artifacts`) $ npm run build
-
Deploy new upgradable contract proxies
$ npm run deploy:dao
-
Execute seeds to create demo contributors, contributions, etc. (optional)
$ npm run seeds
Step 2-4 is also summarized in npm run bootstrap
-
Show contract addresses
$ cat lib/addresses.json
Fund a local development account
If you need to fund development accounts with devchain coins:
$ npm run fund # or hardhat fund --network localhost
Specs / Testing
With a local development chain running:
$ hardhat test
If you add or change contract code, please make sure to add and/or adapt tests accordingly. Don't worry, it's easy! You can use existing tests as a template for new ones.
Contract architecture
We use the OpenZeppelin hardhat
proxy for
deploying and managing upgradeable contracts. (see scripts/create-proxy.js
)
Each contract is independent and is connected to its dependencies by storing the addresses of the other contracts.
Helper scripts
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.
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)
Some scripts are also defined as npm script, see package.json
.
repl/console
Similar to cli.js but only provides a REPL with an initialized kredits
instance.
$ hardhat console --network localhost
add-{contributor, contribution, proposal}.js
Script to add a new entries to the contracts using the JS wrapper
$ hardhat run scripts/add-{contributor, contribution, proposal}.js --network localhost
list-{contributors, contributions, proposals}.js
List contract entries
$ hardhat run scripts/list-{contributors, contributions, proposals}.js --network localhost
seeds.js
Run seeds defined in config/seeds.js
.
$ npm run seeds
Get the contract addresses
All contract addresses are stored in lib/addresses.json
$ cat lib/addresses.json
Upgradeable contracts
We use OpenZeppelin for an upgradeable contracts: https://www.npmjs.com/package/@openzeppelin/hardhat-upgrades
Refer to the OpenZeppelin README and scripts/create-proxy.js
OpenZeppelin Step by Step guide
For an upgrade example checkout scripts/upgrade-example.js
Deployment to other networks
Deployable networks are configured in the hardhat.config.js
.
To deploy to those networks provide the --network
argument to the hardhat
commands, e.g. --network rsk
.
Please note that some npm scripts combine multiple hardhat commands. In those
cases the hardhat commands needs to be run manually with the --network
argument. (=> don't use npm run bootstrap
)
Set a DEPLOY_KEY
environment variable with the private key (HEX) which will
be used as a root/deploy account
Typical deployment flow:
$ npm run build
$ hardhat run scripts/create-proxy.js --network rsk
# OR with deploy key:
$ DEPLOY_KEY=0xsomething hardhat run scripts/create-proxy.js --network rsk
$ # commit the new addresses in the addresses.json file if needed
To run the console on one of the non localhost networks you can also just pass on the --network argument.
$ hardhat console --network rsk