Use JSON by default for Deposit Snapshot Sync (#4397)
Checkpointz now supports deposit snapshot but [they only support returning them in JSON](https://github.com/ethpandaops/checkpointz/issues/74) so I've modified lighthouse to request them in JSON by default. There's also `get_opt` & `get_opt_with_timeout` methods which seem to expect responses in JSON but were not adding `Accept: application/json` to the request headers so I fixed that as well. Also the beacon API puts quantities in quotes so I fixed that in the snapshot JSON serialization
This commit is contained in:
parent
0ecca1dcb0
commit
77fc511170
@ -218,7 +218,11 @@ impl BeaconNodeHttpClient {
|
||||
|
||||
/// Perform a HTTP GET request, returning `None` on a 404 error.
|
||||
async fn get_opt<T: DeserializeOwned, U: IntoUrl>(&self, url: U) -> Result<Option<T>, Error> {
|
||||
match self.get_response(url, |b| b).await.optional()? {
|
||||
match self
|
||||
.get_response(url, |b| b.accept(Accept::Json))
|
||||
.await
|
||||
.optional()?
|
||||
{
|
||||
Some(response) => Ok(Some(response.json().await?)),
|
||||
None => Ok(None),
|
||||
}
|
||||
@ -231,7 +235,7 @@ impl BeaconNodeHttpClient {
|
||||
timeout: Duration,
|
||||
) -> Result<Option<T>, Error> {
|
||||
let opt_response = self
|
||||
.get_response(url, |b| b.timeout(timeout))
|
||||
.get_response(url, |b| b.timeout(timeout).accept(Accept::Json))
|
||||
.await
|
||||
.optional()?;
|
||||
match opt_response {
|
||||
@ -982,16 +986,14 @@ impl BeaconNodeHttpClient {
|
||||
|
||||
/// `GET beacon/deposit_snapshot`
|
||||
pub async fn get_deposit_snapshot(&self) -> Result<Option<types::DepositTreeSnapshot>, Error> {
|
||||
use ssz::Decode;
|
||||
let mut path = self.eth_path(V1)?;
|
||||
path.path_segments_mut()
|
||||
.map_err(|()| Error::InvalidUrl(self.server.clone()))?
|
||||
.push("beacon")
|
||||
.push("deposit_snapshot");
|
||||
self.get_bytes_opt_accept_header(path, Accept::Ssz, self.timeouts.get_deposit_snapshot)
|
||||
.await?
|
||||
.map(|bytes| DepositTreeSnapshot::from_ssz_bytes(&bytes).map_err(Error::InvalidSsz))
|
||||
.transpose()
|
||||
self.get_opt_with_timeout::<GenericResponse<_>, _>(path, self.timeouts.get_deposit_snapshot)
|
||||
.await
|
||||
.map(|opt| opt.map(|r| r.data))
|
||||
}
|
||||
|
||||
/// `POST beacon/rewards/sync_committee`
|
||||
|
@ -30,8 +30,10 @@ impl From<&DepositTreeSnapshot> for FinalizedExecutionBlock {
|
||||
pub struct DepositTreeSnapshot {
|
||||
pub finalized: Vec<Hash256>,
|
||||
pub deposit_root: Hash256,
|
||||
#[serde(with = "serde_utils::quoted_u64")]
|
||||
pub deposit_count: u64,
|
||||
pub execution_block_hash: Hash256,
|
||||
#[serde(with = "serde_utils::quoted_u64")]
|
||||
pub execution_block_height: u64,
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user