2025-04-30 Flutter web3钱包开发思路

首先第一步创建助记词跟通过助记词获取私钥

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);
  }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容