An awesome, must-have toolkit and a protocol for the Genesis launch. This toolkit provides a launch protocol to cosmos-based networks. A recommended workflow and the necessary tools for the compilation of genesis.json
. It also includes a crisis protocol.
The network launch is a complex process with many complex factors. It starts with distribution development and does not conclude with the first block of the network.
This repo is an example of a working launch process of cyber. It is not a unique method for launching all types of projects, but the experience that we share can be very useful to others.
- Launch protocol
- Workflow
- Tools
- Network params
- Distribution params
- Crisis protocol
- Points of truth
- Cybers launch FAQ
The protocol has three zones:
- Genesis preparation
- Network and contracts running
- Finalization
The Genesis preparation zone is used for collecting addresses for distribution, distribution parameters, network parameters, and genesis transactions. All the collected data is integrating into genesis.json
, using the network_genesis.json
template.
This zone is also about set upping a DAO as a future, governing entity.
The network and contracts running zone is the stage between block #1 of the launch and the latest block of the network. The latest block is defined by the results of the takeoff donation round. In other words: the latest block should come after all of the pending DAO commitments. This zone is defined as a danger zone because of a possible fault risk of the network, the contracts or both of them.
This zone contains three major events:
- Deploying the web app for interacting with the network and DAO functions
- Start of the takeoff donation round
- Deploying Auction contracts
- Token distribution
The finalization zone should be used after token distribution (as pended commitment). The main event of this zone is preparing for the mainnet.
-
Develop your distribution for the launch. This is the most important step in this guide. What is the total genesis supply? Which communities should be involved? How to distribute tokens? What method for distribution you want to use? How many tokens you want to distribute to the foundation, team, donors, inventors and so on. You can see our example at the distribution directory.
-
According to your distribution, set up the
cyber_distribution.json
andmanual_distribution.json
files with the necessary values. More about that in the distribution directory. -
Set the parameters for the network. In the params directory you are welcome to open discussions about your great params decisions. Put all the params inside of the
network_genesis.json
. -
Select a set of tools for preparing the genesis accounts. This refers to communities gifts if your distribution includes any gifts for communities (like ours). There are two ways to include a group of addresses in the genesis file:
- Using the genesis-generator-tool built-in method (quadratic function)
- Using a custom method
In the first case, you just need a .csv
file with the addresses and the native chain balances. The genesis-generator tool will parse the distribution files and apply the quadratic function for this group.
Notice. The addresses should be converted into the format that is suited to your network. For further details, see the provided converter.
In the second case, you can calculate the balances as you wish, and the genesis generator tool just inserts it in the right format. But you should take care of the distribution sum by yourself. This sum should be compatible with the values at cyber_distribution.json
. More technical details in the genesis-generator-tool.
- After you have prepared all the files you need to move them to the
genesis-generator-tool/data
and start the genesis generation.
- The Game rewards tools for calculating rewards after an incentivized game
- ETH and Cosmos to Cyber converter.
ETH -> cosmos-based
addresses converter andcosmos-based -> cosmos-based
converter - ETH gift distributor for collecting non-contract, Ethereum addresses with at least one outgoing transaction, on a given block height
- Cosmos gift distributor for parsing Cosmos addresses from the file with the exported, on a given block height
- Urbit gift distributor for collecting Urbit entities on a given block height, getting their owners and distributing gifts
- Genesis generator for generating the genesis file
- Data exporters for exporting data from the network. You can export cyberlinks by account using a given block height
The network params are available at the params
README
The distribution params are available at the distribution
README
We can not guarantee that everything will go as expected. The software can be vulnerable. If anything goes wrong, cyber~Congress as the organiser of the game, has the full power of deciding whether the game must be restarted without any rewards or restarted with partial rewards, depending on the circumstances. In the case, such a circumstance shall arise we are going to count with community opinions.
We define 2 danger zones with probabilities to unexpected behaviour and one zone as an intersection of the defined zones:
- Network running
- Contracts running
- The intersection of the two above
In case anything goes wrong, we’ve prepared a crisis protocol.
If the network will fail:
- Stop the contracts (claim app)
- Save current euler snapshot
- Relaunch next euler with previous euler genesis.json
- Start the contracts (claim app)
If the contracts will fail:
- Stop the contracts (claim app)
- Pool bounty
- Redeploy the contracts (claim app)
- Continue the auction
If everything gets fucked up from both ends, then:
- Stop the contracts (claim app)
- Save current euler snapshot
- One week pause for community discussions. And for cyber~Congress to make a decision
File name | Description | IPFS hash |
---|---|---|
cosmos.csv | cosmos network balances state at block 1110000 | QmcgfjcNwucHrSrWFNxKGYLjLouedYjyeP3hRrqD6P8m9K |
ethereum.csv | State of the Ethereum network balances on block 8080808, excluding contracts and addresses without, at least, one outgoing transaction | QmVCMwK3273Wb4gddzmxiitquCe844Qe63SWVyWFA8gEsT |
galaxies_balance.csv | Galaxy balances for non-contract addresses with at least one outgoing transaction, on block 9110129 | QmR7nbMZDrQE5wLoUhgKJ6pZiUkCyJ4bCfgDEyWGfH3SvJ |
stars_balance.csv | Stars balances of non-contract addresses, with at least one outgoing transaction, on block 9110129 | QmUkXZcHB9L3cg2uqMC5ejkCaD3eWsZRmyuWtdATxZUMKj |
planets_balance.csv | Planet balances of non-contract addresses, with at least one outgoing transaction, on block 9110129 | QmZjc2KEQMpvK3dudsyar1Qzq6e4M5ds3CCteUXbne6zxs |
Unsigned euler-6 genesis.json | QmYrZuyMvskb2tkY65Go1Dadh1axXjY4x3VfFadaSSRf8b | |
cyber_distribution | Distribution by user group for euler-5/6 | QmfW6pEsHnC76ZWwGgtbhnRq4fJrUdiU9tz9M2oUnw3JNr |
manual_distribution.json | Manual distribution inside of the groups for euler-5/6 | QmbEX1yNqCXbLF9fqQbJrE58zm4EXF2A8K6WDy9LjXSecd |
network_genesis.json | The genesis.json template with current params for euler-6 | QmNboiSbS4TP6xptek6uyUnuxL3uL4Xef9qbyR7BvuH8Sf |
cyberlinks.json | Euler-5 cyberlinks by address on block 1580000 block | QmNsDrgrJfGvs4Z6mg7XU5KMjg49FGtjUET1NqNoCynrzP |
precommits.csv | Precommit count by validators on euler-5 testnet on block 1580000 | QmdfktVx9jpRx45WTAW9YkfbVijr2pC1AyvuhcS2bSgULk |
Signed euler-6 genesis.json | QmZHpLc3H5RMXp3Z4LURNpKgNfXd3NZ8pZLYbjNFPL6T5n |