钱包

转载请注明转载地址:https://blog.csdn.net/YAYAWXQ_QQ_COM/article/details/79724183

英文地址:https://github.com/ethereumbook/ethereumbook/blob/develop/wallets.asciidoc

钱包

“钱包”这个词在以太坊中用来描述一些不同的东西。

广义的说,钱包是一个应用程序,提供用户操作界面。通过钱包可以控制用户的钱,管理密钥和地址,跟踪余额,创建和签署交易。此外,一些Ethereum钱包也可以与合约(如tokens)进行交互。

更狭义地说,从程序员的角度来看,“钱包”这个词指的是用来存储和管理用户密钥的系统。每个“钱包”都有一个密钥管理组件。对于一些钱包来说,该组件就是全部钱包功能了。其他的钱包是更广泛的类别的一部分,如“浏览器”,它是基于ethereuml的分散应用程序或“dapps”的接口。在“钱包”这个术语下,各种类别之间没有明确的界限。

在本节中,我们将把钱包看作是用于私钥的容器,以及用于管理密钥的系统。

钱包技术概览

在本节中,我们总结了用于构建用户友好、安全和灵活的Ethereum钱包的各种技术。

关于Ethereum的一个常见的误解是Ethereum钱包中含有以太币或tokens代币。事实上,钱包里只有钥匙,以太币或其他token被记录在以太仿的区块链上。用户通过在他们的钱包中签署交易来控制网络上的代币。从某种意义上说,以太钱包是一个"keychain"。

注意:Ethereum钱包包含密钥,而不是以太币或代币。每个用户都有一个包含密钥的钱包。钱包实际上是包含成对的私有/公钥的keychain(参见[private_public_keys])。用户使用密钥签署交易,从而证明他们拥有以太币。以太币存储在区块链上。

有两种主要类型的钱包,区分是:它们所包含的密钥是否相互关联。

第一类是不确定性的钱包,每个密钥都是由随机数独立生成的。这些键不是相互关联的。这种类型的钱包,也被称为JBOK("Just a Bunch Of Keys")钱包。

第二种类型的钱包是一个确定性的钱包,所有的钥匙都来自一个单一的主键,即种子。这种类型的钱包里的所有密钥都是相互关联的,如果你有原始的种子,就可以重新生成。在确定性的钱包中有许多不同的主要派生方法。最常用的派生方法是树状结构,称为分级确定性或HD钱包。

确定性钱包是由种子初始化的。为了便于使用,种子被编码成英语单词(或其他语言中的单词),也被称为助记码字。

接下来的几节将在高级别介绍这些技术。

不确定性(随机)钱包

在第一个Ethereum钱包(由Ethereum预售所提供)中,钱包文件存储了一个随机生成的私有密钥。这样的钱包正在被确定性的钱包取代,因为它们难以管理、备份和导入。随机密钥的缺点是,如果你生成了很多,那么你必须保存所有它们的副本。每个密钥必须备份,否则,如果钱包无法访问,它所控制的资金将不可挽回地丢失。此外,通过将多个事务和地址关联在一起来,Ethereum地址重用将减少用户的隐私性。Type-0不确定性的钱包是一个糟糕的选择,特别是如果您想避免地址重用,因为它意味着管理多个键,这就需要频繁的备份。

许多Ethereum客户(包括go-ethereum或geth)使用一个keystore文件,它是一个json编码的文件,其中包含一个单独的(随机生成的)私钥,通过程序加密以获得额外的安全性。JSON文件内容如下:

{
    "address": "001d3f1ef827552ae1114027bd3ecf1f086ba0f9",
    "crypto": {
        "cipher": "aes-128-ctr",
        "ciphertext": "233a9f4d236ed0c13394b504b6da5df02587c8bf1ad8946f6f2b58f055507ece",
        "cipherparams": {
            "iv": "d10c6ec5bae81b6cb9144de81037fa15"
        },
        "kdf": "scrypt",
        "kdfparams": {
            "dklen": 32,
            "n": 262144,
            "p": 1,
            "r": 8,
            "salt": "99d37a47c7c9429c66976f643f386a61b78b97f3246adca89abe4245d2788407"
        },
        "mac": "594c8df1c8ee0ded8255a50caf07e8c12061fd859f4b7c76ab704b17c957e842"
    },
    "id": "4fcb2ba4-ccdb-424f-89d5-26cce304bf9c",
    "version": 3
}

keystore格式使用了一个密钥派生函数Key Derivation Function(KDF),也称为密码扩展算法,它可以防止暴力、字典或彩虹表攻击。简单地说,私钥不是由密码直接加密的。相反,通过反复的散列,密码就被拉长了。哈希函数在262144轮中重复出现,在keystore JSON中可以看到作为参数密码的kdfparams.n。如果攻击者试图使用暴力破解口令,则必须对每一个试图使用的密码子进行262144轮的散列,这将使攻击速度减慢,从而使其在足够的复杂性和长度上不可行。

有许多软件库可以读取和写入keystore格式,比如JavaScript库keythereum:https://github.com/ethereumjs/keythereum

注意:除了简单的测试以外,不鼓励使用不确定性的钱包。因为它们实在太笨重了,无法备份和使用。取而代之的是,使用一个基于行业标准的HD钱包,并使用助记码种子进行备份。

确定性(种子)钱包

确定性 或“种子”钱包是包含私钥的钱包,它们都来自一个普通的种子,通过使用单向散列函数生成。种子是一个随机生成的数字,与其他数据相结合,比如索引号或“链码”(参见HD钱包(BIP-32/BIP-44))来派生私钥。在一个确定的钱包中,种子足以恢复所有派生的键,因此在创建时只需一个单独的备份就足够了。这种种子还可以用于钱包的导出或导入,以便在不同的钱包实现之间方便地移植用户所有的密钥。

确定性,或“种子”,钱包是包含私钥的钱包,它们都来自一个普通的种子,通过使用单向散列函数。种子是一个随机生成的数字,与其他数据相结合,比如索引号或“链码”(参见HD钱包(BIP-32/BIP-44))来派生私钥。在一个确定的钱包中,种子足以恢复所有派生的键,因此在创建时一个单独的备份就足够了。这种种子还可以用于钱包的导出或导入,以便在不同的钱包实现之间方便地移植所有用户的密钥。

分层确定性钱包(BIP-32/BIP-44)

确定性的钱包被开发出来,使得从一个单一的“种子”派生出许多密钥变得容易。最先进的确定性钱包是由比特币的BIP-32标准定义的HD钱包。HD钱包中包含了在树结构中派生的键,这样一来,父键就可以派生出一系列子键,每个键都可以派生出一系列的子键,等等,从而达到无限的深度。


图1  HD钱包:一棵由一个种子产生的密钥树

与随机(不确定性)密钥相比,HD钱包提供了两大优势:

首先,树形结构可以用来表示额外的组织含义,例如,当用于接收传入支付的特定分支,以及用于接收来自传出支付的找零的不同分支。关键字的分支也可以在企业设置中使用,将不同的分支分配给部门、子公司、特定功能或会计类别。

其次,用户可以创建一个公共密钥序列,而不需要访问相应的私钥。这使得HD钱包可以在不安全的服务器上使用,也可以只在手表或接收设备上使用,而钱包没有可以使用这些资金的私人密钥。

种子和助记码(BIP-39)

HD钱包是管理许多密钥和地址的强大机制。如果它们结合了一种标准化的方法,即从一组简单的英语单词(或另一种语言的单词)中创建种子,这些单词可以很容易地抄写、导出和导入钱包,那么它们就更有用了。这就是所谓的助记符,标准是由BIP-39定义的。今天,许多Ethereum钱包(以及其他加密货币的钱包)使用这个标准,可以使用互操作的助记符导入和导出备份和恢复的种子。

让我们从实际的角度来看这个问题。下列哪一种更容易抄写,记录在纸上,无差错地阅读,导出,并导入另一个钱包?

一个确定的钱包的种子,十六进制形式:

FCCF1AB3329FD5DA3DA9577511F8F137

一个确定性钱包的种子,12个助记词形式:

wolf juice proud gown wool unfair
wall cliff insect more detail hub

钱包的最佳实践

随着加密货币钱包技术的成熟,一些共同的行业标准出现了,使得钱包具有广泛的互操作性,易于使用,安全,灵活。这些标准还允许钱包派生出多种不同加密货币的密钥,这一切都来自于单一的助记符。这些共同的标准是:

  • 助记码字,基于BIP-39
  • HD钱包,基于BIP-32
  • 多用途HD钱包结构,基于BIP-43
  • 多用途和多账户钱包,基于BIP-44     

这些标准可能会随着未来的发展而改变,或者可能会被淘汰,但现在它们形成了一套连锁技术,成为大多数加密货币事实上的钱包标准。这些标准已经被广泛的软件和硬件钱包所采用,使得所有这些钱包都是可互操作的。用户可以在其中一个钱包中导出一个助记符,并将其导入另一个钱包中,回收所有的事务、密钥和地址。

支持这些标准的软件钱包的一些例子包括(按字母顺序列出)Jaxx、MetaMask、MyEtherWallet (MEW)。支持这些标准的硬件钱包示例包括(按字母顺序列出)Keepkey、Ledger和Trezor。

下面的部分将详细讨论这些技术。

注意:如果您正在实现一个Ethereum钱包,它应该被构建为一个HD钱包,它的种子被编码为备份的助记码,后面的部分将按照BIP-32、BIP-39、BIP-43和BIP-44标准进行描述。

助记码字(BIP-39)

助记码字是一个随机数字序列,用作确定性的钱包派生的种子。单词的序列足以重新创建种子,从而重新创建钱包及其派生的密钥。一个钱包应用程序,用助记符实现了确定性钱包,当第一次创建钱包时,它将向用户显示12到24个单词的序列。该序列的单词是钱包的备份,可以用来恢复和重新创建相同或任何兼容的钱包应用程序中的所有密钥。助记词使用户更容易备份钱包,因为与随机数字序列相比,他们易于阅读和正确抄写。

注意:记忆单词常常与“brainwallet”混淆。他们的主要的区别是,brainwallet由用户选择的单词组成,而助记词则是由钱包随机创建并呈现给用户的。这一重要的差异使助记词更加安全,因为人类是非常贫乏随机性的来源。

在BIP-39中定义了助记码。注意,BIP-39是一个助记码的标准版实现。也有其他不同的标准,他们使用“一套不同的词”。比特币电子钱包使用的是BIP-39。BIP-39是由Trezor硬件钱包公司提出的,与电子版的实现不兼容。然而,BIP-39已经在几十个可互操作的实现中获得了广泛的行业支持,应该被视为事实上的行业标准。此外,BIP-39可用于生产支持Ethereum的多用途钱包,而电子种子则不能。

BIP-39定义了一个助记码和种子的创建,我们在这里用九个步骤来描述。为了清晰起见,这个过程分为两个部分: 第1步到第6步生成助记单词,步骤7到9从助记符到seed显示。

生成助记词

使用BIP-39中定义的标准化流程自动生成助记词。钱包从一个熵源开始,添加一个校验和,然后将熵映射到一个单词列表:

  1. 创建一个128到256位的随机序列(熵)
  2. 创建校验和,其值为:SHA256(随机序列(熵))后得到的散列的第一个(entrop-length/32)位
  3. 将校验和添加到随机序列的末尾
  4. 将序列分成12个部分,每个部分11bits
  5. 将每个11位的值映射到预定义的2048个单词字典中
  6. 助记码是单词的序列

图2 生成熵和助记词

表一:熵和字长显示了熵数据的大小与助记码的长度之间的关系。

Entropy (bits)Checksum (bits)Entropy + checksum (bits)Mnemonic length (words)

128

4

132

12

160

  1. 5

165

15

192

6

198

18

224

7

231

21

256

8

264

24

从助记词到种子

记词表示的熵的长度为128到256位。然后通过使用密钥拉伸函数(key-stretching)PBKDF2来获得更长的(512位)种子。然后,用产生的种子来建立一个确定性钱包并推导出钱包中的所有密钥。

密钥拉伸函数(key-stretching)有两个参数:助记符和salt。在密钥拉伸函数(key-stretching)中使用salt的目的是使暴力攻击时的"创建查找表"变得困难。在BIP-39标准中,salt还有另一项目的——它允许引入一种passphrase,作为保护种子的额外安全因素,随后我们将更详细的描述BIP-39中的可选passohrase。

步骤7到步骤9是从上一节“生成助记词的过程”继续描述的:

    7.  PBKDF2函数的第一个参数是第6步生成的助记符

    8. 第二个参数是salt。salt由字符串常量“助记符”组成,并与一个用户提供的可选passphrase字符串连接

    9. PBKDF2通过2048轮HMAC-SHA512算法来拉伸助记和salt,生成一个512位的值作为最终输出。这个512位的值就是种子

From mnemonic to seed

图3 从助记词到种子的生成过程

注意:key-stretching函数,2048回合的hash运算是一种有效的保护,以防止对助记符或口令的暴力攻击。它使(在计算中)尝试超过几千个密码子和助记符组合的代价很高,而可能得到的种子数量是巨大的(2512)。

表二:128bits Entropy 助记词,没有passphrase,生成种子

Entropy input (128 bits)

0c1e24e5917779d297e14d45f14e1a1a

Mnemonic (12 words)

army van defense carry jealous true garbage claim echo media make crunch

Passphrase

(none)

Seed (512 bits)

5b56c417303faa3fcba7e57400e120a0ca83ec5a4fc9ffba757fbe63fbd77a89a1a3be4c67196f57c39 a88b76373733891bfaba16ed27a813ceed498804c0570

表三:128bits Entropy 助记词,使用passphrase,生成种子

Entropy input (128 bits)

0c1e24e5917779d297e14d45f14e1a1a

Mnemonic (12 words)

army van defense carry jealous true garbage claim echo media make crunch

Passphrase

SuperDuperSecret

Seed (512 bits)

3b5df16df2157104cfdd22830162a5e170c0161653e3afe6c88defeefb0818c793dbb28ab3ab091897d0 715861dc8a18358f80b79d49acf64142ae57037d1d54

表四:256bits Entropy 助记词,没有passphrase,生成种子

Entropy input (256 bits)

2041546864449caff939d32d574753fe684d3c947c3346713dd8423e74abcf8c

Mnemonic (24 words)

cake apple borrow silk endorse fitness top denial coil riot stay wolf luggage oxygen faint major edit measure invite love trap field dilemma oblige

Passphrase

(none)

Seed (512 bits)

3269bce2674acbd188d4f120072b13b088a0ecf87c6e4cae41657a0bb78f5315b33b3a04356e53d062e5 5f1e0deaa082df8d487381379df848a6ad7e98798404

BIP-39中的可选的passphrase

BIP-39标准允许在种子的派生中使用可选的passphrase。如果没有使用passphrase,那么会使用一个由常量字符串“助记符”组成的salt拉拉伸助记词,从而产生一个特定的512位的种子。如果使用了passphrase,那么拉伸函数就会生成另一个不同的种子。事实上,给定一个助记符,每个可能的passphrase就会导致生成不同的种子。本质上,没有“错误”的passphrase。所有的passphrase都是有效的,它们都会导致生成不同的种子,进而形成一大堆可能的未初始化的钱包。一组可能的钱包是如此之大(2512),以至于不可能刻意或不小心猜测一个正在使用的passphrase,只要passphrase是足够的复杂性和有足够的长度。

注意:在BIP-39中没有“错误”的passphrase。每个passphrase都会导致生成一些钱包,除非以前使用过,否则将是空的。

可选的passphrase创建了两个重要的特性:

  • 第二因素(something memorized)使助记符本身变得毫无意义,可以防止助记词的备份不会被盗窃。
  • 作为一种似是而非的推诿或“强迫钱包”的形式。在这种情况下,可选的passphrase生成的钱包里存有一小笔资金,用来分散攻击者的注意力,使其减少对包含大部分资金的“真实”钱包的关注。
然而,重要的是要注意,使用passphrase短语也会带来损失的风险:
  • 如果钱包主人没有能力或者死亡,没有人知道密码,那么种子就没用了,所有储存在钱包里的钱都将永远丢失。
  • 相反地,如果钱包的主人备份passphrase在与种子相同的地方,它就违背了第二因素的目的。

虽然passphrases非常有用,但它们只应该与精心计划的备份和恢复过程结合使用,考虑到所有者生存的可能性,并允许他或她的家庭恢复加密货币属性。

使用助记词

BIP-32被多种语言实现,作为一个库:

python-mnemonic SatoshiLabs团队在Python中提出的BIP-39标准的参考实现。

Consensys/eth-lightwallet 用于节点和浏览器的轻量级JS Ethereum钱包(带有BIP-39)

npm/bip39 比特币BIP39的JavaScript实现:生成确定性密钥的助记码。

还有一个BIP-39生成器在一个独立的网页中实现,这对于测试和实验非常有用。 A BIP-39 generator as a standalone web page 用它可以生成生成助记符、种子和扩展的私钥。

BIP-39 generator web-page

https://iancoleman.github.io/bip39/ 该网页可以在浏览器中离线使用,也可以在线访问。

从种子创建一个HD钱包

HD钱包是由一个单一的根种子创建的,根种子是一个128,256或512位随机数。通常,种子是由上一节详细介绍的助记符生成的。

HD钱包中的每一个密钥都是由这个根种子决定的,这使得它可以从任何兼容的HD钱包中重新创建整个HD钱包。这样,通过生成种子的助记词的简单传输,可以很容易备份、恢复、导出一个包含有成千上万密钥的钱包。

分层确定性钱包(BIP-32)和路径(BIP-43/44)

大多数的HD钱包都遵循BIP-32标准,这已经成为了确定性密钥生成的行业标准。你可以阅读以下的详细说明:

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

我们不会在这里讨论BIP-32的细节,只需要了解如何在钱包中使用它的组件。在许多软件库中,有几十个可互操作的BIP-32的实现:

Consensys/eth-lightwallet 用于节点和浏览器的轻量级JS Ethereum钱包(带有BIP-39)

http://bip32.org/ 一个BIP-32独立网页生成器,它对测试和实验非常有用

备注:独立的BIP-32生成器不是HTTPS站点。这是为了提醒您使用这个工具是不安全的。它只是用来测试的。您不应该使用本网站生产的密钥(使用真实的资金)。

扩展公钥和私钥

在BIP-32术语中,可以扩展产生“子”的父key称为扩展key。

扩展私钥前缀为xprv :

xprv9s21ZrQH143K2JF8RafpqtKiTbsbaxEeUaMnNHsm5o6wCW3z8ySyH4UxFVSfZ8n7ESu7fgir8imbZKLYVBxFPND1pniTZ81vKfd45EHKX73

一个扩展公钥前缀为xpub:

xpub661MyMwAqRbcEnKbXcCqD2GT1di5zQxVqoHPAgHNe8dv5JP8gWmDproS6kFHJnLZd23tWevhdn4urGJ6b264DfTGKr8zjmYDjyDTi9U7iyT

HD钱包的一个非常有用的特性是,它能够从父公钥派生出子公钥,而不需要使用私钥。这给我们提供了两种方法来派生一个子公钥:要么来自子私钥,要么直接来自父公钥。

因此,可以使用一个扩展的公钥来派生所有的公钥(也仅有公钥)在该分支的HD钱包结构中。

这个可以用来创建非常安全的仅有公钥的部署,例如,在一个服务器或应用程序有一个扩展的公钥的副本而没有任何私钥。这种部署可以产生无限数量的公钥和Ethereum地址,但不能消费发送到这些地址上的钱。与此同时,在另一个更安全的服务器上,扩展的私钥可以派生所有对应的私钥来签署事务和使用这些钱。

此解决方案的一个常见应用是在服务于电子商务应用程序的web服务器上安装一个扩展的公钥。web服务器可以使用公钥派生函数为每个事务创建一个新的Ethereum地址(例如,对于客户购物车)。web服务器将不会有任何容易被窃取的私钥。如果没有HD钱包,唯一的方法就是在单独的安全服务器上生成数千个Ethereum地址,然后在电子商务服务器上预加载它们。这种方法很麻烦,需要经常维护,以确保电子商务服务器不会“耗尽”密钥。

这个解决方案的另一个常见应用是冷存储或硬件钱包。在这种情况下,扩展的私钥可以存储在硬件钱包中,而扩展的公钥可以在线保存。用户可以随意创建“接收”地址,而私钥则安全地存储在脱机状态。若要使用这些资金,用户可以在离线签署Ethereum客户端使用扩展的私钥,或者在硬件钱包设备上签名。

强化子密钥派生

从xpub中可以获取整个公钥分支的能力是非常有用的,但它带来了潜在的风险。通过xpub不能访问子私钥。但是,因为xpub包含了链代码chain code,如果已知一个子私钥,或者不知怎么泄漏了,它可以使用chain code来派生出所有其他子私钥。一个泄露的子私钥,连同一个父链代码chain code,则可以显示所有子私钥。更糟的是,子私钥和父链代码可以用来推断父私钥。

为了应对这一风险,HD钱包使用了一种可替代的衍生函数,称为“强化推导”,它“打破”了父公钥和子链代码之间的关系。强化推导函数使用父私钥派生子链代码,而不是父公钥。这就在父/子序列中创建了一个“防火墙”,其中的链代码不能用于对父级或同级私钥进行危害。

简单地说,如果您希望使用xpub的便利来派生公匙的分支,而不让自己暴露于泄漏的链码的风险,那么您应该从一个硬化的父类派生它,而不是从一个正常的父类派生。作为一种最佳实践,主键的"级别-1级子"总是通过变硬的派生派生,以防止主键的危害。

普通派生和强化派生的索引号

在BIP-32派生函数中使用的索引号是一个32位整数。为了方便地区分从普通派生函数派生的密钥和通过强化派生函数派生的密钥,这个索引号被划分为两个范围。0和231–1之间的索引号(0x0到0x7FFFFFFF)仅用于普通的派生。索引号在231232-1之间(0x80000000到0xFFFFFFFF)只用于强化的派生。因此,如果索引号小于231,则child是普通的,反之,如果索引号等于或大于231,则该子就是强化的。

为了使索引号更易于阅读和显示,硬化子的索引号从0开始显示,但是有一个主要的符号。因此,第一个正常的子密钥被显示为0,而第一个强化的子(index 0x80000000)显示为0'按顺序排列,第二个硬键将有索引0x80000001,并显示为1'等等。当你看到一个HD钱包索引i&#x27,那就意味着索引号为231+i

HD钱包密钥标识符(path)

使用“路径path”命名约定来标识HD钱包中的密钥,每一层的树都由一个斜杠(/)字符分隔(参见HD钱包路径示例)。从主私钥派生的私钥以“m”开头。公钥从主公钥开始,以“m”开头。因此,主私钥的第一个子私钥为m/0。第一个子公钥为M/0。第一个孩子的第二个孙子是m/0/1,等等。

一个键的“祖先”是从右到左读,直到你找到它的主键。例如,标识符m/x/y/z描述了key m/x/y的z-th子节点,它是m/x的y-th子,它是m的x-th子。

表五:HD钱包路径实例

HD pathKey described

m/0

主私钥m的第一个子私钥

m/0/0

The first grandchild private key of the first child (m/0)

m/0'/0

The first normal grandchild of the first hardened child (m/0')

m/1/0

The first grandchild private key of the second child (m/1)

M/23/17/0/0

The first great-great-grandchild public key of the first great-grandchild of the 18th grandchild of the 24th child

操纵HD钱包树结构

HD钱包结构提供了巨大的灵活性。每一个父扩展的密钥可以有40亿子密钥:20亿普通子密钥和20亿硬化子。每个子都有40亿的子,等等。这棵树可以像你想的那样深,有无数代。然而,有了这些灵活性,就很难操纵这棵无限的树。在实现之间转移HD钱包是特别困难的,因为内部组织进入分支和分支的可能性是无穷无尽的。

两个BIPs提供了解决这一复杂性的方法,为HD钱包树的结构创建了一些建议的标准。BIP-43建议使用第一个硬化的子索引作为特殊标识符,表示树结构的“目的”。基于BIP-43,一个HD钱包应该只使用树的一个一级分支,索引号通过定义它的用途来识别树的其他部分的结构和名称空间。例如,一个只使用分支m/i&#x27的HD钱包; /是用来表示一个特定的目的,这个目的是通过索引号“i”来标识的。

通过扩展该规范,BIP-44提出了一种多用途多账户结构,其目的是“在BIP-43下”编号44'。遵循BIP-44结构的所有HD钱包都是只使用了树的一个分支来:m/44'

BIP-44指定了由5个预定义树级别组成的结构:

m / purpose' / coin_type' / account' / change / address_index

第一级的“purpose”总是设为44'。第二级“coin_type”指定了加密货币的类型,允许在第二级的情况下,每一种货币都有自己的子树。在标准文件中定义了若干种货币,名为SLIP0044:

https://github.com/satoshilabs/slips/blob/master/slip-0044.md

几个例子:Ethereum是m/44'/60', Ethereum Classic为m/44'/61', 比特币是m/44'/0', 所有币种的此时网络为m/44'/1' 。

树的第三层是“account”,它允许用户将钱包细分为独立的逻辑子帐户,用于会计或组织目的。例如,一个HD钱包可能包含两个Ethereum“帐户”:m/44'/60'/0'm/44'/60'/1'。每个帐户都是它自己的子树的根。

因为BIP-44最初是为比特币创建的,所以它包含了一个与Ethereum世界无关的“quirk”。在路径的第4层,“change”,一个HD钱包有两个子树,一个用于创建接收地址,另一个用于创建零钱地址。只有“receive”路径在Ethereum中使用,因为没有找零地址之类的东西。请注意,尽管以前的级别使用了强化派生,但是这个级别使用了普通的派生。这将允许此级别的树导出扩展的公钥,以便在不安全的环境中使用。可用的地址是由HD钱包作为第四层的孩子派生出来的,使树的第五层成为“address_index”。例如,在主要帐户中,第三个接收地址是M/44'/60'/0'/0/2BIP-44 HD wallet structure examples 中展示了更多的例子。

表六:BIP-44 HD 钱包结构实例

HD pathKey described

M/44'/60'/0'/0/2

The third receiving public key for the primary Ethereum account

M/44'/0'/3'/1/14

The fifteenth change-address public key for the fourth bitcoin account

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

The second private key in the Litecoin main account, for signing transactions


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值