diff --git a/bdk-ffi/src/bdk.udl b/bdk-ffi/src/bdk.udl index bae6d75..3254ab8 100644 --- a/bdk-ffi/src/bdk.udl +++ b/bdk-ffi/src/bdk.udl @@ -501,6 +501,9 @@ interface ElectrumClient { [Throws=ElectrumClientError] Update sync(SyncRequest sync_request, u64 batch_size, boolean fetch_prev_txouts); + + [Throws=ElectrumClientError] + string broadcast([ByRef] Transaction transaction); }; // ------------------------------------------------------------------------ diff --git a/bdk-ffi/src/electrum.rs b/bdk-ffi/src/electrum.rs index d25ccf4..bbc5d68 100644 --- a/bdk-ffi/src/electrum.rs +++ b/bdk-ffi/src/electrum.rs @@ -3,14 +3,16 @@ use crate::types::{FullScanRequest, SyncRequest}; use crate::wallet::Update; use std::collections::BTreeMap; +use bdk::bitcoin::Transaction as BdkTransaction; use bdk::chain::spk_client::FullScanRequest as BdkFullScanRequest; use bdk::chain::spk_client::FullScanResult as BdkFullScanResult; use bdk::chain::spk_client::SyncRequest as BdkSyncRequest; use bdk::chain::spk_client::SyncResult as BdkSyncResult; use bdk::KeychainKind; -use bdk_electrum::electrum_client::Client as BdkBlockingClient; +use bdk_electrum::electrum_client::{Client as BdkBlockingClient, ElectrumApi}; use bdk_electrum::{ElectrumExt, ElectrumFullScanResult, ElectrumSyncResult}; +use crate::bitcoin::Transaction; use std::sync::Arc; pub struct ElectrumClient(BdkBlockingClient); @@ -82,4 +84,12 @@ impl ElectrumClient { Ok(Arc::new(Update(update))) } + + pub fn broadcast(&self, transaction: &Transaction) -> Result { + let bdk_transaction: BdkTransaction = transaction.into(); + self.0 + .transaction_broadcast(&bdk_transaction) + .map_err(ElectrumClientError::from) + .map(|txid| txid.to_string()) + } }