]> Untitled Git - bdk/commitdiff
Fix pre-segwit inputs with esplora
authorLLFourn <lloyd.fourn@gmail.com>
Tue, 15 Mar 2022 23:11:31 +0000 (10:11 +1100)
committerSteve Myers <steve@notmandatory.org>
Thu, 17 Mar 2022 15:37:03 +0000 (10:37 -0500)
src/blockchain/esplora/api.rs
src/testutils/blockchain_tests.rs

index 4e0e3f88b8b38509bd2d346ca82f8f4d31feaf41..640f7a0bb7db76d399d09c2b3b1946fc1fe45249 100644 (file)
@@ -17,7 +17,7 @@ pub struct Vin {
     // None if coinbase
     pub prevout: Option<PrevOut>,
     pub scriptsig: Script,
-    #[serde(deserialize_with = "deserialize_witness")]
+    #[serde(deserialize_with = "deserialize_witness", default)]
     pub witness: Vec<Vec<u8>>,
     pub sequence: u32,
     pub is_coinbase: bool,
index 6ac91e88fc3f209407c0e11e94032cd8705726a3..cbbf90a1c6cec3b2adac10b3ecd932cb7de6bfb6 100644 (file)
@@ -1124,6 +1124,36 @@ macro_rules! bdk_blockchain_tests {
                 assert_eq!(tx_2.received, 10_000);
                 assert_eq!(tx_2.sent, 0);
             }
+
+            #[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();
+            }
         }
     };