本文介绍了加密钱包的工作原理,重点解释了助记词(mnemonic phrases)、种子(seed)以及分层确定性钱包(HD Wallets)的概念。文章还展示了如何使用JavaScript来生成加密钱包,并强调了钱包的可移植性,即可以在不同的钱包应用之间导入和使用。
如果你曾经想知道加密钱包在底层如何工作,你并不孤单。几个月前,我也问了自己同样的问题,而这种好奇心引导我深入研究了助记词、种子短语和密钥推导路径。
今天,我不仅了解了它们的工作原理,甚至还使用 JavaScript 构建了我自己的钱包生成器。在本文中,我将分解加密钱包的核心概念,并向你展示我用来构建钱包的实际代码。让我们揭开幕后之谜。
加密钱包的核心并不是真正存储你的币。它更像是一个存储密钥以访问你在区块链上的资产的工具。你的实际资金存在于区块链上,你的钱包持有私钥来证明所有权和进行交易。如果你好奇公钥和私钥在底层是如何工作的(加密、签名、验证),我写了一个简单的指南在这里解释了它。
加密钱包通常以称为助记词短语的东西开始 — 你被告知要写下来并且永远不要分享的 12 或 24 个单词。
这些单词不是随机的。它们是使用称为 BIP-39 的标准生成的。以下是底层发生的事情:
// 使用 ethers
import { ethers } from "ethers";
const wallet = ethers.Wallet.createRandom();
const mnemonic = wallet.mnemonic.phrase;
//使用 bip39 - 用于 solana
import { generateMnemonic, mnemonicToSeedSync } from "bip39";
const mnemonic = generateMnemonic();
助记词只是开始,它使用一种称为 PBKDF2 的密钥拉伸算法转换为二进制种子。此种子充当我们可用于派生无限数量钱包地址的主密钥。
// 使用 ether
const hdNode = ethers.HDNodeWallet.fromPhrase(mnemonic);
//使用 bip39 - 用于 solana
const seed = mnemonicToSeedSync(mnemonic);
现在是神奇的时刻:使用单个种子,你可以生成多个钱包。这个概念称为 分层确定性 (HD) 钱包,在 BIP-32/44 中定义。
我们使用所谓的推导路径从主种子创建新钱包。例如:
//使用 ethers
const childNode = hdNode.derivePath(`${1}`);
//使用 bip39 - 用于 solana
const path = `m/44'/501'/${i}'/0'`;
//44' = BIP44 标准
//501' = 币种类型(501 是 Solana)
//${i}' = 钱包索引 (0, 1, 2...)
//0' = 更改(通常 0 表示外部地址)
从每个推导路径,我们可以派生一个新的密钥对(公钥/私钥):
//使用 ethers
console.log( "public address: " + childNode.address)
console.log( "private address: " + childNode.privateKey)
//使用 bip 39 - 用于 solana
import { Keypair } from "@solana/web3.js";
const derivedSeed = derivePath(path, seed.toString("hex")).key;
const secret = nacl.sign.keyPair.fromSeed(derivedSeed).secretKey;
console.log(Keypair.fromSecretKey(secret).publicKey.toBase58());
该系统最酷的功能之一是便携性。由于你的种子短语(助记词)遵循广泛使用的标准 (BIP-39),因此它可以在 Phantom、MetaMask、Trust Wallet 等钱包中使用。
只要钱包应用支持 BIP-39/Ethers 和相同的推导路径,你就可以导入你的密钥并访问你的资金。
这是我使用自定义构建的逻辑生成的第一个钱包的快照
想看看我是如何构建它的吗?你可以在 GitHub 上查看代码
了解加密钱包的工作原理既能增强能力,又出乎意料地容易上手。你不需要成为区块链专家 — 只需要一点好奇心和一些时间来探索 BIP-39 和 BIP-44 等标准。
如果这激起了你的兴趣,请关注我,因为我会在我的旅程中发布更多 web3 内容!
- 原文链接: coinsbench.com/how-does-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!