拿到一份链上存证怎么核对?CAIP-168 的 IPLD 时间戳证明格式怎么读 图 1
拿到一份链上存证怎么核对?CAIP-168 的 IPLD 时间戳证明格式怎么读 · 图 1

存证的痛点不在盖章,在验章

把文件哈希写进比特币或以太坊的某笔交易,是 链上存证是什么?把存在证明写进比特币的三种做法 里讲过的链上存证基本套路:链外放原件,链上盖摘要。可真正需要证明的那刻通常是第三方质疑这份文件某时已存在,而链上只有一笔指向不明的交易哈希——中间那串从文件到摘要到交易的映射怎么自证?CAIP-168(状态 Review,2022 年提出)就是给这串映射定的格式规范:用 IPLD 的内容寻址结构把证明本身做成可解析、可复算的数据对象。

拿到一份链上存证怎么核对?CAIP-168 的 IPLD 时间戳证明格式怎么读 图 2
拿到一份链上存证怎么核对?CAIP-168 的 IPLD 时间戳证明格式怎么读 · 图 2

摘要层:CID 就是自描述的指纹

普通锚定方案里,各家对发布到链上的摘要怎么算、怎么命名全凭默契。CAIP-168 直接选用 IPLD 的 CID:内容哈希加上编解码器与版本信息自成一个字符串,任何支持 IPLD 的工具拿到它都能说出这份数据用了什么哈希、什么编码,不需要旁证文档。存单个文件时,文件本身编成 IPLD 块得到根 CID 就够;要一次锚定一批数据,逐条上链成本不合理,规范采用默克尔树的思路,叶子是一组 CID,节点是两个子节点用列表拼成的 DAG-CBOR 块,再取自身 CID,如此递归到树根。

锚点层:BlockchainAnchor 的四个字段

树根要钉回链上才叫时间戳。规范给的数据结构只有四个字段:root 指向默克尔树根的 CID;chainID 用 CAIP-2 链标识写明钉在哪条链,形如 eip155:1;txHash 本身也是一个 CID——用对应链的 IPLD 编解码器把那笔交易寻址,规范示例里就是一枚 bag 开头的 DAG-CBOR 链接;txType 说明交易类型。验证者不需要猜任何映射表:从 txHash 解析出交易、确认输出里确实包含 root、再从 root 沿默克尔分支往下复算到你手上的文件,链条闭合。

按这个顺序核对一份存证

拿到证明文件后的检查线是:一,本地对原文件重算 CID,与默克尔分支给出的叶子对得上;二,沿分支逐层重放节点哈希,抵达声明的树根;三,用 chainID 指定的链解析 txHash,确认这笔交易真实打包且其内容包含树根,记录所在区块时间;四,若证明是多方签名的包裹,签名部分走 CAIP-74 的 CACAO 能力对象验签(签名不再只是一条消息:CAIP-74 的 CACAO 能力对象如何打包与验签 拆过它的打包与验签)。CAIP-168 在 frontmatter 里明确 requires 74,两层各司其职:证明内容归 IPLD,签名归 CACAO。

规范没说的与说清的

说清的部分:单个链怎么解析交易、怎么从交易提取锚点,由 CASA 命名空间注册表里按 namespace 定义的 CAIP-168 profile 负责,规范本体不硬编码任何链的细节,比特币和以太坊已有现成 IPLD 编解码器。没说的部分同样重要:时间精度受制于链本身——交易进块时间由出块者书写,锚定证明只能给出存在性不晚于某个区块,给不了秒级时间戳;锚定成本随链费波动;树越大、一次性锚定越划算,零星文件反而不经济。Review 状态意味着格式仍可能修订,存证系统对接前核对当前版本号。

什么样的数据值得这样存

判据其实朴素:数据本身不能上链(成本高、体积大或涉隐私),但它的存在时点又有证明价值,才轮到锚定方案。合同与验收文档、科研数据版本、内容版权底稿是常见三类;反过来,需要频繁变更或要求秒级时效的元数据不适合,因为每次变更都意味着一笔链上交易和一段等待。选型时还要问服务方三个问题:证明文件是否可离线自验、锚定在哪条链的哪笔交易是否公开可查、默克尔分支是否随证明一并交付。三问有一个答不上来,所谓存证平台给你的就只是一张带哈希的网页截图,与可验证证明相去甚远。

风险提示

本文为数据存证机制科普,不构成投资建议或法律意见。链上锚定能否被司法或审计采信取决于当地规则与证据链完整性;对存证服务,重点核查其是否公开可验证的证明格式,而非只给一张带哈希的网页截图。