区块链存证配置

可选链上存证:节点选择、登记合约部署、检查点锚定、费用与恢复方式。

证据与接口 3717 字 ·约 10 分钟读完 ·更新于 2026-10-22

本模块是可选的EVM摘要存证适配器。一个企业链连接部署一个EvidenceAnchorRegistry v1,复用于该企业的不可变版本和审计检查点。它不是国家发布或认证的智能合约,也不替代现有数字合约、签署和使用控制。评估依据见升级方案。

启用与配置

平台默认不连接区块链。构建好的Go程序已嵌入固定ABI和字节码;运行平台和签署交易不依赖Node。Hardhat仅用于本地开发验收。

make chain-build     # 安装锁定依赖、编译,并比对仓库内固定产物
make chain-test      # Solidity合约测试
make chain-node      # 前台启动127.0.0.1:8545,链ID31337
make build

当前锁定Hardhat 3.20.0、OpenZeppelin Contracts 5.6.1、Solidity 0.8.37;优化200次,EVM目标paris。npm --prefix blockchain run build用于开发者有意更新并审阅嵌入产物;make chain-build只接受与锁定编译一致的产物。修改主合约而不更新产物会被构建检查阻止。

Go链集成测试另用独立的可丢弃Hardhat进程,例如端口8546,并设置TEST_CHAIN_RPC=http://127.0.0.1:8546。用例会执行快照回退和测试合约故障注入,不得指向工作台共享链或真实业务节点。Solidity测试使用Hardhat自己的隔离测试网络。

运维创建权限为0600的配置文件,示例:

{
  "rpcURLs": ["http://127.0.0.1:8545"],
  "signers": {
    "enterprise-a-writer": {
      "partyId": "当前企业的真实partyId",
      "keyFile": "/secure/datanous/evm-writer.hex"
    }
  }
}

keyFile是权限0600的普通文件,内容为secp256k1私钥的64位十六进制字符串,可带0x前缀。引用只属于明确的企业;私钥不进入后台表单、响应或数据库。配置文件、账户私钥和平台Ed25519密钥分别备份。链签名器当前为受限文件,HSM/KMS和在线轮换仍是后续任务。

export DATANOUS_CHAIN_CONFIG=/secure/datanous/chain-config.json
./bin/platform serve

服务启动严格校验配置和文件权限。节点必须精确匹配白名单;远程地址要求HTTPS,HTTP仅允许回环地址;拒绝URL内认证信息、查询串、片段和重定向。带认证的RPC网关需在服务端通过受控接入层处理,当前不接受后台填写RPC令牌。

Hardhat启动日志含公开开发账户的私钥,日志也应限制访问。这些账户仅用于本地合成验收,不能用于真实网络资产。Hardhat节点为内存状态,退出后链状态丢失;数据库备份不能恢复链。生产链另需持久化、节点治理、费用和独立信任安排,本轮未实机验证。

后台操作

入口为“企业治理 → 区块链存证”。企业管理员/平台运营管理员可管理本企业连接;审核员和审计员只查看、核验与导出。其他角色不获得链写入权限。

  1. 选择白名单RPC和本企业签名引用,填写链ID、确认区块数和Gas价格上限。已有可信创世块摘要时填写核对,首次留空会固定节点返回的创世块。保存前真实连接并核对;后续每次新交易重新核对。
  2. 点击“一键部署固定模板”。平台将签名交易加密持久化,然后异步广播;规范区块回执、确认深度和运行时代码一致后,合约才可用于锚定。重复点击返回原部署操作。
  3. 选择数据集/产品/资源/来源/数字合约固定版本,或审计scope及sequence,提交摘要锚定。随机盐与正文保存在授权证明中,链上只有不透明对象标识、版本及承诺摘要。正文可能含敏感元数据,导出文件应按企业权限保管。
  4. 查看交易状态与错误;“在线核验”根据当前RPC即时验证;队列状态可能在下一次后台检查后更新。“导出证明”不会自动赋予其可信性,未确认或回滚的记录核验会失败。

可在登记连接时开启自动检查点。部署确认后,后续企业或相关合约的业务审计事件在同一数据库事务中追加存证意图;后台分别准备和广播交易。链故障不回滚已完成的业务记录,chain.*记账事件不会递归产生新检查点。已有历史事件不会自动批量补写,管理员可以手动锚定指定历史检查点。

单笔估算Gas加余量后最高500万,价格受节点配置的wei/Gas上限约束;交易value固定为0。真实网络仍消耗Gas费用。签名账户应专用于本平台及同一数据库,不能与外部钱包或独立部署共享nonce管理。

状态与故障

状态/现象含义与处理
prepared签名交易已加密落库,尚未取得广播成功结果
submitted已广播或等待确认;只有达到配置深度才确认
confirmed且无错误最近后台检查时,主链回执与固定模板符合要求;不是永久不可回退的保证
confirmed且有错误历史曾确认,但当前节点/链身份/回执不能复核;界面标为“确认状态待复核”,不能据此宣称当前验证通过
broadcast_uncertain可能已广播但响应丢失;查询同一hash,必要时重播相同原始交易,不分配新nonce
reverted真实回执status=0;核验失败,不能用重播改变结果。检查原因后停用连接或由运维处理,不能改库伪造成功
orphaned已确认回执消失或不在当前主链;保留历史。手动重查仍只重播原交易,若nonce已被消费可能无法恢复
blocked模板、交易绑定、承诺或已保存交易校验失败;停止新写入并由运维核查
链ID/创世块变化阻止新交易,旧确认记录显示待复核。核对是否节点误连或开发链重启;确认新链后停用旧连接,登记新实例并重新部署,保留旧记录
节点离线错误单独记录,原业务继续;恢复原节点后重查。维护任务与业务租约清扫使用不同工作循环

当前没有自动加价替换、撤销交易、清理nonce间隙、批量迁移旧注册表、外部签名器或链所有权迁移界面。配置为停用会阻止新提交并停止自动检查点;已保存交易仍会对原链进行回执核对,必要时重播,因此停用不等于撤销已签交易。

后台每批至多处理10条检查点和20条交易,按检查时间轮转;界面每5秒请求一次当前状态。慢节点/大量历史需后续调度及监控扩展,不承诺所有交易都在5秒内完成复核。

证明核验

CLI必须显式提供通过独立安全渠道确认的参数。不能从待验证证明中自动取公钥、RPC或合约地址作为信任根。

./bin/verify-chain -bundle exported-proof.json \
  -public-key-file /secure/pinned-platform.pub \
  -rpc https://trusted-rpc.example.com \
  -chain-id 目标链ID -genesis-hash 0x预先固定的64位摘要 \
  -registry 0x预先确认的合约地址 -confirmations 约定确认数

校验包括:平台Ed25519签名、对象和版本绑定、随机盐承诺、链ID/创世块、固定运行时代码、成功交易的地址/发送者/输入、链上登记与事件、当前规范区块及确认深度。它依赖所选RPC,不是区块链轻客户端或独立共识证明;本地链也不提供第三方见证。

链证明只绑定选定版本/检查点。完整本地事件哈希链继续使用bin/verify和原有证据包另验;该格式仍保留local_signed_not_independently_anchored,不会因本地Hardhat运行就改称外部锚定。两者不能证明源数据真实、提供方按可信硬件执行或已经取得权威身份及正式测评。

本轮验证与后续

本地PostgreSQL与Hardhat实测覆盖幂等部署/锚定、并发nonce、确认深度、广播后响应丢失、节点离线、区块回退、错误链身份、篡改拒绝、角色/租户隔离、失败回执及错误模板写入阻止。实际界面完成管理员配置/部署/锚定及审计员核验/下载。任务和最终数量以交付与验收和机器记录为准。

恢复演练包含链配置与私钥独立备份、28张表恢复、平台密钥解密及恢复后链证明在线核验;恢复平台禁用链工作器,避免备份回放广播交易。既存链节点不在此恢复范围内。中断导致内存开发链重启的实际故障另记录为旧确认待复核,重新登记新实例,不会覆盖旧链证据。

真实MySQL/SQL Server、身份/外部节点、国产链与国密、独立第三方存证和正式评估继续需要目标环境。PSI/MPC/TEE按业务安全模型和真实多节点/硬件证明另行开发;本轮没有开放这些任务。

管理员手动重查/重播请求也写入审计,固定记录发起人员与原交易hash/nonce;该类链记账事件不会再次触发自动上链。

这一步卡住了?请通过首页客服微信沟通。 ← 返回文档中心