@@ -9,6 +9,7 @@ use base64;
99use bitcoin:: hashes:: hex:: { FromHex , ToHex } ;
1010use glob;
1111use hex;
12+ use itertools:: Itertools ;
1213use serde_json:: { from_str, from_value, Value } ;
1314
1415#[ cfg( not( feature = "liquid" ) ) ]
@@ -378,19 +379,24 @@ impl Daemon {
378379
379380 fn handle_request_batch ( & self , method : & str , params_list : & [ Value ] ) -> Result < Vec < Value > > {
380381 let id = self . message_id . next ( ) ;
381- let reqs = params_list
382+ let chunks = params_list
382383 . iter ( )
383384 . map ( |params| json ! ( { "method" : method, "params" : params, "id" : id} ) )
384- . collect ( ) ;
385+ . chunks ( 50_000 ) ; // Max Amount of batched requests
385386 let mut results = vec ! [ ] ;
386- let mut replies = self . call_jsonrpc ( method, & reqs) ?;
387- if let Some ( replies_vec) = replies. as_array_mut ( ) {
388- for reply in replies_vec {
389- results. push ( parse_jsonrpc_reply ( reply. take ( ) , method, id) ?)
387+ for chunk in & chunks {
388+ let reqs = chunk. collect ( ) ;
389+ let mut replies = self . call_jsonrpc ( method, & reqs) ?;
390+ if let Some ( replies_vec) = replies. as_array_mut ( ) {
391+ for reply in replies_vec {
392+ results. push ( parse_jsonrpc_reply ( reply. take ( ) , method, id) ?)
393+ }
394+ } else {
395+ bail ! ( "non-array replies: {:?}" , replies) ;
390396 }
391- return Ok ( results) ;
392397 }
393- bail ! ( "non-array replies: {:?}" , replies) ;
398+
399+ Ok ( results)
394400 }
395401
396402 fn retry_request_batch ( & self , method : & str , params_list : & [ Value ] ) -> Result < Vec < Value > > {
0 commit comments