From f003a6275ec8b00d0bb3276722c6c6a260056aa4 Mon Sep 17 00:00:00 2001 From: thunderbiscuit Date: Thu, 23 Mar 2023 13:08:55 -0400 Subject: [PATCH] Clean up conversion between BDK TransactionDetails to ffi TransactionDetails --- bdk-ffi/src/lib.rs | 33 +++++++++++++++++---------------- bdk-ffi/src/wallet.rs | 4 ++-- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/bdk-ffi/src/lib.rs b/bdk-ffi/src/lib.rs index 04cc955..dedc0b9 100644 --- a/bdk-ffi/src/lib.rs +++ b/bdk-ffi/src/lib.rs @@ -15,7 +15,7 @@ use crate::keys::{DescriptorPublicKey, DescriptorSecretKey, Mnemonic}; use crate::psbt::PartiallySignedTransaction; use crate::wallet::{BumpFeeTxBuilder, TxBuilder, Wallet}; use bdk::bitcoin::blockdata::script::Script as BdkScript; -use bdk::bitcoin::consensus::{serialize, Decodable}; +use bdk::bitcoin::consensus::Decodable; use bdk::bitcoin::psbt::serialize::Serialize; use bdk::bitcoin::{ Address as BdkAddress, Network, OutPoint as BdkOutPoint, Transaction as BdkTransaction, Txid, @@ -117,23 +117,18 @@ pub struct TransactionDetails { pub confirmation_time: Option, } -impl From<&bdk::TransactionDetails> for TransactionDetails { - fn from(x: &bdk::TransactionDetails) -> TransactionDetails { - let potential_tx: Option> = match &x.transaction { - Some(tx) => { - let buffer: Vec = serialize(tx); - Some(Arc::new(Transaction::new(buffer).unwrap())) - } - None => None, - }; +impl From for TransactionDetails { + fn from(tx_details: bdk::TransactionDetails) -> Self { + let optional_tx: Option> = + tx_details.transaction.map(|tx| Arc::new(tx.into())); TransactionDetails { - transaction: potential_tx, - fee: x.fee, - txid: x.txid.to_string(), - received: x.received, - sent: x.sent, - confirmation_time: x.confirmation_time.clone(), + transaction: optional_tx, + fee: tx_details.fee, + txid: tx_details.txid.to_string(), + received: tx_details.received, + sent: tx_details.sent, + confirmation_time: tx_details.confirmation_time, } } } @@ -340,6 +335,12 @@ impl Transaction { } } +impl From for Transaction { + fn from(tx: bdk::bitcoin::Transaction) -> Self { + Transaction { internal: tx } + } +} + /// A Bitcoin address. struct Address { address: BdkAddress, diff --git a/bdk-ffi/src/wallet.rs b/bdk-ffi/src/wallet.rs index 1c2b959..1042f06 100644 --- a/bdk-ffi/src/wallet.rs +++ b/bdk-ffi/src/wallet.rs @@ -126,7 +126,7 @@ impl Wallet { ) -> Result, BdkError> { let transaction_details = self.get_wallet().list_transactions(include_raw)?; Ok(transaction_details - .iter() + .into_iter() .map(TransactionDetails::from) .collect()) } @@ -376,7 +376,7 @@ impl TxBuilder { psbt: Arc::new(PartiallySignedTransaction { internal: Mutex::new(psbt), }), - transaction_details: TransactionDetails::from(&tx_details), + transaction_details: TransactionDetails::from(tx_details), }) } }