当前位置:   article > 正文

区块链开发之确定性算法bip32,bip39,bip44_区块链bip32算法

区块链bip32算法

引言

随着比特币区块链的发展,人们已经不满足于,只有一个账号的情况,有些人会有好几个账户,但是这就出现一个问题,我有几个账号,就要保存几个私钥,这就特别麻烦和不友好,所以,就出现了bip32确定性算法,该算法可以让你只有同一个种子,就可以生成无数个私钥和地址,这就大大方便了用户的使用。但是这个种子,也不较长,用户使用起来也比较繁琐,这就出现了bip39,它是使用助记词的方式,生成种子的,这样用户只需要记住,12个单词(3,6,9,12,15,18,21,24支持这些单词数,目前使用较广泛的是12和24),这就有大大提高了用户使用的便利性。又随着区块链发展,市面上出现了很多币种,之前的确定性算法只是针对比特币的,也就是说只支持一种币种,用户想用同一个种子,管理不同币种,这就促使了bip39协议的出现,它是基于bip32协议的,它给bip32的路径,赋予了不同的意义,很好的解决了多币种,多地址的问题。

协议官方链接

如果想详细的了解这些协议,请查看官方文档(解析的最清楚) 
big32:https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

bip39:https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki

bip44:https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki

验证网站:https://iancoleman.io/bip39/

 

BIP44简介

 

路径级别

我们在BIP32路径中定义以下5个级别:

m / purpose'/ coin_type'/ account'/ chain / address_index

 

路径中的撇号 ' 表示使用BIP32硬化衍生物。

每个级别都有特殊含义,如下面的章节所述。

Purpose

purpose是在BIP43建议之后将常数设置为44'(或0x8000002C)。它表示根据本规范使用该节点的子树。

在此级别使用强化派生。

Coin_type

一个主节点(种子)可用于无限数量的独立加密币,如比特币,Litecoin或Namecoin。但是,为各种加密币共享相同的空间有一些缺点。

此级别为每个加密币创建一个单独的子树,避免重用加密链中的地址并改善隐私问题。

硬币类型是一个常量,为每个加密币设置。Cryptocoin开发人员可能会要求为他们的项目注册未使用的号码。

已分配硬币类型的列表在下面的“已注册硬币类型”一章中。

在此级别使用强化派生。

Account

此级别将密钥空间拆分为独立的用户身份,因此钱包永远不会将硬币混合在不同的帐户中。

用户可以使用这些账户以与银行账户相同的方式组织资金; 用于捐赠目的(所有地址都被视为公共地址),用于保存目的,共同费用等。

帐户按顺序递增的方式从索引0开始编号。此数字在BIP32派生中用作子索引。

在此级别使用强化派生。

如果先前的帐户没有交易历史记录(意味着之前没有使用过任何地址),则软件应该阻止创建帐户。

从外部源导入种子后,软件需要发现所有使用过的帐户。“帐户发现”一章中描述了这种算法。

Chain

常量0用于外部链,常量1用于内部链(也称为更改地址)。外部链用于在钱包外部可见的地址(例如,用于接收付款)。内部链用于在钱包外部不可见的地址,用于返回交易变更。

在这个级别使用公共派生。

Address_index

地址按顺序递增的方式从索引0开始编号。此数字在BIP32派生中用作子索引。

在这个级别使用公共派生。

帐户发现

从外部源导入主种子时,软件应开始以下列方式发现帐户:

  1. 派生第一个帐户的节点(索引= 0)
  2. 派生此帐户的外部链节点
  3. 扫描外链的地址; 尊重下面描述的差距限制
  4. 如果外部链上未找到任何交易,请停止发现
  5. 如果有某些交易,请增加帐户索引并转到步骤1

此算法是成功的,因为如果上一个帐户没有交易历史记录,软件应该禁止创建新帐户,如上面“帐户”一章所述。

请注意,该算法适用于交易历史记录,而不是帐户余额,因此您可以拥有一个总共0个硬币的帐户,算法仍将继续发现。

地址差距限制

地址间隙限制当前设置为20.如果软件连续命中20个未使用的地址,则预计在此之后没有使用过的地址并停止搜索地址链。我们只扫描外部链,因为内部链仅接收来自相关外部链的硬币。

当用户试图通过生成新地址来超过外部链的间隙限制时,钱包软件应该发出警告。

注册的硬币类型

这些是上面“硬币类型”一章中描述的BIP44第2级使用的默认注册硬币类型。

所有这些常量都用作硬化推导。

index

hexa

coin

0

0x80000000

Bitcoin

1

0x80000001

Bitcoin Testnet

 

此BIP不是注册硬币类型的中央目录,请访问SatoshiLabs,其中包含完整列表:

SLIP-0044:BIP-0044的注册硬币类型

要注册新的硬币类型,需要实现该标准的现有钱包,并且应创建对上述文件的拉取请求。

例子

coin

account

chain

Address_index

path

Bitcoin

first

external

first

m / 44' / 0' / 0' / 0 / 0

Bitcoin

first

external

second

m / 44' / 0' / 0' / 0 / 1

Bitcoin

first

change

first

m / 44' / 0' / 0' / 1 / 0

Bitcoin

first

change

second

m / 44' / 0' / 0' / 1 / 1

Bitcoin

second

external

first

m / 44' / 0' / 1' / 0 / 0

Bitcoin

second

external

second

m / 44' / 0' / 1' / 0 / 1

Bitcoin

second

change

first

m / 44' / 0' / 1' / 1 / 0

Bitcoin

second

change

second

m / 44' / 0' / 1' / 1 / 1

Bitcoin Testnet

first

external

first

m / 44' / 1' / 0' / 0 / 0

Bitcoin Testnet

first

external

second

m / 44' / 1' / 0' / 0 / 1

Bitcoin Testnet

first

change

first

m / 44' / 1' / 0' / 1 / 0

Bitcoin Testnet

first

change

second

m / 44' / 1' / 0' / 1 / 1

Bitcoin Testnet

second

external

first

m / 44' / 1' / 1' / 0 / 0

Bitcoin Testnet

second

external

second

m / 44' / 1' / 1' / 0 / 1

Bitcoin Testnet

second

change

first

m / 44' / 1' / 1' / 1 / 0

Bitcoin Testnet

second

change

second

m / 44' / 1' / 1' / 1 / 1

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号