1
1
use std:: num:: NonZeroU32 ;
2
2
3
3
use bip0039:: { English , Mnemonic } ;
4
- use futures_util:: { StreamExt , TryStreamExt } ;
4
+ use futures_util:: { Stream , StreamExt , TryStreamExt } ;
5
5
use nonempty:: NonEmpty ;
6
6
use secrecy:: { ExposeSecret , SecretVec , Zeroize } ;
7
7
use tonic:: {
8
8
client:: GrpcService ,
9
9
codegen:: { Body , Bytes , StdError } ,
10
+ Status ,
10
11
} ;
11
12
12
13
use zcash_address:: ZcashAddress ;
13
- use zcash_client_backend:: data_api:: scanning:: ScanRange ;
14
14
use zcash_client_backend:: data_api:: wallet:: {
15
15
create_proposed_transactions, input_selection:: GreedyInputSelector , propose_transfer,
16
16
} ;
@@ -26,6 +26,7 @@ use zcash_client_backend::scanning::{scan_block, Nullifiers, ScanningKeys};
26
26
use zcash_client_backend:: wallet:: OvkPolicy ;
27
27
use zcash_client_backend:: zip321:: { Payment , TransactionRequest } ;
28
28
use zcash_client_backend:: ShieldedProtocol ;
29
+ use zcash_client_backend:: { data_api:: scanning:: ScanRange , proto:: compact_formats:: CompactBlock } ;
29
30
use zcash_client_memory:: MemoryWalletDb ;
30
31
use zcash_keys:: keys:: UnifiedSpendingKey ;
31
32
use zcash_primitives:: consensus:: { self , BlockHeight , Network } ;
@@ -200,6 +201,27 @@ where
200
201
Ok ( ( ) )
201
202
}
202
203
204
+ async fn fetch_blocks (
205
+ & mut self ,
206
+ start : u32 ,
207
+ end : u32 ,
208
+ ) -> Result < impl StreamExt < Item = Result < CompactBlock , Status > > , Error > {
209
+ let range = service:: BlockRange {
210
+ start : Some ( service:: BlockId {
211
+ height : start. into ( ) ,
212
+ ..Default :: default ( )
213
+ } ) ,
214
+ end : Some ( service:: BlockId {
215
+ height : end. into ( ) ,
216
+ ..Default :: default ( )
217
+ } ) ,
218
+ } ;
219
+
220
+ let blocks = self . client . get_block_range ( range) . await ?. into_inner ( ) ;
221
+
222
+ Ok ( blocks)
223
+ }
224
+
203
225
/// Download and process all blocks in the given range
204
226
async fn fetch_and_scan_range ( & mut self , start : u32 , end : u32 ) -> Result < ( ) , Error > {
205
227
// get the chainstate prior to the range
@@ -222,24 +244,11 @@ where
222
244
self . db . get_orchard_nullifiers ( NullifierQuery :: Unspent ) ?,
223
245
) ;
224
246
225
- let range = service:: BlockRange {
226
- start : Some ( service:: BlockId {
227
- height : start. into ( ) ,
228
- ..Default :: default ( )
229
- } ) ,
230
- end : Some ( service:: BlockId {
231
- height : ( end - 1 ) . into ( ) ,
232
- ..Default :: default ( )
233
- } ) ,
234
- } ;
235
-
236
247
tracing:: info!( "Scanning block range: {:?} to {:?}" , start, end) ;
237
248
238
249
let scanned_blocks = self
239
- . client
240
- . get_block_range ( range)
250
+ . fetch_blocks ( start, end)
241
251
. await ?
242
- . into_inner ( )
243
252
. map ( |compact_block| {
244
253
scan_block (
245
254
& self . network ,
@@ -401,7 +410,7 @@ where
401
410
} )
402
411
. unwrap ( ) ;
403
412
404
- tracing:: info!( "Transaction hex: 0x{}" , hex:: encode( & raw_tx. data) ) ;
413
+ // tracing::info!("Transaction hex: 0x{}", hex::encode(&raw_tx.data));
405
414
406
415
let response = self . client . send_transaction ( raw_tx) . await ?. into_inner ( ) ;
407
416
0 commit comments