After the recent announcement to break out into BP groups to do trial runs of booting the EOS Blockchain, we have been hard at work going through the process of ensuring everything goes smoothly.
In this post, we describe the exact steps you need to take to bootstrap EOS Blockchain for a trial run within the Trinity Testnet launch.
Prerequisites
This tutorial assumes you have the latest EOS branch compiled and all binaries installed.
- Generate key pair to be used for eosio user:
cleos create keys
You should get some keys...
Private key: 5J5PzFsLMsbU8XK3qGPm69hqvMHfho8D9WiSkAi7rfB32rnMtRQ
Public key: EOS6RAzfeEDBu6uKEo1XbVgTw7UxqFXLC5KwcLT441DLG7AuD554q
*Be sure to save your keys in secure place!
- Run nodeos once to generate sample genesis file, and set initial_key to generated public key from step 1:
{
"initial_timestamp": "2018-03-01T12:00:00.000",
"initial_key": "EOS6RAzfeEDBu6uKEo1XbVgTw7UxqFXLC5KwcLT441DLG7AuD554q",
"initial_configuration": {
"base_per_transaction_net_usage": 100,
"base_per_transaction_cpu_usage": 500,
"base_per_action_cpu_usage": 1000,
"base_setcode_cpu_usage": 2097152,
"per_signature_cpu_usage": 100000,
"per_lock_net_usage": 32,
"context_free_discount_cpu_usage_num": 20,
"context_free_discount_cpu_usage_den": 100,
"max_transaction_cpu_usage": 10485760,
"max_transaction_net_usage": 104857,
"max_block_cpu_usage": 104857600,
"target_block_cpu_usage_pct": 1000,
"max_block_net_usage": 1048576,
"target_block_net_usage_pct": 1000,
"max_transaction_lifetime": 3600,
"max_transaction_exec_time": 0,
"max_authority_depth": 6,
"max_inline_depth": 4,
"max_inline_action_size": 4096,
"max_generated_transaction_count": 16,
"max_transaction_delay": 3888000
},
"initial_chain_id": "00000000000000000000000000000000000000000000000005472696e6974790a"
}
You can generate initial chain id using text to hex conversion:
>> echo "Trinity" | xxd -c 256 -ps
That should give you an ID like this: 5472696e6974790a
- Copy genesis.json to data directory and create initial config.ini file with eosio keys:
get-transactions-time-limit = 3
genesis-json = "genesis.json"
block-log-dir = "blocks"
max-reversible-block-time = -1
max-pending-transaction-time = -1
http-server-address = 0.0.0.0:8000
p2p-listen-endpoint = 0.0.0.0:9000
p2p-server-address = <domain-name>:9000
mongodb-queue-size = 256
agent-name = "<Agent name>"
allowed-connection = specified
log-level-net-plugin = info
max-clients = 25
connection-cleanup-period = 30
network-version-match = 0
sync-fetch-span = 1000
enable-stale-production = true
required-participation = 33
peer-private-key=["EOS6RAzfeEDBu6uKEo1XbVgTw7UxqFXLC5KwcLT441DLG7AuD554q","5J5PzFsLMsbU8XK3qGPm69hqvMHfho8D9WiSkAi7rfB32rnMtRQ"]
private-key=["EOS6RAzfeEDBu6uKEo1XbVgTw7UxqFXLC5KwcLT441DLG7AuD554q","5J5PzFsLMsbU8XK3qGPm69hqvMHfho8D9WiSkAi7rfB32rnMtRQ"]
producer-name = eosio
plugin = eosio::producer_plugin
plugin = eosio::chain_api_plugin
plugin = eosio::account_history_plugin
plugin = eosio::account_history_api_plugin
plugin = eosio::net_api_plugin
plugin = eosio::net_plugin
- Use start.sh - start script that looks something like the following:
!/bin/bashDATADIR=/path/to-eos/data-dirnodeos --data-dir $DATADIR --config-dir $DATADIR > $DATADIR/stdout.txt 2> $DATADIR/stderr.txt & echo $! > $DATADIR/eosd.pid
-
Start nodeos process for eosio ./start.sh and monitor stderr.txt for any errors.
-
Start the wallet service:
nohup keosd start
- Create default wallet for eosio user:
cleos -u http://localhost:8888 wallet create
*Save the default wallet password!
Example: PW5JAuNFDHWz1q3tQMV4wxTNJLW3tcrpGTL8A1LbCtCL4UxgbqS1L
- Unlock default wallet and import eosio private key:
cleos -u https://localhost:4003/ wallet unlock --password
Example: PW5JAuNFDHWz1q3tQMV4wxTNJLW3tcrpGTL8A1LbCtCL4UxgbqS1L
cleos -u https://localhost:4003 wallet import
Example: 5J5PzFsLMsbU8XK3qGPm69hqvMHfho8D9WiSkAi7rfB32rnMtRQ
- Install bios contract:
cleos -u http://localhost:8000 set contract eosio /opt/eos/build/contracts/eosio.bios -p eosio
- Collect public keys with corresponding account names from participating BPs and add each account:
cleos -u http://localhost:8000 create account eosio eostribe [owner-public-key] [active-public-key]
In the above example the same public key is used for both owner and active public keys for simplicity. In a real production scenario those keys might be different.
Example:
EOS81fkevoxZiwa2BarrX8MgBm4f6zVZux5u9Rt8uaAuVpQtMJGDiEOS81fkevoxZiwa2BarrX8MgBm4f6zVZux5u9Rt8uaAuVpQtMJGDi
- Then create setbp.json file with all block producer keys listed:
"version": "042918","producers": [{"producer_name":"eostribe", "block_signing_key":"EOS81fkevoxZiwa2BarrX8MgBm4f6zVZux5u9Rt8uaAuVpQtMJGDi"},{"producer_name":"edenx", "block_signing_key":"EOS5Fji6x8dgSPHzpi7NpYxQT8V1gxC7cEjKnan2CivHBikS4etyC"},{"producer_name":"cryptolions", "block_signing_key":"EOS4uD43rw6sB46AKWkU5rtXZnnRJeYhAtpwvHszJ8QD3Eqbgg7TE"},{"producer_name":"eosrio", "block_signing_key":"EOS7XYenowtgqicTieLaxiTvF3TsCctEN7g5k8ZyAPkfuvusuycnE"},{"producer_name":"eoscannon", "block_signing_key":"EOS7xhXqvZq9ptfrHaXh5KeDLpu7Pik62sbyTfRpkEPu3v3GLrQDW"},{"producer_name":"hkeos", "block_signing_key":"EOS4tiVonwbmT6w5jZjxaWx8p1CkejsBtcwtn6YaqZRteKyYGQZAE"},{"producer_name":"eosgravity", "block_signing_key":"EOS6Z5843PLPjjEP3vmm7eim8rHxyTsGnKGXPnvzdQj8NyoyAC7Eb"},{"producer_name":"eosasia", "block_signing_key":"EOS8g5uqMKwBGyHAS8zdR6WZksYjKxqrBUMr9VRbakMeufCkmGk2y"},{"producer_name":"topone", "block_signing_key":"EOS5ja2TA8wXeJ8zMAWPomrbmoxsB7AdeT1xu8vgooVQpcFZZSJQo"},{"producer_name":"viabtc", "block_signing_key":"EOS589V9T9EBqMZoE8urrtDzaCu6YWwg7ZhY6HKgxtqWRPH19ABGA"},{"producer_name":"eosamsterdam", "block_signing_key":"EOS643Fo4Wm5qEQuhJjQZMibhbMvUg9FJ9qQQ2vigV7MgyRyoPwDc"},{"producer_name":"eossocal", "block_signing_key":"EOS8MkTExpdAN2h5zp2h3iu4HvwXaeeykSyDdx3cNdrx93SGAzWVz"},{"producer_name":"eospace", "block_signing_key":"EOS7JXDhxJzHXLhcG4TEUnCLNEmtjrFUAWmcg2Rrr58qCxGnkRerS"},{"producer_name":"eoseco", "block_signing_key":"EOS85fDTxvb2P6cXuz5nQyaDwTPbemwcw6KyVDmHHZaGFNog5fBCK"},{"producer_name":"tokenika", "block_signing_key":"EOS8FMoqXSXMZ1LhgEgMxsEunckz28KvRqLk7ioHkmfVY8JnvyenT"}]}
- Finally add block producers to the bios contract:
cleos -u https://localhost:4003 push action eosio setprods "$(cat setbp.json)" -p eosio@active
- Add following lines in config.ini to restrict connections from only producers specified:
peer-key = "EOS81fkevoxZiwa2BarrX8MgBm4f6zVZux5u9Rt8uaAuVpQtMJGDi"peer-key = "EOS6GTbcoG4Hum9JaC1kjH3ujuj7VNQh3b9Mh3oiAUy7WvLFXFR6V"peer-key = "EOS5Fji6x8dgSPHzpi7NpYxQT8V1gxC7cEjKnan2CivHBikS4etyC"peer-key = "EOS4uD43rw6sB46AKWkU5rtXZnnRJeYhAtpwvHszJ8QD3Eqbgg7TE"peer-key = "EOS7XYenowtgqicTieLaxiTvF3TsCctEN7g5k8ZyAPkfuvusuycnE"peer-key = "EOS7xhXqvZq9ptfrHaXh5KeDLpu7Pik62sbyTfRpkEPu3v3GLrQDW"peer-key = "EOS4tiVonwbmT6w5jZjxaWx8p1CkejsBtcwtn6YaqZRteKyYGQZAE"peer-key = "EOS6Z5843PLPjjEP3vmm7eim8rHxyTsGnKGXPnvzdQj8NyoyAC7Eb"peer-key = "EOS8g5uqMKwBGyHAS8zdR6WZksYjKxqrBUMr9VRbakMeufCkmGk2y"peer-key = "EOS5ja2TA8wXeJ8zMAWPomrbmoxsB7AdeT1xu8vgooVQpcFZZSJQo"peer-key = "EOS589V9T9EBqMZoE8urrtDzaCu6YWwg7ZhY6HKgxtqWRPH19ABGA"peer-key = "EOS643Fo4Wm5qEQuhJjQZMibhbMvUg9FJ9qQQ2vigV7MgyRyoPwDc"peer-key = "EOS8MkTExpdAN2h5zp2h3iu4HvwXaeeykSyDdx3cNdrx93SGAzWVz"peer-key = "EOS7JXDhxJzHXLhcG4TEUnCLNEmtjrFUAWmcg2Rrr58qCxGnkRerS"peer-key = "EOS85fDTxvb2P6cXuz5nQyaDwTPbemwcw6KyVDmHHZaGFNog5fBCK"peer-key = "EOS8FMoqXSXMZ1LhgEgMxsEunckz28KvRqLk7ioHkmfVY8JnvyenT"
- Share genesis file and your peer:
<domain-name>:9000 (with block producers)
- Monitor logs while prock producers join the network.
Note: consider switching your RPC interface to SSL protocol ASAP!
You can learn how to do that via this great resource by EOS RIO
Connect With Us
Website - https://eostribe.io
Github - https://github.com/eostribe
Telegram - http://t.me/EOSTribe
Facebook - https://www.facebook.com/groups/eostribe
Twitter - https://twitter.com/eostribe
Medium - https://medium.com/eostribe
Dischord - https://discord.gg/Su7pDGt