在卡达诺浏览器里查一枚 NFT,地址栏里那串又长又分段的十六进制很容易看错一位——资产编号由 policy id 与 asset name 两段拼成,本身就不是给人读的。CIP-14 资产指纹就是为这个阅读难题设计的:把长标识压缩成一串以 asset 开头、带校验能力的短字符串,让人眼和搜索框都能对付。这份卡达诺改进提案的规范正文只有一页纸,但它给出的算法足够精确,任何工具算出来的指纹必须逐字符相同才算实现正确。
规范用伪代码定义了算法:先取 blake2b 哈希算法,摘要长度设为 20 字节(即 160 位),输入是把 policy id 与 asset name 两段字节串直接拼接后的结果;对这个摘要做 bech32 编码,人类可读前缀取 asset。拼起来读作:指纹等于对”策略编号串接资产名”取 blake2b-160 摘要、再以 asset 为前缀做 bech32 编码。bech32 是比特币社区发明的地址编码,自带校验和,串里任何一位看错或敲错,解码校验都会失败;而 asset1 这个前缀(bech32 编码会自动补一个分隔字符 1)让你一眼识别”这是一个卡达诺资产指纹”,就像 tz 前缀之于 tezos 地址。
两个输入的角色值得说清。policy id 本身是一段哈希,来自发行脚本的标识,它划定了”谁有权铸造这类资产”;asset name 则是同策略下区分具体资产的字节名,可以是空串、可以是文本、也可以是二进制。CIP-14 把两者视为一对不可拆的整体:先拼接、后哈希,顺序不能换——资产名在前、策略在后算出来的是另一串指纹。这也意味着两件事。第一,指纹与资产一一对应但不携带含义:从 asset1 串反推不回策略与名称,它只是等价的”人读别名”,索引器与市场仍然要靠原始字段做精确匹配。第二,改名与改策略都会换指纹,同一作品若换了发行脚本重新铸造,指纹必然不同,用它可辅助辨别”是不是同一个发行策略下的同一枚资产”。
提案自己给出了边界声明:policy id 与 asset name 都不指望人来读,指纹就是替人眼准备的用户界面;规范还建议界面尽量配一个由同一对字段计算出的可视化图形(文中引用了当时尚未定稿的图标提案),让收藏者用图像做二次核对。换句话说,CIP-14 的定位从头到尾是显示层:它让”你复制的地址就是你要的那枚”这件事变得可以肉眼抽查,但资产权威标识永远是链上的原始两段字段,任何交易签名前的最终核对都不应该停在指纹上。
对收藏场景,指纹带来的实际防错有三层。第一层防剪贴板劫持:长十六进制串被恶意软件首尾不变、中间改一位是经典手法,而指纹串短、带校验,粘贴前扫一眼前缀与长度就能发现异常。第二层防搜索投毒:搜索引擎里同名的仿冒资产页常靠一字之差域名获利,把资产指纹原文写进收藏夹或日历,检索时贴指纹,比贴作品名可靠。第三层防索引错位:同一资产在不同浏览器可能显示不同排版,但所有合规实现算出的指纹必须一致——两个来源指纹不一致,等于当场告诉你其中一边把资产认错了。
实操上要注意几个坑。空资产名是合法输入,这类资产(常见于同质化代币)同样有指纹,不能因为”它不是 NFT”就假设对方工具不会显示 asset 串。二进制资产名在拼接前要按脚本编码规则取原始字节,用肉眼看到的转义文本去拼接会算出另一串。工具验证也简单:正规实现都提供测试向量,把提案里的示例输入喂给你用的工具,输出与文档逐字符一致才可信。最后,指纹不证明所有权、不证明真伪——恶意项目同样可以给自己发行的资产生成合法格式的指纹;它解决的是”认得准”,不解决”值不值”。
本文为机制说明,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。