docs: add detail to sync modes page (#26014)
* add detail to sync modes page * add code snippets * update code snippets
This commit is contained in:
parent
0c755d2bec
commit
f314538c72
|
@ -5,7 +5,8 @@ sort-key: L
|
||||||
|
|
||||||
Syncing is the process by which Geth catches up to the latest Ethereum block and current global state.
|
Syncing is the process by which Geth catches up to the latest Ethereum block and current global state.
|
||||||
There are several ways to sync a Geth node that differ in their speed, storage requirements and trust
|
There are several ways to sync a Geth node that differ in their speed, storage requirements and trust
|
||||||
assumptions. This page outlines three sync configurations for full nodes and one for light nodes.
|
assumptions. Now that Ethereum uses proof-of-stake based consensus, a consensus client is required for
|
||||||
|
Geth to sync.
|
||||||
|
|
||||||
## Full nodes
|
## Full nodes
|
||||||
|
|
||||||
|
@ -33,7 +34,24 @@ then regenerated locally. The state download is the part of the snap-sync that t
|
||||||
and the progress can be monitored using the ETA values in the log messages. However, the blockchain is also
|
and the progress can be monitored using the ETA values in the log messages. However, the blockchain is also
|
||||||
progressing at the same time and invalidating some of the regenerated state data. This means it is also necessary
|
progressing at the same time and invalidating some of the regenerated state data. This means it is also necessary
|
||||||
to have a 'healing' phase where errors in the state are fixed. It is not possible to monitor the progress of
|
to have a 'healing' phase where errors in the state are fixed. It is not possible to monitor the progress of
|
||||||
the state heal because the extent of the errors cannot be known until the current state has already been regenerated.
|
the state heal because the extent of the errors cannot be known until the current state has already been regenerated.
|
||||||
|
|
||||||
|
Geth regularly reports `Syncing, state heal in progress` during state heal - this informs the user that
|
||||||
|
state heal has not finished. It is also possible to confirm this using `eth.syncing` - if this command
|
||||||
|
returns `false` then the node is in sync. If it returns anything other than `false` then syncing is still in progress.
|
||||||
|
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# this log message indicates that state healing is still in progress
|
||||||
|
INFO [10-20|20:20:09.510] State heal in progress accounts=313,309@17.95MiB slots=363,525@28.77MiB codes=7222@50.73MiB nodes=49,616,912@12.67GiB pending=29805
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# this indicates that the node is in sync, any other response indicates that syncing has not finished
|
||||||
|
eth.syncing
|
||||||
|
>> false
|
||||||
|
```
|
||||||
|
|
||||||
The healing has to outpace the growth of the blockchain, otherwise the node will never catch up to the current state.
|
The healing has to outpace the growth of the blockchain, otherwise the node will never catch up to the current state.
|
||||||
There are some hardware factors that determine the speed of the state healing (speed of disk read/write and internet
|
There are some hardware factors that determine the speed of the state healing (speed of disk read/write and internet
|
||||||
connection) and also the total gas used in each block (more gas means more changes to the state that have to be
|
connection) and also the total gas used in each block (more gas means more changes to the state that have to be
|
||||||
|
@ -80,7 +98,7 @@ on data served by altruistic full nodes. A light client can be used to query dat
|
||||||
acting as a locally-hosted Ethereum wallet. However, because they don't keep local copies of the Ethereum state, light
|
acting as a locally-hosted Ethereum wallet. However, because they don't keep local copies of the Ethereum state, light
|
||||||
nodes can't validate blocks in the same way as full nodes - they receive a proof from the full node and verify it against their local header chain.
|
nodes can't validate blocks in the same way as full nodes - they receive a proof from the full node and verify it against their local header chain.
|
||||||
To start a node in light mode, pass `--syncmode light`. Be aware that full nodes serving light data are relative scarce
|
To start a node in light mode, pass `--syncmode light`. Be aware that full nodes serving light data are relative scarce
|
||||||
so light nodes can struggle to find peers.
|
so light nodes can struggle to find peers. **Light nodes are not currently working on proof-of-stake Ethereum**.
|
||||||
|
|
||||||
Read more about light nodes on our [LES page](/docs/interface/les.md).
|
Read more about light nodes on our [LES page](/docs/interface/les.md).
|
||||||
|
|
||||||
|
@ -90,6 +108,7 @@ Now that Ethereum has switched to proof-of-stake, all consensus logic and block
|
||||||
This means that syncing the blockchain is a process shared between the consensus and execution clients. Blocks are
|
This means that syncing the blockchain is a process shared between the consensus and execution clients. Blocks are
|
||||||
downloaded by the consensus client and verified by the execution client. In order for Geth to sync, it requires a header from
|
downloaded by the consensus client and verified by the execution client. In order for Geth to sync, it requires a header from
|
||||||
its connected consensus client. Geth does not import any data until it is instructed to by the consensus client.
|
its connected consensus client. Geth does not import any data until it is instructed to by the consensus client.
|
||||||
|
**Geth cannot sync without being connected to a consensus client**. This includes block-by-block syncing from genesis.
|
||||||
|
|
||||||
Once a header is available to use as a syncing target, Geth retrieves all headers between that target header and the
|
Once a header is available to use as a syncing target, Geth retrieves all headers between that target header and the
|
||||||
local header chain in reverse chronological order. These headers show that the sequence of blocks is correct because
|
local header chain in reverse chronological order. These headers show that the sequence of blocks is correct because
|
||||||
|
|
Loading…
Reference in New Issue