@@ -15,6 +15,7 @@ use ethers_providers::Middleware;
1515use proving_service:: { ProveRequest , QueryTaskRequest , TaskStatus } ;
1616use std:: net:: SocketAddr ;
1717use std:: str:: FromStr ;
18+ use std:: thread;
1819use tokio:: time:: { sleep, Duration } ;
1920use tokio:: { sync:: RwLock , task:: JoinSet } ;
2021use tracing:: { error, info, instrument} ;
6061 provers. spawn ( async move {
6162 self_clone. working_loop ( i) . await ;
6263 } ) ;
64+ thread:: sleep ( Duration :: from_secs ( 3 ) ) ; // Sleep for 3 seconds to avoid overwhelming the l2geth/coordinator with requests.
6365 }
6466
6567 tokio:: select! {
99101 let task_id = coordinator_task. clone ( ) . task_id ;
100102 log:: debug!( "got previous task from db, task_id: {task_id}" ) ;
101103 if self . proving_service . read ( ) . await . is_local ( ) {
102- let proving_task = self . request_proving ( & coordinator_task) . await ?;
104+ let proving_task = self
105+ . request_proving ( coordinator_client, & coordinator_task)
106+ . await ?;
103107 proving_task_id = proving_task. task_id
104108 }
105109 return self
@@ -108,7 +112,9 @@ where
108112 }
109113
110114 let coordinator_task = self . get_coordinator_task ( coordinator_client) . await ?;
111- let proving_task = self . request_proving ( & coordinator_task) . await ?;
115+ let proving_task = self
116+ . request_proving ( coordinator_client, & coordinator_task)
117+ . await ?;
112118 self . handle_proving_progress ( coordinator_client, & coordinator_task, proving_task. task_id )
113119 . await
114120 }
@@ -135,17 +141,45 @@ where
135141
136142 async fn request_proving (
137143 & self ,
144+ coordinator_client : & CoordinatorClient ,
138145 coordinator_task : & GetTaskResponseData ,
139146 ) -> anyhow:: Result < proving_service:: ProveResponse > {
140- let proving_input = self . build_proving_input ( coordinator_task) . await ?;
147+ let proving_input = match self . build_proving_input ( coordinator_task) . await {
148+ Ok ( result) => result,
149+ Err ( error) => {
150+ self . submit_proof (
151+ coordinator_client,
152+ coordinator_task,
153+ proving_service:: QueryTaskResponse :: default ( ) ,
154+ ProofStatus :: Error ,
155+ Some ( format ! ( "failed to build proving input: error {:?}" , error) ) ,
156+ )
157+ . await ?;
158+ anyhow:: bail!(
159+ "Failed to build proving input. task_type: {:?}, coordinator_task_uuid: {:?}, coordinator_task_id: {:?}, err: {:?}" ,
160+ coordinator_task. task_type,
161+ coordinator_task. uuid,
162+ coordinator_task. task_id,
163+ error,
164+ ) ;
165+ }
166+ } ;
167+
141168 let proving_task = self
142169 . proving_service
143170 . write ( )
144171 . await
145172 . prove ( proving_input)
146173 . await ;
147-
148174 if let Some ( error) = proving_task. error {
175+ self . submit_proof (
176+ coordinator_client,
177+ coordinator_task,
178+ proving_service:: QueryTaskResponse :: default ( ) ,
179+ ProofStatus :: Error ,
180+ Some ( format ! ( "failed to request proving: error {:?}" , error) ) ,
181+ )
182+ . await ?;
149183 anyhow:: bail!(
150184 "Failed to request proving_service to prove. task_type: {:?}, coordinator_task_uuid: {:?}, coordinator_task_id: {:?}, err: {:?}" ,
151185 coordinator_task. task_type,
0 commit comments