#bitcoin-wallet #wallet #descriptor #psbt

no-std bdk

一个现代、轻量级、基于描述符的钱包库

45 个版本 (27 个破坏性)

1.0.0-alpha.112024 年 5 月 10 日
1.0.0-alpha.92024 年 4 月 15 日
1.0.0-alpha.82024 年 3 月 27 日
1.0.0-alpha.22023 年 10 月 12 日
0.1.0-beta.1+stub 2020 年 9 月 10 日

#1 in #psbt

Download history 4514/week @ 2024-04-29 4361/week @ 2024-05-06 6036/week @ 2024-05-13 4726/week @ 2024-05-20 5076/week @ 2024-05-27 4166/week @ 2024-06-03 3705/week @ 2024-06-10 3563/week @ 2024-06-17 2637/week @ 2024-06-24 2481/week @ 2024-07-01 2968/week @ 2024-07-08 3262/week @ 2024-07-15 3208/week @ 2024-07-22 3211/week @ 2024-07-29 3275/week @ 2024-08-05 3699/week @ 2024-08-12

每月下载量 13,453
22 个crate中使用 (19 直接)

MIT/Apache

795KB
14K SLoC

BDK

用 Rust 编写的现代、轻量级、基于描述符的钱包库!

Crate Info MIT or Apache-2.0 Licensed CI Status API Docs Rustc Version 1.63.0+ Chat on Discord

项目主页 | 文档

bdk

bdk crate 提供了 Wallet 类型,这是一个简单的高级接口,由 bdk_chain 的低级组件构建而成。Wallet 是许多简单应用程序的良好起点,也是如何使用其他机制构建钱包的良好示例。它有两个密钥库(外部和内部),由 miniscript 描述符 定义,并使用它们生成地址。当你给它链数据时,它也使用描述符来查找它们拥有的交易输出。从那里,你可以创建和签署交易。

有关 Wallet API 的详细信息,请参阅 模块级文档

区块链数据

为了获取区块链数据供 Wallet 消费,您应从可用的链源配置一个客户端。通常,您向链源发出请求并获取一个响应,该响应是 Wallet 可以用来更新其链视图的。

区块链数据源

  • bdk_esplora:从 Esplora 抓取区块链数据以更新 BDK 结构。
  • bdk_electrum:从 Electrum 抓取区块链数据以更新 BDK 结构。
  • bdk_bitcoind_rpc:从 Bitcoin Core 抓取区块链数据以更新 BDK 结构。

示例

持久性

要在磁盘上持久化 Wallet,它必须使用一个 PersistBackend 实现来构建。

实现

示例

use bdk::{bitcoin::Network, wallet::{ChangeSet, Wallet}};

fn main() {
    // Create a new file `Store`.
    let db = bdk_file_store::Store::<ChangeSet>::open_or_create_new(b"magic_bytes", "path/to/my_wallet.db").expect("create store");

    let descriptor = "wpkh(tprv8ZgxMBicQKsPdcAqYBpzAFwU5yxBUo88ggoBqu1qPcHUfSbKK1sKMLmC7EAk438btHQrSdu3jGGQa6PA71nvH5nkDexhLteJqkM4dQmWF9g/84'/1'/0'/0/*)";
    let mut wallet = Wallet::new_or_load(descriptor, None, db, Network::Testnet).expect("create or load wallet");

    // Insert a single `TxOut` at `OutPoint` into the wallet.
    let _ = wallet.insert_txout(outpoint, txout);
    wallet.commit().expect("must write to database");
}

测试

单元测试

cargo test

许可

许可协议为以下之一

任选其一。

贡献

除非你明确声明,否则根据 Apache-2.0 许可证定义,你故意提交的任何旨在包含在作品中的贡献,应如上所述双许可,而不附加任何额外条款或条件。

依赖关系

~15MB
~197K SLoC