跳到主要内容

5. 安全、测试与可观测性

把钱包登录、资产金额、权限暂停、测试矩阵、监控指标和对账视图合并为质量保障章节。

8. 安全最佳实践

8.1 钱包登录

必须满足:

  1. nonce 由服务端生成,设置短 TTL。
  2. nonce 按钱包地址存储,登录成功后一次性消费。
  3. 签名消息必须包含域名、chain id、nonce、过期时间和用途。
  4. 签名公钥必须能推导出提交的钱包地址。
  5. 后台钱包登录不能弱于会员钱包登录。

8.2 资产和金额

必须满足:

  1. 支付资产由链上或配置化注册表管理。
  2. decimals 从资产 metadata 读取,并限制边界。
  3. 业务价格精度和支付资产精度有明确换算。
  4. 小额订单换算不能变成 0。
  5. 大额订单和多件商品必须做溢出测试。
  6. 前端展示金额、后端校验金额、合约扣款金额必须可对账。

8.3 权限和暂停

必须满足:

  1. 超级管理员、多签或治理地址初始化明确。
  2. 用户、商户、运营、财务、结算、POC 管理权限分离。
  3. 敏感参数更新有延迟生效或多签。
  4. 高风险模块支持 pause。
  5. pause 不应破坏用户提现、退款或必要恢复路径,除非是明确的紧急冻结。

8.4 日志和密钥

禁止记录:

  1. 完整 Authorization header。
  2. 钱包 API key。
  3. signedTx 完整原文。
  4. nonce 原文。
  5. 私钥、管理员密钥或生产 DSN。

9. 测试矩阵

9.1 合约测试

必须覆盖:

  1. 正常创建、支付、确认、结算、贡献成熟和贡献发放。
  2. 金额为 0、换算为 0、溢出、decimals 边界。
  3. 库存不足、重复业务项、限购和时间窗口。
  4. 退款申请、拒绝、通过、重复处理。
  5. 权益锁定、释放、回退。
  6. 贡献重复发放、pause、custody 余额不足。
  7. 权限不足、错误 signer、错误资产。
  8. 事件字段和 view 返回值。

9.2 后端测试

必须覆盖:

  1. 钱包登录 nonce 过期、重复使用、地址不匹配。
  2. signedTx 反序列化失败。
  3. sender 不匹配。
  4. chain id 错误。
  5. 合约地址、module、function 错误。
  6. 参数数量和泛型参数错误。
  7. 参数语义篡改。
  8. tx hash 重复提交和 pending 恢复。
  9. 链上成功但本地异步任务写入失败。
  10. 链上失败但本地状态已 pending。

9.3 消费者测试

必须覆盖:

  1. 重复事件。
  2. 已处理业务对象。
  3. 链上事件缺失。
  4. 链上事件字段解析失败。
  5. 本地事务失败。
  6. handle_status=1 崩溃后 lease 回收。
  7. 搜索增量同步和兜底同步。
  8. POC ContributionEvent 与 DApp 贡献发放事件对账。

9.4 端到端测试

每次重要发版至少跑通:

  1. Web3 登录。
  2. 业务对象创建。
  3. 支付或资产锁定。
  4. 确认完成。
  5. 退款或异常处理。
  6. 结算。
  7. 成熟贡献生成。
  8. POC 贡献发放。
  9. POC staged power 写入。
  10. POC committed power 展示。

10. 可观测性和对账

必须观测:

指标目的
RPC 请求失败率判断链节点或上游服务状态
交易提交失败率发现钱包、后端、合约或参数问题
tx pending 数量和时间发现未确认或待恢复交易
event_bus 积压发现消费者滞后
链上事件解析失败数发现 ABI 或事件字段变更
读模型落后时间衡量用户看到状态的延迟
POC ContributionEvent 数量衡量 DApp 贡献发放
POC 价格快照失败数发现 Coinfair 价格输入问题
POC Writer 写回失败数发现 PowerStore 写回问题
搜索同步失败数发现查询投影不一致

对账视图必须支持:

wallet address
-> local member
-> business object id
-> tx hash
-> chain event
-> read model state
-> mature contribution
-> ContributionEvent
-> POC period
-> staged power
-> committed power