Smart contracts and JS API for Kosmos Kredits
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Râu Cao 1dc54eccea
continuous-integration/drone/push Build is passing Details
Update seeds
6 days ago
.ganache-db Add empty Ganache DB directory 5 years ago
.github Add release-drafter config 4 years ago
config Update seeds 6 days ago
contracts Update package name in lockfile 2 months ago
deployments/rinkeby Deployment details 2 years ago
docs readme 4 years ago
lib Use a dummy address for the read-only signer 5 months ago
scripts minor import script improvements 5 months ago
test/contracts Merge branch 'master' into feature/export-import 7 months ago
.dockerignore Add Docker image configs 8 months ago
.drone.yml CI 7 months ago
.eslintignore Add mocha, chai, and test for Contribution 7 months ago
.eslintrc.js Contributor app tests (#143) 4 years ago
.gitignore Added export/import function for contributors 7 months ago
.nvmrc Recommend node.js 16 via nvm config 11 months ago
.solhint.json Readd solhint:default 4 years ago
Dockerfile Add Docker image configs 8 months ago Update README 6 days ago
hardhat.config.js Allow deployer to set a migration-done flag 7 months ago
package-lock.json Update package name in lockfile 2 months ago
package.json 7.0.1 5 months ago
truffle.js Fix provider fallbacks for non dev networks 4 years ago

npm Build Status

Kredits Contracts

This repository contains the Solidity smart contracts and the JavaScript API wrapper for Kosmos Kredits.



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


  1. Run an EVM node and ipfs

     $ npm run devchain
     $ ipfs daemon
  2. Compile contracts and build ABIs

     (compiled artifacts will be in `/artifacts`)
     $ npm run build
  3. Deploy new upgradable contract proxies

     $ npm run deploy:dao
  4. Execute seeds to create demo contributors, contributions, etc. (optional)

     $ npm run seeds

Step 2-4 is also summarized in npm run bootstrap

  1. 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.


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


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:

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