Advertisement
rajarshi149

Untitled

Apr 26th, 2023
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.46 KB | None | 0 0
  1. fn test_list_owned_txouts() {
  2. // Create localchain of 10 blocks.
  3.  
  4. let local_chain = local_chain![
  5. (0, h!("Block 0")),
  6. (1, h!("Block 1")),
  7. (2, h!("Block 2")),
  8. (3, h!("Block 3"))
  9. ];
  10.  
  11. let desc_1 : &str = "tr(tprv8ZgxMBicQKsPd3krDUsBAmtnRsK3rb8u5yi1zhQgMhF1tR8MW7xfE4rnrbbsrbPR52e7rKapu6ztw1jXveJSCGHEriUGZV7mCe88duLp5pj/86'/1'/0'/0/*)";
  12.  
  13. let (desc_1, _) = Descriptor::parse_descriptor(&Secp256k1::signing_only(), desc_1).unwrap();
  14.  
  15. let desc_2 : &str = "tr(tprv8ZgxMBicQKsPd3krDUsBAmtnRsK3rb8u5yi1zhQgMhF1tR8MW7xfE4rnrbbsrbPR52e7rKapu6ztw1jXveJSCGHEriUGZV7mCe88duLp5pj/86'/1'/0'/1/*)";
  16.  
  17. let (desc_2, _) = Descriptor::parse_descriptor(&Secp256k1::signing_only(), desc_2).unwrap();
  18.  
  19. // Have two descriptor for two keychains.
  20.  
  21. let mut graph = IndexedTxGraph::<BlockId, KeychainTxOutIndex<String>>::default();
  22.  
  23. graph.index.add_keychain("keychain_1".into(), desc_1);
  24. graph.index.add_keychain("keychain_2".into(), desc_2);
  25.  
  26. graph.index.set_lookahead_for_all(10);
  27.  
  28. let spk1 = {
  29. let ((_, spk1), _) = graph.index.reveal_next_spk(&"keychain_1".to_string());
  30. spk1.clone()
  31. };
  32.  
  33. let spk2 = {
  34. let ((_, spk2), _) = graph.index.reveal_next_spk(&"keychain_2".to_string());
  35. spk2.clone()
  36. };
  37.  
  38. let spk3 = {
  39. let ((_, spk1), _) = graph.index.reveal_next_spk(&"keychain_1".to_string());
  40. spk1.clone()
  41. };
  42.  
  43. let spk4 = {
  44. let ((_, spk2), _) = graph.index.reveal_next_spk(&"keychain_2".to_string());
  45. spk2.clone()
  46. };
  47.  
  48. // tx1 spends to desc1
  49.  
  50. let tx1 = Transaction {
  51. output: vec![TxOut {
  52. value: 10000,
  53. script_pubkey: spk1,
  54. }],
  55. ..common::new_tx(0)
  56. };
  57.  
  58. let tx2 = Transaction {
  59. output: vec![TxOut {
  60. value: 20000,
  61. script_pubkey: spk2,
  62. }],
  63. ..common::new_tx(0)
  64. };
  65.  
  66. let tx3 = common::new_tx(0);
  67.  
  68. let tx4 = Transaction {
  69. input: vec![TxIn {
  70. previous_output: OutPoint::new(tx1.txid(), 0),
  71. ..Default::default()
  72. }],
  73. output: vec![TxOut {
  74. value: 40000,
  75. script_pubkey: spk3,
  76. }],
  77. ..common::new_tx(0)
  78. };
  79.  
  80. let tx5 = Transaction {
  81. input: vec![TxIn {
  82. previous_output: OutPoint::new(tx2.txid(), 0),
  83. ..Default::default()
  84. }],
  85. output: vec![TxOut {
  86. value: 50000,
  87. script_pubkey: spk4,
  88. }],
  89. ..common::new_tx(0)
  90. };
  91.  
  92. let mut tx_iterator = Vec::new();
  93.  
  94. tx_iterator.push((
  95. &tx1,
  96. vec![local_chain.get_block(0).expect("block expected")],
  97. ));
  98. tx_iterator.push((
  99. &tx2,
  100. vec![local_chain.get_block(1).expect("block expected")],
  101. ));
  102. tx_iterator.push((&tx3, vec![]));
  103. tx_iterator.push((
  104. &tx4,
  105. vec![local_chain.get_block(2).expect("block expected")],
  106. ));
  107. tx_iterator.push((&tx5, vec![]));
  108.  
  109. //let x = [tx1, tx2, tx4, tx5].iter().enumerate().map(|(i, tx)| (&tx, [local_chain.get_block(0).unwrap()])).chain([tx3, tx5].iter().map(|tx| (&tx, None)))
  110.  
  111. let y = graph.insert_relevant_txs(
  112. [tx1, tx2, tx4]
  113. .iter()
  114. .enumerate()
  115. .map(|(i, tx)| (tx, [local_chain.get_block(i as u32).unwrap()])),
  116. None,
  117. );
  118.  
  119. let x = graph.insert_relevant_txs([tx3, tx5].iter().map(|tx| (tx, None)), None);
  120.  
  121. println!("Relevant insertion addition: {:#?}", x);
  122. // tx2 spends to desc2
  123.  
  124. // Create tx1, tx2, tx3. Tx1 and 2 spends to owned spk and confirmed at
  125. // height 3 and 5 respectively.
  126.  
  127. // create tx4 which is unrelated.
  128.  
  129. // create tx5 which spends tx1 and is confirmed.
  130.  
  131. // create tx6 which spends tx2 and is unconfirmed.
  132.  
  133. // Insert relevant txs into graph.
  134.  
  135. // Use the chain to find onchain utxos,
  136.  
  137. let tip = local_chain.tip().expect("tip expected");
  138.  
  139. let txouts = graph
  140. .list_owned_txouts(&local_chain, tip)
  141. .collect::<Vec<_>>();
  142.  
  143. let utxos = graph
  144. .list_owned_unspents(&local_chain, tip)
  145. .collect::<Vec<_>>();
  146.  
  147. let balance = graph.balance(&local_chain, tip, |_| true);
  148.  
  149. // list owned txouts
  150.  
  151. // list onwed unspents
  152.  
  153. // list owned balance.
  154.  
  155. println!("owned txouts : {:#?}", txouts);
  156.  
  157. println!("Owned utxos: {:#?}", utxos);
  158.  
  159. println!(" Balance : {:#?}", balance);
  160.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement