Rework sqlite: Instead of only supported one schema (defined in `bdk_sqlite`), we have a schema per changeset type for more flexiblity. * rm `bdk_sqlite` crate (as we don't need `bdk_sqlite::Store` anymore). * add `sqlite` feature on `bdk_chain` which adds methods on each changeset type for initializing tables, loading the changeset and writing. Rework changesets: Some callers may want to use `KeychainTxOutIndex` where `K` may change per descriptor on every run. So we only want to persist the last revealed indices by `DescriptorId` (which uniquely-ish identifies the descriptor). * rm `keychain_added` field from `keychain_txout`'s changeset. * Add `keychain_added` to `CombinedChangeSet` (which is renamed to `WalletChangeSet`). Rework persistence: add back some safety and convenience when persisting our types. Working with changeset directly (as we were doing before) can be cumbersome. * Intoduce `struct Persisted<T>` which wraps a type `T` which stores staged changes to it. This adds safety when creating and or loading `T` from db. * `struct Persisted<T>` methods, `create`, `load` and `persist`, are avaliable if `trait PersistWith<Db>` is implemented for `T`. `Db` represents the database connection and `PersistWith` should be implemented per database-type. * For async, we have `trait PersistedAsyncWith<Db>`. * `Wallet` has impls of `PersistedWith<rusqlite::Connection>`, `PersistedWith<rusqlite::Transaction>` and `PersistedWith<bdk_file_store::Store>` by default. Rework wallet-construction: Before, we had multiple methods for loading and creating with different input-counts so it would be unwieldly to add more parameters in the future. This also makes it difficult to impl `PersistWith` (which has a single method for `load` that takes in `PersistWith::LoadParams` and a single method for `create` that takes in `PersistWith::CreateParams`). * Introduce a builder pattern when constructing a `Wallet`. For loading from persistence or `ChangeSet`, we have `LoadParams`. For creating a new wallet, we have `CreateParams`.
36 lines
1.2 KiB
TOML
36 lines
1.2 KiB
TOML
[package]
|
|
name = "bdk_chain"
|
|
version = "0.16.0"
|
|
edition = "2021"
|
|
rust-version = "1.63"
|
|
homepage = "https://bitcoindevkit.org"
|
|
repository = "https://github.com/bitcoindevkit/bdk"
|
|
documentation = "https://docs.rs/bdk_chain"
|
|
description = "Collection of core structures for Bitcoin Dev Kit."
|
|
license = "MIT OR Apache-2.0"
|
|
readme = "README.md"
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[dependencies]
|
|
bitcoin = { version = "0.32.0", default-features = false }
|
|
serde_crate = { package = "serde", version = "1", optional = true, features = ["derive", "rc"] }
|
|
|
|
# Use hashbrown as a feature flag to have HashSet and HashMap from it.
|
|
hashbrown = { version = "0.9.1", optional = true, features = ["serde"] }
|
|
miniscript = { version = "12.0.0", optional = true, default-features = false }
|
|
|
|
# Feature dependencies
|
|
rusqlite = { version = "0.31.0", features = ["bundled"], optional = true }
|
|
serde_json = {version = "1", optional = true }
|
|
|
|
[dev-dependencies]
|
|
rand = "0.8"
|
|
proptest = "1.2.0"
|
|
|
|
[features]
|
|
default = ["std", "miniscript"]
|
|
std = ["bitcoin/std", "miniscript?/std"]
|
|
serde = ["serde_crate", "bitcoin/serde", "miniscript?/serde"]
|
|
sqlite = ["std", "rusqlite", "serde", "serde_json"]
|