HD钱包怎么使用,2022HD钱包及其创建过程的精华总结

当前位置:首页 > 钱包秘钥 > HD钱包怎么使用,2022HD钱包及其创建过程的精华总结

HD钱包怎么使用,2022HD钱包及其创建过程的精华总结

2022-06-13钱包秘钥236

如何使用

高清钱包?钱包及其重要物品的创建已经完成,但总觉得还缺少点什么。少了什么?重读了几遍,发现之前的文章还是不能把一切联系起来,所以加了这篇文章,作为创建钱包的补充说明。

首先,下面提到的hash160字符串指的是双哈希算法产生的一个20字节的字符串(SHA256行。私钥或公钥内容的RIPEMD160。

Wallet是keystore的扩展,它管理事务和余额,并提供创建事务的能力。它有几个特别重要的属性,现在解释如下:

hdChain,HD数据模型,它包含一个hash160的种子,一个内链的编号和一个外链的编号。

setInternalKeyPool,内部密钥池的集合。

setExternalKeyPool,外部密钥池的集合。2022蓑衣网小编

set_pre_split_keypool,一组预先划分的密钥池。

m_max_keypool_index,最大密钥池的索引。

m _ pool _ key _ to _ index

mapkey metadata,公钥元数据的映射集。密钥是一个hash160字符串,值是一个公钥元数据。

m _ script _ metadata

map master keys,

map wallet

map address 2022蓑衣网小编 book

钱包完成。让我们看看密钥库。Keystore表示密钥的存储,自然提供了一些管理密钥的方法,比如在存储中添加一个密钥(私钥和公钥),检查给定地址对应的密钥是否在存储中,添加和检查通用脚本和只读脚本的功能等。根据是否加密,keystore分为基本和加密。钱包继承自加密密钥库,而加密密钥库又继承基本密钥库。

我们先来看看基本的keystore,它有以下重要属性:

mapKeys,一组私钥映射。密钥是一个hash160字符串,值是一个私钥。

mapWatchKeys,一组只读的公钥映射。密钥是一个hash160字符串,值是一个公钥。

mapScripts,一组脚本映射。键是hash160字符串,值是用于事务输入和输出的序列化脚本。

setWatchOnly,一组用于事务输入和输出的序列化脚本。

加密密钥库向基本密钥库添加了几个与加密相关的属性。分别是:

fUseCrypto,一个标志钱包是否加密的变量。

vMasterKey,加密时使用的私钥集合。加密后,mapKeys集将为空,但vMasterKey集不会为空。未加密时,情况正好相反,即mapKeys集合不为空,而vMasterKey集合为空。

mapCryptedKeys,一个映射集。密钥是一个hash160字符串,值是一个由公钥和加密私钥组成的对。

说完了wallet和keystore,我们来看看密钥池。实际上,密钥池的名称是不准确的,因为它只包含一个公钥。除了第一次,它还包含两个布尔变量:final和m_pre_split。前者表明密钥池是内部的还是外部的,而后者的功能暂时还不清楚。英文备注是:对于密钥池拆分升级前生成的密钥。默认情况下,m_pre_split属性为false。

创建钱包时,会执行以下动作:

首先生成一个私钥,根据私钥用椭圆曲线算法生成对应的公钥;

其次也会生成相应的密钥元数据,将hash160(先SHA256,再RIPEMD160)算法生成的20字节字符串保存为密钥元数据的种子,然后将私钥元数据保存在mapKeyMetadata集合中;

然后,私钥保存在mapKeys,或者mapCryptedKeys和vMasterKey的集合中;公钥压缩时(通常情况下),由公钥生成脚本,然后将脚本保存在mapScripts集合中;同时,私钥、公钥和密钥元数据都存储在数据库中。

然后,以公钥为种子,生成一个HD链对象,保存在钱包中。

最后,当以上全部完成后,使用前面3步生成的公钥作为种子,开始推导用户指定的子私钥/公钥对的个数。如果用户没有指定,默认情况下将导出3,000个子私钥/公钥对。

导出的私钥、公钥和元数据的处理与步骤[2] 3相同;

同时,公钥生成的密钥池也保存在数据库中;

根据生成的私钥属于内部还是外部,将对应的索引保存在setInternalKeyPool或setExternalKeyPool集合中;无差别的,索引存储在m_pool_key_to_index的映射集中,其中key是公钥对应的hash160字符串。

其中,2000个子私钥的路径是从m/0'/0'/0到m/0'/1999.1000个子私钥是从m/0'/1'/0到m/0'/1'/999。m代表私钥,m/0。M/0'/0'/0代表主私钥的第一个增强子私钥的外链的第一个增强子私钥。类似地,m/0'/0'/1999表示主私钥的第一个加强的子私钥的外链的第1999个加强的孙子私钥。M/0'/1'/0表示主私钥的第一个增强子私钥的内链的第一个增强子私钥。类似地,m/0'/1'/999表示主私钥的第一个加强的子私钥的内链的第999个加强的孙子私钥。

上述过程中,步骤1-3是GenerateNewSeed方法的主要内容,步骤4是SetHDSeed的主要内容,步骤5是TopUpKeyPool的主要内容。

最后用两张图来勾勒高清钱包的创作。创建钱包创建钱包创建钱包[x]
HD钱包怎么使用,2022HD钱包及其创建过程的精华总结 | 分享给朋友: