Skip to content

Commit 632422a

Browse files
sandipndevnotmandatory
authored andcommitted
Added wallet blockchain test to send to Bech32m address
1 parent 54f61d1 commit 632422a

File tree

1 file changed

+48
-3
lines changed

1 file changed

+48
-3
lines changed

src/testutils/blockchain_tests.rs

+48-3
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,7 @@ impl TestClient {
145145

146146
let bumped: serde_json::Value = self.call("bumpfee", &[txid.to_string().into()]).unwrap();
147147
let new_txid = Txid::from_str(&bumped["txid"].as_str().unwrap().to_string()).unwrap();
148-
149-
let monitor_script =
150-
tx.vout[0].script_pub_key.addresses.as_ref().unwrap()[0].script_pubkey();
148+
let monitor_script = Script::from_hex(&mut tx.vout[0].script_pub_key.hex.to_hex()).unwrap();
151149
self.wait_for_tx(new_txid, &monitor_script);
152150

153151
debug!("Bumped {}, new txid {}", txid, new_txid);
@@ -911,6 +909,53 @@ macro_rules! bdk_blockchain_tests {
911909
wallet.sync(noop_progress(), None).unwrap();
912910
assert!(wallet.get_balance().unwrap() > 0, "incorrect balance after receiving coinbase");
913911
}
912+
913+
#[test]
914+
fn test_send_to_bech32m_addr() {
915+
use std::str::FromStr;
916+
use core_rpc::RpcApi;
917+
use core_rpc::core_rpc_json::ImportDescriptorRequest;
918+
919+
let (wallet, descriptors, mut test_client) = init_single_sig();
920+
921+
let wallet_descriptor = "tr(tprv8ZgxMBicQKsPdBtxmEMPnNq58KGusNAimQirKFHqX2yk2D8q1v6pNLiKYVAdzDHy2w3vF4chuGfMvNtzsbTTLVXBcdkCA1rje1JG6oksWv8/86h/1h/0h/0/*)#y283ssmn";
922+
let change_descriptor = "tr(tprv8ZgxMBicQKsPdBtxmEMPnNq58KGusNAimQirKFHqX2yk2D8q1v6pNLiKYVAdzDHy2w3vF4chuGfMvNtzsbTTLVXBcdkCA1rje1JG6oksWv8/86h/1h/0h/1/*)#47zsd9tt";
923+
924+
test_client.bitcoind.client
925+
.import_descriptors(
926+
vec![
927+
ImportDescriptorRequest::new(wallet_descriptor, false),
928+
ImportDescriptorRequest::new(change_descriptor, false),
929+
]
930+
).unwrap();
931+
932+
let node_addr = test_client.get_node_address(Some(core_rpc::core_rpc_json::AddressType::Bech32m));
933+
assert_eq!(node_addr, bitcoin::Address::from_str("bcrt1pj5y3f0fu4y7g98k4v63j9n0xvj3lmln0cpwhsjzknm6nt0hr0q7qnzwsy9").unwrap());
934+
935+
let new_bech32m_addr = test_client.get_new_address(Some("test bech32m"), Some(core_rpc::core_rpc_json::AddressType::Bech32m)).unwrap();
936+
assert_eq!(new_bech32m_addr, bitcoin::Address::from_str("bcrt1pxa4h86c5gc8x65un8nz546wy7hqxv7wljrv5sxukayh3xwnw23fs80jdf9").unwrap());
937+
938+
test_client.receive(testutils! {
939+
@tx ( (@external descriptors, 0) => 50_000 )
940+
});
941+
942+
wallet.sync(noop_progress(), None).unwrap();
943+
assert_eq!(wallet.get_balance().unwrap(), 50_000, "incorrect balance");
944+
945+
let mut builder = wallet.build_tx();
946+
builder.add_recipient(node_addr.script_pubkey(), 25_000);
947+
let (mut psbt, details) = builder.finish().unwrap();
948+
let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
949+
assert!(finalized, "Cannot finalize transaction");
950+
let tx = psbt.extract_tx();
951+
println!("{}", bitcoin::consensus::encode::serialize_hex(&tx));
952+
wallet.broadcast(tx).unwrap();
953+
wallet.sync(noop_progress(), None).unwrap();
954+
assert_eq!(wallet.get_balance().unwrap(), details.received, "incorrect balance after send");
955+
956+
assert_eq!(wallet.list_transactions(false).unwrap().len(), 2, "incorrect number of txs");
957+
assert_eq!(wallet.list_unspent().unwrap().len(), 1, "incorrect number of unspents");
958+
}
914959
}
915960
};
916961

0 commit comments

Comments
 (0)