]> Untitled Git - bdk/commitdiff
Write failing test for keychain range querying
authorLLFourn <lloyd.fourn@gmail.com>
Wed, 5 Jun 2024 06:39:50 +0000 (16:39 +1000)
committer志宇 <hello@evanlinjin.me>
Thu, 13 Jun 2024 14:52:42 +0000 (22:52 +0800)
crates/chain/tests/test_keychain_txout_index.rs

index 55af741c63cb1591aa33df8017e2af68393f268c..e1996bdc9bf8341e32d998e57b9660d8b71ca870 100644 (file)
@@ -777,3 +777,36 @@ fn test_only_highest_ord_keychain_is_returned() {
         Some((TestKeychain::External, 1))
     );
 }
+
+#[test]
+fn when_querying_over_a_range_of_keychains_the_utxos_should_show_up() {
+    let mut indexer = KeychainTxOutIndex::<usize>::new(0);
+    let mut tx = common::new_tx(0);
+
+    for (i, descriptor) in DESCRIPTORS.iter().enumerate() {
+        let descriptor = parse_descriptor(descriptor);
+        let _ = indexer.insert_descriptor(i, descriptor.clone());
+        indexer.reveal_next_spk(&i);
+        tx.output.push(TxOut {
+            script_pubkey: descriptor.at_derivation_index(0).unwrap().script_pubkey(),
+            value: Amount::from_sat(10_000),
+        });
+    }
+
+    let _ = indexer.index_tx(&tx);
+    assert_eq!(indexer.outpoints().count(), DESCRIPTORS.len());
+
+    assert_eq!(
+        indexer.revealed_spks(0..DESCRIPTORS.len()).count(),
+        DESCRIPTORS.len()
+    );
+    assert_eq!(indexer.revealed_spks(1..4).count(), 4 - 1);
+    assert_eq!(
+        indexer.net_value(&tx, 0..DESCRIPTORS.len()).to_sat(),
+        (10_000 * DESCRIPTORS.len()) as i64
+    );
+    assert_eq!(
+        indexer.net_value(&tx, 3..5).to_sat(),
+        (10_000 * (5 - 3)) as i64
+    );
+}