Flutter比特币BIP44标准管理插件bitcoin_bip44_ng的使用
Flutter比特币BIP44标准管理插件bitcoin_bip44_ng的使用
BIP44
该库实现了BIP44规范,用于组织分层确定性比特币地址。基于BIP32规范。
示例
var bip44 = Bip44(toHexString('some seed'));
List<Account> accounts = bip44.coins[0].accounts // coin 0 是比特币
发现
规范要求账户及其最终地址是可发现的。目前只有两个远程源可以查询:Blockchair 和 Blockstream。Scanner
接口应该使添加来源更加容易。
支持的货币
如果货币出现在SLIP44中,则添加更多货币是轻而易举的事。
- 比特币
- 测试网
- 莱特币
- Idena
安装
在 pubspec.yaml
中添加:
dependencies:
bitcoin_bip44: ^0.1.0
待办事项
- 使扫描器对远程源抛出的异常更健壮
- 添加本地运行的比特币节点的扫描器
- 只使用第一个扫描器
- 目前只扫描传统比特币地址(以’1’开头),增加segwit支持
- 添加“地址间隙限制”
- 缓存地址扫描
许可证概述
此存储库中的所有文件都受 COPYING
文件中指定的许可证约束。该项目采用具有较小条款的AGPL许可。可以在专有项目中使用它,但核心库及其任何更改都必须在线发布。此库的源代码必须始终免费供所有人访问。
完整示例
以下是一个完整的示例代码,展示了如何使用 bitcoin_bip44_ng
插件来生成比特币地址。
import 'package:bitcoin_bip44_ng/bitcoin_bip44_ng.dart';
// 忽略打印的警告
void main() async {
// 初始化BIP44对象
var bip44 = Bip44(toHexString('some seed'));
// 获取比特币网络
var bitcoin = bip44.coins[0];
// 创建一个账户
var account = Account(bitcoin, 0, ChangeType.external);
// 获取下一个未使用的地址
var address = await account.nextUnusedAddress(0);
// 打印地址
print(address);
// 添加自定义扫描器
scanners = [MyOwnScanner()];
}
// 自定义扫描器类
class MyOwnScanner extends Scanner {
[@override](/user/override)
Future<bool> present(String address) {
// 示例逻辑:如果地址以字符'b'结尾,则返回false
if (address.endsWith('b')) {
return Future.value(false);
}
return Future.value(true);
}
}
// 将字符串转换为十六进制字符串
String toHexString(String original) {
return original.codeUnits
.map((c) => c.toRadixString(16).padLeft(2, '0'))
.toList()
.join('');
}
更多关于Flutter比特币BIP44标准管理插件bitcoin_bip44_ng的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter比特币BIP44标准管理插件bitcoin_bip44_ng的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用bitcoin_bip44_ng
插件的一个示例代码案例。这个插件用于根据BIP44(Bitcoin Improvement Proposal 44)标准生成和管理比特币钱包。
首先,确保你的Flutter项目已经设置好,并且已经添加了bitcoin_bip44_ng
依赖。在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
bitcoin_bip44_ng: ^最新版本号 # 请替换为当前可用的最新版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤使用bitcoin_bip44_ng
插件来生成和管理BIP44钱包。
import 'package:flutter/material.dart';
import 'package:bitcoin_bip44_ng/bitcoin_bip44.dart';
import 'package:hex/hex.dart';
import 'package:pointycastle/export.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('BIP44 Bitcoin Wallet Manager'),
),
body: Center(
child:BIP44WalletManager(),
),
),
);
}
}
class BIP44WalletManager extends StatefulWidget {
@override
_BIP44WalletManagerState createState() => _BIP44WalletManagerState();
}
class _BIP44WalletManagerState extends State<BIP44WalletManager> {
final BIP44 _bip44 = BIP44();
final String _mnemonic = "your 12-word mnemonic phrase here"; // 替换为你的助记词
late String _privateKey;
late String _publicKey;
late String _address;
@override
void initState() {
super.initState();
generateWallet();
}
void generateWallet() {
// 使用助记词生成主密钥
var seed = MnemonicUtils.toSeed(_mnemonic, password: '');
var masterKey = _bip44.fromSeed(seed);
// 根据BIP44路径生成子密钥(m/44'/0'/0'/0/0)
var path = BIP44Path.parse("m/44'/0'/0'/0/0");
var childKey = masterKey.derivePath(path);
// 获取私钥和公钥
_privateKey = Hex.encode(childKey.privateKey!.sublist(0, 32));
_publicKey = Hex.encode(childKey.publicKey);
// 生成比特币地址
var pubKeyHash = sha256.process(childKey.publicKey).sublist(0, 20);
var address = BitcoinAddress.fromPubKeyHash(pubKeyHash, network: BitcoinNetwork.mainnet).address;
_address = address;
// 更新UI
setState(() {});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Private Key: $_privateKey'),
Text('Public Key: $_publicKey'),
Text('Bitcoin Address: $_address'),
],
);
}
}
代码说明:
- 依赖管理:在
pubspec.yaml
文件中添加bitcoin_bip44_ng
依赖。 - 主应用结构:创建一个简单的Flutter应用,包含一个
BIP44WalletManager
小部件,用于展示钱包信息。 - BIP44钱包管理:
- 使用助记词生成种子。
- 从种子生成主密钥。
- 根据BIP44路径(
m/44'/0'/0'/0/0
)生成子密钥。 - 从子密钥中提取私钥和公钥。
- 使用公钥生成比特币地址。
- UI更新:在
initState
方法中调用generateWallet
函数,并在UI中显示私钥、公钥和比特币地址。
注意事项:
- 助记词:在实际应用中,助记词应从用户输入中获取,并且应妥善保管。
- 安全性:私钥非常敏感,不应直接暴露给用户界面或在客户端日志中记录。
- 网络选择:在生成比特币地址时,可以根据需要选择主网(
BitcoinNetwork.mainnet
)或测试网(BitcoinNetwork.testnet
)。
这样,你就可以使用bitcoin_bip44_ng
插件在Flutter应用中生成和管理BIP44标准的比特币钱包了。