简介
使用 @ethersproject/hdnode 这个 npm 包可以方便地创建和管理分层确定性钱包(Hierarchical Deterministic Wallet,简称 HD 钱包)。该库基于 BIP32 和 BIP44 协议,用于生成多个输入地址的钱包,并可在备份的种子短语之上运行。
安装
在终端中输入以下命令安装 @ethersproject/hdnode:
npm install @ethersproject/hdnode
创建 HD 钱包
首先,我们需要导入 @ethersproject/hdnode 库:
const { ethers } = require("ethers"); const { HDNode } = require("@ethersproject/hdnode");
接下来,我们可以创建 HD 钱包,具体方法如下:
const mnemonic = "这里填上你的助记词"; const path = "m/44'/60'/0'/0/0"; const hdNode = HDNode.fromMnemonic(mnemonic).derivePath(path);
上面代码的作用是从助记词创建 HDNode 实例,并根据路径(path)派生一个 HDNode 子类,即 HD 钱包。
生成钱包地址
生成钱包地址的方法有两种,一种是使用 HDNode 的 derivePath 方法,一种是使用 HDNode 的 deriveChild 方法。两种方法的区别在于生成的地址不同,derivePath 方法生成的地址是 P2WPKH(Pay to Witness Public Key Hash)或 P2WPKH-in-P2SH(Pay to Witness Public Key Hash in Pay to Script Hash),而 deriveChild 方法生成的地址是 P2PKH(Pay to Public Key Hash)。
使用 derivePath 方法生成地址
const address = hdNode.address;
经过上面的代码之后,address 就是按照 path 派生出来的钱包地址。
使用 deriveChild 方法生成地址
const index = 0; const childNode = hdNode.deriveChild(index); const address = ethers.utils.computeAddress(childNode.publicKey);
上面的代码通过获取 HDNode 子钱包之后,根据 publicKey 生成 P2PKH 地址。
总结
使用 @ethersproject/hdnode 可以方便地创建和管理 HD 钱包,同时也可以生成不同版本的钱包地址。在智能合约中,可以将 HD 钱包作为输入地址,避免重复生成输入地址的麻烦,并且还可以根据地址派生出更多的子地址,实现更多的功能。
示例代码:
-- -------------------- ---- ------- ----- - ------ - - ------------------ ----- - ------ - - --------------------------------- ----- -------- - ------------ ----- ---- - ------------------- ----- ------ - ----------------------------------------------- ----- ----- - -- ----- --------- - -------------------------- ----- -------- - --------------- ----- -------- - ------------------------------------------------- --------------- ------ - ---------- -------------------- - ----------
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedc1c6b5cbfe1ea0611efc