首先第一步創(chuàng)建助記詞跟通過助記詞獲取私鑰
import 'dart:typed_data'; // 強制使用標(biāo)準(zhǔn)庫的 Uint8List
import 'package:bip39/bip39.dart' as bip39;
import 'package:bip32/bip32.dart' as bip32;
import 'package:hex/hex.dart';
class WalletService {
// 生成助記詞
static String generateMnemonic() {
return bip39.generateMnemonic();
}
// 從助記詞生成以太坊私鑰(完全兼容 MetaMask)
static String generateEthereumPrivateKey(String mnemonic) {
print('開始生成私鑰...');
print('助記詞: $mnemonic');
// 1. 從助記詞生成種子
final seed = bip39.mnemonicToSeed(mnemonic);
final seedHex = bip39.mnemonicToSeedHex(mnemonic);
print('種子: $seedHex');
// 2. 生成主私鑰
final masterKey = bip32.BIP32.fromSeed(seed);
print('主私鑰: ${HEX.encode(masterKey.privateKey?.toList() ?? [])}');
print('主鏈碼: ${HEX.encode(masterKey.chainCode)}');
// 3. 派生以太坊私鑰
final path = "m/44'/60'/0'/0/0";
print('派生路徑: $path');
final childKey = masterKey.derivePath(path);
if (childKey.privateKey == null) {
throw Exception('無法派生私鑰');
}
// 4. 轉(zhuǎn)換為十六進(jìn)制字符串
final privateKeyHex = HEX.encode(childKey.privateKey!.toList());
print('最終私鑰: $privateKeyHex');
return '0x$privateKeyHex';
}
// 驗證助記詞是否有效
static bool validateMnemonic(String mnemonic) {
return bip39.validateMnemonic(mnemonic);
}
}