首先第一步创建助记词跟通过助记词获取私钥
import 'dart:typed_data'; // 强制使用标准库的 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. 转换为十六进制字符串
final privateKeyHex = HEX.encode(childKey.privateKey!.toList());
print('最终私钥: $privateKeyHex');
return '0x$privateKeyHex';
}
// 验证助记词是否有效
static bool validateMnemonic(String mnemonic) {
return bip39.validateMnemonic(mnemonic);
}
}