6 个版本
新 1.0.0-beta.2 | 2024年8月25日 |
---|---|
1.0.0-beta.1 | 2024年7月22日 |
1.0.0-alpha.13 | 2024年6月15日 |
1.0.0-alpha.12 | 2024年5月23日 |
1.0.0-alpha.5 | 2024年2月6日 |
#3 in #psbt
1,690 个月下载量
用于bdk_hwi
800KB
14K SLoC
BDK 钱包
bdk_wallet
包提供 Wallet
类型,这是一个由 bdk_chain
的底层组件构建的简单、高级接口。 Wallet
是许多简单应用的起点,也是如何使用其他机制构建钱包的绝佳示例。它有两个密钥库(外部和内部),由 miniscript 描述符 定义,并使用它们生成地址。当你给它链数据时,它也使用描述符来找到它们拥有的交易输出。从这里,你可以创建和签名交易。
有关 Wallet
的API详细信息,请参阅 模块级文档。
区块链数据
为了获取用于消费的区块链数据 Wallet
,您应该配置一个从可用的链源客户端。通常,您向链源发送请求并获取一个响应,Wallet
可以使用该响应来更新其对链的观点。
区块链数据源
bdk_esplora
:从 Esplora 获取区块链数据以更新 BDK 结构。bdk_electrum
:从 Electrum 获取区块链数据以更新 BDK 结构。bdk_bitcoind_rpc
:从 Bitcoin Core 获取区块链数据以更新 BDK 结构。
示例
example-crates/wallet_esplora_async
example-crates/wallet_esplora_blocking
example-crates/wallet_electrum
example-crates/wallet_rpc
持久化
要持久化 Wallet
状态数据,请使用读取和写入 ChangeSet
的数据存储 crate。
实现
bdk_file_store
:将钱包更改存储在简单的平面文件中。
示例
use bdk_wallet::{bitcoin::Network, KeychainKind, ChangeSet, Wallet};
// Open or create a new file store for wallet data.
let mut db =
bdk_file_store::Store::<ChangeSet>::open_or_create_new(b"magic_bytes", "/tmp/my_wallet.db")
.expect("create store");
// Create a wallet with initial wallet data read from the file store.
let network = Network::Testnet;
let descriptor = "wpkh(tprv8ZgxMBicQKsPdcAqYBpzAFwU5yxBUo88ggoBqu1qPcHUfSbKK1sKMLmC7EAk438btHQrSdu3jGGQa6PA71nvH5nkDexhLteJqkM4dQmWF9g/84'/1'/0'/0/*)";
let change_descriptor = "wpkh(tprv8ZgxMBicQKsPdcAqYBpzAFwU5yxBUo88ggoBqu1qPcHUfSbKK1sKMLmC7EAk438btHQrSdu3jGGQa6PA71nvH5nkDexhLteJqkM4dQmWF9g/84'/1'/0'/1/*)";
let wallet_opt = Wallet::load()
.descriptor(KeychainKind::External, Some(descriptor))
.descriptor(KeychainKind::Internal, Some(change_descriptor))
.extract_keys()
.check_network(network)
.load_wallet(&mut db)
.expect("wallet");
let mut wallet = match wallet_opt {
Some(wallet) => wallet,
None => Wallet::create(descriptor, change_descriptor)
.network(network)
.create_wallet(&mut db)
.expect("wallet"),
};
// Get a new address to receive bitcoin.
let receive_address = wallet.reveal_next_address(KeychainKind::External);
// Persist staged wallet data changes to the file store.
wallet.persist(&mut db).expect("persist");
println!("Your new receive address is: {}", receive_address.address);
测试
单元测试
cargo test
许可
根据您的选择,许可协议为以下之一:
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您有意提交的任何贡献,根据 Apache-2.0 许可证定义,应按照上述方式双重许可,不附加任何额外条款或条件。
依赖项
~13–18MB
~255K SLoC