状态同步
在 Aptos 网络中的节点(例如,验证器,VFNs 和 PFNs)必须始终与最新的区块链状态同步.在每个节点上运行的状态同步(state sync)组件负责此任务.状态同步识别并从同类节点(peers)获取新的区块链数据,验证数据并将其持久化(persists)到本地存储中.本文档解释了状态同步的工作原理以及如何配置它.
状态同步(Sync)
Section titled “状态同步(Sync)”从高层次来说,状态同步分为两个阶段.首先,所有节点将在启动时引导(在引导阶段).这允许节点追赶到 Aptos 区块链的最新状态.接下来,节点将通过持续同步(在持续同步阶段)保持与区块链的最新状态同步.这两个阶段都有不同的操作模式.
当节点启动时,状态同步将通过使用配置的引导模式执行引导.有几种引导模式:
- 执行自创世(genesis)以来的所有交易.在此模式中,节点将从 Aptos 网络检索自创世以来的所有交易,即,自区块链历史开始以来的所有交易,并重新执行这些交易.自然地,这种模式需要最长的时间,因为它必须处理自网络开始以来的所有交易.
- 自创世以来应用交易输出.在此模式中,节点将检索自创世以来的所有交易,但它不会对交易的重新执行,而是应用以前由验证器执行的交易产生的输出.这种模式减少了所需的 CPU 时间,但仍要处理自网络开始以来的所有交易.
- 自创世以来智能同步.在此模式中,节点将检索自创世以来的所有交易,并根据每个数据块的情况执行交易或应用交易输出,具体取决于哪个更快.这允许节点更有效地适应 CPU 和网络资源约束.这是开发网和其他测试环境的默认模式.
- 快速同步.在此模式中,节点将跳过区块链中的交易历史,直接下载最新的区块链状态.因此,节点将不会有历史交易数据,但它将能够更快地更新至最新的 Aptos 网络.这是测试网和主网的默认模式.
持续同步阶段
Section titled “持续同步阶段”在节点最初启动并同步到 Aptos 网络最新状态后,状态同步将转入连续同步阶段,以便与区块链保持同步更新.有多种连续同步的模式:
- 执行交易.此模式将通过执行提交到区块链的新交易使节点保持最新状态.
- 应用交易输出.此模式将通过跳过交易执行,并仅应用之前由验证器执行的交易输出,以使节点保持最新状态.
- 智能同步.此模式将通过根据每个数据块的情况执行或应用交易输出使节点保持最新状态,具体取决于哪个更快.这使得节点能够更有效地适应 CPU 和网络资源约束.这是所有环境的默认模式.
配置状态同步
Section titled “配置状态同步”下面的片段提供了针对不同用例在节点上配置状态同步的说明.这些配置可以添加到节点的配置文件中,例如 fullnode.yaml
或 validator.yaml
.
执行所有交易
Section titled “执行所有交易”要执行自创世以来的所有交易并继续执行提交的新交易,请将以下内容添加到您的节点配置文件中(例如,fullnode.yaml
或 validator.yaml
):
state_sync: state_sync_driver: bootstrapping_mode: ExecuteTransactionsFromGenesis continuous_syncing_mode: ExecuteTransactions
应用所有交易输出
Section titled “应用所有交易输出”要自创世以来应用所有交易输出并在提交交易时继续应用新的交易输出,请将以下内容添加到您的节点配置文件中:
state_sync: state_sync_driver: bootstrapping_mode: ApplyTransactionOutputsFromGenesis continuous_syncing_mode: ApplyTransactionOutputs
要自创世以来执行或应用所有交易和输出(并在提交新交易时继续执行相同操作),请将以下内容添加到您的节点配置文件中:
state_sync: state_sync_driver: bootstrapping_mode: ExecuteOrApplyFromGenesis continuous_syncing_mode: ExecuteTransactionsOrApplyOutputs
要下载最新的区块链状态并在提交交易时继续处理新的交易,请将以下内容添加到您的节点配置文件中:
state_sync: state_sync_driver: bootstrapping_mode: DownloadLatestStates continuous_syncing_mode: ExecuteTransactionsOrApplyOutputs
归档 PFNs
Section titled “归档 PFNs”要运行一个归档 PFN(这是一个包含自网络开始以来的所有区块链数据,即创世):
- 确保您的 PFN 没有使用快速同步作为引导模式.快速同步将跳过交易历史记录.相反,请使用从创世开始同步的模式,例如,创世智能同步.
- 禁用账本裁剪器,如 数据裁剪文档中所述.这将确保不删除任何数据,并且 PFN 包含所有区块链数据.
同时执行这两个步骤将确保您的 PFN 从创世以来获取所有数据,并在不裁剪任何数据的情况下继续同步.
安全影响和数据完整性
Section titled “安全影响和数据完整性”每个不同状态同步的同步模式都执行了数据完整性验证,以确保同步到节点的数据已由验证器正确生成和签名.每种同步模式的数据完整性验证稍有不同:
-
执行交易:从创世开始执行交易是最安全的同步模式.它将验证从时间开始以来所有交易是否由共识正确同意,以及所有交易是否由验证器正确执行.因此,同步节点将重新验证所有产生的区块链状态.
-
应用交易输出:从创世开始应用交易输出比执行所有交易更快,但它要求同步节点相信验证器已正确执行了交易.然而,所有其他区块链状态仍然需要手动重新验证,例如共识消息,交易历史和状态哈希都会进行验证.
-
智能同步:智能同步根据每个数据块的情况,会执行或应用交易输出中的一个,具体取决于哪个更快.因此,使用此模式的安全影响与应用交易输出的模式相同.
-
快速同步:快速同步模式会跳过历史交易数据,先下载区块链的最新状态,再继续进行实时同步.为了实现这一模式,要求同步中的节点信任验证者已经对交易历史中的所有交易达成正确的共识,并相信这些交易都已被正确执行.尽管如此,区块链的其他所有状态还需要通过手工验证,例如,纪元(epoch)更迭及其导致的区块链状态变更.
所有同步模式都从验证器集合和这些验证器对区块链数据的加密签名中获得其信任源.有关此工作原理的更多信息,请参阅状态同步文章.