diff --git a/src/blockchain/esplora/api.rs b/src/blockchain/esplora/api.rs index 4e0e3f88..640f7a0b 100644 --- a/src/blockchain/esplora/api.rs +++ b/src/blockchain/esplora/api.rs @@ -17,7 +17,7 @@ pub struct Vin { // None if coinbase pub prevout: Option, pub scriptsig: Script, - #[serde(deserialize_with = "deserialize_witness")] + #[serde(deserialize_with = "deserialize_witness", default)] pub witness: Vec>, pub sequence: u32, pub is_coinbase: bool, diff --git a/src/testutils/blockchain_tests.rs b/src/testutils/blockchain_tests.rs index 0cb61e8a..9e3c74fe 100644 --- a/src/testutils/blockchain_tests.rs +++ b/src/testutils/blockchain_tests.rs @@ -1165,6 +1165,36 @@ macro_rules! bdk_blockchain_tests { assert!(utxo.outpoint != initial_tx.input[0].previous_output, "wallet displays spent txo in unspents"); } } + + #[test] + fn test_send_receive_pkh() { + let descriptors = ("pkh(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW)".to_string(), None); + let mut test_client = TestClient::default(); + let blockchain = get_blockchain(&test_client); + + let wallet = get_wallet_from_descriptors(&descriptors); + #[cfg(feature = "test-rpc")] + wallet.sync(&blockchain, SyncOptions::default()).unwrap(); + + let _ = test_client.receive(testutils! { + @tx ( (@external descriptors, 0) => 50_000 ) + }); + + wallet.sync(&blockchain, SyncOptions::default()).unwrap(); + + assert_eq!(wallet.get_balance().unwrap(), 50_000); + + let tx = { + let mut builder = wallet.build_tx(); + builder.add_recipient(test_client.get_node_address(None).script_pubkey(), 25_000); + let (mut psbt, _details) = builder.finish().unwrap(); + wallet.sign(&mut psbt, Default::default()).unwrap(); + psbt.extract_tx() + }; + blockchain.broadcast(&tx).unwrap(); + + wallet.sync(&blockchain, SyncOptions::default()).unwrap(); + } } };