Flutter BIP39/BIP85助记词管理插件bip85的使用
Flutter BIP39/BIP85助记词管理插件bip85的使用
《dart-bip85》包是《flutter》的一个绑定插件,用于《rust-bip85》,它是原始《rust-bip85》的一个更新版本。原始的《rust-bip85》自2021年4月起已不再维护。
这项工作由《Bull Bitcoin》赞助。
使用方法
推荐查看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
调用本地代码。- 平台文件夹(如
android
、ios
等):包含构建和捆绑本地代码库与平台应用程序的构建文件。
构建和捆绑本地代码
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
更多关于Flutter BIP39/BIP85助记词管理插件bip85的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中使用 BIP39 和 BIP85 进行助记词管理,可以借助一些现成的插件和库来简化开发过程。bip85
是一个用于处理 BIP85 标准的 Dart 库,而 bip39
则用于生成和管理 BIP39 助记词。以下是如何在 Flutter 项目中使用这些库的基本步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 bip39
和 bip85
的依赖:
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');
}