diff --git a/bdk-ffi/src/psbt.rs b/bdk-ffi/src/psbt.rs
index 4aca9842..98dba7ee 100644
--- a/bdk-ffi/src/psbt.rs
+++ b/bdk-ffi/src/psbt.rs
@@ -4,15 +4,12 @@ use bdk::bitcoin::util::psbt::PartiallySignedTransaction as BdkPartiallySignedTr
use bdk::bitcoin::util::psbt::PsbtSighashType as BdkPsbtSighashType;
use bdk::bitcoin::{EcdsaSighashType, SchnorrSighashType};
use bdk::bitcoincore_rpc::jsonrpc::serde_json;
-use bdk::bitcoin::psbt::Input as BdkInput;
use bdk::psbt::PsbtUtils;
use std::ops::Deref;
use std::str::FromStr;
use std::sync::{Arc, Mutex};
-use bdk::bitcoin::consensus::{Decodable, Encodable};
-use bdk::miniscript::serde::Serialize;
-use crate::{BdkError, FeeRate, Transaction, TxOut};
+use crate::{BdkError, FeeRate, Transaction};
#[derive(Debug)]
pub(crate) struct PartiallySignedTransaction {
@@ -82,44 +79,14 @@ impl PartiallySignedTransaction {
}
// Return the inputs present in the PSBT.
- pub(crate) fn inputs(&self) -> Vec {
+ pub(crate) fn inputs(&self) -> Vec> {
let psbt = self.internal.lock().unwrap();
- psbt.inputs().iter().map(|i| i.into()).collect()
+ psbt.inputs.iter().map(|i| Arc::new(i.clone().into())).collect()
}
}
-#[derive(Debug)]
-pub(crate) struct Input {
- pub(crate) internal: Mutex,
-}
-
-impl Input {
- pub(crate) fn non_witness_utxo(&self) -> Option> {
- let input = self.internal.lock().unwrap();
- input.non_witness_utxo().map(|tx| Arc::new(tx.into()))
- }
-
- pub(crate) fn witness_utxo(&self) -> Option> {
- let input = self.internal.lock().unwrap();
- input.witness_utxo().map(|tx| Arc::new(tx.into()))
- }
-
- // pub(crate) fn new(raw_input: Vec) -> Self {
- // let input: BdkInput = BdkInput::consensus_decode(&raw_input[..]).unwrap();
- // Input {
- // internal: Mutex::new(input),
- // }
- // }
-
- // pub(crate) fn concensus_encode(&self) -> Vec {
- // let input = self.internal.lock().unwrap();
- // input.consensus_encode()
- // }
-}
-
-/// A key-value map for an input of the corresponding index in the unsigned
-/// transaction.
-#[derive(Debug)]
+/// A key-value map for an input of the corresponding index in the unsigned transaction.
+#[derive(Clone, Debug)]
pub(crate) struct Input {
_inner: BdkInput,
}
diff --git a/bdk-ffi/src/wallet.rs b/bdk-ffi/src/wallet.rs
index 0d832f4b..97c9bfd5 100644
--- a/bdk-ffi/src/wallet.rs
+++ b/bdk-ffi/src/wallet.rs
@@ -265,7 +265,7 @@ pub(crate) struct TxBuilder {
pub(crate) drain_to: Option,
pub(crate) rbf: Option,
pub(crate) data: Vec,
- pub(crate) foreign_utxos: Vec<(OutPoint, Input, u64)>,
+ pub(crate) foreign_utxos: Vec<(OutPoint, Arc, u64)>,
}
impl TxBuilder {
@@ -365,16 +365,19 @@ impl TxBuilder {
///
/// Note unless you set only_witness_utxo any non-taproot psbt_input you pass to this method must
/// have non_witness_utxo set otherwise you will get an error when finish is called.
- pub fn add_foreign_utxo(
- &mut self,
+ pub(crate) fn add_foreign_utxo(
+ &self,
outpoint: OutPoint,
- psbt_input: Input,
+ psbt_input: Arc,
satisfaction_weight: u64,
) -> Arc {
- let mut foreign_utxos = self.foreign_utxos.to_vec();
- foreign_utxos.append((outpoint, psbt_input, satisfaction_weight));
+ // TODO: Why doesn't the OutPoint parameter here need an Arc?
+
+ let mut current_foreign_utxos: Vec<(OutPoint, Arc, u64)> = self.foreign_utxos.clone();
+ let new_foreign_utxo = (outpoint, psbt_input, satisfaction_weight);
+ current_foreign_utxos.push(new_foreign_utxo);
Arc::new(TxBuilder {
- foreign_utxos: foreign_utxos,
+ foreign_utxos: current_foreign_utxos,
..self.clone()
})
}