diff --git a/bdk-ffi/src/bdk.udl b/bdk-ffi/src/bdk.udl index 09195ab..f38ffe9 100644 --- a/bdk-ffi/src/bdk.udl +++ b/bdk-ffi/src/bdk.udl @@ -94,6 +94,7 @@ interface DatabaseConfig { }; dictionary TransactionDetails { + Transaction? transaction; u64? fee; u64 received; u64 sent; @@ -186,6 +187,13 @@ dictionary OutPoint { u32 vout; }; +dictionary TxIn { + OutPoint previous_output; + Script script_sig; + u32 sequence; + sequence> witness; +}; + dictionary TxOut { u64 value; Script script_pubkey; @@ -262,6 +270,14 @@ interface Transaction { boolean is_explicitly_rbf(); boolean is_lock_time_enabled(); + + i32 version(); + + u32 lock_time(); + + sequence inputs(); + + sequence outputs(); }; interface PartiallySignedTransaction { diff --git a/bdk-ffi/src/lib.rs b/bdk-ffi/src/lib.rs index a90403d..7440da8 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::Decodable; +use bdk::bitcoin::consensus::{Decodable, serialize}; use bdk::bitcoin::psbt::serialize::Serialize; use bdk::bitcoin::{Address as BdkAddress, Network, OutPoint as BdkOutPoint, Transaction as BdkTransaction, Txid}; use bdk::blockchain::Progress as BdkProgress; @@ -94,8 +94,9 @@ impl From for BdkAddressIndex { } /// A wallet transaction -#[derive(Debug, Clone, PartialEq, Eq, Default)] +#[derive(Debug, Clone, Default)] pub struct TransactionDetails { + pub transaction: Option>, /// Transaction id. pub txid: String, /// Received value (sats) @@ -116,7 +117,16 @@ pub struct TransactionDetails { 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, + }; + TransactionDetails { + transaction: potential_tx, fee: x.fee, txid: x.txid.to_string(), received: x.received, @@ -173,7 +183,7 @@ impl From for Balance { } /// A transaction output, which defines new coins to be created from old ones. -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct TxOut { /// The value of the output, in satoshis. value: u64, @@ -233,16 +243,16 @@ impl fmt::Debug for ProgressHolder { } } -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct TxIn { pub previous_output: OutPoint, - pub script_sig: Script, + pub script_sig: Arc