咱们知道HD(分层肯定性)钱包,基于 BIP-32;多币种和多账户钱包,基于 BIP-44;最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,因此我今天就专门整理了一下该协议的内容以及在比原中涉及的代码。来作一个详细的介绍!git
地址:https://github.com/bitcoin/bi...github
BIP32:定义 Hierarchical Deterministic wallet (简称 “HD Wallet”),是一个系统能够从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥)。好处是能够方便的备份、转移到其余相容装置(由于都只须要 seed),以及分层的权限控制等。具体的内容细节能够翻阅文档。算法
那么下面我列出了在比原链中BIP-32协议的具体实现,具体的实现的代码逻辑能够在:https://github.com/Bytom/byto... 找到下面的方法。研究代码实现过程.安全
地址: https://github.com/bitcoin/bi...spa
BIP-44协议是基于BIP-0032和BIP-0043中描述的目的方案中描述的算法定义肯定性钱包的逻辑层级。赋予树状结构中的各层特殊的意义。让同一个 seed 能够支援多币种、多账户等。各层定义以下:code
m / purpose' / coin_type' / account' / change / address_index //purporse': 固定值44', 表明是BIP44 //coin_type': 这个表明的是币种, 能够兼容不少种币, 好比BTC是0', ETH是60,BTM是99' //btc通常是 m/44'/0'/0'/0 //eth通常是 m/44'/60'/0'/0 //btm通常是 m/44'/99'/0'/0
HD(分层肯定性)钱包树状结构提供了极大的灵活性。每个母扩展密钥有 40 亿个子密钥:20 亿个常规子密钥和 20 亿个强化子密钥。而每一个子密钥又会有 40 亿个子密钥并 且以此类推。只要你愿意,这个树结构能够无限类推到无穷代。可是,又因为有了这个灵活性,对无限的树状结构进行导航就变得异常困难。尤为是对于在不一样的HD钱包之间进行转移交易,由于内部组织到内部分支以及亚分支的可能性是无穷的.索引
BIP-43 提出使用第一个强化子索引做为特殊的标识符表示 树状结构的“purpose”。基于BIP-43,HD(分层肯定性)钱包应该使用且只用第一层级的树的分 支,并且有索引号码去识别结构而且有命名空间来定义剩余的树的目的地。举个例子,HD(分层肯定性)钱包只使用分支 m/i’/是为了代表那个被索引号“i”定义的特殊为目地。ip
在BIP-43 标准下,为了延长的那个特殊规范,BIP-44提议了多帐户结构做为 “purpose”。全部遵循BIP-44的HD(分层肯定性)钱包依据只使用树的第一个分支的要求而被定 义:m/44’/。 BIP-44 指定了包含5个预约义树状层级的结构:开发
完整注册数字资产类型列表: https://github.com/satoshilab...文档
被HD(分层肯定性)钱包衍生的可用的地址是第四层级的子级,就是第五层级的树的“address_index”。好比,第三个层级的主帐户收到比原支付的地址就是 M/44’/99’/0’/0/2。
下面介绍一下比原链中BIP-44协议的实现,咱们在 :https://github.com/Bytom/byto... 找到下面的方法。能够研究具体的代码实现过程。
在项目中找到 CreateAddress 方法,这个方法会用到BIP-44协议来建立地址:
比原如今会默认使用BIP-44协议,因此在下面的switch语句中,会默认到BIP0044.
到此BIP-32协议和BIP-44协议已经介绍完,而且在比原的代码中的实现也已经列出来了。感兴趣的小伙伴能够读代码研究详细的实现过程,若是有什么问题,欢迎在比原技术社区提问!
比原项目仓库:
Github地址:https://github.com/Bytom/bytom
Gitee地址:https://gitee.com/BytomBlockc...