Flutter加密货币地址生成插件dart_bip32_bip44_noflutter的使用

Flutter加密货币地址生成插件dart_bip32_bip44_noflutter的使用

BIP32-BIP44

pub package

一个实现了 BIP32规范 的库,用于生成分层确定性比特币地址。此库并未定义 BIP32规范中的钱包结构。同时支持BIP44路径,例如 m/44'/60'/0'/0/0 用于以太坊/智能链。

此库是从已废弃的仓库分支而来,并更新以兼容最新依赖项和空安全特性,因为我在一个项目中需要用到该库。


示例代码

使用种子生成BIP44路径

你可以通过种子(seed)或导入现有的HD密钥来使用此库。以下是一个使用种子生成BIP44路径的示例。

示例代码:使用种子生成BIP44路径(BIP44以太坊)

import 'dart:convert';
import 'package:convert/convert.dart';
import 'package:dart_bip32_bip44_noflutter/dart_bip32_bip44.dart';

void main() {
  // 生成种子
  var seed = bip39.mnemonicToSeedHex("word word word word word word word word word word word word");

  // 初始化链
  var chain = Chain.seed(seed);

  // 派生路径 m/44'/60'/0'/0/0
  var key = chain.forPath('m/44\'/60\'/0\'/0/0') as ExtendedPrivateKey;

  // 输出私钥的十六进制表示
  print('Private Key (Hex): ${key.privateKeyHex()}');
}

示例代码:使用种子生成其他路径

import 'dart:convert';
import 'package:convert/convert.dart';
import 'package:dart_bip32_bip44_noflutter/dart_bip32_bip44.dart';

void main() {
  // 生成种子
  var seed = bip39.mnemonicToSeedHex("word word word word word word word word word word word word");

  // 初始化链
  var chain = Chain.seed(seed);

  // 派生路径 m/44'/0'/0/0/0(适用于比特币)
  var key = chain.forPath('m/44\'/0\'/0\'/0/0') as ExtendedPrivateKey;

  // 输出私钥的十六进制表示
  print('Bitcoin Private Key (Hex): ${key.privateKeyHex()}');
}

导入现有的HD私钥

如果你已经有现有的HD私钥,可以直接导入并派生子密钥。

示例代码:导入HD私钥

import 'dart:convert';
import 'package:convert/convert.dart';
import 'package:dart_bip32_bip44_noflutter/dart_bip32_bip44.dart';

void main() {
  // 导入HD私钥
  var chain = Chain.import(
    "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi",
  );

  // 派生路径 m/0/100
  var childKey = chain.forPath('m/0/100') as ExtendedPrivateKey;

  // 输出私钥的十六进制表示
  print('Derived Private Key (Hex): ${childKey.privateKeyHex()}');
}

导入现有的HD公钥

如果你已经有现有的HD公钥,也可以直接导入并派生子公钥。

示例代码:导入HD公钥

import 'dart:convert';
import 'package:convert/convert.dart';
import 'package:dart_bip32_bip44_noflutter/dart_bip32_bip44.dart';

void main() {
  // 导入HD公钥
  var chain = Chain.import(
    "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8",
  );

  // 派生路径 M/0/100
  var childKey = chain.forPath('M/0/100') as ExtendedPublicKey;

  // 输出公钥的ECPoint表示
  print('Derived Public Key (ECPoint): ${childKey.publicKey.q}');
}

异常处理

在派生子密钥时,可能会出现一些异常情况。建议在代码中捕获以下异常:

  • KeyZero: 密钥为零。
  • KeyBiggerThanOrder: 密钥大于指定的阶。
  • KeyInfinite: 密钥为无穷大。

示例代码:

try {
  var childKey = chain.forPath('m/0/100') as ExtendedPrivateKey;
} on KeyZero catch (e) {
  print('Error: $e');
} on KeyBiggerThanOrder catch (e) {
  print('Error: $e');
} on KeyInfinite catch (e) {
  print('Error: $e');
}

安装

将此库添加到你的 pubspec.yaml 文件中:

dependencies:
  dart_bip32_bip44: ^0.2.0

更多关于Flutter加密货币地址生成插件dart_bip32_bip44_noflutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加密货币地址生成插件dart_bip32_bip44_noflutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dart_bip32_bip44_noflutter 是一个用于生成和管理加密货币地址的 Dart 库,支持 BIP32 和 BIP44 标准。它不依赖于 Flutter,因此可以在纯 Dart 项目中使用。以下是使用 dart_bip32_bip44_noflutter 生成加密货币地址的基本步骤。

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 dart_bip32_bip44_noflutter 依赖:

dependencies:
  dart_bip32_bip44_noflutter: ^0.0.4

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

2. 导入库

在你的 Dart 文件中导入库:

import 'package:dart_bip32_bip44_noflutter/dart_bip32_bip44_noflutter.dart';

3. 生成助记词

首先,你需要生成一个助记词(Mnemonic)。助记词是生成种子(Seed)的基础。

import 'package:bip39/bip39.dart' as bip39;

void main() {
  // 生成一个12词的助记词
  String mnemonic = bip39.generateMnemonic();
  print('Mnemonic: $mnemonic');
}

4. 生成种子

使用助记词生成种子:

import 'package:bip39/bip39.dart' as bip39;

void main() {
  String mnemonic = bip39.generateMnemonic();
  print('Mnemonic: $mnemonic');

  // 生成种子
  String seed = bip39.mnemonicToSeedHex(mnemonic);
  print('Seed: $seed');
}

5. 生成主私钥

使用种子生成主私钥(Master Private Key):

import 'package:dart_bip32_bip44_noflutter/dart_bip32_bip44_noflutter.dart';
import 'package:bip39/bip39.dart' as bip39;

void main() {
  String mnemonic = bip39.generateMnemonic();
  print('Mnemonic: $mnemonic');

  String seed = bip39.mnemonicToSeedHex(mnemonic);
  print('Seed: $seed');

  // 生成主私钥
  Chain chain = Chain.seed(seed);
  ExtendedPrivateKey masterPrivateKey = chain.forPath("m");
  print('Master Private Key: ${masterPrivateKey.privateKeyHex()}');
}

6. 生成派生地址

根据 BIP44 标准,你可以派生出一个特定的地址。例如,生成比特币的地址:

import 'package:dart_bip32_bip44_noflutter/dart_bip32_bip44_noflutter.dart';
import 'package:bip39/bip39.dart' as bip39;

void main() {
  String mnemonic = bip39.generateMnemonic();
  print('Mnemonic: $mnemonic');

  String seed = bip39.mnemonicToSeedHex(mnemonic);
  print('Seed: $seed');

  Chain chain = Chain.seed(seed);
  ExtendedPrivateKey masterPrivateKey = chain.forPath("m");
  print('Master Private Key: ${masterPrivateKey.privateKeyHex()}');

  // 根据 BIP44 标准派生地址
  // m / purpose' / coin_type' / account' / change / address_index
  ExtendedPrivateKey derivedKey = chain.forPath("m/44'/0'/0'/0/0");
  print('Derived Private Key: ${derivedKey.privateKeyHex()}');

  // 生成比特币地址
  String address = derivedKey.address();
  print('Bitcoin Address: $address');
}

7. 生成其他加密货币地址

你可以通过更改 coin_type 来生成其他加密货币的地址。例如,以太坊的 coin_type60

ExtendedPrivateKey derivedKey = chain.forPath("m/44'/60'/0'/0/0");
String address = derivedKey.address();
print('Ethereum Address: $address');
回到顶部