From a358bbc1b1bc04a852c792fa33f3ca85f77aabbc Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Fri, 23 Aug 2019 12:45:31 +1000 Subject: [PATCH] Update bootstrapper for API changes --- beacon_node/client/src/bootstrapper.rs | 33 ++++++++++++++++++++------ beacon_node/rest_api/src/beacon.rs | 6 ++--- beacon_node/rest_api/src/lib.rs | 4 +++- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/beacon_node/client/src/bootstrapper.rs b/beacon_node/client/src/bootstrapper.rs index eaaee4aa1..c94d9a51d 100644 --- a/beacon_node/client/src/bootstrapper.rs +++ b/beacon_node/client/src/bootstrapper.rs @@ -3,9 +3,10 @@ use eth2_libp2p::{ Enr, }; use reqwest::{Error as HttpError, Url}; +use serde::Deserialize; use std::borrow::Cow; use std::net::Ipv4Addr; -use types::{BeaconBlock, BeaconState, Checkpoint, EthSpec, Slot}; +use types::{BeaconBlock, BeaconState, Checkpoint, EthSpec, Hash256, Slot}; use url::Host; #[derive(Debug)] @@ -84,9 +85,11 @@ impl Bootstrapper { let genesis_slot = Slot::new(0); let block = get_block(self.url.clone(), genesis_slot) - .map_err(|e| format!("Unable to get genesis block: {:?}", e))?; + .map_err(|e| format!("Unable to get genesis block: {:?}", e))? + .beacon_block; let state = get_state(self.url.clone(), genesis_slot) - .map_err(|e| format!("Unable to get genesis state: {:?}", e))?; + .map_err(|e| format!("Unable to get genesis state: {:?}", e))? + .beacon_state; Ok((state, block)) } @@ -99,9 +102,11 @@ impl Bootstrapper { .map_err(|e| format!("Unable to get finalized slot: {:?}", e))?; let block = get_block(self.url.clone(), finalized_slot) - .map_err(|e| format!("Unable to get finalized block: {:?}", e))?; + .map_err(|e| format!("Unable to get finalized block: {:?}", e))? + .beacon_block; let state = get_state(self.url.clone(), finalized_slot) - .map_err(|e| format!("Unable to get finalized state: {:?}", e))?; + .map_err(|e| format!("Unable to get finalized state: {:?}", e))? + .beacon_state; Ok((state, block)) } @@ -132,7 +137,14 @@ fn get_finalized_slot(mut url: Url, slots_per_epoch: u64) -> Result Ok(checkpoint.epoch.start_slot(slots_per_epoch)) } -fn get_state(mut url: Url, slot: Slot) -> Result, Error> { +#[derive(Deserialize)] +#[serde(bound = "T: EthSpec")] +pub struct StateResponse { + pub root: Hash256, + pub beacon_state: BeaconState, +} + +fn get_state(mut url: Url, slot: Slot) -> Result, Error> { url.path_segments_mut() .map(|mut url| { url.push("beacon").push("state"); @@ -148,7 +160,14 @@ fn get_state(mut url: Url, slot: Slot) -> Result, Err .map_err(Into::into) } -fn get_block(mut url: Url, slot: Slot) -> Result, Error> { +#[derive(Deserialize)] +#[serde(bound = "T: EthSpec")] +pub struct BlockResponse { + pub root: Hash256, + pub beacon_block: BeaconBlock, +} + +fn get_block(mut url: Url, slot: Slot) -> Result, Error> { url.path_segments_mut() .map(|mut url| { url.push("beacon").push("block"); diff --git a/beacon_node/rest_api/src/beacon.rs b/beacon_node/rest_api/src/beacon.rs index 4e3cc02fd..1c66a2819 100644 --- a/beacon_node/rest_api/src/beacon.rs +++ b/beacon_node/rest_api/src/beacon.rs @@ -8,7 +8,7 @@ use store::Store; use types::{BeaconBlock, BeaconState, EthSpec, Hash256, Slot}; #[derive(Serialize)] -struct HeadResponse { +pub struct HeadResponse { pub slot: Slot, pub block_root: Hash256, pub state_root: Hash256, @@ -35,7 +35,7 @@ pub fn get_head(req: Request) -> ApiResult #[derive(Serialize)] #[serde(bound = "T: EthSpec")] -struct BlockResponse { +pub struct BlockResponse { pub root: Hash256, pub beacon_block: BeaconBlock, } @@ -106,7 +106,7 @@ pub fn get_block_root(req: Request) -> ApiR #[derive(Serialize)] #[serde(bound = "T: EthSpec")] -struct StateResponse { +pub struct StateResponse { pub root: Hash256, pub beacon_state: BeaconState, } diff --git a/beacon_node/rest_api/src/lib.rs b/beacon_node/rest_api/src/lib.rs index a382c49e3..964dd7998 100644 --- a/beacon_node/rest_api/src/lib.rs +++ b/beacon_node/rest_api/src/lib.rs @@ -13,7 +13,6 @@ mod url_query; use beacon_chain::{BeaconChain, BeaconChainTypes}; use client_network::Service as NetworkService; -pub use config::Config as ApiConfig; use hyper::rt::Future; use hyper::service::service_fn_ok; use hyper::{Body, Method, Response, Server, StatusCode}; @@ -24,6 +23,9 @@ use std::sync::Arc; use tokio::runtime::TaskExecutor; use url_query::UrlQuery; +pub use beacon::{BlockResponse, HeadResponse, StateResponse}; +pub use config::Config as ApiConfig; + #[derive(PartialEq, Debug)] pub enum ApiError { MethodNotAllowed(String),