【钱包】【WEB3】【Flutter】一组助记词如何推导多个账号钱包

发布于:2025-02-19 ⋅ 阅读:(22) ⋅ 点赞:(0)

一、前言

一组助记词可以推导多个账户,是因为在区块链钱包中,助记词(Mnemonic)实际上是 BIP39 标准下生成的一个种子,该种子通过 BIP32/BIP44 标准可以派生出无限多个账户地址。

这里我将以太坊Ethereum为例,讲解一下常见的推导路径,将会结合blockchain_utils为例,blockchain_utils 是一个功能较为全面的库,支持 BIP32、BIP39、BIP44 等多种钱包路径和账户推导标准,非常适合用来实现从助记词派生多个账户地址的功能。

二、推导路径(Derivation Path)

常见路径标准:

路径示例 CoinType
比特币(BTC) m/44’/60’/0’/0/0 0
以太坊(ETH) m/44’/60’/0’/0/0 60
波场(TRON) m/44’/195’/0’/0/0 195
火币链(HT) m/44’/1010’/0’/0/0 1010
OK链(OKT) m/44’/996’/0’/0/0 996
BSC链 和ETH一样 m/44’/60’/0’/0/0 60

路径结构解析:

m / purpose' / coin_type' / account' / change / index

解释说明:

  1. m:根路径。
  2. purpose:固定为 44’,表示使用 BIP44 标准。
  3. coin_type:货币类型,比如:
  4. 60 表示以太坊(Ethereum)
  5. 0 表示比特币(Bitcoin)
  6. account:账户索引,比如 0、1、2……
  7. change:是否为找零地址,一般是 0。
  8. index:派生出的地址索引,比如 0、1、2……

三、推导思路

假设你已经有助记词了,你可以这样生成多个地址:

  1. 使用助记词生成种子(seed);
  2. 使用种子生成主私钥(Master Private Key);
  3. 根据不同的路径(例如 m/44’/60’/0’/0/0 到 m/44’/60’/0’/0/9)推导出多个地址。

四、代码事例

引入依赖

dependencies:
  flutter:
    sdk: flutter
  blockchain_utils: ^4.0.0

从助记词推导多个以太坊(Ethereum)地址

import 'package:blockchain_utils/blockchain_utils.dart';

void deriveEthAddresses(String mnemonic, {int count = 5}) {
  // 1. 助记词转Seed
  final seed = Mnemonic.createSeed(mnemonic);

  // 2. 通过Seed创建HD钱包根私钥
  final rootKey = HdPrivateKey.master(seed, Network.mainnet());

  // 3. 推导路径 BIP44: m/44'/60'/0'/0/i
  const basePath = "m/44'/60'/0'/0/";

  for (int i = 0; i < count; i++) {
    final derivedKey = rootKey.derivePath(basePath + i.toString());

    // 获取私钥
    final privateKeyHex = derivedKey.privateKey.toHex();

    // 获取以太坊地址
    final ethAddress = EthAddress.fromPrivateKey(derivedKey.privateKey).toString();

    print('地址 $i: $ethAddress');
    print('私钥 $i: $privateKeyHex\n');
  }
}

运行

void main() {
  const mnemonic = "clutch captain shoe salt awake harvest setup primary inmate ugly among become";
  deriveEthAddresses(mnemonic, count: 5);
}
地址 0: 0x8f3c8d3e8b4b2a9fb8f9e04c9c55b918dcf94a36
私钥 0: 0xabcdef123456789...

地址 1: 0x5a8b8e3f6b3a2d9fb4f3e04b9c55c918dcf94b23
私钥 1: 0x123456abcdef789...

路径解释(BIP44)

项目 含义
m/44’/60’/0’/0/0 以太坊默认地址路径 (BIP44标准)
44’ 目的 (Purpose) 固定为 44’
60’ 币种 (Coin type) 以太坊是 60
0’ 账户 (Account)
0 外部 (Change) 一般为 0
0 地址索引 (Index)

其他:生成TRON地址

// TRON地址
  final tronKey = rootKey.derivePath("m/44'/195'/0'/0/0");
  final tronAddress = TronAddress.fromPrivateKey(tronKey.privateKey);
  print('TRON 地址: $tronAddress');

五、注意事项

  1. 不同链的路径不同,比如:
  • BTC: m/44'/0'/0'/0/0
    
  • ETH: m/44'/60'/0'/0/0
    
  • BSC(币安智能链):同 ETH 使用 m/44'/60'/0'/0/0
    
  1. 助记词推导的所有地址,都属于同一个钱包,共享同一套助记词。备份助记词,即可恢复所有地址。
  2. 这种方式非常常见,比如 imToken、MetaMask 等钱包,都是用助记词生成多个地址。

六、关于作者(ZFJ_张福杰)

  • 官网:https://zfjsafe.com
  • 博客:https://zfj1128.blog.csdn.net
  • Github:https://github.com/zfjsyqk
  • Gitee:https://gitee.com/zfj1128

网站公告

今日签到

点亮在社区的每一天
去签到