#[derive(Debug, Error)]
pub enum BDKCliError {
-
#[error("BIP39 error: {0}")]
BIP39Error(#[from] bdk_wallet::bip39::Error),
#[error("Key error: {0}")]
KeyError(#[from] bdk_wallet::keys::KeyError),
+ #[error("LocalChain error: {0}")]
+ LocalChainError(#[from] bdk_wallet::chain::local_chain::ApplyHeaderError),
+
#[error("Miniscript error: {0}")]
MiniscriptError(#[from] bdk_wallet::miniscript::Error),
#[error("Consensus decoding error: {0}")]
Hex(#[from] HexToBytesError),
+
+ #[cfg(feature = "rpc")]
+ #[error("RPC error: {0}")]
+ BitcoinCoreRpcError(#[from] bdk_bitcoind_rpc::bitcoincore_rpc::Error),
}
#[cfg(feature = "rpc")]
use {
crate::utils::BlockchainClient::RpcClient,
- bdk_bitcoind_rpc::{Emitter, bitcoincore_rpc::RpcApi},
+ bdk_bitcoind_rpc::{bitcoincore_rpc::RpcApi, Emitter},
bdk_wallet::chain::{BlockId, CheckPoint},
};
client
.populate_tx_cache(wallet.tx_graph().full_txs().map(|tx_node| tx_node.tx));
- let update = client
- .full_scan(request, stop_gap, batch_size, false)
- .map_err(|e| Error::Generic(e.to_string()))?;
+ let update = client.full_scan(request, stop_gap, batch_size, false)?;
wallet.apply_update(update)?;
}
#[cfg(feature = "esplora")]
let update = client
.full_scan(request, stop_gap, parallel_requests)
.await
- .map_err(|e| Error::Generic(e.to_string()))?;
+ .map_err(|e| *e)?;
wallet.apply_update(update)?;
}
let mut emitter =
Emitter::new(&client, genesis_cp.clone(), genesis_cp.height());
- while let Some(block_event) = emitter
- .next_block()
- .map_err(|e| Error::Generic(e.to_string()))?
- {
- wallet
- .apply_block_connected_to(
- &block_event.block,
- block_event.block_height(),
- block_event.connected_to(),
- )
- .map_err(|e| Error::Generic(e.to_string()))?;
+ while let Some(block_event) = emitter.next_block()? {
+ wallet.apply_block_connected_to(
+ &block_event.block,
+ block_event.block_height(),
+ block_event.connected_to(),
+ )?;
}
- let mempool_txs = emitter.mempool().unwrap();
+ let mempool_txs = emitter.mempool()?;
wallet.apply_unconfirmed_txs(mempool_txs);
}
}
client
.populate_tx_cache(wallet.tx_graph().full_txs().map(|tx_node| tx_node.tx));
- let update = client
- .sync(request, batch_size, false)
- .map_err(|e| Error::Generic(e.to_string()))?;
+ let update = client.sync(request, batch_size, false)?;
wallet.apply_update(update)?;
}
#[cfg(feature = "esplora")]
let update = client
.sync(request, parallel_requests)
.await
- .map_err(|e| Error::Generic(e.to_string()))?;
+ .map_err(|e| *e)?;
wallet.apply_update(update)?;
}
#[cfg(feature = "rpc")]
let wallet_cp = wallet.latest_checkpoint();
let mut emitter = Emitter::new(&client, wallet_cp.clone(), wallet_cp.height());
- while let Some(block_event) = emitter
- .next_block()
- .map_err(|e| Error::Generic(e.to_string()))?
- {
- wallet
- .apply_block_connected_to(
- &block_event.block,
- block_event.block_height(),
- block_event.connected_to(),
- )
- .map_err(|e| Error::Generic(e.to_string()))?;
+ while let Some(block_event) = emitter.next_block()? {
+ wallet.apply_block_connected_to(
+ &block_event.block,
+ block_event.block_height(),
+ block_event.connected_to(),
+ )?;
}
- let mempool_txs = emitter.mempool().unwrap();
+ let mempool_txs = emitter.mempool()?;
wallet.apply_unconfirmed_txs(mempool_txs);
}
}
network: Network,
persister: &mut P,
wallet_opts: &WalletOpts,
-) -> Result<PersistedWallet<P>, Error> {
+) -> Result<PersistedWallet<P>, Error>
+where
+ P::Error: std::fmt::Display,
+{
let ext_descriptor = wallet_opts.ext_descriptor.clone();
let int_descriptor = wallet_opts.int_descriptor.clone();
let wallet = Wallet::create(ext_descriptor, int_descriptor)
.network(network)
.create_wallet(persister)
- .map_err(|_| Error::Generic("Can't create wallet.".to_string()))?;
+ .map_err(|e| Error::Generic(e.to_string()))?;
Ok(wallet)
}
(Some(ext_descriptor), None) => {
let wallet = Wallet::create_single(ext_descriptor)
.network(network)
.create_wallet(persister)
- .map_err(|_| Error::Generic("Can't create wallet.".to_string()))?;
+ .map_err(|e| Error::Generic(e.to_string()))?;
Ok(wallet)
}
_ => Err(Error::Generic(