diff --git a/src/bdk.udl b/src/bdk.udl index 9f386de..138950c 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -63,6 +63,15 @@ interface DatabaseConfig { Sled(SledDbConfiguration config); }; +dictionary ConfirmedTransaction { + u64? fees; + u32 height; + u64 timestamp; + u64 received; + u64 sent; + string id; +}; + interface OfflineWallet { [Throws=BdkError] constructor(string descriptor, Network network, DatabaseConfig database_config); @@ -73,6 +82,8 @@ interface OfflineWallet { u64 get_balance(); [Throws=BdkError] void sign([ByRef] PartiallySignedBitcoinTransaction psbt); + [Throws=BdkError] + sequence get_transactions(); }; dictionary ElectrumConfig { @@ -111,6 +122,8 @@ interface OnlineWallet { u64 get_balance(); [Throws=BdkError] void sign([ByRef] PartiallySignedBitcoinTransaction psbt); + [Throws=BdkError] + sequence get_transactions(); // OnlineWalletInterface Network get_network(); diff --git a/src/lib.rs b/src/lib.rs index d9d375f..d78ab01 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -57,6 +57,16 @@ impl WalletHolder<()> for OfflineWallet { } } +#[derive(Debug, Clone, PartialEq, Eq, Default)] +pub struct ConfirmedTransaction { + pub fees: Option, + pub height: u32, + pub timestamp: u64, + pub received: u64, + pub sent: u64, + pub id: String, +} + trait OfflineWalletOperations: WalletHolder { fn get_new_address(&self) -> String { self.get_wallet() @@ -81,6 +91,21 @@ trait OfflineWalletOperations: WalletHolder { ))), } } + + fn get_transactions(&self) -> Result, Error> { + let transactions = self.get_wallet().list_transactions(true)?; + Ok(transactions + .iter() + .map(|x| ConfirmedTransaction { + fees: x.fee, + height: x.confirmation_time.clone().map_or(0, |c| c.height), + timestamp: x.confirmation_time.clone().map_or(0, |c| c.timestamp), + id: x.txid.to_string(), + received: x.received, + sent: x.sent, + }) + .collect()) + } } impl OfflineWallet {