From c97b3b20cb1cfa6ae6ac5e9658b5f5a27f2bf4af Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Wed, 14 Aug 2019 20:58:51 +1000 Subject: [PATCH] Add best_slot method --- beacon_node/rest_api/src/beacon.rs | 15 +++++++++++++++ beacon_node/rest_api/src/lib.rs | 1 + 2 files changed, 16 insertions(+) diff --git a/beacon_node/rest_api/src/beacon.rs b/beacon_node/rest_api/src/beacon.rs index a2afb10010..66e31ae41c 100644 --- a/beacon_node/rest_api/src/beacon.rs +++ b/beacon_node/rest_api/src/beacon.rs @@ -6,6 +6,21 @@ use std::sync::Arc; use store::Store; use types::{BeaconBlock, BeaconState}; +/// HTTP handler to return a `BeaconBlock` at a given `root` or `slot`. +pub fn get_best_slot(req: Request) -> ApiResult { + let beacon_chain = req + .extensions() + .get::>>() + .ok_or_else(|| ApiError::ServerError("Beacon chain extension missing".to_string()))?; + + let slot = beacon_chain.head().beacon_state.slot; + + let json: String = serde_json::to_string(&slot) + .map_err(|e| ApiError::ServerError(format!("Unable to serialize Slot: {:?}", e)))?; + + Ok(success_response(Body::from(json))) +} + /// HTTP handler to return a `BeaconBlock` at a given `root` or `slot`. pub fn get_block(req: Request) -> ApiResult { let beacon_chain = req diff --git a/beacon_node/rest_api/src/lib.rs b/beacon_node/rest_api/src/lib.rs index 86b5b35db0..349a62c3fe 100644 --- a/beacon_node/rest_api/src/lib.rs +++ b/beacon_node/rest_api/src/lib.rs @@ -121,6 +121,7 @@ pub fn start_server( // Route the request to the correct handler. let result = match (req.method(), path.as_ref()) { + (&Method::GET, "/beacon/best_slot") => beacon::get_best_slot::(req), (&Method::GET, "/beacon/block") => beacon::get_block::(req), (&Method::GET, "/beacon/block_root") => beacon::get_block_root::(req), (&Method::GET, "/beacon/latest_finalized_checkpoint") => {