Skip to content

Commit 5168f34

Browse files
authored
feat: add spend_utxo to Psbt
1 parent f72c646 commit 5168f34

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
@@ -560,6 +560,13 @@ impl Psbt {
560560
let psbt = self.0.lock().unwrap();
561561
serde_json::to_string(psbt.deref()).unwrap()
562562
}
563+
564+
/// Returns the spending utxo for this PSBT's input at `input_index`.
565+
pub(crate) fn spend_utxo(&self, input_index: u64) -> String {
566+
let psbt = self.0.lock().unwrap();
567+
let utxo = psbt.spend_utxo(input_index as usize).unwrap();
568+
serde_json::to_string(&utxo).unwrap()
569+
}
563570
}
564571

565572
impl From<BdkPsbt> for Psbt {
@@ -684,6 +691,7 @@ impl_hash_like!(TxMerkleNode, BitcoinDoubleSha256Hash);
684691
mod tests {
685692
use crate::bitcoin::Address;
686693
use crate::bitcoin::Network;
694+
use crate::bitcoin::Psbt;
687695

688696
#[test]
689697
fn test_is_valid_for_network() {
@@ -1039,4 +1047,19 @@ mod tests {
10391047
let segwit_data = segwit.to_address_data();
10401048
println!("Segwit data: {:#?}", segwit_data);
10411049
}
1050+
1051+
#[test]
1052+
fn test_psbt_spend_utxo() {
1053+
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())
1054+
.unwrap();
1055+
let psbt_utxo = psbt.spend_utxo(0);
1056+
1057+
println!("Psbt utxo: {:?}", psbt_utxo);
1058+
1059+
assert_eq!(
1060+
psbt_utxo,
1061+
r#"{"value":9536,"script_pubkey":"0020432ae79fce8bf43def0e21fde7d2896cfb9d0c773f6e9ea723d1391012d00f56"}"#,
1062+
"Psbt utxo does not match the expected value"
1063+
);
1064+
}
10421065
}

0 commit comments

Comments
 (0)