Skip to content

Commit 8f2d882

Browse files
committed
feat: add spend_utxo to Psbt
1 parent f99a1d1 commit 8f2d882

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

bdk-ffi/src/bitcoin.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,13 @@ impl Psbt {
553553
let psbt = self.0.lock().unwrap();
554554
serde_json::to_string(psbt.deref()).unwrap()
555555
}
556+
557+
/// Returns the spending utxo for this PSBT's input at `input_index`.
558+
pub(crate) fn spend_utxo(&self, input_index: u64) -> String {
559+
let psbt = self.0.lock().unwrap();
560+
let utxo = psbt.spend_utxo(input_index as usize).unwrap();
561+
serde_json::to_string(&utxo).unwrap()
562+
}
556563
}
557564

558565
impl From<BdkPsbt> for Psbt {
@@ -675,6 +682,7 @@ impl_hash_like!(TxMerkleNode, BitcoinDoubleSha256Hash);
675682

676683
#[cfg(test)]
677684
mod tests {
685+
use super::Psbt;
678686
use crate::bitcoin::Address;
679687
use crate::bitcoin::Network;
680688

@@ -1032,4 +1040,19 @@ mod tests {
10321040
let segwit_data = segwit.to_address_data();
10331041
println!("Segwit data: {:#?}", segwit_data);
10341042
}
1043+
1044+
#[test]
1045+
fn test_psbt_spend_utxo() {
1046+
let psbt = Psbt::new("cHNidP8BAH0CAAAAAXHl8cCbj84lm1v42e54IGI6CQru/nBXwrPE3q2fiGO4AAAAAAD9////Ar4DAAAAAAAAIgAgYw/rnGd4Bifj8s7TaMgR2tal/lq+L1jVv2Sqd1mxMbJEEQAAAAAAABYAFNVpt8vHYUPZNSF6Hu07uP1YeHts4QsAAAABALUCAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////BAJ+CwD/////AkAlAAAAAAAAIgAgQyrnn86L9D3vDiH959KJbPudDHc/bp6nI9E5EBLQD1YAAAAAAAAAACZqJKohqe3i9hw/cdHe/T+pmd+jaVN1XGkGiXmZYrSL69g2l06M+QEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQErQCUAAAAAAAAiACBDKuefzov0Pe8OIf3n0ols+50Mdz9unqcj0TkQEtAPViICAy4V+d/Qff71zzPXxK4FWG5x+wL/Ku93y/LG5p+0rI2xSDBFAiEA9b0OdASAs0P2uhQinjN7QGP5jX/b32LcShBmny8U0RUCIBebxvCDbpchCjqLAhOMjydT80DAzokaalGzV7XVTsbiASICA1tMY+46EgxIHU18bgHnUvAAlAkMq5LfwkpOGZ97sDKRRzBEAiBpmlZwJocNEiKLxexEX0Par6UgG8a89AklTG3/z9AHlAIgQH/ybCvfKJzr2dq0+IyueDebm7FamKIJdzBYWMXRr/wBIgID+aCzK9nclwhbbN7KbIVGUQGLWZsjcaqWPxk9gFeG+FxIMEUCIQDRPBzb0i9vaUmxCcs1yz8uq4tq1mdDAYvvYn3isKEhFAIgfmeTLLzMo0mmQ23ooMnyx6iPceE8xV5CvARuJsd88tEBAQVpUiEDW0xj7joSDEgdTXxuAedS8ACUCQyrkt/CSk4Zn3uwMpEhAy4V+d/Qff71zzPXxK4FWG5x+wL/Ku93y/LG5p+0rI2xIQP5oLMr2dyXCFts3spshUZRAYtZmyNxqpY/GT2AV4b4XFOuIgYDLhX539B9/vXPM9fErgVYbnH7Av8q73fL8sbmn7SsjbEYCapBE1QAAIABAACAAAAAgAAAAAAAAAAAIgYDW0xj7joSDEgdTXxuAedS8ACUCQyrkt/CSk4Zn3uwMpEY2bvrelQAAIABAACAAAAAgAAAAAAAAAAAIgYD+aCzK9nclwhbbN7KbIVGUQGLWZsjcaqWPxk9gFeG+FwYAKVFVFQAAIABAACAAAAAgAAAAAAAAAAAAAEBaVIhA7cr8fTHOPtE+t0zM3iWJvpfPvsNaVyQ0Sar6nIe9tQXIQMm7k7OY+q+Lsge3bVACuSa9r19Js+lNuTtEhehWkpe1iECelHmzmhzDsQTDnApIcnWRz3oFR68UX1ag8jfk/SKuopTriICAnpR5s5ocw7EEw5wKSHJ1kc96BUevFF9WoPI35P0irqKGAClRVRUAACAAQAAgAAAAIABAAAAAAAAACICAybuTs5j6r4uyB7dtUAK5Jr2vX0mz6U25O0SF6FaSl7WGAmqQRNUAACAAQAAgAAAAIABAAAAAAAAACICA7cr8fTHOPtE+t0zM3iWJvpfPvsNaVyQ0Sar6nIe9tQXGNm763pUAACAAQAAgAAAAIABAAAAAAAAAAAA".to_string())
1047+
.unwrap();
1048+
let psbt_utxo = psbt.spend_utxo(0);
1049+
1050+
println!("Psbt utxo: {:?}", psbt_utxo);
1051+
1052+
assert_eq!(
1053+
psbt_utxo,
1054+
r#"{"value":9536,"script_pubkey":"0020432ae79fce8bf43def0e21fde7d2896cfb9d0c773f6e9ea723d1391012d00f56"}"#,
1055+
"Psbt utxo does not match the expected value"
1056+
);
1057+
}
10351058
}

0 commit comments

Comments
 (0)