@@ -209,12 +209,12 @@ fn main() {
209209 test_unloadwallet ( & cl) ;
210210 test_loadwallet ( & cl) ;
211211 test_backupwallet ( & cl) ;
212+ test_wait_for_new_block ( & cl) ;
213+ test_wait_for_block ( & cl) ;
214+ test_get_descriptor_info ( & cl) ;
215+ test_derive_addresses ( & cl) ;
212216 //TODO import_multi(
213217 //TODO verify_message(
214- //TODO wait_for_new_block(&self, timeout: u64) -> Result<json::BlockRef> {
215- //TODO wait_for_block(
216- //TODO get_descriptor_info(&self, desc: &str) -> Result<json::GetDescriptorInfoResult> {
217- //TODO derive_addresses(&self, descriptor: &str, range: Option<[u32; 2]>) -> Result<Vec<Address>> {
218218 //TODO encrypt_wallet(&self, passphrase: &str) -> Result<()> {
219219 //TODO get_by_id<T: queryable::Queryable<Self>>(
220220 //TODO add_multisig_address(
@@ -1311,6 +1311,55 @@ fn test_backupwallet(_: &Client) {
13111311 assert ! ( wallet_client. backup_wallet( Some ( & backup_path) ) . is_ok( ) ) ;
13121312}
13131313
1314+ fn test_wait_for_new_block ( cl : & Client ) {
1315+ let height = cl. get_block_count ( ) . unwrap ( ) ;
1316+ let hash = cl. get_block_hash ( height) . unwrap ( ) ;
1317+
1318+ assert ! ( cl. wait_for_new_block( std:: u64 :: MAX ) . is_err( ) ) ; // JSON integer out of range
1319+ assert_eq ! ( cl. wait_for_new_block( 100 ) . unwrap( ) , json:: BlockRef { hash, height} ) ;
1320+ }
1321+
1322+ fn test_wait_for_block ( cl : & Client ) {
1323+ let height = cl. get_block_count ( ) . unwrap ( ) ;
1324+ let hash = cl. get_block_hash ( height) . unwrap ( ) ;
1325+
1326+ assert ! ( cl. wait_for_block( & hash, std:: u64 :: MAX ) . is_err( ) ) ; // JSON integer out of range
1327+ assert_eq ! ( cl. wait_for_block( & hash, 0 ) . unwrap( ) , json:: BlockRef { hash, height} ) ;
1328+ }
1329+
1330+ fn test_get_descriptor_info ( cl : & Client ) {
1331+ let res = cl. get_descriptor_info ( r"pkh(cSQPHDBwXGjVzWRqAHm6zfvQhaTuj1f2bFH58h55ghbjtFwvmeXR)" ) . unwrap ( ) ;
1332+ assert_eq ! ( res. descriptor, r"pkh(02e96fe52ef0e22d2f131dd425ce1893073a3c6ad20e8cac36726393dfb4856a4c)#62k9sn4x" ) ;
1333+ assert_eq ! ( res. is_range, false ) ;
1334+ assert_eq ! ( res. is_solvable, true ) ;
1335+ assert_eq ! ( res. has_private_keys, true ) ;
1336+
1337+ // Checksum introduced in: https://github.com/bitcoin/bitcoin/commit/26d3fad1093dfc697048313be7a96c9adf723654
1338+ if version ( ) >= 190000 {
1339+ assert_eq ! ( res. checksum, Some ( "37v3lm8x" . to_string( ) ) ) ;
1340+ } else {
1341+ assert ! ( res. checksum. is_none( ) ) ;
1342+ }
1343+
1344+ assert ! ( cl. get_descriptor_info( "abcdef" ) . is_err( ) ) ;
1345+ }
1346+
1347+ fn test_derive_addresses ( cl : & Client ) {
1348+ let descriptor = r"pkh(02e96fe52ef0e22d2f131dd425ce1893073a3c6ad20e8cac36726393dfb4856a4c)#62k9sn4x" ;
1349+ assert_eq ! ( cl. derive_addresses( descriptor, None ) . unwrap( ) , vec![ "mrkwtj5xpYQjHeJe5wsweNjVeTKkvR5fCr" . parse( ) . unwrap( ) ] ) ;
1350+ assert ! ( cl. derive_addresses( descriptor, Some ( [ 0 , 1 ] ) ) . is_err( ) ) ; // Range should not be specified for an unranged descriptor
1351+
1352+ let descriptor = std:: concat!(
1353+ r"wpkh([1004658e/84'/1'/0']tpubDCBEcmVKbfC9KfdydyLbJ2gfNL88grZu1XcWSW9ytTM6fi" ,
1354+ r"tvaRmVyr8Ddf7SjZ2ZfMx9RicjYAXhuh3fmLiVLPodPEqnQQURUfrBKiiVZc8/0/*)#g8l47ngv" ,
1355+ ) ;
1356+ assert_eq ! ( cl. derive_addresses( descriptor, Some ( [ 0 , 1 ] ) ) . unwrap( ) , vec![
1357+ "bcrt1q5n5tjkpva8v5s0uadu2y5f0g7pn4h5eqaq2ux2" . parse( ) . unwrap( ) ,
1358+ "bcrt1qcgl303ht03ja2e0hudpwk7ypcxk5t478wspzlt" . parse( ) . unwrap( ) ,
1359+ ] ) ;
1360+ assert ! ( cl. derive_addresses( descriptor, None ) . is_err( ) ) ; // Range must be specified for a ranged descriptor
1361+ }
1362+
13141363fn test_get_index_info ( cl : & Client ) {
13151364 if version ( ) >= 210000 {
13161365 let gii = cl. get_index_info ( ) . unwrap ( ) ;
0 commit comments