我们知道HD(分层确定性)钱包,基于 BIP-32;多币种和多帐户钱包,基于 BIP-44;最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,所以我今天就专门整理了一下该协议的内容以及在比原中涉及的代码。来做一个详细的介绍!

##BIP-32协议

####BIP32协议原英文地址:
地址:<https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys&gt;

BIP32:定义 Hierarchical Deterministic wallet (简称 “HD Wallet”),是一个系统可以从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥)。好处是可以方便的备份、转移到其他相容装置(因为都只需要 seed),以及分层的权限控制等。具体的内容细节可以翻阅文档。

那么下面我列出了在比原链中BIP-32协议的具体实现,具体的实现的代码逻辑可以在:<https://github.com/Bytom/bytom/blob/master/blockchain/signers/signers.go&gt; 找到下面的方法。研究代码实现过程.

####比原链中BIP32协议的代码实现:

##BIP-44协议

####BIP-44原英文协议地址
地址: <https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki&gt;

BIP-44协议是基于BIP-0032和BIP-0043中描述的目的方案中描述的算法定义确定性钱包的逻辑层级。赋予树状结构中的各层特殊的意义。让同一个 seed 可以支援多币种、多帐户等。各层定义如下:

 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”定义的特殊为目地。

在BIP-43 标准下,为了延长的那个特殊规范,BIP-44提议了多账户结构作为 “purpose”。所有遵循BIP-44的HD(分层确定性)钱包依据只使用树的第一个分支的要求而被定 义:m/44’/。 BIP-44 指定了包含5个预定义树状层级的结构:
#####第一层的 purpose 总是被设定为 44’。

#####第二层的“coin_type”特指币种并且允许多元货币 HD 钱包中的货币在第二个层级下有自己的亚树状结构。常见的数字资产定义:Bitcoin is m/44’/0’、Ethereum Testnet is m/44’/1’,以及 Bytom is m/44’/99’。

完整注册数字资产类型列表: <https://github.com/satoshilabs/slips/blob/master/slip-0044.md&gt;

#####第三层级是“account”,这可以允许使用者为了会计或者组织目的,而去再细 分他们的钱包到独立的逻辑性亚账户。 举个例子,一个HD钱包可能包含两个比 特币“账户”:m/44’/0’/0’ 和 m/44’/0’/1’。每个账户都是它自己亚树的根。

#####第四层级就是“change”。每一个HD钱包有两个亚树,一个是用来接收地址一个是用来创造找零地址。注意无论先前的层级是否使用强化衍生,这一层级使用的都 是常规衍生。这是为了允许这一层级的树可以在不安全环境下,输出扩展公钥。

被HD(分层确定性)钱包衍生的可用的地址是第四层级的子级,就是第五层级的树的“address_index”。比如,第三个层级的主账户收到比原支付的地址就是 M/44’/99’/0’/0/2。

下面介绍一下比原链中BIP-44协议的实现,我们在 :<https://github.com/Bytom/bytom/blob/master/blockchain/signers/signers.go&gt; 找到下面的方法。可以研究具体的代码实现过程。

####比原链中BIP44协议的实现:

##比原中用BIP-44生成钱包地址

在项目中找到 CreateAddress 方法,这个方法会用到BIP-44协议来创建地址:

比原现在会默认使用BIP-44协议,所以在下面的switch语句中,会默认到BIP0044.

到此BIP-32协议和BIP-44协议已经介绍完,并且在比原的代码中的实现也已经列出来了。感兴趣的小伙伴可以读代码研究详细的实现过程,如果有什么问题,欢迎在比原技术社区提问!

比原项目仓库:

Github地址:https://github.com/Bytom/bytom

Gitee地址:https://gitee.com/BytomBlockchain/bytom

转载于:https://blog.51cto.com/14187963/2352778

Bytom BIP-32协议和BIP-44协议解读相关推荐

  1. 如何用过滤器过滤HTTP协议和非HTTP协议编码

    2019独角兽企业重金招聘Python工程师标准>>> 在编写web时,最苦恼的事情就是乱码了. 一直没怎么考虑过JSP第一句话中 <%@ page language=&quo ...

  2. s7 200 java_java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 gi ...

  3. OSI协议和TCP/IP协议笔记

    1.OSI协议: 第7层应用层:OSI中的最高层.是用户与网络的接口.该层通过应用程序来完成网络用户的应用需求,如文件传输.收发电子邮件等.在此常见的协议有:HTTP,HTTPS,FTP,TELNET ...

  4. [Twisted] Protocols协议和Protocol Factories 协议工厂

    Protocols 描述了如何异步处理网络事件.Twisted维护了许多协议的实现,如HTTP,Telent,DNS,IMAP.Portocols实现了IProtocol接口, IProtocol包含 ...

  5. MACA协议和CSMA/CA协议的区别

    今天学计网802.11的时候想起了这个问题,很疑惑为什么基于MACA改进的CSMA/CA协议反而不能解决暴露站问题了.仔细翻了半小时课本,终于明白了.由于看到CSDN大部分博客讲的都是CSMA/CA和 ...

  6. 【csma/ca协议和csma/cd协议的matlab仿真详解】

    首先你的熟悉csma/ca协议,csma/cd协议: csma/ca协议: 点击打开链接 csma/cd协议: 点击打开链接 这个课题有几个难点部分: 1.就是需要考虑各种情况,并对每一种情况都必须做 ...

  7. CSMA/CD协议和CSMA/CA协议有什么具体的区别?

    csma/ca全称是带冲突避免的载波侦听多址接入协议,主要用于wlan无线局域网:csma/cd全称是带冲突检测的载波侦听多址接入协议,两者最重要的区别就在于csma/cd是发生冲突后及时检测,而cs ...

  8. CSMA/CD协议和CSMA/CA协议有什么具体的区别

    csma/ca全称是带冲突避免的载波侦听多址接入协议,主要用于wlan无线局域网:csma/cd全称是带冲突检测的载波侦听多址接入协议,两者最重要的区别就在于csma/cd是发生冲突后及时检测,而cs ...

  9. M.2接口SSD固态硬盘的SATA NGFF协议和PCIe NVMe协议介绍

    一. m.2接口 M.2接口,是一种新的主机接口方案,可以兼容多种通信协议,如sata.PCIe.USB.HSIC.UART.SMBus等.M.2接口,是Intel推出的一种替代MSATA新的接口规范 ...

  10. 【计算机网络】分层、OSI七层协议和TCP四层协议

    文章目录 1. 计算机网络体系结构 2. OSI七层模型 2. TCP/IP四层模型 3. 五层协议 4. 数据传输 4.1 首部 1. 计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构 ...

最新文章

  1. Android开发关于网络的书记,Android开发需要了解的网络协议
  2. 你是一直认为 count(1) 比 count(*) 效率高么?
  3. Generative Adversarial Networks 生成对抗网络的简单理解
  4. 曾辉机器人_武昌理工学子在2020年中国机器人大赛中夺冠
  5. 修改同一张表的同一个字段的两个不同的值。
  6. setuna截图怎么放大缩小_一款强大的电脑截图神器,快速提高工作效率,功能强大!...
  7. 红帽子linux拨号上网,centos6.5宽带拨号上网的方法
  8. java贴图技术坦克世界_坦克世界游戏图像设置技巧 如何提高FPS
  9. 在vue中使用unity3D实现webGL将要呈现的效果
  10. 大内高手 常见内存错误
  11. 高能手办团服务器维护了,高能手办团11月27日更新了什么 11月27日更新维护详情...
  12. 知乎自动化登录(2021.3)
  13. E. Xenon's Attack on the Gangs,Codeforces Round #614 (Div. 2),树形dp
  14. Win10 安装 UG10.0 UG8.5教程 --(及安装错误问题解决)--NX 8.5 NX 10.0 安装教程
  15. 计算机的四屏故障维修,计算机应用之显卡故障维修技巧
  16. 3ds Max 2018: Mastering UVW Mapping 3ds Max 2018:掌握UVW映射 Lynda课程中文字幕
  17. 五福题材的公众号图文排版有哪些素材?
  18. popstate返回上一级问题。
  19. ipad如何分屏_基于ipad的生态型无纸化学习说明书
  20. 如何在线将普通英文转换成艺术英文字体?

热门文章

  1. 服务器响应码302,ajax与302响应代码测试 详细出处参考:http://www.jb51.net/article/42327.htm...
  2. php比较3个数大小写,php在前n个字符的字符串比较(大小写敏感)的函数strncmp()...
  3. python内置函数可以返回列表元组_Python内置函数()可以返回列表、元组、字典、集合、字符串以及range对象中元素个数....
  4. cad怎么卸载干净_百度软件中心助手怎么样干净卸载
  5. MySQL查询优化:LIMIT 1避免全表扫描
  6. 清空Python Shell 窗口的方法 - ClearWindow
  7. 第十七届全国大学生智能车竞赛完全模型组 I 型车模数据
  8. 极简PaddlePaddle的房价预测Demo
  9. 机械爪的带有压力反馈的控制实验
  10. vs合并项目_线性混合效应模型 VS 方差分析