Flutter BIP39/BIP85助记词管理插件bip85的使用

Flutter BIP39/BIP85助记词管理插件bip85的使用

《dart-bip85》包是《flutter》的一个绑定插件,用于《rust-bip85》,它是原始《rust-bip85》的一个更新版本。原始的《rust-bip85》自2021年4月起已不再维护。

这项工作由《Bull Bitcoin》赞助。 Sponsor

使用方法

推荐查看example/文件夹,其中包含一个完整的示例应用位于example/lib/main.dart,还有集成测试在example/integration_test/目录下。

import 'package:flutter/material.dart';
import 'package:bip85/bip85.dart' as bip85;

Future<void> main() async {
  await bip85.LibBip85.init(); // 必须调用
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    const xprv =
        "xprv9s21ZrQH143K2LBWUUQRFXhucrQqBpKdRRxNVq2zBqsx8HVqFk2uYo8kmbaLLHRdqtQpUm98uKfu3vca1LqdGhUtyoFnCNkfmXRyPXLjbKb";

    var derived = bip85.toMnemonic(xprv: xprv, wordCount: 12, index: 0);
    var expected =
        "girl mad pet galaxy egg matter matrix prison refuse sense ordinary nose";
    assert(derived == expected);

    derived = bip85.toWif(xprv: xprv, index: 0);
    expected = "Kzyv4uF39d4Jrw2W7UryTHwZr1zQVNk4dAFyqE6BuMrMh1Za7uhp";
    assert(derived == expected);

    derived = bip85.toHex(xprv: xprv, length: 64, index: 0);
    expected =
        "492db4698cf3b73a5a24998aa3e9d7fa96275d85724a91e71aa2d645442f878555d078fd1f1f67e368976f04137b1f7a0d19232136ca50c44614af72b5582a5c";
    assert(derived == expected);

    derived = bip85.toXprv(xprv: xprv, index: 0);
    expected =
        "xprv9s21ZrQH143K2srSbCSg4m4kLvPMzcWydgmKEnMmoZUurYuBuYG46c6P71UGXMzmriLzCCBvKQWBUv3vPB3m1SATMhp3uEjXHJ42jFg7myX";
    assert(derived == expected);

    derived = bip85.toBase64(xprv: xprv, length: 21, index: 0);
    expected = "dKLoepugzdVJvdL56ogNV";
    assert(derived == expected);

    derived = bip85.toBase85(xprv: xprv, length: 12, index: 0);
    expected = "_s`{TW89)i4`";
    assert(derived == expected);

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('flutter_rust_bridge bip85')),
        body: Center(
          child: Text(
            bip85.toMnemonic(xprv: xprv, wordCount: 12, index: 0),
          ),
        ),
      ),
    );
  }
}

flutter_rust_bridge文档

此项目是一个起点,用于一个 Flutter 的 FFI 插件,这是一种特殊的插件类型,直接使用 Dart FFI 调用本地代码。

项目结构

此模板使用以下结构:

  • src:包含本地源代码及构建该源代码为动态库的 CmakeFile.txt 文件。
  • lib:包含定义插件 API 的 Dart 代码,并使用 dart:ffi 调用本地代码。
  • 平台文件夹(如 androidios 等):包含构建和捆绑本地代码库与平台应用程序的构建文件。
构建和捆绑本地代码

pubspec.yaml 指定 FFI 插件如下:

plugin:
  platforms:
    some_platform:
      ffiPlugin: true

此配置将针对各种目标平台调用本地构建,并将二进制文件捆绑到使用这些 FFI 插件的 Flutter 应用程序中。

这可以与 dartPluginClass 结合使用,例如当 FFI 用于实现一个联邦插件的一个平台时:

plugin:
  implements: some_other_plugin
  platforms:
    some_platform:
      dartPluginClass: SomeClass
      ffiPlugin: true

一个插件可以同时具有 FFI 和方法通道:

plugin:
  platforms:
    some_platform:
      pluginClass: SomeName
      ffiPlugin: true

更多关于Flutter BIP39/BIP85助记词管理插件bip85的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter BIP39/BIP85助记词管理插件bip85的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中使用 BIP39 和 BIP85 进行助记词管理,可以借助一些现成的插件和库来简化开发过程。bip85 是一个用于处理 BIP85 标准的 Dart 库,而 bip39 则用于生成和管理 BIP39 助记词。以下是如何在 Flutter 项目中使用这些库的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  bip39: ^1.0.0
  bip85: ^0.1.0

然后运行 flutter pub get 来安装这些依赖。

2. 生成 BIP39 助记词

使用 bip39 库生成一个新的 BIP39 助记词:

import 'package:bip39/bip39.dart';

void main() {
  // 生成一个随机的助记词
  final mnemonic = generateMnemonic();
  print('Generated Mnemonic: $mnemonic');

  // 验证助记词的有效性
  final isValid = validateMnemonic(mnemonic);
  print('Is Valid Mnemonic: $isValid');

  // 从助记词生成种子
  final seed = mnemonicToSeed(mnemonic);
  print('Seed: $seed');
}

3. 使用 BIP85 派生密钥

bip85 库允许你从 BIP39 助记词派生 BIP85 密钥。以下是一个简单的示例,展示如何使用 BIP85 派生一个 BIP39 助记词:

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

void main() {
  // 假设你有一个已有的BIP39助记词
  final mnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
  
  // 将助记词转换为种子
  final seed = mnemonicToSeed(mnemonic);

  // 使用BIP85派生一个新的BIP39助记词
  final bip85 = BIP85();
  final derivedMnemonic = bip85.deriveBIP39(seed, index: 0, language: 'english', words: 12);

  print('Derived Mnemonic: $derivedMnemonic');
}

4. 派生其他类型的密钥

BIP85 不仅可以派生 BIP39 助记词,还可以派生其他类型的密钥,例如 WIF、XPRV 等。以下是一个派生 WIF 的示例:

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

void main() {
  // 假设你有一个已有的BIP39助记词
  final mnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
  
  // 将助记词转换为种子
  final seed = mnemonicToSeed(mnemonic);

  // 使用BIP85派生一个WIF
  final bip85 = BIP85();
  final derivedWIF = bip85.deriveWIF(seed, index: 0);

  print('Derived WIF: $derivedWIF');
}
回到顶部