Smart contracts and JS API for Kosmos Kredits https://wiki.kosmos.org/Kredits
Go to file
Râu Cao f10af14fae
continuous-integration/drone/push Build is passing Details
Merge pull request 'Fix variable sort order in contract' (#238) from bugfix/variables into master
Reviewed-on: #238
2023-04-27 09:07:50 +00:00
.ganache-db Add empty Ganache DB directory 2018-04-17 13:13:52 +02:00
.gitea Add release drafter action configs 2023-04-11 23:13:05 +02:00
.github Add release-drafter config 2019-09-18 12:49:00 +02:00
config Update seeds 2023-04-26 15:47:01 +02:00
contracts Fix variable sort order in contract 2023-04-27 11:05:57 +02:00
deployments/rinkeby Deployment details 2021-02-19 10:24:54 +01:00
docs readme 2019-03-24 11:01:59 +01:00
lib Update JS ABIs 2023-04-26 15:49:44 +02:00
scripts Add missing profile manager address to seeds 2023-04-25 16:38:02 +02:00
test/contracts Allow a profile manager key to add contributor profiles 2023-03-22 19:11:37 +07: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 Update README 2023-03-22 18:14:12 +07:00
hardhat.config.js Allow deployer to set a migration-done flag 2022-08-23 12:15:16 +01:00
package-lock.json 7.1.0 2023-04-26 15:49:57 +02:00
package.json 7.1.0 2023-04-26 15:49:57 +02:00
truffle.js Fix provider fallbacks for non dev networks 2019-04-05 13:51:23 +02:00

README.md

npm Build Status

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

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