Flutter BIP48钱包管理插件bip48的使用

Flutter BIP48钱包管理插件bip48的使用

BIP-0048 “多脚本层次结构用于多重签名钱包” 适用于 Dart。

用于从分层确定性(HD)钱包中派生"共享账户"。

开始使用

git clone https://github.com/cypherstack/bip48
cd bip48
dart pub get
dart run coinlib:build_linux
# 参考
# https://github.com/peercoin/coinlib/tree/master/coinlib#installation-and-usage
# 对于您的平台的构建说明。 基本上,使用
# `dart run coinlib:build_platform` (选择 `linux`, `macos`, `windows`, `windows_crosscompile`, 或 `wsl`)。 如果这些不起作用,请检查 `scripts` 文件夹中的构建脚本。
dart test

使用示例

请参阅示例和测试以了解如何使用该库。

示例代码

import 'package:bip48/bip48.dart';
import 'package:coinlib/coinlib.dart';

void main() async {
  // 初始化 coinlib。
  await loadCoinlib();

  // 示例 1: 使用 xpubs 创建一个 2-of-3 P2SH 多重签名钱包。
  print('\n示例 1: 从 xpubs 创建 2-of-3 P2SH 多重签名');
  print('================================================');

  // 这些 xpubs 来自 Trezor 的测试向量。
  //
  // 查看 https://github.com/trezor/trezor-firmware/blob/f10dc86da21734fd7be36bbd269da112747df1f3/tests/device_tests/bitcoin/test_getaddress_show.py#L177。
  final cosignerXpubs = [
    "xpub6EgGHjcvovyMw8xyoJw9ZRUfjGLS1KUmbjVqMKSNfM6E8hq4EbQ3CpBxfGCPsdxzXtCFuKCxYarzY1TYCG1cmPwq9ep548cM9Ws9rB8V8E8",
    "xpub6EexEtC6c2rN5QCpzrL2nUNGDfxizCi3kM1C2Mk5a6PfQs4H3F72C642M3XbnzycvvtD4U6vzn1nYPpH8VUmiREc2YuXP3EFgN1uLTrVEj4",
    "xpub6F6Tq7sVLDrhuV3SpvsVKrKofF6Hx7oKxWLFkN6dbepuMhuYueKUnQo7E972GJyeRHqPKu44V1C9zBL6KW47GXjuprhbNrPQahWAFKoL2rN",
  ];

  // 使用第一个 xpub 创建钱包。
  final xpubWallet = Bip48Wallet(
    accountXpub: cosignerXpubs[0],
    coinType: 0, // 比特币主网。
    account: 0,
    scriptType: Bip48ScriptType.p2shMultisig,
    threshold: 2, // 2-of-3 多重签名。
    totalKeys: 3,
  );

  // 添加其他共签者 xpubs。
  xpubWallet.addCosignerXpub(cosignerXpubs[1]);
  xpubWallet.addCosignerXpub(cosignerXpubs[2]);

  // 生成第一个接收地址。
  final address0 = xpubWallet.deriveMultisigAddress(0, isChange: false);
  print('第一个接收地址: $address0');

  // 生成第一个变更地址。
  final change0 = xpubWallet.deriveMultisigAddress(0, isChange: true);
  print('第一个变更地址: $change0');

  // 示例 2: 从主私钥创建钱包。
  print('\n示例 2: 从主密钥创建 P2SH 多重签名');
  print('================================================');

  // 从测试种子创建。
  final seedHex = "000102030405060708090a0b0c0d0e0f";
  final masterKey = HDPrivateKey.fromSeed(hexToBytes(seedHex));

  final privWallet = Bip48Wallet(
    masterKey: masterKey,
    coinType: 0,
    account: 0,
    scriptType: Bip48ScriptType.p2shMultisig,
    threshold: 2,
    totalKeys: 3,
  );

  // 获取要与共签者共享的账户 xpub。
  print('要共享的账户 xpub: ${privWallet.accountXpub}');

  // 添加共签者 xpubs(使用上面的示例 xpubs)。
  privWallet.addCosignerXpub(cosignerXpubs[1]);
  privWallet.addCosignerXpub(cosignerXpubs[2]);

  // 生成地址。
  print(
      '第一个接收地址: ${privWallet.deriveMultisigAddress(0, isChange: false)}');
  print(
      '第一个变更地址: ${privWallet.deriveMultisigAddress(0, isChange: true)}');
}

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

1 回复

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


BIP48 是一种基于 BIP32 的层级确定性钱包标准,它允许用户生成和管理多个子私钥。Flutter 是一个流行的跨平台移动应用开发框架,而 bip48 是一个用于处理 BIP48 钱包的 Dart 插件。以下是如何在 Flutter 项目中使用 bip48 插件来管理 BIP48 钱包的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  bip48: ^1.0.0  # 请根据实际情况使用最新版本

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

2. 导入库

在你的 Dart 文件中导入 bip48 库:

import 'package:bip48/bip48.dart';

3. 创建或恢复 BIP48 钱包

你可以使用 BIP48 类来创建或恢复一个 BIP48 钱包。

创建新钱包

// 生成一个随机的助记词
String mnemonic = BIP48.generateMnemonic();

// 从助记词派生出一个 BIP32 主节点
MasterNode masterNode = BIP48.fromMnemonic(mnemonic);

// 生成 BIP48 钱包
BIP48Wallet wallet = BIP48Wallet.fromMasterNode(masterNode);

从助记词恢复钱包

// 使用已有的助记词
String mnemonic = "your mnemonic phrase here";

// 从助记词派生出一个 BIP32 主节点
MasterNode masterNode = BIP48.fromMnemonic(mnemonic);

// 生成 BIP48 钱包
BIP48Wallet wallet = BIP48Wallet.fromMasterNode(masterNode);

4. 生成子私钥

你可以从 BIP48 钱包中生成子私钥:

// 生成第 0 个子私钥
PrivateKey childPrivateKey0 = wallet.deriveChildPrivateKey(0);

// 生成第 1 个子私钥
PrivateKey childPrivateKey1 = wallet.deriveChildPrivateKey(1);

// 获取子私钥的地址
String address0 = childPrivateKey0.toAddress();
String address1 = childPrivateKey1.toAddress();

print("Address 0: $address0");
print("Address 1: $address1");

5. 导出和导入钱包

你可以导出钱包的助记词,以便稍后恢复钱包。

导出助记词

String mnemonic = wallet.mnemonic;
print("Mnemonic: $mnemonic");

导入助记词

BIP48Wallet restoredWallet = BIP48Wallet.fromMnemonic(mnemonic);

6. 签名和验证消息

你可以使用私钥签名消息,并使用公钥验证签名。

签名消息

String message = "Hello, BIP48!";
String signature = childPrivateKey0.signMessage(message);
print("Signature: $signature");

验证签名

bool isValid = childPrivateKey0.publicKey.verifyMessage(message, signature);
print("Signature is valid: $isValid");
回到顶部