Skip to content

Commit

Permalink
use config for all indices
Browse files Browse the repository at this point in the history
  • Loading branch information
Wizdave97 committed Feb 18, 2025
1 parent 20b0e72 commit 057cd8d
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 180 deletions.
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- main
- pectra-updates

pull_request_target:
types: [opened, synchronize]
Expand Down
84 changes: 42 additions & 42 deletions modules/consensus/sync-committee/primitives/src/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,12 +107,12 @@ pub trait Config {
const EXECUTION_PAYLOAD_STATE_ROOT_INDEX: u64;
const EXECUTION_PAYLOAD_BLOCK_NUMBER_INDEX: u64;
const EXECUTION_PAYLOAD_TIMESTAMP_INDEX: u64;
const EXECUTION_PAYLOAD_INDEX_ELECTRA: u64;
const NEXT_SYNC_COMMITTEE_INDEX_ELECTRA: u64;
const FINALIZED_ROOT_INDEX_ELECTRA: u64;
const FINALIZED_ROOT_INDEX_LOG2_ELECTRA: u64;
const EXECUTION_PAYLOAD_INDEX_LOG2_ELECTRA: u64;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2_ELECTRA: u64;
const EXECUTION_PAYLOAD_INDEX: u64;
const NEXT_SYNC_COMMITTEE_INDEX: u64;
const FINALIZED_ROOT_INDEX: u64;
const FINALIZED_ROOT_INDEX_LOG2: u64;
const EXECUTION_PAYLOAD_INDEX_LOG2: u64;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2: u64;
const ELECTRA_FORK_VERSION: Version;
const ELECTRA_FORK_EPOCH: Epoch;
const ID: [u8; 4];
Expand Down Expand Up @@ -144,12 +144,12 @@ pub mod sepolia {
const EXECUTION_PAYLOAD_STATE_ROOT_INDEX: u64 = 34;
const EXECUTION_PAYLOAD_BLOCK_NUMBER_INDEX: u64 = 38;
const EXECUTION_PAYLOAD_TIMESTAMP_INDEX: u64 = 41;
const EXECUTION_PAYLOAD_INDEX_ELECTRA: u64 = 88;
const NEXT_SYNC_COMMITTEE_INDEX_ELECTRA: u64 = 87;
const FINALIZED_ROOT_INDEX_ELECTRA: u64 = 84;
const FINALIZED_ROOT_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX_LOG2_ELECTRA: u64 = 6;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX: u64 = EXECUTION_PAYLOAD_INDEX;
const NEXT_SYNC_COMMITTEE_INDEX: u64 = NEXT_SYNC_COMMITTEE_INDEX;
const FINALIZED_ROOT_INDEX: u64 = FINALIZED_ROOT_INDEX;
const FINALIZED_ROOT_INDEX_LOG2: u64 = FINALIZED_ROOT_INDEX_LOG2;
const EXECUTION_PAYLOAD_INDEX_LOG2: u64 = EXECUTION_PAYLOAD_INDEX_LOG2;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2: u64 = NEXT_SYNC_COMMITTEE_INDEX_LOG2;
const ELECTRA_FORK_VERSION: Version = hex_literal::hex!("90000074");
const ELECTRA_FORK_EPOCH: Epoch = 222464;
const ID: [u8; 4] = BEACON_CONSENSUS_ID;
Expand Down Expand Up @@ -179,12 +179,12 @@ pub mod mainnet {
const EXECUTION_PAYLOAD_STATE_ROOT_INDEX: u64 = 34;
const EXECUTION_PAYLOAD_BLOCK_NUMBER_INDEX: u64 = 38;
const EXECUTION_PAYLOAD_TIMESTAMP_INDEX: u64 = 41;
const EXECUTION_PAYLOAD_INDEX_ELECTRA: u64 = 88;
const NEXT_SYNC_COMMITTEE_INDEX_ELECTRA: u64 = 87;
const FINALIZED_ROOT_INDEX_ELECTRA: u64 = 84;
const FINALIZED_ROOT_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX_LOG2_ELECTRA: u64 = 6;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX: u64 = EXECUTION_PAYLOAD_INDEX;
const NEXT_SYNC_COMMITTEE_INDEX: u64 = NEXT_SYNC_COMMITTEE_INDEX;
const FINALIZED_ROOT_INDEX: u64 = FINALIZED_ROOT_INDEX;
const FINALIZED_ROOT_INDEX_LOG2: u64 = FINALIZED_ROOT_INDEX_LOG2;
const EXECUTION_PAYLOAD_INDEX_LOG2: u64 = EXECUTION_PAYLOAD_INDEX_LOG2;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2: u64 = NEXT_SYNC_COMMITTEE_INDEX_LOG2;
const ELECTRA_FORK_VERSION: Version = hex_literal::hex!("05000000");
const ELECTRA_FORK_EPOCH: Epoch = Epoch::MAX;
const ID: [u8; 4] = BEACON_CONSENSUS_ID;
Expand Down Expand Up @@ -214,12 +214,12 @@ pub mod gnosis {
const EXECUTION_PAYLOAD_STATE_ROOT_INDEX: u64 = 34;
const EXECUTION_PAYLOAD_BLOCK_NUMBER_INDEX: u64 = 38;
const EXECUTION_PAYLOAD_TIMESTAMP_INDEX: u64 = 41;
const EXECUTION_PAYLOAD_INDEX_ELECTRA: u64 = 88;
const NEXT_SYNC_COMMITTEE_INDEX_ELECTRA: u64 = 87;
const FINALIZED_ROOT_INDEX_ELECTRA: u64 = 84;
const FINALIZED_ROOT_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX_LOG2_ELECTRA: u64 = 6;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX: u64 = EXECUTION_PAYLOAD_INDEX;
const NEXT_SYNC_COMMITTEE_INDEX: u64 = NEXT_SYNC_COMMITTEE_INDEX;
const FINALIZED_ROOT_INDEX: u64 = FINALIZED_ROOT_INDEX;
const FINALIZED_ROOT_INDEX_LOG2: u64 = FINALIZED_ROOT_INDEX_LOG2;
const EXECUTION_PAYLOAD_INDEX_LOG2: u64 = EXECUTION_PAYLOAD_INDEX_LOG2;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2: u64 = NEXT_SYNC_COMMITTEE_INDEX_LOG2;
const ELECTRA_FORK_VERSION: Version = hex_literal::hex!("05000064");
const ELECTRA_FORK_EPOCH: Epoch = Epoch::MAX;
const ID: [u8; 4] = GNOSIS_CONSENSUS_ID;
Expand All @@ -245,12 +245,12 @@ pub mod gnosis {
const EXECUTION_PAYLOAD_STATE_ROOT_INDEX: u64 = 34;
const EXECUTION_PAYLOAD_BLOCK_NUMBER_INDEX: u64 = 38;
const EXECUTION_PAYLOAD_TIMESTAMP_INDEX: u64 = 41;
const EXECUTION_PAYLOAD_INDEX_ELECTRA: u64 = 88;
const NEXT_SYNC_COMMITTEE_INDEX_ELECTRA: u64 = 87;
const FINALIZED_ROOT_INDEX_ELECTRA: u64 = 84;
const FINALIZED_ROOT_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX_LOG2_ELECTRA: u64 = 6;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX: u64 = EXECUTION_PAYLOAD_INDEX;
const NEXT_SYNC_COMMITTEE_INDEX: u64 = NEXT_SYNC_COMMITTEE_INDEX;
const FINALIZED_ROOT_INDEX: u64 = FINALIZED_ROOT_INDEX;
const FINALIZED_ROOT_INDEX_LOG2: u64 = FINALIZED_ROOT_INDEX_LOG2;
const EXECUTION_PAYLOAD_INDEX_LOG2: u64 = EXECUTION_PAYLOAD_INDEX_LOG2;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2: u64 = NEXT_SYNC_COMMITTEE_INDEX_LOG2;
const ELECTRA_FORK_VERSION: Version = hex_literal::hex!("0500006f");
const ELECTRA_FORK_EPOCH: Epoch = Epoch::MAX;
const ID: [u8; 4] = GNOSIS_CONSENSUS_ID;
Expand Down Expand Up @@ -283,12 +283,12 @@ pub mod devnet {
const EXECUTION_PAYLOAD_STATE_ROOT_INDEX: u64 = 34;
const EXECUTION_PAYLOAD_BLOCK_NUMBER_INDEX: u64 = 38;
const EXECUTION_PAYLOAD_TIMESTAMP_INDEX: u64 = 41;
const EXECUTION_PAYLOAD_INDEX_ELECTRA: u64 = 88;
const NEXT_SYNC_COMMITTEE_INDEX_ELECTRA: u64 = 87;
const FINALIZED_ROOT_INDEX_ELECTRA: u64 = 84;
const FINALIZED_ROOT_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX_LOG2_ELECTRA: u64 = 6;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX: u64 = EXECUTION_PAYLOAD_INDEX;
const NEXT_SYNC_COMMITTEE_INDEX: u64 = NEXT_SYNC_COMMITTEE_INDEX;
const FINALIZED_ROOT_INDEX: u64 = FINALIZED_ROOT_INDEX;
const FINALIZED_ROOT_INDEX_LOG2: u64 = FINALIZED_ROOT_INDEX_LOG2;
const EXECUTION_PAYLOAD_INDEX_LOG2: u64 = EXECUTION_PAYLOAD_INDEX_LOG2;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2: u64 = NEXT_SYNC_COMMITTEE_INDEX_LOG2;
const ELECTRA_FORK_VERSION: Version = hex_literal::hex!("52525505");
const ELECTRA_FORK_EPOCH: Epoch = Epoch::MAX;
const ID: [u8; 4] = BEACON_CONSENSUS_ID;
Expand All @@ -311,12 +311,12 @@ pub mod devnet {
const EXECUTION_PAYLOAD_STATE_ROOT_INDEX: u64 = 34;
const EXECUTION_PAYLOAD_BLOCK_NUMBER_INDEX: u64 = 38;
const EXECUTION_PAYLOAD_TIMESTAMP_INDEX: u64 = 41;
const EXECUTION_PAYLOAD_INDEX_ELECTRA: u64 = 88;
const NEXT_SYNC_COMMITTEE_INDEX_ELECTRA: u64 = 87;
const FINALIZED_ROOT_INDEX_ELECTRA: u64 = 84;
const FINALIZED_ROOT_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX_LOG2_ELECTRA: u64 = 6;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2_ELECTRA: u64 = 6;
const EXECUTION_PAYLOAD_INDEX: u64 = 88;
const NEXT_SYNC_COMMITTEE_INDEX: u64 = 87;
const FINALIZED_ROOT_INDEX: u64 = 84;
const FINALIZED_ROOT_INDEX_LOG2: u64 = 6;
const EXECUTION_PAYLOAD_INDEX_LOG2: u64 = 6;
const NEXT_SYNC_COMMITTEE_INDEX_LOG2: u64 = 6;
const ELECTRA_FORK_VERSION: Version = hex_literal::hex!("52525505");
const ELECTRA_FORK_EPOCH: Epoch = 0;
const ID: [u8; 4] = BEACON_CONSENSUS_ID;
Expand Down
67 changes: 3 additions & 64 deletions modules/consensus/sync-committee/prover/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,6 @@ use tracing::instrument;

use sync_committee_verifier::crypto::pubkey_to_projective;

#[cfg(not(feature = "electra"))]
use sync_committee_primitives::constants::{
EXECUTION_PAYLOAD_INDEX, FINALIZED_ROOT_INDEX, NEXT_SYNC_COMMITTEE_INDEX,
};

pub type BeaconStateType<const ETH1_DATA_VOTES_BOUND: usize> = BeaconState<
SLOTS_PER_HISTORICAL_ROOT,
HISTORICAL_ROOTS_LIMIT,
Expand Down Expand Up @@ -445,60 +440,6 @@ impl<C: Config, const ETH1_DATA_VOTES_BOUND: usize> SyncCommitteeProver<C, ETH1_
}
}

#[cfg(not(feature = "electra"))]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_execution_payload<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
beacon_state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
) -> anyhow::Result<ExecutionPayloadProof> {
trace!(target: "sync-committee-prover", "Proving execution payload");
let indices = [
C::EXECUTION_PAYLOAD_STATE_ROOT_INDEX as usize,
C::EXECUTION_PAYLOAD_BLOCK_NUMBER_INDEX as usize,
C::EXECUTION_PAYLOAD_TIMESTAMP_INDEX as usize,
];
// generate multi proofs
let multi_proof = ssz_rs::generate_proof(
&mut beacon_state.latest_execution_payload_header,
indices.as_slice(),
)?;

Ok(ExecutionPayloadProof {
state_root: H256::from_slice(
beacon_state.latest_execution_payload_header.state_root.as_slice(),
),
block_number: beacon_state.latest_execution_payload_header.block_number,
timestamp: beacon_state.latest_execution_payload_header.timestamp,
multi_proof,
execution_payload_branch: ssz_rs::generate_proof(
beacon_state,
&[EXECUTION_PAYLOAD_INDEX as usize],
)?,
})
}

#[cfg(not(feature = "electra"))]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_sync_committee_update<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
) -> anyhow::Result<Vec<Node>> {
trace!(target: "sync-committee-prover", "Proving sync committee update");
let proof = ssz_rs::generate_proof(state, &[NEXT_SYNC_COMMITTEE_INDEX as usize])?;
Ok(proof)
}

#[cfg(not(feature = "electra"))]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_finalized_header<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
) -> anyhow::Result<Vec<Node>> {
trace!(target: "sync-committee-prover", "Proving finalized head");
let indices = [FINALIZED_ROOT_INDEX as usize];
let proof = ssz_rs::generate_proof(state, indices.as_slice())?;

Ok(proof)
}

#[cfg(feature = "electra")]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_execution_payload<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
beacon_state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
Expand All @@ -524,28 +465,26 @@ pub fn prove_execution_payload<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
multi_proof,
execution_payload_branch: ssz_rs::generate_proof(
beacon_state,
&[C::EXECUTION_PAYLOAD_INDEX_ELECTRA as usize],
&[C::EXECUTION_PAYLOAD_INDEX as usize],
)?,
})
}

#[cfg(feature = "electra")]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_sync_committee_update<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
) -> anyhow::Result<Vec<Node>> {
trace!(target: "sync-committee-prover", "Proving sync committee update");
let proof = ssz_rs::generate_proof(state, &[C::NEXT_SYNC_COMMITTEE_INDEX_ELECTRA as usize])?;
let proof = ssz_rs::generate_proof(state, &[C::NEXT_SYNC_COMMITTEE_INDEX as usize])?;
Ok(proof)
}

#[cfg(feature = "electra")]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_finalized_header<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
) -> anyhow::Result<Vec<Node>> {
trace!(target: "sync-committee-prover", "Proving finalized head");
let indices = [C::FINALIZED_ROOT_INDEX_ELECTRA as usize];
let indices = [C::FINALIZED_ROOT_INDEX as usize];
let proof = ssz_rs::generate_proof(state, indices.as_slice())?;

Ok(proof)
Expand Down
40 changes: 18 additions & 22 deletions modules/consensus/sync-committee/prover/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@ use reqwest_eventsource::EventSource;

use ssz_rs::{calculate_multi_merkle_root, is_valid_merkle_branch, GeneralizedIndex, Merkleized};
use sync_committee_primitives::{
constants::{
devnet::Devnet, Root, ETH1_DATA_VOTES_BOUND_ETH, EXECUTION_PAYLOAD_INDEX_LOG2,
NEXT_SYNC_COMMITTEE_INDEX_LOG2,
},
constants::{devnet::Devnet, Root, ETH1_DATA_VOTES_BOUND_ETH},
types::VerifierState,
util::compute_epoch_at_slot,
};
Expand Down Expand Up @@ -86,7 +83,8 @@ async fn test_finalized_header() {
let sync_committee_prover = setup_prover();
let mut state = sync_committee_prover.fetch_beacon_state("head").await.unwrap();

let proof = ssz_rs::generate_proof(&mut state, &vec![FINALIZED_ROOT_INDEX as usize]).unwrap();
let proof =
ssz_rs::generate_proof(&mut state, &vec![Devnet::FINALIZED_ROOT_INDEX as usize]).unwrap();

let leaves = vec![Node::from_bytes(
state
Expand All @@ -100,7 +98,7 @@ async fn test_finalized_header() {
let root = calculate_multi_merkle_root(
&leaves,
&proof,
&[GeneralizedIndex(FINALIZED_ROOT_INDEX as usize)],
&[GeneralizedIndex(Devnet::FINALIZED_ROOT_INDEX as usize)],
);
assert_eq!(root, state.hash_tree_root().unwrap());
}
Expand All @@ -113,11 +111,9 @@ async fn test_finalized_header() {
let sync_committee_prover = setup_prover();
let mut state = sync_committee_prover.fetch_beacon_state("head").await.unwrap();

let proof = ssz_rs::generate_proof(
&mut state,
&vec![ElectraDevnet::FINALIZED_ROOT_INDEX_ELECTRA as usize],
)
.unwrap();
let proof =
ssz_rs::generate_proof(&mut state, &vec![ElectraDevnet::FINALIZED_ROOT_INDEX as usize])
.unwrap();

let leaves = vec![Node::from_bytes(
state
Expand All @@ -131,7 +127,7 @@ async fn test_finalized_header() {
let root = calculate_multi_merkle_root(
&leaves,
&proof,
&[GeneralizedIndex(ElectraDevnet::FINALIZED_ROOT_INDEX_ELECTRA as usize)],
&[GeneralizedIndex(ElectraDevnet::FINALIZED_ROOT_INDEX as usize)],
);
assert_eq!(root, state.hash_tree_root().unwrap());
}
Expand Down Expand Up @@ -180,8 +176,8 @@ async fn test_execution_payload_proof() {
let is_merkle_branch_valid = is_valid_merkle_branch(
&execution_payload_root,
execution_payload_branch,
EXECUTION_PAYLOAD_INDEX_LOG2 as usize,
EXECUTION_PAYLOAD_INDEX as usize,
Devnet::EXECUTION_PAYLOAD_INDEX_LOG2 as usize,
Devnet::EXECUTION_PAYLOAD_INDEX as usize,
&finalized_header.state_root,
);

Expand Down Expand Up @@ -233,8 +229,8 @@ async fn test_execution_payload_proof() {
let is_merkle_branch_valid = is_valid_merkle_branch(
&execution_payload_root,
execution_payload_branch,
ElectraDevnet::EXECUTION_PAYLOAD_INDEX_LOG2_ELECTRA as usize,
ElectraDevnet::EXECUTION_PAYLOAD_INDEX_ELECTRA as usize,
ElectraDevnet::EXECUTION_PAYLOAD_INDEX_LOG2 as usize,
ElectraDevnet::EXECUTION_PAYLOAD_INDEX as usize,
&finalized_header.state_root,
);

Expand All @@ -261,16 +257,16 @@ async fn test_sync_committee_update_proof() {
let calculated_finalized_root = calculate_multi_merkle_root(
&[sync_committee.hash_tree_root().unwrap()],
&sync_committee_proof,
&[GeneralizedIndex(NEXT_SYNC_COMMITTEE_INDEX as usize)],
&[GeneralizedIndex(Devnet::NEXT_SYNC_COMMITTEE_INDEX as usize)],
);

assert_eq!(calculated_finalized_root.as_bytes(), finalized_header.state_root.as_bytes());

let is_merkle_branch_valid = is_valid_merkle_branch(
&sync_committee.hash_tree_root().unwrap(),
sync_committee_proof.iter(),
NEXT_SYNC_COMMITTEE_INDEX_LOG2 as usize,
NEXT_SYNC_COMMITTEE_INDEX as usize,
Devnet::NEXT_SYNC_COMMITTEE_INDEX_LOG2 as usize,
Devnet::NEXT_SYNC_COMMITTEE_INDEX as usize,
&finalized_header.state_root,
);

Expand Down Expand Up @@ -301,16 +297,16 @@ async fn test_sync_committee_update_proof() {
let calculated_finalized_root = calculate_multi_merkle_root(
&[sync_committee.hash_tree_root().unwrap()],
&sync_committee_proof,
&[GeneralizedIndex(ElectraDevnet::NEXT_SYNC_COMMITTEE_INDEX_ELECTRA as usize)],
&[GeneralizedIndex(ElectraDevnet::NEXT_SYNC_COMMITTEE_INDEX as usize)],
);

assert_eq!(calculated_finalized_root.as_bytes(), finalized_header.state_root.as_bytes());

let is_merkle_branch_valid = is_valid_merkle_branch(
&sync_committee.hash_tree_root().unwrap(),
sync_committee_proof.iter(),
ElectraDevnet::NEXT_SYNC_COMMITTEE_INDEX_LOG2_ELECTRA as usize,
ElectraDevnet::NEXT_SYNC_COMMITTEE_INDEX_ELECTRA as usize,
ElectraDevnet::NEXT_SYNC_COMMITTEE_INDEX_LOG2 as usize,
ElectraDevnet::NEXT_SYNC_COMMITTEE_INDEX as usize,
&finalized_header.state_root,
);

Expand Down
Loading

0 comments on commit 057cd8d

Please sign in to comment.