前言
BIP43英文地址
BIP44英文地址
原文地址:https://blog.csdn.net/yonggao023/article/details/80223779
作者:梦幻艾斯
备注:欢迎转载,请保留原文地址。
BIP43、BIP44其实是BIP32的一种key树实现方案。
BIP32定义的分层确定性钱包在用户体验和安全性上比非确定钱包做的更好。但是BIP32定义的自由度太高。很多实现都声称他们是兼容BIP32协议的,但是事实上他们可以产生具有不同逻辑结构的钱包,从而使他们之间无法兼容,这就使得"兼容BIP32"变得毫无意义。比如A钱包采用BIP32生成的key树和B钱包使用BIP32生成的key树不一样。同样的助记词在两个钱包之间无法使用。为了解决这个问题BIP43、BIP44定义了一种key树生成方法,只要遵循这种协议的钱包都可以互相兼容。在这里BIP44其实是BIP43的一种扩展。我们使用的HD钱包一般都是BIP44钱包。
在BIP43种定义的路径是:
m / purpose' / *
撇号表示使用BIP32硬化派生(i>=231)。
BIP44种定义的路径是:
m / purpose'/ coin_type'/ account'/ change / address_index
撇号表示使用BIP32硬化派生(i>=231)。
BIP32解读
路径级别
m / purpose'/ coin_type'/ account'/ change / address_index
路径中的撇号表示使用BIP32硬化派生。
每个级别都有特殊的含义,在下面的章节中有描述。
purpose(方案号)
目的是根据BIP43建议设置为44'(或0x8000002C)的常量。它表示根据此规范使用此节点的子树。
在这个级别使用强化派生。
coin_type(币类型)
一个主节点(种子)可用于无限数量的独立密码库,如比特币,莱特币或Namecoin。但是,为各种密码库共享相同的空间具有一些缺点。
该级别为每个cryptocoin创建一个单独的子树,避免重复使用cryptocoins中的地址并改进隐私问题。
硬币类型是一个常数,为每个cryptocoin设置。Cryptocoin开发者可能会要求为他们的项目注册未使用的编号。
已经分配的硬币类型列表在下面的“注册币种”一章中。
在这个级别使用强化派生。
account(账户)
这个级别把关键空间分成独立的用户身份,所以钱包不会在不同帐户中混合硬币。
用户可以使用这些帐户以与银行帐户相同的方式组织资金; 用于捐赠目的(所有地址都被视为公开),用于储蓄目的,共同费用等。
账户从索引0开始按顺序递增的方式进行编号。该数字在BIP32派生中用作子索引。
在这个级别使用强化派生。
如果以前的帐户没有交易记录(即以前没有使用过任何地址),软件应阻止创建帐户。
软件需要在从外部源导入种子后发现所有使用的帐户。这种算法在“账户发现”一章中有描述。
change(地址变更层)
常量0用于外部链,常量1用于内部链(也称为找零地址)。外部链用于在钱包外部可见的地址(例如用于接收付款)。内部链用于地址,这些地址不应在钱包外部可见,并用于找零。
在这个级别使用公共派生。
address_index
地址从索引0开始按顺序递增的方式编号。该数字在BIP32派生中用作子索引
在这个级别使用公共派生。
这个就是生成地址的层
账户查找
当主密钥从外部导入钱包时,钱包应该按照以下步骤来查找账户
- 导出第一个账户节点(index = 0)
- 导出这个账户的外链节点
- 扫描这个外部链上的地址。遵守下面定义的距离限制。
- 如果没有在外部链上找到交易,停止查找。
- 如果找到交易,递增账户索引,然后回到第一步。
这个算法是可行的,如果前面的账户没有历史交易记录钱包不应该允许创建新的账户。
请注意,这个算法是根据历史交易记录运行的而不是账户余额。因此您可以拥有一个总金额为0的账户,该算法仍将继续查找
地址空隙限制
地址空隙限制目前设置为20.如果软件在一行中发现有20个未使用的地址,则预计在此点之后没有使用过的地址并停止搜索地址链。我们只扫描外部链,因为内部链只接收来自相关外部链的硬币。
通过生成新地址,电子钱包软件应该警告用户何时尝试超出外部链上的间隔限制。
注册币种
这些是在上面的“coin_type”一章中描述的用于BIP44的等级2的默认注册硬币类型。
所有这些常量都用作硬化派生。
index | hexa | coin |
---|---|---|
0 | 0x80000000 | Bitcoin |
1 | 0x80000001 | Bitcoin Testnet |
本BIP不是注册币种的中心目录,请访问SatoshiLabs,它保留完整列表:
SLIP-0044:BIP-0044的注册币种
要注册新的硬币类型,需要实现标准的现有钱包,并且应该创建对上述文件的拉取请求。