Flutter比特币BIP44标准管理插件bitcoin_bip44_ng的使用

Flutter比特币BIP44标准管理插件bitcoin_bip44_ng的使用

BIP44

pub package CircleCI

该库实现了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

1 回复

更多关于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'),
      ],
    );
  }
}

代码说明:

  1. 依赖管理:在pubspec.yaml文件中添加bitcoin_bip44_ng依赖。
  2. 主应用结构:创建一个简单的Flutter应用,包含一个BIP44WalletManager小部件,用于展示钱包信息。
  3. BIP44钱包管理
    • 使用助记词生成种子。
    • 从种子生成主密钥。
    • 根据BIP44路径(m/44'/0'/0'/0/0)生成子密钥。
    • 从子密钥中提取私钥和公钥。
    • 使用公钥生成比特币地址。
  4. UI更新:在initState方法中调用generateWallet函数,并在UI中显示私钥、公钥和比特币地址。

注意事项:

  • 助记词:在实际应用中,助记词应从用户输入中获取,并且应妥善保管。
  • 安全性:私钥非常敏感,不应直接暴露给用户界面或在客户端日志中记录。
  • 网络选择:在生成比特币地址时,可以根据需要选择主网(BitcoinNetwork.mainnet)或测试网(BitcoinNetwork.testnet)。

这样,你就可以使用bitcoin_bip44_ng插件在Flutter应用中生成和管理BIP44标准的比特币钱包了。

回到顶部