协议演进 / BIP/比特币改进提案 / BIP-81
BIP-81
为染色币投票池多签钱包定派生路径:把 20 字节的颜色定义哈希拆成五层塞进 BIP32 路径,让同一颗种子按颜色定义分开管账。本 BIP 目前处于已关闭状态。
一、档案卡
| 编号 | BIP-81 |
|---|---|
| 标题 | Hierarchy for Colored Voting Pool Deterministic Multisig Wallets |
| 作者 | Justus Ranvier <[email protected]>、Jimmy Song <[email protected]> |
| 指定日期 | 2014-08-11 |
| 类型 | Informational(信息类) |
| 状态 | Closed(已关闭) |
| 阅读版 | https://bips.dev/81 |
| 官方原文 | https://github.com/bitcoin/bips/blob/master/bip-0081.mediawiki |
二、放在哪一族
分层确定性(HD)钱包派生路径族里,投票池多签钱包的染色币(colored coin)变体。它与 BIP-80 是孪生文档:同日指定(2014-08-11)、同两位作者,BIP-80 管非染色币、本篇管染色币,本篇的参考文献里也列着 BIP-80。
共同地基同为三份:BIP-32 的派生算法、BIP-43 的 purpose 用途方案、BIP-44 的层级结构。原文自述与 BIP-80 完全同构:本 BIP 是 BIP-43 的一个具体应用,并以 BIP-44 为基础。差别只在中段:BIP-80 用币种 + 系列来分层,本篇要分的是“颜色定义”。
所谓染色币,是在比特币之上用特定规则标记、追踪一类资产的做法;一种颜色定义对应一类资产。投票池则是多人以多签共管资金的安排;本篇管的是:池子若要同时管多种颜色的资产,密钥该如何派生才不串账。
三、它要解决什么
原文的动机同样只有一句:这套层级允许从单个种子处理多个颜色定义。
难点在尺寸对不上。标识一个颜色定义需要的信息,远超 BIP32 单层索引能容纳的范围——单层子索引只有 4 字节(32 位),直接拿它当颜色标识,碰撞风险不可接受。于是问题变成:如何把一个长得多的颜色定义标识,规规矩矩地塞进 BIP32 的路径层级里,还要让池内各成员能公开地、独立地推导出同一套多签存款脚本。本 BIP 给的答案是先哈希压缩、再拆成多层,见第四节。
四、规则本身
4.1 八层路径
本 BIP 在 BIP32 路径中定义八个层级(撇号 ' 表示硬化派生):
m / purpose' / series' / (5 个颜色定义层) / address_index
与 BIP-80 的四层相比,这里没有 coin_type 层——染色币仍跑在比特币上区分的是资产类别而非币种——取而代之的是中间五层颜色定义。
4.2 用途层(purpose)
purpose 按 BIP-43 的建议取常量:字符串 “81” 的 ASCII 值再置最高位,即 0x80000051,表示本节点之下的子树按本规范使用。本层用硬化派生。与 BIP-80 的 0x80000050 只差编号一位,两套方案由此在第一层就分开,互不误认。
4.3 系列层(series)
路径第二层仍是 series(系列)。原文在本篇中没有像 BIP-80 那样展开解释系列的用途,只把它保留在路径里、置于颜色定义层之前;其在投票池中服务 FIFO 冷存储的含义见 BIP-80 的对应章节,本篇不重复定义。本层用硬化派生(路径中带撇号)。
4.4 颜色定义层:20 字节拆成五层
这是本篇唯一的技术新意,分三步:
- 先把颜色定义用比特币的 hash160 函数缩短为 20 字节;
- 把这 20 字节按小端格式拆成五组;
- 每组作为一层的种子,依次构成五个颜色定义层。
原文特意说明:这五层用公开派生(非硬化),即便索引值超过 2^31 也照此办理——因为这里的“索引”不是计数器,而是哈希切片,必须容纳完整的数值范围,若按硬化派生的上限截断就会丢信息、改对应关系。
4.5 索引层(index)
公私钥对从索引 0 起顺序编号,该号即 BIP32 派生的子索引,本层用公开派生。本层得到的公钥用来构造多签存款脚本;脚本所用的模式由成员之间以带外合约共享,与 BIP-80 相同——路径只管有序地生成公钥,多签的门槛与成员构成不在本 BIP 内。
4.6 兼容钱包
原文点名的兼容钱包与 BIP-80 相同,只有一个:btcwallet,称其为投票池的参考比特币钱包。
五、谁必须动
普通持币人:一般无感。持有染色币资产、又把资金放进投票池的人,才会间接受这套路径影响,且由钱包软件代为处理。
钱包开发者:若要实现染色币投票池钱包,须严格照八层路径实现:purpose 取 0x80000051、颜色定义先 hash160 再小端拆五组、颜色定义层用公开派生且不截断超过 2^31 的值,并与池内成员就多签脚本模式达成带外约定。
投票池运营与成员:要就颜色定义本身达成一致——定义不同,hash160 就不同,推导出的将是另一套地址;还要沿用系列层做冷热安排。
全节点与矿工:不涉及。派生路径与颜色标记都是钱包与应用层的约定,链上交易格式不变。
六、现在算不算数,以及一个常见误读
状态为 Closed(已关闭),类型为 Informational(信息类)。它与 BIP-80 一同停在历史规范的位置:记录了 2014 年前后,投票池与染色币这两套设想如何共用 BIP32 路径来组织密钥。原文没有交代关闭的原因,本页不替它补;文中也没有给出采用统计,不应把“点名了一个参考钱包”读成“曾被广泛采用”。
常见误读:
“BIP-81 是 BIP-80 的升级版,看 81 就够了。”
不对。两篇是并列的两个变体,不是前后版本:BIP-80 处理普通(非染色)币的投票池,按币种与系列分层;BIP-81 处理染色币的投票池,核心工作是把颜色定义编码进路径。编号相邻、日期相同、作者相同,恰恰说明它们是同日成对提出的姊妹方案,读时应对照着读。
七、延伸
- 阅读版:https://bips.dev/81
- 官方原文:https://github.com/bitcoin/bips/blob/master/bip-0081.mediawiki
- 相关:BIP-80 非染色投票池层级、BIP-32 分层确定性钱包、BIP-43 用途字段、BIP-44 多账户层级
- 仓库总目录:https://github.com/bitcoin/bips
