readme
This commit is contained in:
parent
e7affdb531
commit
0d9b2d7d58
128
README.md
128
README.md
@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
# Kredits Contracts
|
# Kredits Contracts
|
||||||
|
|
||||||
This repository contains the Solidity smart contracts and JavaScript API
|
This repository contains the Solidity smart contracts organized as [Aragon](https://hack.aragon.org/)
|
||||||
wrapper for [Kosmos Kredits](https://wiki.kosmos.org/Kredits).
|
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
|
## Development
|
||||||
|
|
||||||
@ -17,77 +19,40 @@ It uses the [Truffle framework](http://truffleframework.com/) for some things.
|
|||||||
|
|
||||||
All requirements are defined in `package.json`.
|
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`
|
For local development it is recommended to use
|
||||||
* [ganache](http://truffleframework.com/ganache): `npm install -g ganache-cli`
|
[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
|
To clear/reset the chain 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.
|
|
||||||
|
|
||||||
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
|
We default to port 7545 for development to not get in conflict with the default
|
||||||
RPC port.
|
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
|
|
||||||
|
|
||||||
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
|
## Contract Deployment
|
||||||
|
|
||||||
Truffle uses migration scripts to deploy contract to various networks. Have a
|
Contracts are organized in independent apps (see `/apps`) and are developed
|
||||||
look at the `migrations` folder for those. The Ethereum nodes for the
|
and deployed independently. Each app has a version and can be "installed"
|
||||||
different networks need to be configured in `truffle.js`.
|
on the Kredits DAO independently.
|
||||||
|
|
||||||
Run the truffle migration scripts:
|

|
||||||
|
|
||||||
$ truffle deploy
|
A DAO can be deployed using the `scripts/deploy-kit.js` script or with the
|
||||||
$ truffle deploy --network=<network config from truffle.js>
|
`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
|
See each app in `/apps/*` for details.
|
||||||
migration use the `--reset` option
|
|
||||||
|
|
||||||
$ truffle migrate --reset
|
## ACL / Permissions
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
## Helper scripts
|
## Helper scripts
|
||||||
|
|
||||||
@ -123,6 +88,12 @@ Adds a new proposal for an existing contributor
|
|||||||
|
|
||||||
$ truffle exec scripts/add-proposal.js
|
$ 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
|
### send-funds.js
|
||||||
|
|
||||||
Sends funds to an address. Helpful in development mode to for example fund a
|
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
|
## Upgradeable contracts
|
||||||
|
|
||||||
Some of the contracts use upgradability ideas from
|
We use aragonOS for upgradeablity of the different contracts.
|
||||||
[zeppelinos](https://github.com/zeppelinos/labs) (see `contracts/upgradable`).
|
Refer to the [aragonOS upgradeablity documentation](https://hack.aragon.org/docs/upgradeability-intro)
|
||||||
|
for more details.
|
||||||
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.
|
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
Deployment is best done using the truffle deployer.
|
|
||||||
|
|
||||||
1. Setup
|
1. Setup
|
||||||
1. Deploy the Registry
|
1. Deploy each contract/apps (see `/apps/*`)
|
||||||
2. Deploy the contract
|
2. Create a new DAO (see scripts/deploy-kit.js)
|
||||||
3. Register the contract at the Registry:
|
|
||||||
`registry.addVersion('Token', Token.address)`
|
|
||||||
4. Create the Proxy:
|
|
||||||
`registry.createProxy('Token', 1)`
|
|
||||||
2. Update
|
2. Update
|
||||||
1. Deploy a new Version of the contract
|
1. Deploy a new Version of the contract/app (see `/apps/*`)
|
||||||
2. Register the new version at the Registry:
|
2. Use the `aragon dao upgrade` command to "install" the new version for the DAO
|
||||||
`registry.addVersion('Token', NewToken.address)`
|
(`aragon dao upgrade <DAO address> <app name>`)
|
||||||
3. Set the new implementation address on the Proxy contract:
|
|
||||||
`registry.upgrade('Token', 2)`
|
|
||||||
|
|
||||||
## Known Issues
|
## Known Issues
|
||||||
|
|
||||||
|
@ -1,162 +1 @@
|
|||||||
# Aragon React Boilerplate
|
# Kredits Contribution
|
||||||
|
|
||||||
> 🕵️ [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"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
@ -1,162 +1 @@
|
|||||||
# Aragon React Boilerplate
|
# Kredits Contributor
|
||||||
|
|
||||||
> 🕵️ [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"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
@ -1,162 +1 @@
|
|||||||
# Aragon React Boilerplate
|
# Kredits Proposal
|
||||||
|
|
||||||
> 🕵️ [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"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
@ -1,162 +1 @@
|
|||||||
# Aragon React Boilerplate
|
# Kredits Token
|
||||||
|
|
||||||
> 🕵️ [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"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
BIN
docs/kredits-diagram.png
Normal file
BIN
docs/kredits-diagram.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Loading…
x
Reference in New Issue
Block a user