2023-03-01 11:09:08 +01:00
|
|
|
//! This crate is a collection of core structures for [Bitcoin Dev Kit] (alpha release).
|
|
|
|
//!
|
2023-03-10 23:23:29 +05:30
|
|
|
//! The goal of this crate is to give wallets the mechanisms needed to:
|
2023-03-01 11:09:08 +01:00
|
|
|
//!
|
|
|
|
//! 1. Figure out what data they need to fetch.
|
2023-03-10 23:23:29 +05:30
|
|
|
//! 2. Process the data in a way that never leads to inconsistent states.
|
|
|
|
//! 3. Fully index that data and expose it to be consumed without friction.
|
2023-03-01 11:09:08 +01:00
|
|
|
//!
|
|
|
|
//! Our design goals for these mechanisms are:
|
|
|
|
//!
|
|
|
|
//! 1. Data source agnostic -- nothing in `bdk_chain` cares about where you get data from or whether
|
2023-03-10 23:23:29 +05:30
|
|
|
//! you do it synchronously or asynchronously. If you know a fact about the blockchain, you can just
|
|
|
|
//! tell `bdk_chain`'s APIs about it, and that information will be integrated, if it can be done
|
2023-03-01 11:09:08 +01:00
|
|
|
//! consistently.
|
2023-03-10 23:23:29 +05:30
|
|
|
//! 2. Error-free APIs.
|
2023-03-01 11:09:08 +01:00
|
|
|
//! 3. Data persistence agnostic -- `bdk_chain` does not care where you cache on-chain data, what you
|
|
|
|
//! cache or how you fetch it.
|
|
|
|
//!
|
|
|
|
//! [Bitcoin Dev Kit]: https://bitcoindevkit.org/
|
|
|
|
#![no_std]
|
|
|
|
pub use bitcoin;
|
|
|
|
pub mod chain_graph;
|
|
|
|
mod spk_txout_index;
|
|
|
|
pub use spk_txout_index::*;
|
|
|
|
mod chain_data;
|
|
|
|
pub use chain_data::*;
|
2023-03-27 14:21:10 +08:00
|
|
|
pub mod indexed_tx_graph;
|
2023-03-01 11:09:08 +01:00
|
|
|
pub mod keychain;
|
2023-03-29 22:45:01 +08:00
|
|
|
pub mod local_chain;
|
2023-03-01 11:09:08 +01:00
|
|
|
pub mod sparse_chain;
|
|
|
|
mod tx_data_traits;
|
|
|
|
pub mod tx_graph;
|
|
|
|
pub use tx_data_traits::*;
|
2023-04-05 10:57:26 +08:00
|
|
|
mod chain_oracle;
|
|
|
|
pub use chain_oracle::*;
|
2023-03-01 11:09:08 +01:00
|
|
|
|
|
|
|
#[doc(hidden)]
|
|
|
|
pub mod example_utils;
|
|
|
|
|
|
|
|
#[cfg(feature = "miniscript")]
|
|
|
|
pub use miniscript;
|
|
|
|
#[cfg(feature = "miniscript")]
|
|
|
|
mod descriptor_ext;
|
|
|
|
#[cfg(feature = "miniscript")]
|
|
|
|
pub use descriptor_ext::DescriptorExt;
|
2023-03-22 17:00:08 +08:00
|
|
|
#[cfg(feature = "miniscript")]
|
|
|
|
mod spk_iter;
|
|
|
|
#[cfg(feature = "miniscript")]
|
|
|
|
pub use spk_iter::*;
|
2023-03-01 11:09:08 +01:00
|
|
|
|
|
|
|
#[allow(unused_imports)]
|
|
|
|
#[macro_use]
|
|
|
|
extern crate alloc;
|
|
|
|
|
|
|
|
#[cfg(feature = "serde")]
|
|
|
|
pub extern crate serde_crate as serde;
|
|
|
|
|
|
|
|
#[cfg(feature = "bincode")]
|
|
|
|
extern crate bincode;
|
|
|
|
|
|
|
|
#[cfg(feature = "std")]
|
|
|
|
#[macro_use]
|
|
|
|
extern crate std;
|
|
|
|
|
|
|
|
#[cfg(all(not(feature = "std"), feature = "hashbrown"))]
|
|
|
|
extern crate hashbrown;
|
|
|
|
|
|
|
|
// When no-std use `alloc`'s Hash collections. This is activated by default
|
|
|
|
#[cfg(all(not(feature = "std"), not(feature = "hashbrown")))]
|
|
|
|
#[doc(hidden)]
|
|
|
|
pub mod collections {
|
|
|
|
#![allow(dead_code)]
|
|
|
|
pub type HashSet<K> = alloc::collections::BTreeSet<K>;
|
|
|
|
pub type HashMap<K, V> = alloc::collections::BTreeMap<K, V>;
|
|
|
|
pub use alloc::collections::{btree_map as hash_map, *};
|
|
|
|
}
|
|
|
|
|
2023-03-10 23:23:29 +05:30
|
|
|
// When we have std, use `std`'s all collections
|
2023-03-01 11:09:08 +01:00
|
|
|
#[cfg(all(feature = "std", not(feature = "hashbrown")))]
|
|
|
|
#[doc(hidden)]
|
|
|
|
pub mod collections {
|
|
|
|
pub use std::collections::{hash_map, *};
|
|
|
|
}
|
|
|
|
|
2023-03-10 23:23:29 +05:30
|
|
|
// With this special feature `hashbrown`, use `hashbrown`'s hash collections, and else from `alloc`.
|
2023-03-01 11:09:08 +01:00
|
|
|
#[cfg(feature = "hashbrown")]
|
|
|
|
#[doc(hidden)]
|
|
|
|
pub mod collections {
|
|
|
|
#![allow(dead_code)]
|
|
|
|
pub type HashSet<K> = hashbrown::HashSet<K>;
|
|
|
|
pub type HashMap<K, V> = hashbrown::HashMap<K, V>;
|
|
|
|
pub use alloc::collections::*;
|
|
|
|
pub use hashbrown::hash_map;
|
|
|
|
}
|
|
|
|
|
2023-03-10 23:23:29 +05:30
|
|
|
/// How many confirmations are needed f or a coinbase output to be spent.
|
2023-03-01 11:09:08 +01:00
|
|
|
pub const COINBASE_MATURITY: u32 = 100;
|