1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//! The API server of Shadow
use crate::ShadowShared;
use actix_web::{middleware, web, App, HttpServer};

pub mod eth;
mod root;

/// Run HTTP Server
pub async fn serve(port: u16, shared: ShadowShared) -> std::io::Result<()> {
    HttpServer::new(move || {
        App::new()
            .wrap(middleware::Compress::default())
            .wrap(middleware::Logger::default())
            .data(shared.clone())
            .service(web::resource("/version").to(root::version))
            .service(web::resource("/eth/count").route(web::get().to(eth::count)))
            .service(web::resource("/eth/proposal").to(eth::proposal))
            .service(web::resource("/eth/receipt/{tx}/{last}").to(eth::receipt))
            .service(web::resource("/eth/header/{block}").to(eth::header))
    })
    .disable_signals()
    .bind(format!("0.0.0.0:{}", port))?
    .run()
    .await
}