FlutterBIP32密钥派生插件bip32_defichain的使用

Flutter BIP32密钥派生插件bip32_defichain的使用

在本文中,我们将介绍如何使用 bip32_defichain 插件来生成和管理 BIP32 密钥。此插件适用于 Flutter 开发者,并且基于 Dart 编程语言。

1. 安装插件

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

dependencies:
  bip32_defichain: ^版本号

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

2. 示例代码

以下是一个完整的示例代码,展示了如何使用 bip32_defichain 插件进行 BIP32 密钥派生:

import 'package:bip32_defichain/bip32_defichain.dart' as bip32;
import 'package:hex/hex.dart';

void main() {
  // 从一个基础58编码的字符串创建一个BIP32节点
  bip32.BIP32 node = bip32.BIP32.fromBase58('xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi');

  // 打印私钥
  print('原始私钥:${HEX.encode(node.privateKey)}');
  // => e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35

  // 创建一个不包含私钥的节点(公钥节点)
  bip32.BIP32 nodeNeutered = node.neutered();

  // 检查是否为公钥节点
  print('是否为公钥节点:${nodeNeutered.isNeutered()}');
  // => true

  // 打印公钥
  print('公钥:${HEX.encode(nodeNeutered.publicKey)}');
  // => 0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2

  // 打印基础58编码的公钥字符串
  print('基础58编码的公钥:${nodeNeutered.toBase58()}');
  // => xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8

  // 通过路径派生子节点
  bip32.BIP32 child = node.derivePath('m/0/0');

  // 打印子节点的基础58编码字符串
  print('子节点:${child.toBase58()}');
  // => xprv9ww7sMFLzJMzur2oEQDB642fbsMS4q6JRraMVTrM9bTWBq7NDS8ZpmsKVB4YF3mZecqax1fjnsPF19xnsJNfRp4RSyexacULXMKowSACTRc

  // 打印子节点的私钥
  print('子节点私钥:${HEX.encode(child.privateKey)}');
  // => f26cf12f89ab91aeeb8d7324a22e8ba080829db15c9245414b073a8c342322aa

  // 创建一个不包含私钥的子节点(公钥节点)
  bip32.BIP32 childNeutered = child.neutered();

  // 检查是否为公钥节点
  print('子节点是否为公钥节点:${childNeutered.isNeutered()}');
  // => true

  // 打印子节点的公钥
  print('子节点公钥:${HEX.encode(childNeutered.publicKey)}');
  // => 02756de182c5dd4b717ea87e693006da62dbb3cddaa4a5cad2ed1f5bbab755f0f5

  // 打印子节点的基础58编码的公钥字符串
  print('子节点基础58编码的公钥:${childNeutered.toBase58()}');
  // => xpub6AvUGrnEpfvJ8L7GLRkBTByQ9uBvUHp9o5VxHrFxhvzV4dSWkySpNaBoLR9FpbnwRmTa69yLHF3QfcaxbWT7gWdwws5k4dpmJvqpEuMWwnj

  // 从种子创建一个新的BIP32节点
  bip32.BIP32 nodeFromSeed = bip32.BIP32.fromSeed(HEX.decode("000102030405060708090a0b0c0d0e0f"));

  // 打印新的BIP32节点的基础58编码字符串
  print('从种子创建的节点:${nodeFromSeed.toBase58()}');
  // => xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi

  // 从一个基础58编码的公钥字符串创建一个新的BIP32节点
  bip32.BIP32 nodeFromPub = bip32.BIP32.fromBase58("xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8");

  // 打印新的BIP32节点的基础58编码字符串
  print('从公钥字符串创建的节点:${nodeFromPub.toBase58()}');
  // => xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8

  // 对消息进行签名
  var message = HEX.decode("0202020202020202020202020202020202020202020202020202020202020202");
  var signature = nodeFromSeed.sign(message);

  // 打印签名
  print('签名:$signature');
  // => [63, 219, 20, 114, 95, 184, 192, 55, 216, 206, 126, 121, 17, 71, 64, 70, 163, 82, 247, 73, 243, 95, 30, 137, 177, 155, 100, 225, 177, 203, 217, 147, 122, 64, 208, 129, 54, 133, 113, 41, 216, 160, 191, 15, 136, 98, 235, 25, 219, 178, 70, 222, 127, 151, 135, 242, 25, 192, 161, 187, 187, 84, 81, 215]

  // 打印签名的十六进制表示
  print('签名的十六进制表示:${HEX.encode(signature)}');
  // => 3fdb14725fb8c037d8ce7e7911474046a352f749f35f1e89b19b64e1b1cbd9937a40d08136857129d8a0bf0f8862eb19dbb246de7f9787f219c0a1bbbb5451d7

  // 验证签名
  print('验证签名:${nodeFromSeed.verify(message, signature)}');
  // => true
}

更多关于FlutterBIP32密钥派生插件bip32_defichain的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于FlutterBIP32密钥派生插件bip32_defichain的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


bip32_defichain 是一个专门用于 DeFiChain 的 Flutter 插件,用于支持 BIP32 密钥派生。BIP32 是一种分层确定性钱包(HD Wallet)的标准,允许从单个种子生成多个密钥对。bip32_defichain 插件可以帮助你在 Flutter 应用中实现 BIP32 密钥派生功能,特别针对 DeFiChain 进行了优化。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 bip32_defichain 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  bip32_defichain: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

使用插件

在使用 bip32_defichain 插件之前,你需要导入它:

import 'package:bip32_defichain/bip32_defichain.dart';

1. 生成主密钥(Master Key)

你可以从种子(Seed)生成一个主密钥(Master Key)。种子通常是一个 64 字节的随机数。

import 'dart:typed_data';

void main() {
  // 假设你有一个种子
  Uint8List seed = Uint8List.fromList([...]); // 64字节的种子

  // 生成主密钥
  BIP32 master = BIP32.fromSeed(seed);

  print('Master Private Key: ${master.toBase58()}');
  print('Master Public Key: ${master.toPublic().toBase58()}');
}

2. 派生子密钥(Child Key)

你可以通过 BIP32 路径派生子密钥。BIP32 路径是一个类似于 m/44'/0'/0'/0/0 的字符串。

void main() {
  // 假设你有一个种子
  Uint8List seed = Uint8List.fromList([...]); // 64字节的种子

  // 生成主密钥
  BIP32 master = BIP32.fromSeed(seed);

  // 派生子密钥
  BIP32 child = master.derivePath("m/44'/0'/0'/0/0");

  print('Child Private Key: ${child.toBase58()}');
  print('Child Public Key: ${child.toPublic().toBase58()}');
}

3. 从私钥生成公钥

你可以从私钥生成对应的公钥。

void main() {
  // 假设你有一个私钥
  String privateKeyBase58 = "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkV8Z...";

  // 解析私钥
  BIP32 key = BIP32.fromBase58(privateKeyBase58);

  // 生成公钥
  BIP32 publicKey = key.toPublic();

  print('Public Key: ${publicKey.toBase58()}');
}
回到顶部