Bytom BIP-32协议和BIP-44协议
我们知道HD(分层确定性)钱包,基于 BIP-32;多币种和多帐户钱包,基于 BIP-44;最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,所以我今天就专门整理了一下该协议的内容以及在比原中涉及的代码。来做一个详细的介绍!
BIP-32协议
BIP32协议原英文地址:
地址:https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
BIP32:定义 Hierarchical Deterministic wallet (简称 “HD Wallet”),是一个系统可以从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥)。好处是可以方便的备份、转移到其他相容装置(因为都只需要 seed),以及分层的权限控制等。具体的内容细节可以翻阅文档。
那么下面我列出了在比原链中BIP-32协议的具体实现,具体的实现的代码逻辑可以在:https://github.com/Bytom/bytom/blob/master/blockchain/signers/signers.go 找到下面的方法。研究代码实现过程.
比原链中BIP32协议的代码实现:
BIP-44协议
BIP-44原英文协议地址
地址: https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
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
第三层级是“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 找到下面的方法。可以研究具体的代码实现过程。
比原链中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
Bytom BIP-32协议和BIP-44协议的更多相关文章
- 使用 C# 实现 CJ-T188 水表协议和 DL-T645 电表协议的解析与编码
一.协议的定义 要对某种协议进行编解码操作,就必须知道协议的基本定义,首先我们来看一下 CJ/T188 的数据帧定义(协议定义),了解请求数据与响应数据的基本结构. 1.1 CJ/T188 水表通讯协 ...
- C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC
本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 官方 ...
- java基础55 UDP通讯协议和TCP通讯协议
本文知识点(目录): 1.概述 2.UDP通讯协议 3.TCPP通讯协议 1.概述 1.在java中网络通讯作为Socket(插座)通讯,要求两台都必须安装socket. 2.不同的 ...
- python 读写西门子PLC 包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC
本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 nu ...
- [Twisted] Protocols协议和Protocol Factories 协议工厂
Protocols 描述了如何异步处理网络事件.Twisted维护了许多协议的实现,如HTTP,Telent,DNS,IMAP.Portocols实现了IProtocol接口, IProtocol包含 ...
- OSI协议和TCP/IP协议笔记
1.OSI协议: 第7层应用层:OSI中的最高层.是用户与网络的接口.该层通过应用程序来完成网络用户的应用需求,如文件传输.收发电子邮件等.在此常见的协议有:HTTP,HTTPS,FTP,TELNET ...
- java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC
本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 gi ...
- HTTP协议和WebSocket协议(一)
转自:https://www.jianshu.com/p/0e5b946880b4# HTTP HTTP的地址格式如下: http_URL = "http:" "//&q ...
- python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...
随机推荐
- Mac下StarUML的安装以及破解
1.下载地址:http://staruml.io/ 2. 打开 /Applications/StarUML.app/Contents/www/license/node/LicenseManagerDo ...
- js DateTime函数
---恢复内容开始--- 一.js获取当前日期时间var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFull ...
- HDD ,SSD和PCIE SSD性能测试
PCIE SSD * MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s] * KB = 1000 bytes, KiB = 10 ...
- 我的FPGA之旅4---led流水灯
[1]输入端口不能使用reg数据类型,因为reg类型对应的FPGA内部的寄存器.这样理解:reg寄存器具有记忆功能;而wire类型数据就相当于一根连线.input输入信号用wire连线进来就好:out ...
- python类与对象-如何派生内置不可变类型并修其改实例化行为
如何派生内置不可变类型并修其改实例化行为 问题举例 自定义一种新类型的元组,对传入的可迭代对象,我们只保留 其中int类型且值大于0的元素,例如 IntTuple([1, -1, 'abc', 6, ...
- git使用手册整理
-------------------20181217------------------- git使用:在gitbash 下初始化用户: $ git config --global user.nam ...
- 安利一个vps,7美元/年。
黑色星期五.给大家安利一个vps,7美元/年.配置如下:2 个虚拟化 CPU 2 GB (2048 MB) 专属内存 50 GB RAID-10 受保护硬盘存储 3000 GB (3TB) 月流量 1 ...
- Yarn 组件的指挥部 – 调度器Scheduler
linux基础 为hadoop集群的搭建扫清了障碍,也为内存的管理,文件系统的管理扫清了障碍 接着到Hadoop的阶段,首先做集群的安装,深入到使用这两个核心的组件,分布式文件系统HDFS,解决大量数 ...
- Oracle sql function LISTAGG
select business_unit, voucher_id, listagg( vat_txn_type_cd, ',') within group (order by business_uni ...
- 架构设计---soa与msa的概念(转)
https://blog.csdn.net/qq_15001229/article/details/79535037