硬件钱包拒签的交易长什么样:CIP-21 给 Cardano 交易划出的兼容性红线 图 1
硬件钱包拒签的交易长什么样:CIP-21 给 Cardano 交易划出的兼容性红线 · 图 1

钱包软件给你拼好一笔 Cardano 交易,硬件钱包却拒绝签字——这不是固件脾气差,多半是这笔交易越了某条界线。CIP-21 就是那份界线清单:它规定了硬件钱包必须能签的交易子集,钱包和构建工具照这个范围做交易,设备照这个范围履约,双方各执一份契约。它的状态是 Active。

序列化必须走「规范形」

Cardano 交易本体是一段 CBOR 编码的字节。同一份逻辑内容,CBOR 可以写出多种字节序列,而硬件钱包是逐字节复核再签名的:字节不同,它看到的哈希就不同,就可能拒签。所以 CIP-21 第一条就是按 CBOR 规范 RFC 7049 第 3.9 节的建议做规范形序列化,要点有四:整数用最少的字节表达;第 2 至 5 主类型的长度写法尽可能短;映射里的键按值从小到大排列;所有不定长项目都改写成定长。构建工具里一个多余的零、一个没排序的键,都可能让签名环节无功而返。

硬件钱包拒签的交易长什么样:CIP-21 给 Cardano 交易划出的兼容性红线 图 2
硬件钱包拒签的交易长什么样:CIP-21 给 Cardano 交易划出的兼容性红线 · 图 2

集合标签:要么全不用,要么处处用

Conway 时代起,语义上是「集合」、但按数组编码的字段允许套一个可选的 258 标签。硬件钱包支持两种写法,条件是全交易一致:要么整笔交易里一个 258 标签都没有,要么所有该出现的地方都出现。半套标签的交易在设备上会直接碰壁。

哪些字段禁止出现

交易体里两个条目不得出现在等待设备签名的交易里:键 6 的 update(协议更新提案)和键 20 的 proposal_procedures(提案流程)。投票程序也收窄到最小粒度:一笔交易只允许包含单个投票者的单个投票程序。这些是治理类字段,硬件钱包选择不在契约内支持,构建方就别把它们塞进等签的交易里。

数值与数量的硬顶

所有整数不能超过 int64 或 uint64 的位宽,没有大整数余地。数量上,规范列了一长串「单项不超过 65535」的清单:交易体的输入数、输出数、一个输出或铸造字段里的资产组(策略 ID)数、资产组内的代币名数、证书数、质押注册证书里的所有者数与中继数、提款数、抵押输入数、必需签名人数、引用输入数,以及总见证数。另外,可选的空列表与空映射原则上不要写进交易体——Conway 的 CDDL 规范本就更严格,许多数组已按非空集合处理,设备也会照更严的一边执行。

契约对双方各换来什么

对设备厂商,这份清单是验收基线:固件只要保证子集内交易永远可签,就能宣称兼容 CIP-21,不必为链上每一次功能上新紧急追赶;对钱包侧,契约把失败提前到了广播之前——构建阶段就违反清单的交易,交给设备会立刻得到拒签,而不是签完上链才发现问题。超出清单的交易硬件钱包并非绝对不能签,只是不在义务范围内,支持与否、支持到哪个固件版本,要查具体厂商的说明。写批量铸造或大规模转账工具时,可以直接把清单当计数器用:资产组数量、输出数量、见证数量逐批累加,接近 65535 就拆单,而不是等设备说「不」。

实操顺序与两处例外提醒

排障时按这个顺序走:先查序列化是否规范形,再数一遍超限项,最后查禁止字段与 258 标签一致性;三关都过仍失败,才去翻具体硬件钱包的说明。两处提醒常被忽略:其一,CIP-21 自己写明,部分钱包可能仍不支持清单里的个别交易要素,支持与否还与固件和应用版本有关,契约给的是下限不是上限;其二,Cardano 账本规范更新快,设备实现滞后期间,CIP-21 之上还可能有临时加严的限制。签名前在设备屏幕上核对金额与地址,仍是不可省略的最后一关,详见 别只看电脑屏:硬件钱包自己的屏幕上,签名前最后该核对什么;硬件钱包地址回显的读法见 硬件钱包的小屏幕怎么读:地址回显与盲签的信任边界。硬件钱包降低的是密钥暴露风险,不能消除转账操作本身的风险,本文不构成投资建议。