Skip to main content

Network and chain ID

An Ethereum network is run using a network ID and a chain ID.

The network ID is a property of a peer, not of the chain the peer is managing. Network ID is passed in via the command line by --networkid <id>. Its purpose is to separate peers that are running under a different network ID. You cannot sync with anyone who is running a node with a different network ID. However, since it is trivial to change this, it is a less secure version of GoQuorum's --permissioned flag, and it only used for simple segregation.

The chain ID is a property of the chain managed by the node. It is used for replay protection of transactions. Setting the chain ID has the effect of changing one of the parameters of a transaction, namely the V parameter. The v parameter is set to 2*ChainID + 35/36. For the Ethereum Mainnet, which has a chain ID of 1, this means that all transactions have a value of either 37 or 38.

The chain ID set in the genesis configuration file, in the config section, and is only used when the block number is above the one set at eip155Block. See the GoQuorum example genesis files for an example. It can be changed as many times as needed while the chain is below the eip155Block number and re-rerunning geth init - this will not delete or modify any current sync process or saved blocks.

In GoQuorum, transactions are considered private if the v parameter is set to 37 or 38, which clashes with networks which have a Chain ID of 1. For this reason, GoQuorum will not run using chain ID 1 and will immediately quit if started with such a configuration.