HD 钱包

提示

Vite 官方所有钱包均为 HD 钱包,具体派生规则请浏览:VEP-3

有关 HD 协议,请浏览:HD Protocol, HD Wallet, BIP3

共同的过程

  1. Vite 钱包使用 BIP39 生成 24 个助记词和对应的熵;
  2. 使用这个助记词生成 Seed, 在这步中我们暂时不支持 Two-Factor Seed Phrases;
  3. 使用参数为 SHA512 和 key 为 ed25519 blake2b seed 的 HMAC 算法,对 Seed 进行 Hash 之后派生出我们的 MasterKey
  4. 根据 BIP44 规则,我们可以利用 Master Key 派生出我们 Vite 需要的私钥和地址,我们在 SLIP-0044) 上注册的 coin_type 是 666666

密码的作用

在创建账户的账户的时候用户需要输入一个 密码,该密码并不是 Two-Factor Seed Phrases , 而是我们用来加密存储 BIP39 对应的熵的参数之一,具体加密过程,在 IOS,Web 钱包和 go-vite 自带钱包上各有不同,具体为

  • go-vite 钱包:使用标准参数的 scrypt 算法将该密码扩展成 256bitaes-gcm 算法的私钥来加密熵,将其存储成 EntropyStory 的文件形式。保存在用户的文件系统中,用户可以自由的备份这个文件,即使忘记助记词,只要有密码和该文件一样可以恢复用户的助记词.

  • Web 钱包

  • iOS 钱包

助记词恢复账户的过程

单个助记词,在 vep-3: m/44'/666666'/x' 的规则下,理论上可以派生 2^32-1 个地址,如果用户忘记了某个 Vite 地址对应的私钥,甚至是 Vite 地址也忘记了,我们是如何通过助记词恢复用户的账户呢?

在 Web、IOS 和将来的 Android 端上,我们默认一个助记词最多生成 10 个地址,在恢复账号的时候,我们会遍历该助记词的 0-9 号地址,去查询这些地址是否有过交易,如果发现 8 号地址有过交易,我们会立即恢复用户序号 0-8 的所有地址,所以在 Vite 端上钱包,只要保护好助记词,不必担心因为忘记地址或者私钥带来财产损失.

大规模派生地址的方案

开发人员可以直接集成 go-vite 的 wallet 模块,在创建助记词并且解锁后,可以获得一个 entropystore.Manager ,其中有 DeriveForFullPathDeriveForIndexPath 两个方法

  1. DeriveForIndexPath : 传入某个 uint32 值之后,我们会扩展成 m/44'/666666'/x' 的形式调用 DeriveForFullPath 派生对应的地址,并且将对应的序号的私钥和账户地址返回给开发者,开发者可以自由的维护序号,地址和私钥的关系,最多可以产生 2^32-1 个地址

  2. DeriveForFullPath : 顾名思义,传入的是完整的 m/44'/666666'/x' 的序号,我们会派生对应的地址和私钥,这个方法还可以被超大规模系统使用,如果某个系统对地址的需求数量超过 2^32 级别,那么有两种方案,第一是再创建一个新的助记词,第二是,传入形如 m/44'/666666'/x'/y'/z'/... ,每个子级别,都有 2^32-1 个子地址