Network Upgrade (Spork) Process
Overview
A spork is a coordinated network upgrade process where node operators upgrade their node software and re-initialize with a consolidated representation of the previous spork's state. This enables rapid development on the Flow Protocol and minimizes the impact of breaking changes.
The Flow network sporks approximately once every year. Upcoming sporks
are announced in advance on the #flow-validators-announcements
Discord channel
and in Upcoming Sporks. The #flow-validators-announcements
channel is
also used to coordinate during the spork process.
This guide is for existing operators participating in a spork. See Node Bootstrap for a guide to joining the network for the first time.
Step 1 - Cleaning Up Previous Spork State
Once the spork start has been announced on, stop your node and clear your database. The node should stay stopped for the duration of the spork.
You can skip this step if it is your first time running a node on Flow.
- Stop your Flow node
- Clear the contents of your
data
directory that you have previously created. The default location is/var/flow/data
. Thedata
directory contains the Flow chain state.
Step 2 - Start Your Node
Once you receive an announcement that the spork process is complete (via Discord), you will need to fetch the genesis info, update your runtime configuration and then boot your Flow node up!
If you had set the dynamic bootstrap arguments command line arguments (--dynamic-startup-access-address
, --dynamic-startup-access-publickey
, --dynamic-startup-epoch-phase
) please remove them.
- Run the transit script to fetch the new genesis info:
./boot-tools/transit pull -b ./bootstrap -t ${PULL_TOKEN} -r ${YOUR_NODE_TYPE} --concurrency 10 --timeout 15m
-
PULL_TOKEN
will be provided by the Flow team.- For
collection
,consensus
,verification
node type it will generally betestnet-x
ormainnet-x
where x is the latest number of respective network upgrade. e.g.testnet-52
,mainnet-26
. - For
execution
node type it will generally betestnet-x-execution
ormainnet-x-execution
. - For
access
node:- It will generally be
testnet-x
ormainnet-x
if execution data indexing is not enabled. - It will generally be
testnet-x-execution
ormainnet-x-execution
if execution data indexing is enabled.
- It will generally be
- For
-
YOUR_NODE_TYPE
should be one ofcollection
,consensus
,execution
,verification
,access
based on the node(s) that you are running.
- Pull the latest changes from flow-go repository
- Get your
node-id
, you can find it at/path/to/bootstrap/public-genesis-information/node-id
- Update the
FLOW_GO_NODE_ID
inside runtime-conf.env to thenode-id
that you got from the previous step - Start your Flow node via
docker
orsystemd
See Node Bootstrap for detailed information on Docker/Systemd configuration.
Common Issues
Error: cannot create connection
_1020T18:34:21Z","message":"could not create connection"}_10{"level":"error","node_role":"consensus","node_id":"6d3fac8675a1df96f4bb7a27305ae531b6f4d0d2bc13a233e37bb07ab6b852dc","target":"QmVcSQaCdhmk1CMeMN7HTgGiUY1i2KqgVE2vvEmQXK4gAA","error":"failed to dial : all dials failed_10 * [/ip4/155.138.151.101/tcp/3569] dial tcp4 155.138.151.101:3569: connect: connection refused","retry_attempt":2,"time":"2020-05-20T18:34:21Z","message":"could not create connection"}
This error is OK. Your fellow node operators have not turned on/joined the network yet. So no need to worry about it!