diff --git a/eth2/utils/remote_beacon_node/src/lib.rs b/eth2/utils/remote_beacon_node/src/lib.rs index 9a5c2a1830..2b9af924fd 100644 --- a/eth2/utils/remote_beacon_node/src/lib.rs +++ b/eth2/utils/remote_beacon_node/src/lib.rs @@ -24,8 +24,8 @@ pub use operation_pool::PersistedOperationPool; pub use proto_array_fork_choice::core::ProtoArray; pub use rest_types::{ CanonicalHeadResponse, Committee, HeadBeaconBlock, IndividualVotesRequest, - IndividualVotesResponse, ValidatorDutiesRequest, ValidatorDutyBytes, ValidatorRequest, - ValidatorResponse, ValidatorSubscription, + IndividualVotesResponse, SyncingResponse, ValidatorDutiesRequest, ValidatorDutyBytes, + ValidatorRequest, ValidatorResponse, ValidatorSubscription, }; // Setting a long timeout for debug ensures that crypto-heavy operations can still succeed. @@ -654,6 +654,13 @@ impl Node { .into_future() .and_then(move |url| client.json_get(url, vec![])) } + + pub fn syncing_status(&self) -> impl Future { + let client = self.0.clone(); + self.url("syncing") + .into_future() + .and_then(move |url| client.json_get(url, vec![])) + } } /// Provides the functions on the `/advanced` endpoint of the node. diff --git a/tests/simulator/src/sync_sim.rs b/tests/simulator/src/sync_sim.rs index 6e8ac4d46e..5f5d70e7f6 100644 --- a/tests/simulator/src/sync_sim.rs +++ b/tests/simulator/src/sync_sim.rs @@ -353,27 +353,24 @@ pub fn verify_syncing( pub fn check_still_syncing( network: &LocalNetwork, ) -> impl Future { - let net = network.clone(); network .remote_nodes() .into_future() - // get all head epochs + // get syncing status of nodes .and_then(|remote_nodes| { stream::unfold(remote_nodes.into_iter(), |mut iter| { iter.next().map(|remote_node| { remote_node .http - .beacon() - .get_head() - .map(|head| head.finalized_slot.epoch(E::slots_per_epoch())) - .map(|epoch| (epoch, iter)) - .map_err(|e| format!("Get head via http failed: {:?}", e)) + .node() + .syncing_status() + .map(|status| status.is_syncing) + .map(|status| (status, iter)) + .map_err(|e| format!("Get syncing status via http failed: {:?}", e)) }) }) .collect() }) - // find current epoch - .and_then(move |epochs| net.bootnode_epoch().map(|epoch| (epochs, epoch))) - .and_then(move |(epochs, epoch)| Ok(epochs.iter().any(|head_epoch| *head_epoch != epoch))) + .and_then(move |status| Ok(status.iter().any(|is_syncing| *is_syncing))) .map_err(|e| format!("Failed syncing check: {:?}", e)) }