@@ -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