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 Ethereum 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
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.js
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
Known Issues
When resetting ganache Metamask might have an invalid transaction nonce and transactions get rejected. Nonces in Ethereum must be incrementing and have no gap.
To solve this reset the metamask account (Account -> Settings -> Reset Account)