How to start a Dawn3 testnetwork and add producers using eosio.bios
Hello EOS community,
We just launched a Dawn3 test network on DAWN-2018-03-29-ALPHA release.
The big change from Dawn2 is that BPs are added with the help of what we think will be called an “eosio.bios contract", and not from genesis.json.
Our testnet monitor: http://jungle.cryptolions.io:9898/monitor3/
Our Testnet Telegram Channel: https://t.me/jungletestnet
Github: https://github.com/CryptoLions/Jungle3Testnet
Welcome to the Jungle
Building your testnet
If you would like to build own test network, compile and install:
Create home dir
# mkdir /home/eos-DAWN-2018-03-29-ALPHA
# cd /home/eos-DAWN-2018-03-29-ALPHA
# git clone https://github.com/eosio/eos --recursive
# cd eos
# git checkout DAWN-2018-03-29-ALPHA
# git submodule update --recursive
# ./eosio_build.sh
# cd build
# make install
If everything was compiled okay, build a node:
Create a dir in opt
# mkdir /opt/mytestNedNode01
# mkdir /opt/mytestNedNode01/programs
Copy compiled node files (cleos, nodeos,..) from dirs:
/home/eos-DAWN-2018-03-29-ALPHA/eos/build/programs/cleos/cleos
/home/eos-DAWN-2018-03-29-ALPHA/eos/build/programs/nodes/nodes
Into /opt/mytestNedNode01/programs folder
Copy
/home/eos-DAWN-2018-03-29-ALPHA/eos/build/genesis.json
To /opt/mytestNedNode01
Create config.ini in /opt/mytestNedNode01
get-transactions-time-limit = 3
genesis-json = "/opt/mytestNedNode01/genesis.json"
block-log-dir = "blocks"
max-reversible-block-time = -1
max-pending-transaction-time = -1
http-server-address = 0.0.0.0:8888
p2p-listen-endpoint = 0.0.0.0:9876
p2p-server-address = localhost:9876
access-control-allow-origin = *
#p2p-peer-address = localhost:9876
#p2p-peer-address = localhost:9876
mongodb-queue-size = 256
agent-name = "Agent Name"
allowed-connection = any
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
private-key=["EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV","5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"]
producer-name = eosio
plugin = eosio::producer_plugin
plugin = eosio::wallet_api_plugin
plugin = eosio::wallet_plugin
plugin = eosio::chain_api_plugin
plugin = eosio::account_history_plugin
plugin = eosio::account_history_api_plugin
================================================================
Next, scripts to start/stop our node:
Create start.sh (https://github.com/CryptoLions/scripts/edit/master/start_nodeos.sh) in /opt/mytestNedNode01/ folder:
#!/bin/bash
EOSIOBINDIR=/opt/mytestNedNode01/programs
DATADIR=/opt/mytestNedNode01
$EOSIOBINDIR/nodeos --enable-stale-production true --data-dir $DATADIR --config-dir $DATADIR > $DATADIR/stdout.txt 2> $DATADIR/stderr.txt & echo $! > $DATADIR/eosd.pid
===============
Create stop.sh (https://github.com/CryptoLions/scripts/blob/master/stop.sh) in the same folder
#!/bin/bash
DIR="/opt/mytestNedNode01"
if [ -f $DIR"/eosd.pid" ]; then
pid=`cat $DIR"/eosd.pid"`
echo $pid
kill $pid
rm -r $DIR"/eosd.pid"
echo -ne "Stoping Node"
while true; do
[ ! -d "/proc/$pid/fd" ] && break
echo -ne "."
sleep 1
done
echo -ne "\rNode Stopped. \n"
fi
====================================
--enable-stale-production true in start script we need only on the beginning and only for first node in our network.
See if everything is done and then start the node by running ./start.sh. Node log output will be in stderr.txt file If everything is ok we will see something like this:
So eosio start producing blocks..
Now we will start second node with new producer and allow him to produce blocks using eosio.bios contract
Lets create new keys for new account and new BP node
# cd /opt/mytestNedNode01
# programs/cleos -p 8888 --wallet-port 8888 create key (on screenshot different port used)
We received pair:
Private key: 5KD6xe4Jy162GzmNtYQ2ExEk4bVieJEfD4RTncicWDhemR6apww
Public key: EOS5YAH5XuNFQELAiNP9uDzLvnEkRdzNt8vvhvazUtMh9rysEF3Ta
Let’s stop the node: ./stop.sh
Duplicate folder /opt/mytestNedNode01 To /opt/mytestNedNode02
Let’s do some changes in both folders. In mytestNedNode02:
Edit Config.ini
genesis-json = "/opt/mytestNedNode02/genesis.json"
Change port to free
http-server-address = 0.0.0.0:8889
p2p-listen-endpoint = 0.0.0.0:9877
p2p-server-address = localhost:9877
Add peer to your first node
p2p-peer-address = localhost:9876
chage producer keys (generated before) and producer name
private-key=["EOS5YAH5XuNFQELAiNP9uDzLvnEkRdzNt8vvhvazUtMh9rysEF3Ta","5KD6xe4Jy162GzmNtYQ2ExEk4bVieJEfD4RTncicWDhemR6apww"]
producer-name = inita
Edit start.sh and stop.sh with new paths
=========
Now change /opt/mytestNedNode01/config.ini
And add peer to second node:
p2p-peer-address = localhost:9877
OK. Now start 01 node and then start 02 node..
First node will continue producing blocks as user eosio.
Second node will have in logs something like this:
Now go back to the first node and set up the eosio.bios contract
But first we need wallet with the imported eosio key inside
# cd /opt/mytestNedNode01
# programs/cleos -p 8888 --wallet-port 8888 wallet create
Record you wallet password:
Unlock wallet
# programs/cleos -p 8888 --wallet-port 8888 wallet unlock --password PW5JSPxuKBf6gu34upQydhs68iEE1uLvy8otMoibb7GpucNmL3EX4
Then import eosio key:
# programs/cleos -p 8888 --wallet-port 8888 wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
Add eosio.bios smartcontract to user eosio (it was built in you sources dir)
# programs/cleos -p 8888 --wallet-port 8888 set contract eosio /home/eos-DAWN-2018-03-29-ALPHA/eos/build/contracts/eosio.bios/eosio.bios.wast /home/eos-DAWN-2018-03-29-ALPHA/eos/build/contracts/eosio.bios/eosio.bios.abi
As result it will be JSON answer like this:
OK. Now prepare list of block producers.
Create a file setbp.json ( in /opt/mytestNedNode01) and insert this info inside:
{
"version": "12345",
"producers": [
{"producer_name":"inita", "signing_key":"EOS5YAH5XuNFQELAiNP9uDzLvnEkRdzNt8vvhvazUtMh9rysEF3Ta"},
{"producer_name":"eosio", "signing_key":"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"}
]
}
Note: In last version DAWN-2018-03-30-ALPHA parameter for eosio.bois changed from "signing_key" to "block_signing_key".
And the last step - enabling new block producer list
# programs/cleos -p 8888 --wallet-port 8888 push action eosio setprods "$(cat setbp.json)" -p eosio@active
After this command, second node will start producing block as inita user:
Welcome to our Jungle3 Testnetwork: https://github.com/CryptoLions/Jungle3Testnet
Comments, criticisms, and suggestions welcome.
🦁🦁🦁
Instructions for v3.0.0: https://steemit.com/eos/@cryptolions/eos-test-network-using-dawn-v3-0-0-rc-with-eosio-bios-and-eosio-system-contracts
Nice work :))
Thanks.
Awesome work!
Awesome, thanks a lot for instructions!
Congratulations @cryptolions! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of upvotes
Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP
Do not miss the last announcement from @steemitboard!
So the latest dawn-v3 code - when you install contract - now expects a folder instead of actual files:
cleos -p 8888 --wallet-port 8888 set contract eosio /opt/eos/build/contracts/eosio.bios/