feat: add broadcast method on electrum client

This commit is contained in:
thunderbiscuit 2024-05-15 14:32:47 -04:00
parent 1913c45ef9
commit 4aec4b0434
No known key found for this signature in database
GPG Key ID: 88253696EB836462
2 changed files with 14 additions and 1 deletions

View File

@ -501,6 +501,9 @@ interface ElectrumClient {
[Throws=ElectrumClientError] [Throws=ElectrumClientError]
Update sync(SyncRequest sync_request, u64 batch_size, boolean fetch_prev_txouts); Update sync(SyncRequest sync_request, u64 batch_size, boolean fetch_prev_txouts);
[Throws=ElectrumClientError]
string broadcast([ByRef] Transaction transaction);
}; };
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------

View File

@ -3,14 +3,16 @@ use crate::types::{FullScanRequest, SyncRequest};
use crate::wallet::Update; use crate::wallet::Update;
use std::collections::BTreeMap; use std::collections::BTreeMap;
use bdk::bitcoin::Transaction as BdkTransaction;
use bdk::chain::spk_client::FullScanRequest as BdkFullScanRequest; use bdk::chain::spk_client::FullScanRequest as BdkFullScanRequest;
use bdk::chain::spk_client::FullScanResult as BdkFullScanResult; use bdk::chain::spk_client::FullScanResult as BdkFullScanResult;
use bdk::chain::spk_client::SyncRequest as BdkSyncRequest; use bdk::chain::spk_client::SyncRequest as BdkSyncRequest;
use bdk::chain::spk_client::SyncResult as BdkSyncResult; use bdk::chain::spk_client::SyncResult as BdkSyncResult;
use bdk::KeychainKind; 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 bdk_electrum::{ElectrumExt, ElectrumFullScanResult, ElectrumSyncResult};
use crate::bitcoin::Transaction;
use std::sync::Arc; use std::sync::Arc;
pub struct ElectrumClient(BdkBlockingClient); pub struct ElectrumClient(BdkBlockingClient);
@ -82,4 +84,12 @@ impl ElectrumClient {
Ok(Arc::new(Update(update))) Ok(Arc::new(Update(update)))
} }
pub fn broadcast(&self, transaction: &Transaction) -> Result<String, ElectrumClientError> {
let bdk_transaction: BdkTransaction = transaction.into();
self.0
.transaction_broadcast(&bdk_transaction)
.map_err(ElectrumClientError::from)
.map(|txid| txid.to_string())
}
} }