There are some flags that need to be set about sync mode when running a full node, and there are multiple options for each flag, so it is confusing sometimes.
Let’s sort it out here and give some recommendations.
There are two sync modes for running a full node:
full which can be specified by flag
snap sync mode is used for initial sync, which will download the latest states rather than apply the blocks from the genesis. When the initial sync is done, it will switch to
full sync automatically.
full sync mode can also be used to do initial sync, which will apply all the blocks since genesis.
Since the amount of historical data is too large, the initial sync is not recommended for running a full node. Instead, you can download a snapshot from the official repo and start from the snapshot.
To improve the performance further, there is also a fast node introduced by the flag
There are four options for this flag:
- local: a normal full node with complete state world(both MPT and snapshot), the merkle state root will be verified against the block header, it is the default option.
- full: a fast node with only a snapshot state world. Merkle state root is verified by the trustworthy remote verify node by comparing the diff hash(an identity of the diff layer generated by the block) and state root.
- insecure: same as full mode, except that it can tolerate without verifying the diff hash when verify node does not have it.
- none: no merkle state root verification at all, there is no need to set up or connect a remote verify node at all, it is lighter compared to full and insecure mode, but get a very little chance that the state is not consistent with other peers.
For regular users, the
none option is recommended and it improved a lot of performance.
For details, you can refer to the doc: https://docs.bnbchain.org/docs/BSC-separate-node.
There are two types of gc mode:
archive which can be specified by flag
archive mode will hold onto the states generated when applying blocks. It will cost a lot of space and require higher specs for machines to run an archive node and sometimes unaffordable for regular users.
full mode will not hold onto the states generated when applying blocks and it is enabled by default. It’s recommended for regular users who want to run a full node.
Diff sync allows BSC client simply apply the execution result of a block securely without executing the transactions. It can be enabled by flag
--diffsync. According to test, fastnode get better performance than diffsync, so diffsync is deprecated.
It’s recommended for all users who want to run a full node to download a snapshot from the official repo first instead of syncing from the genesis.
You can refer to the doc: https://docs.bnbchain.org/docs/validator/fullnode
For users who have better machines to run a full node, it’s recommended to run a full node with
full sync mode .
The start command should be like:
./geth --config ./config.toml --datadir ./node --syncmode full --cache 5000 .
Otherwise, if you want better performance, you can start a fast node:
./geth --config ./config.toml --datadir ./node --syncmode full --cache 5000 --tries-verify-mode none