开源项目 generate-key 讲解 Bitcoin Improvement Proposals 中的 BIP32 与 BIP44 协议

  • BIP (Bitcoin Improvement Proposals)
  • 基本概念
  • bip 重点协议版本差异
  • bip44 与 bip 32 协议
  • 下载
  • 写在后面

BIP (Bitcoin Improvement Proposals)

BIP中文全称比特币改进建议,它是一种设计文档,向比特币社区提供新功能的描述,为比特币及其运行进程和外部环境提供指导性文件。《BIP-0001.mediawiki》 一份规范的BIP应该提供该特性的简明技术规范以及其特性的基本原理。

基本概念

BIP44 协议由 BIP32 为基础,提供了一套通过特定口令(种子)无限推导出公私钥的解决方案。

就目前而言 BIP32 以上的更高版本,均是对 BIP32 的延伸与扩展。

bip 重点协议版本差异

  • BIP32 定义 Hierarchical Deterministic wallet (简称 “HD Wallet”),可以以特定规则生成私钥,这样只需要存储少量“种子”,就能推算出无数个可用私钥,它的实现称为“分层确定性钱包”。好处是可以方便的备份、转移。一个 Seed 走天下。
    分层确定性钱包

  • BIP39 提出了一种方法,用“有意义的”助记词代替无意义的数字,也就是“密语种子”,密语种子更加便于记忆和抄录,它可以转化成适用于BIP32的“数字种子”。

  • BIP43 提出了BIP32的一个规范(或者说是限制),因为BIP32过于自由,使基于BIP32的各种应用总是互相不能兼容。

  • BIP44 是 BIP43 的一个特殊应用,一个特点是能够包容更多账户(币种)。

bip44 与 bip 32 协议

因为文章尚不完整,阅读此处时,希望读者已经对 bip32 有了基础的了解。

我们这里主要对 BIP44 协议做重点分析。
因为就目前而言,该协议版本是主流的 bip 协议版本。
BIP32 提供了密钥无限推导的基础,由于大量 ICO 的出现,在 BIP44 中扩展了币种的概念。

首先,我们先抽象的认为,bip 协议是一个无限不定长的 N 维数组。
用户可以取任意维度任意下标,就可以拿到对应的用于推导的主公私玥以及 bitcoin 中使用的公私玥和地址。
bip32 就是没有任何限制的协议,而 bip44 就是限制用户,要求用户从第四维开始取值,而前三维用于确定协议与币种。

第一位:协议版本 默认44
第二位:币种类型 (前往 BIP 协议国际社区)
第三位:用户编号位,若没有用户编号的概念,则默认可取 0

为了标记这位是特殊位置,所有的取值,都将与 0x80000000 进行或运算

const uint32_t h = 0x80000000;
const uint32_t c1 = h | 44;
uint32_t coin_type2 = h | _type;
uint32_t t3 = h | 0;

下载

我通过以上知识,对C++ php Java js 等 bip32 项目进行修改,都进行了求证。
通过 bip32 协议 转换到 bip44 协议
为方便大家学习探讨,梳理了一个项目,C++ 开源代码提供如下。
前往国际开源社区
前往国内开源社区

该代码并未经过严密修缮,只做学习分享使用。

写在后面

文章并未完结,待后续补充。

你可能感兴趣的:(Bitcoin,区块链,开源工程,区块链必知必会)