11use actix_web:: {
2- web:: { self , Data , Query } ,
2+ web:: { self , Data } ,
33 App , HttpRequest , HttpResponse , HttpServer , Responder ,
44} ;
5- use serde :: Deserialize ;
5+ use aligned_sdk :: aggregation_layer :: AggregationModeProvingSystem ;
66
77use super :: {
88 helpers:: format_merkle_path,
99 types:: { AppResponse , ProofMerkleQuery } ,
1010} ;
1111
12- use crate :: { config:: Config , db:: Db } ;
12+ use crate :: { config:: Config , db:: Db , server :: types :: SubmitProofRequest } ;
1313
1414#[ derive( Clone , Debug ) ]
1515pub struct BatcherServer {
@@ -32,7 +32,8 @@ impl BatcherServer {
3232 . app_data ( Data :: new ( state. clone ( ) ) )
3333 . route ( "/nonce/{address}" , web:: get ( ) . to ( Self :: get_nonce) )
3434 . route ( "/proof/merkle" , web:: get ( ) . to ( Self :: get_proof_merkle_path) )
35- . route ( "/proof" , web:: post ( ) . to ( Self :: post_proof) )
35+ . route ( "/proof/sp1" , web:: post ( ) . to ( Self :: post_proof_sp1) )
36+ . route ( "/proof/risc0" , web:: post ( ) . to ( Self :: post_proof_risc0) )
3637 } )
3738 . bind ( ( "127.0.0.1" , port) ) ?
3839 . run ( )
@@ -61,14 +62,41 @@ impl BatcherServer {
6162 ) ) ) ,
6263 Err ( err) => {
6364 tracing:: error!( error = ?err, "failed to count proofs" ) ;
64- HttpResponse :: InternalServerError ( ) . finish ( )
65+ HttpResponse :: InternalServerError ( )
66+ . json ( AppResponse :: new_unsucessfull ( "Internal server error" , 500 ) )
6567 }
6668 }
6769 }
6870
6971 // TODO: receive the proof and 1. decode it, 2. verify it, 3. add to the db
70- async fn post_proof ( req : HttpRequest ) -> impl Responder {
71- HttpResponse :: Ok ( )
72+ async fn post_proof_sp1 (
73+ req : HttpRequest ,
74+ body : web:: Json < SubmitProofRequest > ,
75+ ) -> impl Responder {
76+ let data = body. into_inner ( ) ;
77+
78+ // TODO: validate signature
79+ let recovered_address = "" ;
80+
81+ let Some ( state) = req. app_data :: < Data < BatcherServer > > ( ) else {
82+ return HttpResponse :: InternalServerError ( )
83+ . json ( AppResponse :: new_unsucessfull ( "Internal server error" , 500 ) ) ;
84+ } ;
85+ let state = state. get_ref ( ) ;
86+
87+ let Ok ( count) = state. db . count_proofs_by_address ( recovered_address) . await else {
88+ return HttpResponse :: InternalServerError ( ) . finish ( ) ;
89+ } ;
90+
91+ HttpResponse :: Ok ( ) . json ( AppResponse :: new_sucessfull ( serde_json:: json!( { } ) ) )
92+ }
93+
94+ /// TODO: complete for risc0 (see `post_proof_sp1`)
95+ async fn post_proof_risc0 (
96+ _req : HttpRequest ,
97+ _body : web:: Json < SubmitProofRequest > ,
98+ ) -> impl Responder {
99+ HttpResponse :: Ok ( ) . json ( AppResponse :: new_sucessfull ( serde_json:: json!( { } ) ) )
72100 }
73101
74102 async fn get_proof_merkle_path (
@@ -111,7 +139,7 @@ impl BatcherServer {
111139 404 ,
112140 ) )
113141 }
114- Err ( s ) => {
142+ Err ( _ ) => {
115143 return HttpResponse :: InternalServerError ( )
116144 . json ( AppResponse :: new_unsucessfull ( "Internal server error" , 500 ) ) ;
117145 }
0 commit comments