HD钱包 - HD Wallet 分层确定性钱包
钱包的类型
私钥不同的生成方法,也对应着不同的钱包结构,通常可以分为非确定性钱包和确定性钱包。比特币最早的客户端(Satoshi client)就是非确定性钱包,钱包是一堆随机生成的私钥的集合。
确定性钱包则不需要每次转账都要备份,确定性钱包的私钥是对种子进行单向哈希运算生成的,种子是一串由随机数生成器生成的随机数。在确定性钱包中,只要有这个种子,就可以找回所有私钥
BIP44的规则使得 HD 钱包非常强大,用户只需要保存一个种子,就能控制所有币种,所有账户的钱包。
可以一个钱包,同时支持比特币和以太坊
HD 钱包是生成不重复使用地址的方法 ,记住一个种子就可以访问所有地址的钱而不需要每个地址都备份私钥。当然HD 钱包不仅适用于比特币,HD 钱包可以让一个钱包同时管理多资产成为可能性。
BIP32
定义 Hierarchical Deterministic wallet (简称 “HD Wallet”),是一个系统可以从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥)。好处是可以方便的备份、转移到其他相容装置(因为都只需要 seed),以及分层的权限控制等。
BIP39
将 seed 用方便记忆和书写的单字表示。一般由 12 个单字组成,称为 mnemonic code(phrase),中文称为助记词或助记码。
BIP44
基于 BIP32 的系统,赋予树状结构中的各层特殊的意义。让同一个 seed 可以支援多币种、多帐户等
各层定义如下:
m / purpose' / coin_type' / account' / change / address_index
- purporse’ 固定是 44’,代表使用 BIP44
- coin_type’ 用来表示不同币种,例如 Bitcoin 就是 0’,Ethereum 是 60’。
- account’ 代表这个币的账户索引,从0开始。
- change 常量0用于外部链,常量1用于内部链(一般使用0)
- address_index 这就是地址索引,从0开始,代表生成第几个地址,官方建议,每个account下的address_index不要超过20
例如: m/44'/60'/0'/0/0
表示在一个 Ethereum HD Wallet 中,第一个帐户的第一组 keypair