@@ -8,7 +8,8 @@ use actix_web::{
88 web:: { self , Data } ,
99 App , HttpRequest , HttpResponse , HttpServer , Responder ,
1010} ;
11- use aligned_sdk:: aggregation_layer:: AggregationModeProvingSystem ;
11+ use aligned_sdk:: aggregation_layer:: { self , AggregationModeProvingSystem } ;
12+ use alloy:: signers:: Signature ;
1213use sp1_sdk:: { SP1ProofWithPublicValues , SP1VerifyingKey } ;
1314use sqlx:: types:: BigDecimal ;
1415
@@ -95,7 +96,34 @@ impl BatcherServer {
9596 req : HttpRequest ,
9697 MultipartForm ( data) : MultipartForm < SubmitProofRequestSP1 > ,
9798 ) -> impl Responder {
98- let recovered_address = "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" . to_lowercase ( ) ;
99+ let Ok ( signature) = Signature :: from_str ( & data. signature_hex . 0 ) else {
100+ return HttpResponse :: InternalServerError ( )
101+ . json ( AppResponse :: new_unsucessfull ( "Invalid signature" , 500 ) ) ;
102+ } ;
103+
104+ let Ok ( proof_content) = tokio:: fs:: read ( data. proof . file . path ( ) ) . await else {
105+ return HttpResponse :: InternalServerError ( )
106+ . json ( AppResponse :: new_unsucessfull ( "Internal server error" , 500 ) ) ;
107+ } ;
108+
109+ let Ok ( vk_content) = tokio:: fs:: read ( data. program_vk . file . path ( ) ) . await else {
110+ return HttpResponse :: InternalServerError ( )
111+ . json ( AppResponse :: new_unsucessfull ( "Internal server error" , 500 ) ) ;
112+ } ;
113+
114+ let msg = aggregation_layer:: gateway:: types:: SubmitSP1ProofMessage :: new (
115+ data. nonce . 0 ,
116+ proof_content. clone ( ) ,
117+ vk_content. clone ( ) ,
118+ ) ;
119+ let Ok ( recovered_address) = signature. recover_address_from_prehash (
120+ & msg. eip712_hash ( & aligned_sdk:: common:: types:: Network :: Devnet )
121+ . into ( ) ,
122+ ) else {
123+ return HttpResponse :: InternalServerError ( )
124+ . json ( AppResponse :: new_unsucessfull ( "Internal server error" , 500 ) ) ;
125+ } ;
126+ let recovered_address = recovered_address. to_string ( ) . to_lowercase ( ) ;
99127
100128 let Some ( state) = req. app_data :: < Data < BatcherServer > > ( ) else {
101129 return HttpResponse :: InternalServerError ( )
@@ -145,22 +173,11 @@ impl BatcherServer {
145173 400 ,
146174 ) ) ;
147175 }
148-
149- let Ok ( proof_content) = tokio:: fs:: read ( data. proof . file . path ( ) ) . await else {
150- return HttpResponse :: InternalServerError ( )
151- . json ( AppResponse :: new_unsucessfull ( "Internal server error" , 500 ) ) ;
152- } ;
153-
154176 let Ok ( proof) = bincode:: deserialize :: < SP1ProofWithPublicValues > ( & proof_content) else {
155177 return HttpResponse :: BadRequest ( )
156178 . json ( AppResponse :: new_unsucessfull ( "Invalid SP1 proof" , 400 ) ) ;
157179 } ;
158180
159- let Ok ( vk_content) = tokio:: fs:: read ( data. program_vk . file . path ( ) ) . await else {
160- return HttpResponse :: InternalServerError ( )
161- . json ( AppResponse :: new_unsucessfull ( "Internal server error" , 500 ) ) ;
162- } ;
163-
164181 let Ok ( vk) = bincode:: deserialize :: < SP1VerifyingKey > ( & vk_content) else {
165182 return HttpResponse :: BadRequest ( )
166183 . json ( AppResponse :: new_unsucessfull ( "Invalid vk" , 400 ) ) ;
0 commit comments