在现在的区块链钱包行业里面,有名的插件钱包包括 MetaMask(小狐狸)、OKX 钱包、OnKey 等。这些钱包大多支持多链操作,虽然小狐狸主要支持 Solana 和 EVM 兼容链。它们不仅能管理用户的资产,还能与去中心化应用(DApp)进行交互。那么,这些钱包是如何开发出来的?它们又是如何安全地与区块链交互,以及存储用户的私钥的呢?在这一章,我们就来揭开插件钱包的神秘面纱。
我们从最底层开始抽离钱包的核心——助记词(mnemonic phrase)或者私钥(private key)。
1. 钱包的核心:私钥与助记词
每一个区块链钱包最核心的部分,是用户的私钥。私钥是用户在区块链上拥有资产的唯一凭证。为了方便记忆和备份,大多数钱包会使用 助记词(通常遵循 BIP39 标准)生成私钥。
-
助记词 → 种子(Seed) → 私钥
助记词通过一种确定性算法生成种子,再从种子派生出多个私钥(BIP32/BIP44 分层确定性钱包标准)。这样,一个助记词就可以管理同一条链上的多个账户。 -
私钥存储
插件钱包不会直接在本地以明文存储私钥,而是使用加密手段存储:- 浏览器插件本地加密存储:常用浏览器提供
IndexedDB或localStorage,钱包会用用户设置的密码对私钥进行加密。 - 硬件隔离:一些钱包支持硬件钱包签名交易,私钥不出设备。
这种设计确保即使浏览器被攻击,攻击者也无法直接获取明文私钥。
- 浏览器插件本地加密存储:常用浏览器提供
2. 钱包与区块链交互
钱包与链的交互主要有两个层次:
-
链上查询
钱包通过 RPC(Remote Procedure Call)接口与区块链节点通信。例如:- EVM 链使用
JSON-RPC:eth_getBalance、eth_call、eth_sendRawTransaction等。 - Solana 链使用
Solana Web3.js提供的 RPC 接口。
钱包通常会提供 多节点或多服务商支持,确保节点不可用时也能查询余额或交易状态。
- EVM 链使用
-
交易签名与发送
钱包不会直接将私钥暴露给 DApp,而是:- 钱包生成交易对象
- 使用本地私钥签名交易
- 将签名后的交易通过 RPC 广播到区块链
这种方式保证了私钥不会离开用户设备。
3. 多链支持
插件钱包要支持多链,通常采用以下方式:
- 链配置抽象化:每条链都有自己的 RPC 地址、链 ID、交易结构和签名算法。钱包内部通过统一接口管理不同链。
- 账户派生策略:助记词可以派生出不同链的账户,通过 BIP44 的 coin_type 区分链。
- 模块化交易签名:不同链的交易结构不同,钱包通过插件式模块为每条链实现签名逻辑。
4. 安全设计
钱包作为用户资产的“钥匙”,安全性至关重要:
- 密码保护:加密本地私钥,用户必须输入密码解锁。
- 权限管理:与 DApp 交互时,需要用户授权,例如访问地址、签名交易。
- 签名隔离:交易签名只在钱包内部完成,DApp 无法获取用户私钥。
- 备份与恢复:提供助记词导出和恢复功能,但严格提示用户妥善保管。
5. 插件钱包的架构简图
简化来看,插件钱包一般包含:
+------------------+
| UI / DApp 接口 |
+------------------+
|
v
+------------------+
| 钱包核心逻辑 |
| - 私钥管理 |
| - 交易签名 |
| - 多链支持 |
+------------------+
|
v
+------------------+
| RPC / 节点服务 |
| - 查询余额 |
| - 广播交易 |
+------------------+