协议演进 / 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 字节拆成五层

这是本篇唯一的技术新意,分三步:

  1. 先把颜色定义用比特币的 hash160 函数缩短为 20 字节;
  2. 把这 20 字节按小端格式拆成五组;
  3. 每组作为一层的种子,依次构成五个颜色定义层。

原文特意说明:这五层用公开派生(非硬化),即便索引值超过 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 处理染色币的投票池,核心工作是把颜色定义编码进路径。编号相邻、日期相同、作者相同,恰恰说明它们是同日成对提出的姊妹方案,读时应对照着读。

七、延伸

本页内容整理自 bitcoin/bips 仓库与 bips.dev,事实已与仓库核对;解读仅供学习参考。