From 2f265a0a623acd78574108b39da6c2a1a09354b6 Mon Sep 17 00:00:00 2001 From: ec2 Date: Wed, 8 Nov 2023 21:57:34 +0000 Subject: [PATCH] break up rotation args gen --- preprocessor/src/lib.rs | 51 ++++++++++++++++++++++++++++++++++++ preprocessor/src/rotation.rs | 37 +++++++++++++++++++++++--- preprocessor/src/sync.rs | 7 +---- prover/src/cli.rs | 3 +++ 4 files changed, 89 insertions(+), 9 deletions(-) diff --git a/preprocessor/src/lib.rs b/preprocessor/src/lib.rs index e2e75078..d0b83cb0 100644 --- a/preprocessor/src/lib.rs +++ b/preprocessor/src/lib.rs @@ -35,6 +35,57 @@ pub async fn get_block_header( Ok(block.header.message) } +pub async fn get_light_client_update_at_current_period< + C: ClientTypes, + const SYNC_COMMITTEE_SIZE: usize, + const NEXT_SYNC_COMMITTEE_GINDEX: usize, + const NEXT_SYNC_COMMITTEE_PROOF_SIZE: usize, + const FINALIZED_ROOT_GINDEX: usize, + const FINALIZED_ROOT_PROOF_SIZE: usize, + const BYTES_PER_LOGS_BLOOM: usize, + const MAX_EXTRA_DATA_BYTES: usize, +>( + client: &Client, +) -> eyre::Result< + LightClientUpdateCapella< + SYNC_COMMITTEE_SIZE, + NEXT_SYNC_COMMITTEE_GINDEX, + NEXT_SYNC_COMMITTEE_PROOF_SIZE, + FINALIZED_ROOT_GINDEX, + FINALIZED_ROOT_PROOF_SIZE, + BYTES_PER_LOGS_BLOOM, + MAX_EXTRA_DATA_BYTES, + >, +> { + let block = get_block_header(client, BlockId::Head).await?; + let slot = block.slot; + let period = slot / (32 * 256); + + let route = format!("eth/v1/beacon/light_client/updates"); + let mut updates: Vec< + VersionedValue< + LightClientUpdateCapella< + SYNC_COMMITTEE_SIZE, + NEXT_SYNC_COMMITTEE_GINDEX, + NEXT_SYNC_COMMITTEE_PROOF_SIZE, + FINALIZED_ROOT_GINDEX, + FINALIZED_ROOT_PROOF_SIZE, + BYTES_PER_LOGS_BLOOM, + MAX_EXTRA_DATA_BYTES, + >, + >, + > = client + .http + .get(client.endpoint.join(&route)?) + .query(&[("start_period", period), ("count", 1)]) + .send() + .await? + .json() + .await?; + assert!(updates.len() == 1, "should only get one update"); + Ok(updates.pop().unwrap().data) +} + pub async fn get_light_client_update_at_period< C: ClientTypes, const SYNC_COMMITTEE_SIZE: usize, diff --git a/preprocessor/src/rotation.rs b/preprocessor/src/rotation.rs index deda8ce0..968c153d 100644 --- a/preprocessor/src/rotation.rs +++ b/preprocessor/src/rotation.rs @@ -14,7 +14,16 @@ use crate::{get_block_header, get_light_client_update_at_period}; pub async fn fetch_rotation_args( client: &Client, -) -> eyre::Result> { +) -> eyre::Result> +where + [(); S::SYNC_COMMITTEE_SIZE]:, + [(); S::FINALIZED_HEADER_DEPTH]:, + [(); S::BYTES_PER_LOGS_BLOOM]:, + [(); S::MAX_EXTRA_DATA_BYTES]:, + [(); S::SYNC_COMMITTEE_ROOT_INDEX]:, + [(); S::SYNC_COMMITTEE_DEPTH]:, + [(); S::FINALIZED_HEADER_INDEX]:, +{ let block = get_block_header(client, BlockId::Head).await?; let slot = block.slot; let period = slot / (32 * 256); @@ -23,9 +32,31 @@ pub async fn fetch_rotation_args( slot, period ); - let mut update: LightClientUpdateCapella<512, 55, 5, 105, 6, 256, 32> = - get_light_client_update_at_period(client, period).await?; + let update = get_light_client_update_at_period(client, period).await?; + rotation_args_from_update(client, update).await +} +pub async fn rotation_args_from_update( + _client: &Client, + mut update: LightClientUpdateCapella< + { S::SYNC_COMMITTEE_SIZE }, + { S::SYNC_COMMITTEE_ROOT_INDEX }, + { S::SYNC_COMMITTEE_DEPTH }, + { S::FINALIZED_HEADER_INDEX }, + { S::FINALIZED_HEADER_DEPTH }, + { S::BYTES_PER_LOGS_BLOOM }, + { S::MAX_EXTRA_DATA_BYTES }, + >, +) -> eyre::Result> +where + [(); S::SYNC_COMMITTEE_SIZE]:, + [(); S::FINALIZED_HEADER_DEPTH]:, + [(); S::BYTES_PER_LOGS_BLOOM]:, + [(); S::MAX_EXTRA_DATA_BYTES]:, + [(); S::SYNC_COMMITTEE_ROOT_INDEX]:, + [(); S::SYNC_COMMITTEE_DEPTH]:, + [(); S::FINALIZED_HEADER_INDEX]:, +{ let pubkeys_compressed = update .next_sync_committee .pubkeys diff --git a/preprocessor/src/sync.rs b/preprocessor/src/sync.rs index 26b8eed4..071d285a 100644 --- a/preprocessor/src/sync.rs +++ b/preprocessor/src/sync.rs @@ -22,12 +22,7 @@ where [(); S::BYTES_PER_LOGS_BLOOM]:, [(); S::MAX_EXTRA_DATA_BYTES]:, { - let finality_update: LightClientFinalityUpdate< - { S::SYNC_COMMITTEE_SIZE }, - { S::FINALIZED_HEADER_DEPTH }, - { S::BYTES_PER_LOGS_BLOOM }, - { S::MAX_EXTRA_DATA_BYTES }, - > = get_light_client_finality_update(client).await?; + let finality_update = get_light_client_finality_update(client).await?; step_args_from_finality_update(client, finality_update).await } diff --git a/prover/src/cli.rs b/prover/src/cli.rs index 77ae28d9..c91628a0 100644 --- a/prover/src/cli.rs +++ b/prover/src/cli.rs @@ -56,6 +56,9 @@ where [(); S::FINALIZED_HEADER_DEPTH]:, [(); S::BYTES_PER_LOGS_BLOOM]:, [(); S::MAX_EXTRA_DATA_BYTES]:, + [(); S::SYNC_COMMITTEE_ROOT_INDEX]:, + [(); S::SYNC_COMMITTEE_DEPTH]:, + [(); S::FINALIZED_HEADER_INDEX]:, { match proof { Proof::CommitteeUpdate(args) => {