Smart contracts and JS API for Kosmos Kredits https://wiki.kosmos.org/Kredits
Go to file
Râu Cao 0fc4eed09a
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details
CI
2022-08-23 10:55:35 +01:00
.ganache-db Add empty Ganache DB directory 2018-04-17 13:13:52 +02:00
.github Add release-drafter config 2019-09-18 12:49:00 +02:00
config Fix contributorId being used in a reimbursement seed 2021-02-22 15:32:43 +01:00
contracts Allow core users to create contributions 2022-02-03 22:07:17 +01:00
deployments/rinkeby Deployment details 2021-02-19 10:24:54 +01:00
docs readme 2019-03-24 11:01:59 +01:00
lib Cleanup aragon contract leftovers 2022-05-19 18:40:41 +02:00
scripts Formatting 2022-08-23 10:42:33 +01:00
test Add mocha, chai, and test for Contribution 2022-08-23 10:42:07 +01:00
.dockerignore Add Docker image configs 2022-08-08 18:20:38 +02:00
.drone.yml CI 2022-08-23 10:55:35 +01:00
.eslintignore Add mocha, chai, and test for Contribution 2022-08-23 10:42:07 +01:00
.eslintrc.js Contributor app tests (#143) 2019-07-22 06:55:22 +00:00
.gitignore Added export/import function for contributors 2022-08-22 18:12:18 +02:00
.nvmrc Recommend node.js 16 via nvm config 2022-05-16 19:07:29 +02:00
.solhint.json Readd solhint:default 2019-04-13 01:53:52 +02:00
Dockerfile Add Docker image configs 2022-08-08 18:20:38 +02:00
README.md Formatting 2022-07-15 13:34:17 +02:00
hardhat.config.js Add rinkeby network and extend some logs/docs 2022-07-06 18:02:42 +02:00
package-lock.json Add mocha, chai, and test for Contribution 2022-08-23 10:42:07 +01:00
package.json Add mocha, chai, and test for Contribution 2022-08-23 10:42:07 +01:00
truffle.js Fix provider fallbacks for non dev networks 2019-04-05 13:51:23 +02:00

README.md

npm

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

  1. Run an Ethereum 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

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

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)