As announced on Nomadic Labs’ blog, the April release contains many improvements and fixes for the Tezos shell and its baking daemons. The release is available as usual in the Git branch or in the Docker tag mainnet.
Enable the testchain¶
When the node is started with the new option
it follows both the mainchain and the testchain, once the latter is
Once a node knows about the testchain it will also accept rpc calls
/chains/test/ and as a consequence tezos-client
can be used with the option
This release includes also improvements for the randomization of peers
on the gossip network.
If you are using a front-end node facing the public internet to hide a node in
private mode, it is important for the ip of the private node to be present in
the front-end’s list of trusted peers.
It suffice to pass the private node ip to the
--peer option of the
A lighter setup using snapshots¶
In order to minimize the impact of the testchain on a baker’s existing infrastructure, instead of enabling the testchain on the node that is baking on the mainchain, we advice running a second node. This second node will enable the testchain and it will be used by the baking daemons of the testchain. Deploying a second node can be done without duplicating the existing chain context, but by starting it using a snapshot from your first node.
For this purpose the mainnet node has a new command
export that allows to export a snapshot from a existing whole
context, in history mode full or rolling.
Note that the mainnet node can only export snapshots and not import
A node from the Git branch (or Docker tag) mainnet-snapshots is capable of importing a snapshot and starting from it. This allows for a smaller disk footprint and faster node execution because of better locality on disk. Furthermore a mainnet-snapshots node will start the testchain by default.
Note that the branch mainnet-snapshots produces and requires a tezos-node directory with version 0.0.2 while a node from the branch mainnet requires version 0.0.1. The two are incompatible and a node will refuse to start if given the wrong one.
Single machine setup¶
The suggested setup is to run on the same machine the two nodes,
mainnet with standard ports and mainnet-snapshots on different
For the mainnet node, the updated 003 daemons can be started as usual.
For the mainnet-snapshots node, the 004 daemons should be started
with right port and the option
Note that both sets of daemons need access to the same tezos-client
directory and it is important that this directory is not duplicated.
There are several precautions in place to avoid double baking and
replaying of operations between networks but all daemons should use
the same tezos-client to work properly.
An example of this setup is described later.
Two machine setup¶
If running the mainnet node and the mainnet-snapshots node on two separate machines is preferable, it is important that the two sets of daemons for the main and test chain access the same keys from the same source. Duplicating keys in never advisable. This setup can be chosen if you use the Ledge baking app from Obsidian Systems or a remote signer, such as tezos-remote-signer. They both support the testchain and implement mechanisms to prevent double baking.
Here’s a example of the procedure to set up two nodes on the same machine, running on different ports, built from sources.
Compile the binaries for the two branches mainnet and mainnet-snapshots and copy them into two directories ~/bin-main and ~/bin-test. For example for mainnet:
git fetch --all git checkout mainnet git reset --hard origin/mainnet make mkdir ~/bin-main cp tezos-* ~/bin-main/ git checkout mainnet-snapshots git reset --hard origin/mainnet-snapshots make mkdir ~/bin-test cp tezos-* ~/bin-test/
Gracefully stop your old node and using the new node from mainnet, export a snapshot in the history mode you prefer, default is full:
~/bin-main/tezos-node snapshot export mainnet-$(date +%F).full --data-dir ~/.tezos-node
Restart the node and daemons for the main chain with default ports:
~/bin-main/tezos-node run --net-addr [::]:9732 --rpc-addr localhost:8732 --data-dir ~/.tezos-node ~/bin-main/tezos-baker-003-PsddFKi3 -P 8732 -d ~/.tezos-client run with local node ~/.tezos-node <account> ~/bin-main/tezos-endorser-003-PsddFKi3 -P 8732 -d ~/.tezos-client run <account> ~/bin-main/tezos-accuser-003-PsddFKi3 -P 8732 -d ~/.tezos-client run
Import the snapshot with the node from mainnet-snapshots to populate the new directory ~/tezos-node-testchain:
~/bin-test/tezos-node snapshot import mainnet-$(date +%F).full --data-dir ~/tezos-node-testchain
Generate a fresh network identity:
~/bin-test/tezos-node identity generate --data-dir ~/tezos-node-testchain
Restart the node and daemons for the test chain on different ports:
~/bin-test/tezos-node run --net-addr [::]:9733 --rpc-addr localhost:8733 --data-dir ~/tezos-node-testchain ~/bin-test/tezos-baker-004-Pt24m4xi --chain test -P 8733 -d ~/.tezos-client run with local node ~/tezos-node-testchain <account> ~/bin-test/tezos-endorser-004-Pt24m4xi --chain test -P 8733 -d ~/.tezos-client run <account> ~/bin-test/tezos-accuser-004-Pt24m4xi --chain test -P 8733 -d ~/.tezos-client run
Once the testchain starts the 004 daemons will automatically wake up and the chain will progress.