Flutter数字货币钱包管理插件hd_wallet_kit的使用

Flutter数字货币钱包管理插件hd_wallet_kit的使用

hd_wallet_kit #

这是一个用于Flutter的HD钱包插件,它实现了以下功能:

  • 分层确定性钱包 BIP32
  • 生成确定性密钥的助记词 BIP39
  • 确定性钱包的多账户层次结构 BIP44

该插件受到 hd-wallet-kit-android 的启发。

特性 #

助记词 #

  • 生成助记词
  • 从助记词到种子
  • 从助记词到熵
  • 验证助记词

HD钱包 #

  • 从种子创建HD钱包
  • 通过路径派生密钥
  • 根据用途、币种类型、账户、更改和索引派生密钥
  • 密钥序列化

支持的语言列表 #

开始使用 #

要使用此插件,你需要在你的`pubspec.yaml`文件中添加依赖项 `hd_wallet_kit`。

用法 #

生成助记词:

final mnemonic = Mnemonic.generate();

从助记词到种子:

final seed = Mnemonic.toSeed(mnemonic);

从种子创建HD钱包:

final hdWallet = HDWallet.fromSeed(seed: seed);

通过路径派生密钥:

final key = hdWallet.deriveChildKeyByPath("m/0");
final bip44Key = hdWallet.deriveChildKey(purpose: Purpose.BIP44, coinType: 0, account: 0, change: 0, index: 0);

密钥序列化:

final key = hdWallet.deriveChildKey(purpose: Purpose.BIP44, coinType: 0, account: 0, change: 0, index: 0);
final accountExtendedPubKey = key.serializePublic(HDExtendedKeyVersion.xpub);
final accountExtendedPrivKey = key.serializePublic(HDExtendedKeyVersion.xprv);

编码地址:

final key = hdWallet.deriveChildKey(purpose: Purpose.BIP44, coinType: 0, account: 0, change: 0, index: 0);
final address = key.encodeAddress();

完整示例

下面是一个完整的示例,展示了如何使用 hd_wallet_kit 插件来生成助记词、派生密钥和编码地址。

// ignore_for_file: avoid_print

import 'package:hd_wallet_kit/hd_wallet_kit.dart';
import 'package:hd_wallet_kit/utils.dart';

void main() {
  // 生成助记词
  final mnemonic = Mnemonic.generate();
  print('生成的助记词: ${mnemonic.join(' ')}');

  // 从助记词到种子
  final seed = Mnemonic.toSeed(mnemonic);
  print('助记词到种子: ${uint8ListToHexString(seed)}');

  // 从种子创建HD钱包
  final hdWallet = HDWallet.fromSeed(seed: seed);

  // 派生根密钥
  final rootKey = hdWallet.deriveKeyByPath(path: 'm');

  // 打印BIP32扩展私钥和公钥
  print(
    'BIP32扩展私钥: ${rootKey.serializePrivate(HDExtendedKeyVersion.xprv)}'
  );

  print(
    'BIP32扩展公钥: ${rootKey.serializePublic(HDExtendedKeyVersion.xpub)}'
  );

  // 派生BIP44密钥
  final bip44Key = hdWallet.deriveKeyByPath(path: "m/44'/0'/0'");

  // 打印BIP44账户0的扩展私钥和公钥
  print(
    'BIP44账户0扩展私钥: ${bip44Key.serializePrivate(HDExtendedKeyVersion.xprv)}'
  );

  print(
    'BIP44账户0扩展公钥: ${bip44Key.serializePublic(HDExtendedKeyVersion.xpub)}'
  );

  // 派生地址0的密钥
  final address0Key = hdWallet.deriveKey(
      purpose: Purpose.BIP44, coinType: 0, account: 0, change: 0, index: 0);

  // 打印地址0
  print('地址0: ${address0Key.encodeAddress()}');

  // 派生地址1的密钥
  final address1Key = hdWallet.deriveKey(
      purpose: Purpose.BIP44, coinType: 0, account: 0, change: 0, index: 1);

  // 打印地址1
  print('地址1: ${address1Key.encodeAddress()}');
}

更多关于Flutter数字货币钱包管理插件hd_wallet_kit的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数字货币钱包管理插件hd_wallet_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,hd_wallet_kit 是一个用于管理HD(Hierarchical Deterministic)钱包的插件,特别适用于数字货币钱包应用。这个插件支持BIP32、BIP39和BIP44标准,方便生成和管理钱包地址。下面是一个简单的代码示例,展示如何在Flutter项目中使用 hd_wallet_kit 来创建一个BIP44标准的比特币钱包。

首先,确保你的Flutter项目中已经添加了 hd_wallet_kit 依赖。在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  hd_wallet_kit: ^最新版本号  # 请替换为当前最新版本号

然后运行 flutter pub get 来获取依赖。

接下来,在你的Dart代码中,你可以按照以下步骤创建一个HD钱包:

import 'package:flutter/material.dart';
import 'package:hd_wallet_kit/hd_wallet_kit.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String mnemonic = '';
  String address = '';

  @override
  void initState() {
    super.initState();
    _generateWallet();
  }

  void _generateWallet() async {
    // 生成BIP39助记词
    BIP39Words words = BIP39Words();
    mnemonic = words.generateMnemonic();

    // 使用助记词生成BIP32根密钥
    BIP32 rootKey = BIP32.fromSeed(mnemonic.codeUnits);

    // 根据BIP44路径生成比特币钱包地址
    String path = "m/44'/0'/0'/0/0"; // Bitcoin mainnet path
    BIP32 childKey = rootKey.derivePath(path);

    // 获取公钥并转换为比特币地址
    BitcoinAddressGenerator addressGenerator = BitcoinAddressGenerator();
    address = addressGenerator.generateAddressFromPubKey(childKey.publicKey);

    // 更新UI
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('HD Wallet Kit Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Text('Mnemonic:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
              Text(mnemonic, style: TextStyle(fontSize: 16)),
              SizedBox(height: 16),
              Text('Bitcoin Address:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
              Text(address, style: TextStyle(fontSize: 16)),
            ],
          ),
        ),
      ),
    );
  }
}

这个示例展示了如何使用 hd_wallet_kit 插件生成一个BIP39助记词,然后使用该助记词生成一个BIP32根密钥,并根据BIP44路径生成一个比特币钱包地址。生成的助记词和比特币地址会显示在应用的UI上。

注意:

  • 在实际应用中,助记词应该安全存储,并且不应该在客户端日志或UI中直接显示。 -BIP44路径中的 '44'/0'/0' 部分分别代表币种(44为比特币),硬化账户索引(0’),和变化索引(0’)。你可以根据需要调整这些值来生成不同的地址。
  • 确保在生产环境中使用安全的随机数生成器来生成助记词。

这个示例仅用于演示目的,实际项目中应考虑更多的安全性和用户体验细节。

回到顶部