]> Untitled Git - bdk/commitdiff
test(wallet): Test wallet addresses
authorvalued mammal <valuedmammal@protonmail.com>
Sun, 14 Apr 2024 20:02:10 +0000 (16:02 -0400)
committer志宇 <hello@evanlinjin.me>
Sat, 20 Apr 2024 07:12:41 +0000 (15:12 +0800)
Adds test coverage for Wallet methods `reveal_addresses_to`,
`mark_used`, and `unmark_used`

crates/bdk/tests/wallet.rs

index b41c4b42575d9b5a1515ac54182accfad13e909c..9a0dd3bfc369d85c01de7c2b57a23d889198d08b 100644 (file)
@@ -2705,6 +2705,7 @@ fn test_next_unused_address() {
         "tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
     );
     assert_eq!(wallet.derivation_index(KeychainKind::External), Some(0));
+    // calling next_unused again gives same address
     assert_eq!(
         wallet
             .next_unused_address(KeychainKind::External)
@@ -2714,6 +2715,15 @@ fn test_next_unused_address() {
     );
     assert_eq!(wallet.derivation_index(KeychainKind::External), Some(0));
 
+    // test mark used / unused
+    assert!(wallet.mark_used(KeychainKind::External, 0));
+    let next_unused_addr = wallet.next_unused_address(KeychainKind::External).unwrap();
+    assert_eq!(next_unused_addr.index, 1);
+
+    assert!(wallet.unmark_used(KeychainKind::External, 0));
+    let next_unused_addr = wallet.next_unused_address(KeychainKind::External).unwrap();
+    assert_eq!(next_unused_addr.index, 0);
+
     // use the above address
     receive_output_in_latest_block(&mut wallet, 25_000);
 
@@ -2725,6 +2735,9 @@ fn test_next_unused_address() {
         "tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
     );
     assert_eq!(wallet.derivation_index(KeychainKind::External), Some(1));
+
+    // trying to mark index 0 unused should return false
+    assert!(!wallet.unmark_used(KeychainKind::External, 0));
 }
 
 #[test]
@@ -2900,6 +2913,28 @@ fn test_get_address() {
     );
 }
 
+#[test]
+fn test_reveal_addresses() {
+    let desc = get_test_tr_single_sig_xprv();
+    let mut wallet = Wallet::new_no_persist(desc, None, Network::Signet).unwrap();
+    let keychain = KeychainKind::External;
+
+    let last_revealed_addr = wallet
+        .reveal_addresses_to(keychain, 9)
+        .unwrap()
+        .last()
+        .unwrap();
+    assert_eq!(wallet.derivation_index(keychain), Some(9));
+
+    let unused_addrs = wallet.list_unused_addresses(keychain).collect::<Vec<_>>();
+    assert_eq!(unused_addrs.len(), 10);
+    assert_eq!(unused_addrs.last().unwrap(), &last_revealed_addr);
+
+    // revealing to an already revealed index returns nothing
+    let mut already_revealed = wallet.reveal_addresses_to(keychain, 9).unwrap();
+    assert!(already_revealed.next().is_none());
+}
+
 #[test]
 fn test_get_address_no_reuse_single_descriptor() {
     use bdk::descriptor::template::Bip84;