跳到正文

轻客户端

介绍具备分叉感知能力的共识轻客户端启动、同步委员会、弱主观性检查点、乐观与最终确定标头、执行状态证明、RPC 提供商、数据可用性和隐私。

更新于

仅供教育参考,不构成安全或交易建议。轻客户端仅验证其所配置协议和证明覆盖的对象;请确认具体链、分叉、检查点、标头状态、提供商和未经验证的数据范围。

直接答案

轻客户端是一种验证软件,它跟踪区块链时所需的本地执行、状态和历史数据少于全节点。轻节点是运行这类软件的设备或进程。在权益证明以太坊上,共识轻客户端从近期可信的最终确定检查点启动,并验证能识别分叉的同步委员会更新,以维护乐观标头和最终确定标头;它不会重放每笔 EVM 交易。

这个经过验证的共识视图只是第一层信任锚。要验证账户或合约存储值,客户端必须将已认证的信标链标头关联至执行负载标头,选定其中的 stateRoot,并以该根验证账户或存储证明。缺少所需证明的普通 RPC 响应仍只是提供商的主张。共识签名不会自动证明交易历史、收据、调用追踪、数据可用性、应用行为或长期可检索性。

运行机制

  1. 锁定网络与信任根:链身份、创世验证者根和创世时间、分叉计划与预设、当前时钟、客户端版本,以及近期可信的最终确定弱主观性检查点。通过相互独立且经过认证的来源交叉核验检查点;节点意见一致无法修复恶意起始根。
  2. 为可信区块根取得 LightClientBootstrap。验证启动对象的标头、当前同步委员会及其 Merkle 分支,然后初始化 LightClientStore。若链、分叉摘要、广义索引或序列化模式与所配置分叉不符,应拒绝处理。
  3. 按同步委员会周期处理 LightClientUpdate 对象。在轮换委员会前,验证时隙、参与位、BLS 聚合签名与域、当前及下一委员会分支、最终性分支和单调性。分叉升级可能改变对象字段与广义索引,因此 Altair 常量并非永久通用值。
  4. 分别维护 optimistic_headerfinalized_header 策略。乐观更新能提供较新的信息,但重组或数据扣留风险更高;最终确定更新的共识状态更强,却可能有所滞后。应用必须明确选择适合的标头,而不能把最新响应重新标成最终确定。
  5. 锚定执行数据。验证已认证轻客户端标头携带的执行负载标头及其分支,再把每项账户或存储查询绑定至该执行 stateRoot、区块哈希和最终性状态。在以太坊上,eth_getProof 可返回账户证明及指定存储证明;应在本地验证节点、路径、值和不存在性。
  6. 盘点每个未经验证的范围。余额证明不会认证交易收据、日志查询、调用追踪、调用模拟、内存池、代币标签、预言机、blob、历史区间,也不会证明提供商没有遗漏结果。每种必需对象都应有证明、独立重建、全节点后备方案或明确的信任假设。
  7. 按失败即关闭原则运行。记录检查点、分叉、乐观与最终确定根、执行区块与状态根、证明节点、提供商和时间戳。强制执行最大陈旧期,分散提供商与网络路径,保护查询隐私,测试日蚀攻击与停机恢复;轻客户端的证明范围不足时,应使用全节点或其他验证系统。

计算示例

  • 同步委员会整数边界。 对于 512 人委员会,规范中的超多数测试为 participants * 3 >= 512 * 2。参与者为 341 人时,341 / 512 = 66.6015625%1,023 < 1,024,测试不通过。参与者为 342 人时,342 / 512 = 66.796875%1,026 >= 1,024,测试通过。这只验证所配置的更新规则,并不能证明每名委员或每个实现都是诚实的。
  • 标头时钟。 教学示例中的检查点位于时隙 10,000,被认证标头位于 10,064,其最终确定标头位于 10,032。按 12 seconds/slot,被认证标头比检查点晚 64 * 12 = 768 seconds = 12 minutes 48 seconds,而最终确定标头落后被认证标头 32 * 12 = 384 seconds = 6 minutes 24 seconds。时隙时间不保证网络交付,也不构成固定挂钟时间的最终性服务承诺。
  • 紧凑分支,有限主张。 在包含 2^20 个叶节点的理想平衡树中,单叶分支有 20 个同级哈希。按 32 bytes/hash 计,共 640 bytes;与 8 MiB = 8,388,608 bytes 的对象相比,该分支占 0.00762939453125%,减少 99.99237060546875%。该分支只证明叶节点到根的关系,不证明其他字节可用。
  • 证明与裸 RPC。 在最终确定的执行 stateRoot 下,经验证的账户证明得出 3.25 ETH,而未经证明的 RPC 响应称为 3.30 ETH。差额为 0.05 ETH,且裸响应高出 0.05 / 3.30 = 1.5151515152%。应接受在所选根下证明的值,但不能据此推断稍后的余额、收据、历史结果或代币身份。

风险

  • 配置了错误的链、创世验证者根、创世时间或预设。
  • 从恶意、陈旧或未最终确定的检查点启动。
  • 只使用一个未经认证的检查点来源,或接受长程分叉。
  • 本地时钟漂移导致时隙、周期、域或陈旧性判断错误。
  • 使用过时的分叉计划、对象模式或广义索引。
  • 未验证同步委员会参与度、BLS 签名或域。
  • 遗漏委员会轮换,或接受无效的当前或下一委员会。
  • 把乐观标头当作最终确定标头。
  • 关联了错误的信标链标头、执行负载或执行区块哈希。
  • 对错误的 stateRoot 验证账户或存储证明。
  • 接受格式错误的 trie 节点、路径、编码或不存在性证明。
  • 把不受支持或无证明的 RPC 方法视为已验证。
  • 收到陈旧、受审查、不完整或伪造的提供商响应。
  • 表面独立的提供商共同受控,或遭遇日蚀、Sybil 攻击。
  • 提供证明的全节点剪枝或停止服务,造成活性丧失。
  • 混淆共识有效性与执行重放或应用正确性。
  • 混淆有效证明与数据可用性或永久可检索性。
  • 缺少应用所需的收据、日志、追踪、区块体或历史。
  • 客户端实现、依赖项、二进制文件或分叉升级失败。
  • 向提供商或节点泄露查询、IP、账户和交易隐私。

常见误区

  • 轻客户端只是更小的全节点,或是远程 RPC 的另一个名称。
  • 同步委员会标头经过验证后,每项 RPC 响应都可信。
  • 最新的乐观标头等同于最终确定标头。
  • Merkle 证明或共识签名能证明数据可用性和完整历史。
  • 使用轻客户端会自动获得全节点的隐私、活性与抗审查能力。

相关主题

来源

导航

搜索知识库...