This is a Beta version and may still contain bugs. We are not responsible for any losses caused by this version.
Table of Contents
- Design Concept
- Installation & overview
- Using RICO
RICO is a framework which forms a robust boilerplate for decentralized initial coin offerings (ICO). With RICO your ICO will be more responsible and be easier to set up and launch.
The problems with conventional ICO's
With a conventional ICO, the project owner can freely decide the process how tokens are generated. That is, the token design and holding ratio is decided by the project owner. After an initial issuance these tokens are sold to supporters at a certain price or exchanged for the total raised funds during the ICO.
With RICO's approach the entire execution process of issuing tokens is strictly defined on the Ethereum Virtual Machine (EVM) and executed automatically. With RICO your ICO will be fully automatic and decentrilized. The decentrilized nature of an ICO created with RICO implements a true fair distribution system.
An ICO made with RICO is:
- Easy to use
- Node v9.0.0 (visit the website for installation)
- Truffle v4.0.1
- solidity-compiler v0.4.18
- ganache-cli v6.0.3
$ npm install -g email@example.com $ npm install -g firstname.lastname@example.org $ npm install -g email@example.com
(You can use ethereumjs-testrpc to test your RICO build.)
Installation & overview
Install rico-core and generate a new rico project.
$ npm install -g rico-core $ rico new helloico
rico new folder-name will create a new folder in the current directory with a clean installation of the RICO framework.
RICO file structure
When we look in the new directory we'll see a lot of different contracts. Here is a quick overview of the most important files that make up RICO.
- RICO.sol handles the minting of the Tokens of your ICO.
- PoD.sol stands for "Proof of Donation". This handles all the donation logic during your ICO. This contract extends the other PoDs inside the PoDs folder.
- PoDs/PublicSalePoD.sol handles the donations for the public sale.
- PoDs/RICOStandardPoD.sol handles the Initial Deposit and rewarding the market makers.
- PoDs/TokenMintPoD.sol handles a separate token allocation outside of the public sale.
- PoDs/DutchAuctionPoD.sol handles the Dutch Auction ICO format.
- Launcher.sol can deploy and initialize your ICO based on your own parameters.
- KickStarter/deploy.js is your startpoint to set your ICO's parameters and send them to the Launcher.
The RICO framework makes it possible to easily kickstart your ICO with your own ICO requirements. Currently there are three templates available for generating an ICO boilerplate: standard ICO, simple ICO and Dutch Auction.
RICO Standard ICO
RICO Standard ICO utilizes the
PublicSalePoD.sol for your RICO. This method is our suggested method and integrates an Initial Deposit and offers functionality for rewarding market makers. The tokens the owner receives from the Initial Deposit are locked for a fixed period of a 180 days.
A Simple ICO utilizes the
PublicSalePoD.sol for your RICO. This method is more old school, having a separate allocation for the owner and offering the remainder of the tokens through a capped or uncapped public sale. The tokens the owner receives from the separate allocation can be locked for a fixed period which can be set freely.
A Dutch Auction utilizes the
DutchAuctionPoD.sol for your RICO. This is a more advanced method. The template cannot be initialized via the Launcher contract. It can be initialized via the
init.js script inside
exec/DutchAuction, but you will need to deploy the DutchAuctionPoD contract manually.
RICO is really straightforward:
- Deploy RICO to the blockchain.
- Initialize your ICO with the Launcher contract.
- Mint tokens through the RICO contract.
Deploying the RICO contracts
You need to deploy three contracts to the network before you can initialize your ICO:
ContractManager.sol. We made it very easy by providing a truffle migration file to deploy these contracts. Please see the
Local Testnet deploy
First you need to open a local testnet by either (a) opening Ganache or (b) run
ganache-cli we have already prepared the script inside the file called
# (Mac only) make rpcrun executable $ chmod +x rpcrun.bash # run the script $ ./rpcrun.bash
Then open a new Terminal window and
cd into your RICO directory to migrate and deploy rico with truffle.
$ truffle migrate --reset --network testrpc
Now we need to obtain the address that RICO was deployed to. After the migration you should see these lines in your terminal:
Replacing RICO... ... 0x66b3f9a7ab2d993a0336a55c169372762a9e33b5298de468b83321f17a96964c RICO: 0x1c6f2526b0a5128b89ee0f921f8b8b794189f2ed Replacing Launcher... ... 0xb8d1c92c5b2d8522bb038bfc86a91e30a3e24a02ba9159c0910bac6cc18495ad Launcher: 0x39326f43557b33afdad3cec0d0272619c0d7ad9b
Testnet deploy (ropsten)
Caution: ropsten hit the Byzantium HardFork #1700000 you have to update geth to v1.7 and sync to the latest block.
$ npm install truffle-hdwallet-provider
The required contracts are already deployed on the ropsten network:
- Launcher.sol address:
- RICO.sol address:
We will need the RICO and Launcher addresses as written above. Continue to Customize and initialize your ICO.
We haven't deployed the RICO and Launcher contracts to the mainnet yet. Please use truffle console to migrate and deploy the contracts.
Customize and initialize your ICO
It's time to initialize your ICO with the
deploy.js script in
exec/KickStarter. Please check the contents and edit it to your own requirements.
# Your Mnemonic key will be saved as a process.env variable and is used in the truffle.js file. This wallet will be the project owner's wallet to be used during the ICO. $ export MNEMONIC_KEY="your mnemonic key 12 words" # Paste the correct contract address of the deployed RICO contract. $ export RICO_ADDR=0x1c6f2526b0a5128b89ee0f921f8b8b794189f2ed # Paste the correct contract address of the deployed Launcher contract. $ export LAUNCHER_ADDR=0x39326f43557b33afdad3cec0d0272619c0d7ad9b # Run the deploy.js script. $ truffle exec exec/KickStarter/deploy.js --network testrpc
RICO is licensed under the GNU General Public License v3.0.