diff --git a/README.md b/README.md index 80c5f3d..ff229bc 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,12 @@ # Kredits Contracts -This repository contains the Solidity smart contracts and JavaScript API -wrapper for [Kosmos Kredits](https://wiki.kosmos.org/Kredits). +This repository contains the Solidity smart contracts organized as [Aragon](https://hack.aragon.org/) +apps and JavaScript API wrapper for [Kosmos Kredits](https://wiki.kosmos.org/Kredits). -It uses the [Truffle framework](http://truffleframework.com/) for some things. +It is based on [aragonOS](https://hack.aragon.org/docs/aragonos-intro.html) and +follows the aragonOS conventions. +Aragon itself uses the [Truffle framework](http://truffleframework.com/) for some things. ## Development @@ -17,77 +19,40 @@ It uses the [Truffle framework](http://truffleframework.com/) for some things. All requirements are defined in `package.json`. -Those can be installed globally for convenience: +### Local development chain - * [truffle framework](http://truffleframework.com): `npm install -g truffle` - * [ganache](http://truffleframework.com/ganache): `npm install -g ganache-cli` +For local development it is recommended to use +[ganache](http://truffleframework.com/ganache/) to run a local development +chain. Using the ganache simulator no full Ethereum node is required. -We use following solidity contract libraries: +We use the default aragon-cli devchain command to confgure and run a local +development ganache. - * [Open Zeppelin](https://github.com/OpenZeppelin/zeppelin-solidity) +`npm run devchain` (or `aragon devchain --port 7545) -For local development it is recommended to use -[ganache-cli](https://github.com/trufflesuite/ganache-cli) (or the [ganache -GUI](http://truffleframework.com/ganache/) to run a local development chain. -Using the ganache simulator no full Ethereum node is required. +To clear/reset the chain use: -We default to: +`npm run devchain -- --reset` (or `aragon devchain --port 7545 --reset`) -* port 7545 for development to not get in conflict with the default Ethereum - RPC port. -* network ID 100 to stay on the same network id -* store ganache data in .ganache-db to presist the chain data across restarts -* use a fixed Mnemonic code to get the same accounts across restarts +We default to port 7545 for development to not get in conflict with the default +Ethereum RPC port. -Have a look at `ganache-cli` for more configuration options. - -Run your ganache simulator before using Kredits locally: - - $ npm run ganache (which is: ganache-cli -p 7545 -i 100 --db=./.ganache-db -m kredits) - -### Truffle console - -Truffle comes with a simple REPL to interact with the Smart Contracts. Have a -look at the [documentation -here](http://truffleframework.com/docs/getting_started/console) - -NOTE: There are promisses, have a look at the examples: - -```javascript -Token.deployed().then(function(token) { - token.totalSupply.call().then(function(value) { - console.log(value.toString()); - }) -}); -``` - -Also please be aware of the differences between web3.js 0.2x.x and -[1.x.x](https://web3js.readthedocs.io/en/1.0/) - [web3 -repo](https://github.com/ethereum/web3.js/) ## Contract Deployment -Truffle uses migration scripts to deploy contract to various networks. Have a -look at the `migrations` folder for those. The Ethereum nodes for the -different networks need to be configured in `truffle.js`. +Contracts are organized in independent apps (see `/apps`) and are developed +and deployed independently. Each app has a version and can be "installed" +on the Kredits DAO independently. -Run the truffle migration scripts: +![](docs/kredits-diagram.png) - $ truffle deploy - $ truffle deploy --network= +A DAO can be deployed using the `scripts/deploy-kit.js` script or with the +`npm run deploy:dao:dev` command. This deploys a new Kredits DAO, installs +the latest app versions and sets the required permissions. -Truffle keeps track of already executed migration scripts. To reset the -migration use the `--reset` option +See each app in `/apps/*` for details. - $ truffle migrate --reset - -Migration scripts can also be run from within `truffle console` or `truffle -develop` - -To initially bootstrap a local development chain in ganache you can use the -bootstrap script: - - $ npm run bootstrap +## ACL / Permissions ## Helper scripts @@ -123,6 +88,12 @@ Adds a new proposal for an existing contributor $ truffle exec scripts/add-proposal.js +### add-contribution.js + +Adds a new contribution for an existing contributor + + $ truffle exec scripts/add-contribution.js + ### send-funds.js Sends funds to an address. Helpful in development mode to for example fund a @@ -139,40 +110,19 @@ Run seeds defined in `config/seeds.js`. ## Upgradeable contracts -Some of the contracts use upgradability ideas from -[zeppelinos](https://github.com/zeppelinos/labs) (see `contracts/upgradable`). - -The basic idea is to have a Registry contract that knows about the current -implementations and a Proxy contract that uses `delegatecall` to call the -current implementation. That means the Proxy contract holds the storage and -the address of that one does not change but the actuall implemenation is -managed through the Registry. - -To deploy a new version a new contract is deployed then the version is -registered (`addVersion()`) in the Registry and on the Proxy contract is -"upgraded" (`upgrade()`) to the new version. - -The Registry knows about all the different contracts and implementations. -Versions are stored as uint and automatically incremented for every added -implementation. +We use aragonOS for upgradeablity of the different contracts. +Refer to the [aragonOS upgradeablity documentation](https://hack.aragon.org/docs/upgradeability-intro) +for more details. ### Example -Deployment is best done using the truffle deployer. - 1. Setup - 1. Deploy the Registry - 2. Deploy the contract - 3. Register the contract at the Registry: - `registry.addVersion('Token', Token.address)` - 4. Create the Proxy: - `registry.createProxy('Token', 1)` + 1. Deploy each contract/apps (see `/apps/*`) + 2. Create a new DAO (see scripts/deploy-kit.js) 2. Update - 1. Deploy a new Version of the contract - 2. Register the new version at the Registry: - `registry.addVersion('Token', NewToken.address)` - 3. Set the new implementation address on the Proxy contract: - `registry.upgrade('Token', 2)` + 1. Deploy a new Version of the contract/app (see `/apps/*`) + 2. Use the `aragon dao upgrade` command to "install" the new version for the DAO + (`aragon dao upgrade `) ## Known Issues diff --git a/apps/contribution/README.md b/apps/contribution/README.md index fc42cf0..4ed52a5 100644 --- a/apps/contribution/README.md +++ b/apps/contribution/README.md @@ -1,162 +1 @@ -# Aragon React Boilerplate - -> 🕵️ [Find more boilerplates using GitHub](https://github.com/search?q=topic:aragon-boilerplate) | -> ✨ [Official boilerplates](https://github.com/search?q=topic:aragon-boilerplate+org:aragon) - -React boilerplate for Aragon applications. - -This boilerplate also includes a fully working example app, complete with a background worker and a front-end in React (with Aragon UI). - -## Usage - -```sh -aragon init app.aragonpm.eth react -``` - -## Running your app - -### Using HTTP - -Running your app using HTTP will allow for a faster development process of your app's front-end, as it can be hot-reloaded without the need to execute `aragon run` every time a change is made. - -- First start your app's development server running `npm run start:app`, and keep that process running. By default it will rebuild the app and reload the server when changes to the source are made. - -- After that, you can run `npm run start:aragon:http` which will compile your app's contracts, publish the app locally and create a DAO. You will need to stop it and run it again after making changes to your smart contracts. - -Changes to the app's background script (`app/script.js`) cannot be hot-reloaded, after making changes to the script, you will need to either restart the development server (`npm run start:app`) or rebuild the script `npm run build:script`. - -### Using IPFS - -Running your app using IPFS will mimic the production environment that will be used for running your app. `npm run start:aragon:ipfs` will run your app using IPFS. Whenever a change is made to any file in your front-end, a new version of the app needs to be published, so the command needs to be restarted. - -## What's in the box? - -### npm Scripts - -- **start** or **start:aragon:ipfs**: Runs your app inside a DAO served from IPFS -- **start:aragon:http**: Runs your app inside a DAO served with HTTP (hot reloading) -- **start:app**: Starts a development server for your app -- **compile**: Compile the smart contracts -- **build**: Builds the front-end and background script -- **build:app**: Builds the front-end -- **build:script**: Builds the background script -- **test**: Runs tests for the contracts -- **publish:patch**: Release a patch version to aragonPM (only frontend/content changes allowed) -- **publish:minor**: Release a minor version to aragonPM (only frontend/content changes allowed) -- **publish:major**: Release a major version to aragonPM (frontend **and** contract changes) -- **versions**: Check the currently installed versions of the app - -### Libraries - -- [**@aragon/os**](https://github.com/aragon/aragonos): Aragon interfaces -- [**@aragon/client**](https://github.com/aragon/aragon.js/tree/master/packages/aragon-client): Wrapper for Aragon application RPC -- [**@aragon/ui**](https://github.com/aragon/aragon-ui): Aragon UI components (in React) - -## Publish - -This app has 3 environments defined in `arapp.json`: - -| Environment | Network | -|--- |--- | -| default | localhost | -| staging | rinkeby | -| production | mainnet | - -Prerequisites: -- ENS Registry address - -Note: the `default` environment which points to `localhost` does not have an ENS Registry address specified because the `@aragon/cli` will default the value to `0xB9462EF3441346dBc6E49236Edbb0dF207db09B7` (the ENS Registry pre-deployed on the local development chain). - -### Introduction to environments - -Environments are defined in `arapp.json`, for example `staging` points to: -- an ENS registry (`0x314159265dd8dbb310642f98f50c066173c1259b`) -- an APM registry (`open.aragonpm.eth`) -- an APM repository (`app`) -- an Ethereum network (`rinkeby`) -- an Ethereum websockets provider (`wss://rinkeby.eth.aragon.network/ws` - to **read** from the blockchain) - -The `rinkeby` network is further defined in `truffle.js`, and has: -- an Ethereum provider (to **write** to the blockchain): - - an address (`https://rinkeby.infura.io`) - - an Ethereum Account (`0xb4124cEB3451635DAcedd11767f004d8a28c6eE7`) - (which is the first account generated from the `DEFAULT_MNEMONIC` variable, to use a different account see [here](#Using-a-different-Ethereum-account)) - -### Major version: content + contract - -Command: -``` -npm run publish:major -- --environment staging -``` - -This will: -1. _build_ the app's frontend (the output lives in `dist`) -2. _compile_ the app's contract (the output lives in `build`) -3. publish the app to the **staging** environment. - -Sample output: -``` - > aragon apm publish major "--environment" "staging" - - ✔ Successfully published app.open.aragonpm.eth v1.0.0: - ℹ Contract address: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 - ℹ Content (ipfs): QmR695Wu5KrHNec7pRP3kPvwYihABDAyVYdX5D5vwLgxCn - ℹ Transaction hash: 0x3d752db29cc106e9ff98b260a90615921eb32471425a29ead8cbb830fb224d8 -``` - -Note: the contract location is defined in `arapp.json` under `path`. -Note: you can also deploy a major version with only frontend changes by passing `--only-content`. - -### Minor/patch version: content only - -Command: -``` -npm run publish:patch -- --environment staging -``` - -This will: -1. _build_ the app's frontend (which lives in `dist`) -2. publish the app to the **staging** environment. - -Sample output: -``` - ✔ Successfully published app.open.aragonpm.eth v1.1.1: - ℹ Contract address: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 - ℹ Content (ipfs): QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q - ℹ Transaction hash: 0x57864d8efd8d439008621b494b19a3e8f876a8a46b38475f9626802f0a1403c2 -``` - -### Check published versions - -Command: -``` -npm run versions -- --environment staging -``` - -Sample output: -``` - ℹ app.open.aragonpm.eth has 4 published versions - ✔ 1.0.0: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmR695Wu5KrHNec7pRP3kPvwYihABDAyVYdX5D5vwLgxCn - ✔ 1.1.0: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmSwjUZFpv2c2e9fLoxtgFrAsAmBN4DyQGJp4RcqQcW3z3 - ✔ 1.1.1: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q - ✔ 2.0.0: 0x74CBbbC932d7C344FCd789Eba24BfD40e52980c9 ipfs:Qmadb3hzwLDKtb93fF367Vg1epkdsLZF4dhpapNYynjgZF -``` - -### Using a different Ethereum account - -To deploy from a different account, you can: -- define a `~/.aragon/mnemonic.json` file - ``` - { - "mnemonic": "explain tackle mirror kit ..." - } - ``` - or -- define a `~/.aragon/${network_name}_key.json` file, for example: `~/.aragon/rinkeby_key.json` - ``` - { - "keys": [ - "a8a54b2d8197bc0b19bb8a084031be71835580a01e70a45a13babd16c9bc1563" - ] - } - ``` +# Kredits Contribution diff --git a/apps/contributor/README.md b/apps/contributor/README.md index fc42cf0..b4665c5 100644 --- a/apps/contributor/README.md +++ b/apps/contributor/README.md @@ -1,162 +1 @@ -# Aragon React Boilerplate - -> 🕵️ [Find more boilerplates using GitHub](https://github.com/search?q=topic:aragon-boilerplate) | -> ✨ [Official boilerplates](https://github.com/search?q=topic:aragon-boilerplate+org:aragon) - -React boilerplate for Aragon applications. - -This boilerplate also includes a fully working example app, complete with a background worker and a front-end in React (with Aragon UI). - -## Usage - -```sh -aragon init app.aragonpm.eth react -``` - -## Running your app - -### Using HTTP - -Running your app using HTTP will allow for a faster development process of your app's front-end, as it can be hot-reloaded without the need to execute `aragon run` every time a change is made. - -- First start your app's development server running `npm run start:app`, and keep that process running. By default it will rebuild the app and reload the server when changes to the source are made. - -- After that, you can run `npm run start:aragon:http` which will compile your app's contracts, publish the app locally and create a DAO. You will need to stop it and run it again after making changes to your smart contracts. - -Changes to the app's background script (`app/script.js`) cannot be hot-reloaded, after making changes to the script, you will need to either restart the development server (`npm run start:app`) or rebuild the script `npm run build:script`. - -### Using IPFS - -Running your app using IPFS will mimic the production environment that will be used for running your app. `npm run start:aragon:ipfs` will run your app using IPFS. Whenever a change is made to any file in your front-end, a new version of the app needs to be published, so the command needs to be restarted. - -## What's in the box? - -### npm Scripts - -- **start** or **start:aragon:ipfs**: Runs your app inside a DAO served from IPFS -- **start:aragon:http**: Runs your app inside a DAO served with HTTP (hot reloading) -- **start:app**: Starts a development server for your app -- **compile**: Compile the smart contracts -- **build**: Builds the front-end and background script -- **build:app**: Builds the front-end -- **build:script**: Builds the background script -- **test**: Runs tests for the contracts -- **publish:patch**: Release a patch version to aragonPM (only frontend/content changes allowed) -- **publish:minor**: Release a minor version to aragonPM (only frontend/content changes allowed) -- **publish:major**: Release a major version to aragonPM (frontend **and** contract changes) -- **versions**: Check the currently installed versions of the app - -### Libraries - -- [**@aragon/os**](https://github.com/aragon/aragonos): Aragon interfaces -- [**@aragon/client**](https://github.com/aragon/aragon.js/tree/master/packages/aragon-client): Wrapper for Aragon application RPC -- [**@aragon/ui**](https://github.com/aragon/aragon-ui): Aragon UI components (in React) - -## Publish - -This app has 3 environments defined in `arapp.json`: - -| Environment | Network | -|--- |--- | -| default | localhost | -| staging | rinkeby | -| production | mainnet | - -Prerequisites: -- ENS Registry address - -Note: the `default` environment which points to `localhost` does not have an ENS Registry address specified because the `@aragon/cli` will default the value to `0xB9462EF3441346dBc6E49236Edbb0dF207db09B7` (the ENS Registry pre-deployed on the local development chain). - -### Introduction to environments - -Environments are defined in `arapp.json`, for example `staging` points to: -- an ENS registry (`0x314159265dd8dbb310642f98f50c066173c1259b`) -- an APM registry (`open.aragonpm.eth`) -- an APM repository (`app`) -- an Ethereum network (`rinkeby`) -- an Ethereum websockets provider (`wss://rinkeby.eth.aragon.network/ws` - to **read** from the blockchain) - -The `rinkeby` network is further defined in `truffle.js`, and has: -- an Ethereum provider (to **write** to the blockchain): - - an address (`https://rinkeby.infura.io`) - - an Ethereum Account (`0xb4124cEB3451635DAcedd11767f004d8a28c6eE7`) - (which is the first account generated from the `DEFAULT_MNEMONIC` variable, to use a different account see [here](#Using-a-different-Ethereum-account)) - -### Major version: content + contract - -Command: -``` -npm run publish:major -- --environment staging -``` - -This will: -1. _build_ the app's frontend (the output lives in `dist`) -2. _compile_ the app's contract (the output lives in `build`) -3. publish the app to the **staging** environment. - -Sample output: -``` - > aragon apm publish major "--environment" "staging" - - ✔ Successfully published app.open.aragonpm.eth v1.0.0: - ℹ Contract address: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 - ℹ Content (ipfs): QmR695Wu5KrHNec7pRP3kPvwYihABDAyVYdX5D5vwLgxCn - ℹ Transaction hash: 0x3d752db29cc106e9ff98b260a90615921eb32471425a29ead8cbb830fb224d8 -``` - -Note: the contract location is defined in `arapp.json` under `path`. -Note: you can also deploy a major version with only frontend changes by passing `--only-content`. - -### Minor/patch version: content only - -Command: -``` -npm run publish:patch -- --environment staging -``` - -This will: -1. _build_ the app's frontend (which lives in `dist`) -2. publish the app to the **staging** environment. - -Sample output: -``` - ✔ Successfully published app.open.aragonpm.eth v1.1.1: - ℹ Contract address: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 - ℹ Content (ipfs): QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q - ℹ Transaction hash: 0x57864d8efd8d439008621b494b19a3e8f876a8a46b38475f9626802f0a1403c2 -``` - -### Check published versions - -Command: -``` -npm run versions -- --environment staging -``` - -Sample output: -``` - ℹ app.open.aragonpm.eth has 4 published versions - ✔ 1.0.0: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmR695Wu5KrHNec7pRP3kPvwYihABDAyVYdX5D5vwLgxCn - ✔ 1.1.0: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmSwjUZFpv2c2e9fLoxtgFrAsAmBN4DyQGJp4RcqQcW3z3 - ✔ 1.1.1: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q - ✔ 2.0.0: 0x74CBbbC932d7C344FCd789Eba24BfD40e52980c9 ipfs:Qmadb3hzwLDKtb93fF367Vg1epkdsLZF4dhpapNYynjgZF -``` - -### Using a different Ethereum account - -To deploy from a different account, you can: -- define a `~/.aragon/mnemonic.json` file - ``` - { - "mnemonic": "explain tackle mirror kit ..." - } - ``` - or -- define a `~/.aragon/${network_name}_key.json` file, for example: `~/.aragon/rinkeby_key.json` - ``` - { - "keys": [ - "a8a54b2d8197bc0b19bb8a084031be71835580a01e70a45a13babd16c9bc1563" - ] - } - ``` +# Kredits Contributor diff --git a/apps/proposal/README.md b/apps/proposal/README.md index fc42cf0..73fe67e 100644 --- a/apps/proposal/README.md +++ b/apps/proposal/README.md @@ -1,162 +1 @@ -# Aragon React Boilerplate - -> 🕵️ [Find more boilerplates using GitHub](https://github.com/search?q=topic:aragon-boilerplate) | -> ✨ [Official boilerplates](https://github.com/search?q=topic:aragon-boilerplate+org:aragon) - -React boilerplate for Aragon applications. - -This boilerplate also includes a fully working example app, complete with a background worker and a front-end in React (with Aragon UI). - -## Usage - -```sh -aragon init app.aragonpm.eth react -``` - -## Running your app - -### Using HTTP - -Running your app using HTTP will allow for a faster development process of your app's front-end, as it can be hot-reloaded without the need to execute `aragon run` every time a change is made. - -- First start your app's development server running `npm run start:app`, and keep that process running. By default it will rebuild the app and reload the server when changes to the source are made. - -- After that, you can run `npm run start:aragon:http` which will compile your app's contracts, publish the app locally and create a DAO. You will need to stop it and run it again after making changes to your smart contracts. - -Changes to the app's background script (`app/script.js`) cannot be hot-reloaded, after making changes to the script, you will need to either restart the development server (`npm run start:app`) or rebuild the script `npm run build:script`. - -### Using IPFS - -Running your app using IPFS will mimic the production environment that will be used for running your app. `npm run start:aragon:ipfs` will run your app using IPFS. Whenever a change is made to any file in your front-end, a new version of the app needs to be published, so the command needs to be restarted. - -## What's in the box? - -### npm Scripts - -- **start** or **start:aragon:ipfs**: Runs your app inside a DAO served from IPFS -- **start:aragon:http**: Runs your app inside a DAO served with HTTP (hot reloading) -- **start:app**: Starts a development server for your app -- **compile**: Compile the smart contracts -- **build**: Builds the front-end and background script -- **build:app**: Builds the front-end -- **build:script**: Builds the background script -- **test**: Runs tests for the contracts -- **publish:patch**: Release a patch version to aragonPM (only frontend/content changes allowed) -- **publish:minor**: Release a minor version to aragonPM (only frontend/content changes allowed) -- **publish:major**: Release a major version to aragonPM (frontend **and** contract changes) -- **versions**: Check the currently installed versions of the app - -### Libraries - -- [**@aragon/os**](https://github.com/aragon/aragonos): Aragon interfaces -- [**@aragon/client**](https://github.com/aragon/aragon.js/tree/master/packages/aragon-client): Wrapper for Aragon application RPC -- [**@aragon/ui**](https://github.com/aragon/aragon-ui): Aragon UI components (in React) - -## Publish - -This app has 3 environments defined in `arapp.json`: - -| Environment | Network | -|--- |--- | -| default | localhost | -| staging | rinkeby | -| production | mainnet | - -Prerequisites: -- ENS Registry address - -Note: the `default` environment which points to `localhost` does not have an ENS Registry address specified because the `@aragon/cli` will default the value to `0xB9462EF3441346dBc6E49236Edbb0dF207db09B7` (the ENS Registry pre-deployed on the local development chain). - -### Introduction to environments - -Environments are defined in `arapp.json`, for example `staging` points to: -- an ENS registry (`0x314159265dd8dbb310642f98f50c066173c1259b`) -- an APM registry (`open.aragonpm.eth`) -- an APM repository (`app`) -- an Ethereum network (`rinkeby`) -- an Ethereum websockets provider (`wss://rinkeby.eth.aragon.network/ws` - to **read** from the blockchain) - -The `rinkeby` network is further defined in `truffle.js`, and has: -- an Ethereum provider (to **write** to the blockchain): - - an address (`https://rinkeby.infura.io`) - - an Ethereum Account (`0xb4124cEB3451635DAcedd11767f004d8a28c6eE7`) - (which is the first account generated from the `DEFAULT_MNEMONIC` variable, to use a different account see [here](#Using-a-different-Ethereum-account)) - -### Major version: content + contract - -Command: -``` -npm run publish:major -- --environment staging -``` - -This will: -1. _build_ the app's frontend (the output lives in `dist`) -2. _compile_ the app's contract (the output lives in `build`) -3. publish the app to the **staging** environment. - -Sample output: -``` - > aragon apm publish major "--environment" "staging" - - ✔ Successfully published app.open.aragonpm.eth v1.0.0: - ℹ Contract address: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 - ℹ Content (ipfs): QmR695Wu5KrHNec7pRP3kPvwYihABDAyVYdX5D5vwLgxCn - ℹ Transaction hash: 0x3d752db29cc106e9ff98b260a90615921eb32471425a29ead8cbb830fb224d8 -``` - -Note: the contract location is defined in `arapp.json` under `path`. -Note: you can also deploy a major version with only frontend changes by passing `--only-content`. - -### Minor/patch version: content only - -Command: -``` -npm run publish:patch -- --environment staging -``` - -This will: -1. _build_ the app's frontend (which lives in `dist`) -2. publish the app to the **staging** environment. - -Sample output: -``` - ✔ Successfully published app.open.aragonpm.eth v1.1.1: - ℹ Contract address: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 - ℹ Content (ipfs): QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q - ℹ Transaction hash: 0x57864d8efd8d439008621b494b19a3e8f876a8a46b38475f9626802f0a1403c2 -``` - -### Check published versions - -Command: -``` -npm run versions -- --environment staging -``` - -Sample output: -``` - ℹ app.open.aragonpm.eth has 4 published versions - ✔ 1.0.0: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmR695Wu5KrHNec7pRP3kPvwYihABDAyVYdX5D5vwLgxCn - ✔ 1.1.0: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmSwjUZFpv2c2e9fLoxtgFrAsAmBN4DyQGJp4RcqQcW3z3 - ✔ 1.1.1: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q - ✔ 2.0.0: 0x74CBbbC932d7C344FCd789Eba24BfD40e52980c9 ipfs:Qmadb3hzwLDKtb93fF367Vg1epkdsLZF4dhpapNYynjgZF -``` - -### Using a different Ethereum account - -To deploy from a different account, you can: -- define a `~/.aragon/mnemonic.json` file - ``` - { - "mnemonic": "explain tackle mirror kit ..." - } - ``` - or -- define a `~/.aragon/${network_name}_key.json` file, for example: `~/.aragon/rinkeby_key.json` - ``` - { - "keys": [ - "a8a54b2d8197bc0b19bb8a084031be71835580a01e70a45a13babd16c9bc1563" - ] - } - ``` +# Kredits Proposal diff --git a/apps/token/README.md b/apps/token/README.md index fc42cf0..c698aa3 100644 --- a/apps/token/README.md +++ b/apps/token/README.md @@ -1,162 +1 @@ -# Aragon React Boilerplate - -> 🕵️ [Find more boilerplates using GitHub](https://github.com/search?q=topic:aragon-boilerplate) | -> ✨ [Official boilerplates](https://github.com/search?q=topic:aragon-boilerplate+org:aragon) - -React boilerplate for Aragon applications. - -This boilerplate also includes a fully working example app, complete with a background worker and a front-end in React (with Aragon UI). - -## Usage - -```sh -aragon init app.aragonpm.eth react -``` - -## Running your app - -### Using HTTP - -Running your app using HTTP will allow for a faster development process of your app's front-end, as it can be hot-reloaded without the need to execute `aragon run` every time a change is made. - -- First start your app's development server running `npm run start:app`, and keep that process running. By default it will rebuild the app and reload the server when changes to the source are made. - -- After that, you can run `npm run start:aragon:http` which will compile your app's contracts, publish the app locally and create a DAO. You will need to stop it and run it again after making changes to your smart contracts. - -Changes to the app's background script (`app/script.js`) cannot be hot-reloaded, after making changes to the script, you will need to either restart the development server (`npm run start:app`) or rebuild the script `npm run build:script`. - -### Using IPFS - -Running your app using IPFS will mimic the production environment that will be used for running your app. `npm run start:aragon:ipfs` will run your app using IPFS. Whenever a change is made to any file in your front-end, a new version of the app needs to be published, so the command needs to be restarted. - -## What's in the box? - -### npm Scripts - -- **start** or **start:aragon:ipfs**: Runs your app inside a DAO served from IPFS -- **start:aragon:http**: Runs your app inside a DAO served with HTTP (hot reloading) -- **start:app**: Starts a development server for your app -- **compile**: Compile the smart contracts -- **build**: Builds the front-end and background script -- **build:app**: Builds the front-end -- **build:script**: Builds the background script -- **test**: Runs tests for the contracts -- **publish:patch**: Release a patch version to aragonPM (only frontend/content changes allowed) -- **publish:minor**: Release a minor version to aragonPM (only frontend/content changes allowed) -- **publish:major**: Release a major version to aragonPM (frontend **and** contract changes) -- **versions**: Check the currently installed versions of the app - -### Libraries - -- [**@aragon/os**](https://github.com/aragon/aragonos): Aragon interfaces -- [**@aragon/client**](https://github.com/aragon/aragon.js/tree/master/packages/aragon-client): Wrapper for Aragon application RPC -- [**@aragon/ui**](https://github.com/aragon/aragon-ui): Aragon UI components (in React) - -## Publish - -This app has 3 environments defined in `arapp.json`: - -| Environment | Network | -|--- |--- | -| default | localhost | -| staging | rinkeby | -| production | mainnet | - -Prerequisites: -- ENS Registry address - -Note: the `default` environment which points to `localhost` does not have an ENS Registry address specified because the `@aragon/cli` will default the value to `0xB9462EF3441346dBc6E49236Edbb0dF207db09B7` (the ENS Registry pre-deployed on the local development chain). - -### Introduction to environments - -Environments are defined in `arapp.json`, for example `staging` points to: -- an ENS registry (`0x314159265dd8dbb310642f98f50c066173c1259b`) -- an APM registry (`open.aragonpm.eth`) -- an APM repository (`app`) -- an Ethereum network (`rinkeby`) -- an Ethereum websockets provider (`wss://rinkeby.eth.aragon.network/ws` - to **read** from the blockchain) - -The `rinkeby` network is further defined in `truffle.js`, and has: -- an Ethereum provider (to **write** to the blockchain): - - an address (`https://rinkeby.infura.io`) - - an Ethereum Account (`0xb4124cEB3451635DAcedd11767f004d8a28c6eE7`) - (which is the first account generated from the `DEFAULT_MNEMONIC` variable, to use a different account see [here](#Using-a-different-Ethereum-account)) - -### Major version: content + contract - -Command: -``` -npm run publish:major -- --environment staging -``` - -This will: -1. _build_ the app's frontend (the output lives in `dist`) -2. _compile_ the app's contract (the output lives in `build`) -3. publish the app to the **staging** environment. - -Sample output: -``` - > aragon apm publish major "--environment" "staging" - - ✔ Successfully published app.open.aragonpm.eth v1.0.0: - ℹ Contract address: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 - ℹ Content (ipfs): QmR695Wu5KrHNec7pRP3kPvwYihABDAyVYdX5D5vwLgxCn - ℹ Transaction hash: 0x3d752db29cc106e9ff98b260a90615921eb32471425a29ead8cbb830fb224d8 -``` - -Note: the contract location is defined in `arapp.json` under `path`. -Note: you can also deploy a major version with only frontend changes by passing `--only-content`. - -### Minor/patch version: content only - -Command: -``` -npm run publish:patch -- --environment staging -``` - -This will: -1. _build_ the app's frontend (which lives in `dist`) -2. publish the app to the **staging** environment. - -Sample output: -``` - ✔ Successfully published app.open.aragonpm.eth v1.1.1: - ℹ Contract address: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 - ℹ Content (ipfs): QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q - ℹ Transaction hash: 0x57864d8efd8d439008621b494b19a3e8f876a8a46b38475f9626802f0a1403c2 -``` - -### Check published versions - -Command: -``` -npm run versions -- --environment staging -``` - -Sample output: -``` - ℹ app.open.aragonpm.eth has 4 published versions - ✔ 1.0.0: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmR695Wu5KrHNec7pRP3kPvwYihABDAyVYdX5D5vwLgxCn - ✔ 1.1.0: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmSwjUZFpv2c2e9fLoxtgFrAsAmBN4DyQGJp4RcqQcW3z3 - ✔ 1.1.1: 0xE636bcA5B95e94F749F63E322a04DB59362299F1 ipfs:QmUYv9cjyNVxCyAJGK2YXjkbzh6u4iW2ak81Z9obdefM1q - ✔ 2.0.0: 0x74CBbbC932d7C344FCd789Eba24BfD40e52980c9 ipfs:Qmadb3hzwLDKtb93fF367Vg1epkdsLZF4dhpapNYynjgZF -``` - -### Using a different Ethereum account - -To deploy from a different account, you can: -- define a `~/.aragon/mnemonic.json` file - ``` - { - "mnemonic": "explain tackle mirror kit ..." - } - ``` - or -- define a `~/.aragon/${network_name}_key.json` file, for example: `~/.aragon/rinkeby_key.json` - ``` - { - "keys": [ - "a8a54b2d8197bc0b19bb8a084031be71835580a01e70a45a13babd16c9bc1563" - ] - } - ``` +# Kredits Token diff --git a/docs/kredits-diagram.png b/docs/kredits-diagram.png new file mode 100644 index 0000000..0114acc Binary files /dev/null and b/docs/kredits-diagram.png differ