安全、验证与生产就绪
1. 安全目标
输入、计算、网络或交付条件不足时,POC V2 必须保持原有已激活算力(Activated Power),并阻止下游读取不完整、相互冲突或权重背书不足的结果。协议不承诺每个周期都产生新算力(Power)。
协议保护以下四项性质:
| 性质 | 要求 |
|---|---|
| 输入完整性 | 只有连续、最终确认且可按边界恢复的链上事实进入计算 |
| 计算一致性 | 独立实现对相同输入快照产生逐位一致的结果 |
| 背书安全 | 完整验证委员会(Committee)严格超过三分之二权重签署同一结果 |
| 状态原子性 | 只有完整封存后的原子激活(Atomic Activate)能改变下游可见算力 |
2. 威胁模型
| 威胁 | 主要控制 |
|---|---|
| DApp 伪造贡献 | 注册表(Registry)、托管关系、权益代币和 POC 可信贡献入口(poc_contribution) |
| 索引器缺失或篡改事实 | 连续交易扫描、链身份、最终确认边界、事件原始字节与检查点原子提交 |
| 验证者使用不同输入 | 输入快照(InputSnapshot)、逐周期历史、价格快照根和计算上下文(Context) |
| 计算实现分叉 | 可执行规范、黄金测试向量、独立验证器、差分验证与影子重放 |
| 验证者双签 | 独立计算密钥、签名日志(Signer Journal)和预留后签名安全槽位 |
| 网络注入或重放 | 许可覆盖网络、作用域、严格解码、已验证入站(Validated Ingress)和语义去重 |
| 聚合器选择结果 | 只聚合相同计算上下文与结果承诺(Commitment);使用完整验证委员会分母;允许多个聚合器(Aggregator) |
| 中继器修改结果 | QC 绑定交付批次(Batch),链上验证载荷哈希、序号和状态连续性 |
| 部分交付暴露 | 候选结果(Candidate)在原子激活前对 L5 不可见 |
| 治理绕过协议 | 治理只能暂停、冻结、拒绝或升级,不能写入算力或推进游标 |
| 奖励抢跑或重复领取 | 冻结受益人、首次交付回执(Delivery Receipt)、已领取位图和上限预算 |
3. 密钥安全
以下身份必须物理或逻辑隔离:Topo 共识密钥、验证者运营者(Validator Operator)、BLS 计算密钥、POC PeerId、中继账户和奖励地址。
生产环境必须满足:
- 计算密钥由当前运营者在链上授权,并验证持有证明(Proof of Possession,PoP);
- 签名器(Signer)使用独立进程、HSM 边界和独立签名日志;
- 签名器只接受结构化计算上下文与结果承诺,不接受任意字节;
- 签名日志丢失、身份不符、完整性失败或疑似回滚时,系统必须故障即停;
- 每个中继账户使用单一序列写入器,并与计算密钥权限隔离;
- 奖励地址在候选结果创建时冻结,任何触发者都不能替换收款地址。
4. 链事实和数据完整性
每个验证者(Validator)应独立读取 Topo 最终确认链源。采集必须从明确的下一交易版本(next_tx_version)开始连续读取完整交易,保留交易内事件序号(event_index),并将事件与检查点在同一事务提交。
系统按以下规则处理安全相关故障:
- 交易版本存在缺口:停止并重新获取;
- 同一游标出现不同字节:判定为源冲突(SourceConflict)并停机;
- 已知事件无法解码:判定为数据模式不受支持(UnsupportedSchema),不能跳过;
- 历史视图或价格边界无法恢复:返回未就绪(NotReady)或弃权(Abstain);
- 磁盘满:停止采集或签名,不能自动删除未处理历史。
5. 确定性与独立验证
生产验收必须具备以下证据:
- 单周期、多周期、未达法定权重(NoQuorum)追赶和空状态补丁(Empty Patch)的黄金测试向量;
- 注册表事件时点、价格边界、留存规则(Retention)、舍入、溢出和交付批次的边界向量;
- 至少两个不共享核心辅助库的实现,或一个独立验证器;
- 随机输入排列、分页、并发和重试的属性测试;
- 真实周期的多验证者影子重放;
- Rust 与 Move 对计算上下文、投票(Vote)、BLS、位向量和 QC 的跨实现接受语料。
一旦状态根出现分歧,必须能把首个差异定位到周期输入、价格、受影响用户、基准证明、状态补丁(Patch)、后置状态、交付批次或证据包(Artifact)层。
6. POC 网络安全
POC 使用与 Topo 共识网络隔离的许可覆盖网络(Overlay)。网络只传播已签名投票、QC 和证据包身份,不传播权威链上事实,也不实现主节点、轮次、提案或第二套共识。
入站对象按以下顺序验证:帧上限、严格线协议解码、链与协议套件及验证委员会作用域、哈希与结构、成员与签名、语义去重,最后原子提交持久化对象与事件。提交完成后才能返回语义确认(semantic Ack)。
正常传播使用按目标划分的持久化发件箱和直接推送;清单查询、拉取与修复只补齐缺失对象。网络分区、慢速对等节点(Peer)、聚合器离线和过载只能导致延迟或未达法定权重,不能删除离线权重或降低门槛。
7. 证据包与数据可用性
证据包内容按摘要寻址,定位信息只用于发现。签名前和交付前都必须完整回读并重算摘要。
进入生产前,证据必须证明:
- 非签名方能够从多个提供方重建证据包;
- 提供方跨至少两个独立故障域;
- 候选结果终结前,相关状态补丁与交付批次不会被垃圾回收(GC);
- 证据包损坏或不可用时,链上交付停止,而不是提交不完整交付批次;
- 扩大的多周期范围仍在明确资源上限内可重放。
8. 持久化与崩溃恢复
以下三处写入必须保持原子性:
- 链事件与采集检查点;
- 认证状态节点与结果状态根;
- 精确投票预留与后续签名持久化。
跨数据库、文件系统、P2P 和 RPC 的操作不依赖分布式事务,统一采用“稳定身份 → 持久化意图或内容 → 外部动作 → 最终确认对账”的顺序。
必须对输入快照读取、证据包发布、签名器预留、签名持久化、发件箱入队、QC 就绪状态写入以及每个链上交付动作执行强制终止与重启测试。可接受结果只有重试、原样返回已签名投票、弃权或故障即停。
9. 链上状态安全
QC 准入必须验证域标识、链身份、协议套件(ProtocolSuite)、验证委员会、计算密钥成员资格、位向量、多签、严格门槛、计算上下文与结果承诺绑定、防重放以及基准与游标连续性。
链上不重算贡献、注册表、价格、留存规则、受影响用户、本期增量或算力公式。QC 表达验证者对同一结果的背书,候选结果状态机则保证交付完整性。
原子激活之前,暂存中(Staging)、部分交付批次、已封存(Sealed)、已过期(Expired)和已拒绝(Rejected)都不能改变算力读取模型(PowerReadModel)。发生并发激活时,只有与当前基准和游标完全一致的一方可以成功。
10. 链上交付与奖励安全
链上交付执行器(Settlement Worker)必须在 QC 就绪状态持久化后异步运行。交易只有在最终确认的链上效果与操作意图身份一致时才算成功,RPC 接受或交易池出现都不构成成功证据。
责任顺序必须绑定上一次生效状态生成的种子和验证者地址,不使用可轮换的中继账户、QC 哈希或签名方位图。所有验证者窗口结束后必须存在有限的公共兜底(Public fallback)。
奖励不进入计算上下文、结果承诺、QC 权重或算力公式。重复投票、重复交付批次、重新切分交付批次或领取重放不能增加奖励;奖励池(Reward Pool)不足时只禁用奖励并告警,不能拒绝合法 QC 或激活。
11. 可观测性与对账
| 信号 | 目的 |
|---|---|
| 最终确认采集延迟与缺口 | 检测链源与投影完整性 |
| 最新就绪边界与生效游标延迟 | 检测计算积压和自动追赶范围 |
| 快照根、价格根与周期输入根 | 定位验证者输入差异 |
| 结果承诺分组数量 | 检测确定性分叉 |
| 已验证投票数量与已签权重比例 | 观察 QC 形成进度 |
| 证据包可用性与摘要失败 | 检测数据可用性问题 |
| QC 就绪队列深度与最长等待时间 | 检测交付积压,并确认其不反压计算 |
| 候选结果状态与已接受交付批次数量 | 观察暂存、封存和过期 |
| 链上交付最终确认延迟与责任顺位 | 观察责任接管和公共兜底 |
| 生效版本、游标与种子代次 | 对账原子激活 |
| 奖励池、已预留金额与领取状态 | 检测预算和重复领取风险 |
日志不得记录私钥、完整签名请求、授权凭据(Authorization)、生产 DSN 或无界高基数字段。PeerId、完整哈希和地址应进入受限诊断,而不是监控指标标签。
12. 测试矩阵
| 测试域 | 必须覆盖 |
|---|---|
| 贡献 | 无效应用、代币或托管关系,重复、暂停、事件顺序和最终确认性 |
| 输入 | 缺口、空周期、历史配置、价格从未观测、旧价沿用和休眠用户留存 |
| 数值 | 精度尺度、逐步舍入、零值、边界、除零、溢出与最大算力 |
| 状态 | 成员与非成员证明、状态补丁、后置状态根、空状态补丁和确定性交付批次 |
| 签名器 | 相同请求幂等、冲突请求、崩溃点、密钥轮换和撤销 |
| 网络 | 未授权对等节点、重复、乱序、分区、繁忙响应、修复与存储重建 |
| QC | 不足门槛、错误分母、不同结果承诺、无效 PoP 和跨纪元密钥 |
| 候选结果 | 重复或乱序交付批次、部分交付批次、过期、拒绝和并发激活 |
| 链上交付 | RPC、Gas 或交易序号故障,主责任窗口离线、全部验证者离线和公共兜底 |
| 奖励 | 签名方子集、重复回执、预算不足、重复领取和截止期回收 |
13. 生产阶段与证据验证门槛

| 阶段门槛 | 必须证明 |
|---|---|
| G0 业务语义 | 多周期 无歧义,其中 表示留存后值、 表示本期增量;成熟贡献定义唯一 |
| G1 输入一致 | 独立节点得到相同周期、价格和计算上下文根 |
| G2 结果一致 | 独立实现得到逐位一致的状态补丁、后置状态根和结果承诺 |
| G3 QC 安全 | 运营者到计算密钥的授权、PoP、完整分母、防双签与门槛成立 |
| G4 链上最小化 | Move 不包含算力业务公式,状态转换负向测试通过 |
| G5 自动追赶 | 连续未达法定权重后从生效游标完整恢复 |
| G6 原子性与空状态补丁 | 部分交付批次不可见;空结果仍推进游标与版本 |
| G7 容量与数据可用性 | 最大范围、证据包、验证委员会和恢复窗口可执行 |
| G8 链上交付活性 | 主责任、次级责任和公共兜底依次接管,交易故障不反压计算 |
| G9 激励安全 | 回执、位图、预算、领取和资金来源无重复增发路径 |
14. 禁止模式
| 禁止模式 | 风险 |
|---|---|
| 使用本地最新值或默认值补齐历史输入 | 不同验证者产生不同结果 |
| 单一服务计算并要求验证者跟签 | 形成中心化结果权威 |
| 从在线对等节点数量中删除 QC 分母 | 网络分区可降低安全门槛 |
| 签名器提供任意字节接口 | 绕过结构化复验和防双签 |
| RPC 接受即标记链上交付成功 | 重启后丢失或重复交付 |
| 暴露暂存中或已封存的算力 | 下游读取到不完整状态 |
| 管理员手工推进游标或写入算力 | 绕过 QC 和自动追赶 |
| 用系统时钟、线程数或 Gas 估算决定协议结果 | 破坏跨实现确定性 |
| 奖励随投票或交付批次次数无上限铸币 | 可通过重复或重新切分增发 |
15. 上线就绪声明
以下各项均有可重复证据支持后,POC V2 才能进入有限生产试点:
- 两个独立验证者可以从相同最终确认历史得到逐位一致的结果。
- 不足严格三分之二权重、部分交付批次或失效候选结果无法改变生效算力。
- 任一单个索引器、执行器、聚合器、链上交付执行器、对等节点或管理员都不能单独改变结果。
- 未达法定权重、网络分区、崩溃和全体验证者链上交付故障都能安全保持原有状态并恢复。
- POC 资源故障不会影响 Topo 基础共识就绪。
- 所有未关闭的 P0 参数均保持影子运行或测试网状态,不被误标为生产完成。