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");