[[package]]
name = "bdk_kyoto"
-version = "0.13.1"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bb33172976f7fa26115ad6842f7903a2af325544eac6ddf5a17099e3cd9df3c"
+checksum = "91b430c5fc2d28073df2fe122b177e89f67fbcec47824587163ba96499e3d02c"
dependencies = [
"bdk_wallet",
- "kyoto-cbf",
+ "bip157",
]
[[package]]
"which",
]
+[[package]]
+name = "bip157"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d10c525b8dc2a9c0aae5d2de384336696023e5201c6bcc22c47ec0fb9d9947cb"
+dependencies = [
+ "bip324",
+ "bitcoin",
+ "bitcoin-address-book",
+ "tokio",
+]
+
[[package]]
name = "bip324"
version = "0.7.0"
"serde",
]
+[[package]]
+name = "bitcoin-address-book"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16d55a2ccdaa0271ea60355a01fc82e37f33a340df80599d344f9d6e97d46e48"
+dependencies = [
+ "bitcoin",
+]
+
[[package]]
name = "bitcoin-internals"
version = "0.2.0"
"serde_json",
]
-[[package]]
-name = "kyoto-cbf"
-version = "0.13.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "805f16bcf1d4738529f230404e7d0ab6e9ecf9e265920c212d446a291a93297e"
-dependencies = [
- "bip324",
- "bitcoin",
- "rusqlite",
- "tokio",
-]
-
[[package]]
name = "lazy_static"
version = "1.5.0"
bdk_bitcoind_rpc = { version = "0.21.0", features = ["std"], optional = true }
bdk_electrum = { version = "0.23.0", optional = true }
bdk_esplora = { version = "0.22.1", features = ["async-https", "tokio"], optional = true }
-bdk_kyoto = { version = "0.13.1", optional = true }
+bdk_kyoto = { version = "0.15.1", optional = true }
bdk_redb = { version = "0.1.0", optional = true }
shlex = { version = "1.3.0", optional = true }
tracing = "0.1.41"
/// Sets the number of parallel node connections.
#[clap(name = "CONNECTIONS", long = "cbf-conn-count", default_value = "2", value_parser = value_parser!(u8).range(1..=15))]
pub conn_count: u8,
-
- /// Optionally skip initial `skip_blocks` blocks.
- #[clap(env = "SKIP_BLOCKS", short = 'k', long = "cbf-skip-blocks")]
- pub skip_blocks: Option<u32>,
}
/// Wallet subcommands that can be issued without a blockchain backend.
#[cfg(feature = "electrum")]
use crate::utils::BlockchainClient::Electrum;
#[cfg(feature = "cbf")]
-use bdk_kyoto::{Info, LightClient};
+use bdk_kyoto::LightClient;
#[cfg(feature = "compiler")]
use bdk_wallet::bitcoin::XOnlyPublicKey;
use bdk_wallet::bitcoin::base64::prelude::*;
KyotoClient { client } => {
let LightClient {
requester,
- mut log_subscriber,
mut info_subscriber,
mut warning_subscriber,
update_subscriber: _,
tokio::task::spawn(async move { node.run().await });
tokio::task::spawn(async move {
select! {
- log = log_subscriber.recv() => {
- if let Some(log) = log {
- tracing::info!("{log}");
+ info = info_subscriber.recv() => {
+ if let Some(info) = info {
+ tracing::info!("{info}");
}
},
warn = warning_subscriber.recv() => {
}
});
let txid = tx.compute_txid();
- requester
- .broadcast_random(tx.clone())
- .map_err(|e| Error::Generic(format!("{e}")))?;
- tokio::time::timeout(tokio::time::Duration::from_secs(30), async move {
- while let Some(info) = info_subscriber.recv().await {
- match info {
- Info::TxGossiped(wtxid) => {
- tracing::info!("Successfully broadcast WTXID: {wtxid}");
- break;
- }
- Info::ConnectionsMet => {
- tracing::info!("Rebroadcasting to new connections");
- requester.broadcast_random(tx.clone()).unwrap();
- }
- _ => tracing::info!("{info}"),
- }
- }
- })
- .await
- .map_err(|_| {
+ let wtxid = requester.broadcast_random(tx.clone()).await.map_err(|_| {
tracing::warn!("Broadcast was unsuccessful");
Error::Generic("Transaction broadcast timed out after 30 seconds".into())
})?;
+ tracing::info!("Successfully broadcast WTXID: {wtxid}");
txid
}
};
use crate::commands::WalletOpts;
#[cfg(feature = "cbf")]
use bdk_kyoto::{
- Info, LightClient, NodeBuilderExt, Receiver,
- ScanType::{Recovery, Sync},
- UnboundedReceiver, Warning,
- builder::NodeBuilder,
+ BuilderExt, Info, LightClient, Receiver, ScanType::Sync, UnboundedReceiver, Warning,
+ builder::Builder,
};
use bdk_wallet::bitcoin::{Address, Network, OutPoint, ScriptBuf};
#[cfg(feature = "cbf")]
ClientType::Cbf => {
- let scan_type = match wallet_opts.compactfilter_opts.skip_blocks {
- Some(from_height) => Recovery { from_height },
- None => Sync,
- };
-
- let builder = NodeBuilder::new(_wallet.network());
+ let scan_type = Sync;
+ let builder = Builder::new(_wallet.network());
let client = builder
.required_peers(wallet_opts.compactfilter_opts.conn_count)
#[cfg(feature = "cbf")]
pub async fn trace_logger(
- mut log_subscriber: Receiver<String>,
mut info_subcriber: Receiver<Info>,
mut warning_subscriber: UnboundedReceiver<Warning>,
) {
loop {
tokio::select! {
- log = log_subscriber.recv() => {
- if let Some(log) = log {
- tracing::info!("{log}")
- }
- }
info = info_subcriber.recv() => {
if let Some(info) = info {
tracing::info!("{info}")
pub async fn sync_kyoto_client(wallet: &mut Wallet, client: Box<LightClient>) -> Result<(), Error> {
let LightClient {
requester,
- log_subscriber,
info_subscriber,
warning_subscriber,
mut update_subscriber,
.map_err(|e| Error::Generic(format!("SetGlobalDefault error: {e}")))?;
tokio::task::spawn(async move { node.run().await });
- tokio::task::spawn(async move {
- trace_logger(log_subscriber, info_subscriber, warning_subscriber).await
- });
+ tokio::task::spawn(async move { trace_logger(info_subscriber, warning_subscriber).await });
if !requester.is_running() {
tracing::error!("Kyoto node is not running");