From d4aedab21fd9ff78caef4889e72f8d764ed5915e Mon Sep 17 00:00:00 2001 From: Jimmy Chen Date: Mon, 11 Sep 2023 12:49:31 +1000 Subject: [PATCH] Fix some compilation errors in tests --- .../tests/broadcast_validation_tests.rs | 8 ++--- beacon_node/http_api/tests/tests.rs | 20 ++++++------ common/eth2/src/lib.rs | 2 +- common/eth2/src/types.rs | 20 ++++++++++++ consensus/types/src/blob_sidecar.rs | 29 +---------------- consensus/types/src/sidecar.rs | 32 ++++++++++++++++++- 6 files changed, 66 insertions(+), 45 deletions(-) diff --git a/beacon_node/http_api/tests/broadcast_validation_tests.rs b/beacon_node/http_api/tests/broadcast_validation_tests.rs index be0e30a84..fe300ae5e 100644 --- a/beacon_node/http_api/tests/broadcast_validation_tests.rs +++ b/beacon_node/http_api/tests/broadcast_validation_tests.rs @@ -912,19 +912,19 @@ pub async fn blinded_gossip_full_pass_ssz() { let slot_b = slot_a + 1; let state_a = tester.harness.get_current_state(); - let ((block, _), _): ((SignedBlindedBeaconBlock, _), _) = - tester.harness.make_blinded_block(state_a, slot_b).await; + let (block_contents_tuple, _) = tester.harness.make_blinded_block(state_a, slot_b).await; + let block_contents = block_contents_tuple.into(); let response: Result<(), eth2::Error> = tester .client - .post_beacon_blinded_blocks_v2_ssz(&block, validation_level) + .post_beacon_blinded_blocks_v2_ssz(&block_contents, validation_level) .await; assert!(response.is_ok()); assert!(tester .harness .chain - .block_is_known_to_fork_choice(&block.canonical_root())); + .block_is_known_to_fork_choice(&block_contents.signed_block().canonical_root())); } /// This test checks that a block that is **invalid** from a gossip perspective gets rejected when using `broadcast_validation=consensus`. diff --git a/beacon_node/http_api/tests/tests.rs b/beacon_node/http_api/tests/tests.rs index 7c2cd917b..40e15752f 100644 --- a/beacon_node/http_api/tests/tests.rs +++ b/beacon_node/http_api/tests/tests.rs @@ -2656,13 +2656,10 @@ impl ApiTester { .get_validator_blinded_blocks::(slot, &randao_reveal, None) .await .unwrap() - .data - .deconstruct() - .0; + .data; - let signed_block = block.sign(&sk, &fork, genesis_validators_root, &self.chain.spec); let signed_block_contents = - SignedBlockContents::::Block(signed_block.clone()); + block.sign(&sk, &fork, genesis_validators_root, &self.chain.spec); self.client .post_beacon_blinded_blocks(&signed_block_contents) @@ -2670,6 +2667,7 @@ impl ApiTester { .unwrap(); // This converts the generic `Payload` to a concrete type for comparison. + let signed_block = signed_block_contents.deconstruct().0; let head_block = SignedBeaconBlock::from(signed_block.clone()); assert_eq!(head_block, signed_block); @@ -2715,23 +2713,23 @@ impl ApiTester { sk.sign(message).into() }; - let block = self + let block_contents = self .client .get_validator_blinded_blocks::(slot, &randao_reveal, None) .await .unwrap() - .data - .deconstruct() - .0; + .data; - let signed_block = block.sign(&sk, &fork, genesis_validators_root, &self.chain.spec); + let signed_block_contents = + block_contents.sign(&sk, &fork, genesis_validators_root, &self.chain.spec); self.client - .post_beacon_blinded_blocks_ssz(&signed_block) + .post_beacon_blinded_blocks_ssz(&signed_block_contents) .await .unwrap(); // This converts the generic `Payload` to a concrete type for comparison. + let signed_block = signed_block_contents.deconstruct().0; let head_block = SignedBeaconBlock::from(signed_block.clone()); assert_eq!(head_block, signed_block); diff --git a/common/eth2/src/lib.rs b/common/eth2/src/lib.rs index be03b96a6..d19a29812 100644 --- a/common/eth2/src/lib.rs +++ b/common/eth2/src/lib.rs @@ -751,7 +751,7 @@ impl BeaconNodeHttpClient { /// Returns `Ok(None)` on a 404 error. pub async fn post_beacon_blinded_blocks_ssz>( &self, - block: &SignedBlindedBlockContents, + block: &SignedBlockContents, ) -> Result<(), Error> { let mut path = self.eth_path(V1)?; diff --git a/common/eth2/src/types.rs b/common/eth2/src/types.rs index 7aea184e9..53b57f456 100644 --- a/common/eth2/src/types.rs +++ b/common/eth2/src/types.rs @@ -1431,6 +1431,26 @@ impl> BlockContents { BlockContents::Block(block) => (block, None), } } + + /// Signs `self`, producing a `SignedBlockContents`. + pub fn sign( + self, + secret_key: &SecretKey, + fork: &Fork, + genesis_validators_root: Hash256, + spec: &ChainSpec, + ) -> SignedBlockContents { + let (block, maybe_blobs) = self.deconstruct(); + let signed_block = block.sign(secret_key, fork, genesis_validators_root, spec); + let signed_blobs = maybe_blobs.map(|blobs| { + blobs + .into_iter() + .map(|blob| blob.sign(secret_key, fork, genesis_validators_root, spec)) + .collect::>() + .into() + }); + SignedBlockContents::new(signed_block, signed_blobs) + } } impl> ForkVersionDeserialize diff --git a/consensus/types/src/blob_sidecar.rs b/consensus/types/src/blob_sidecar.rs index a48c38421..b6eef688b 100644 --- a/consensus/types/src/blob_sidecar.rs +++ b/consensus/types/src/blob_sidecar.rs @@ -1,6 +1,5 @@ use crate::test_utils::TestRandom; -use crate::{Blob, ChainSpec, Domain, EthSpec, Fork, Hash256, SignedBlobSidecar, SignedRoot, Slot}; -use bls::SecretKey; +use crate::{Blob, EthSpec, Hash256, SignedRoot, Slot}; use derivative::Derivative; use kzg::{Kzg, KzgCommitment, KzgPreset, KzgProof}; use rand::Rng; @@ -10,7 +9,6 @@ use ssz_derive::{Decode, Encode}; use ssz_types::{FixedVector, VariableList}; use std::fmt::Debug; use std::hash::Hash; -use std::marker::PhantomData; use std::sync::Arc; use test_random_derive::TestRandom; use tree_hash::TreeHash; @@ -171,31 +169,6 @@ impl BlobSidecar { // Fixed part Self::empty().as_ssz_bytes().len() } - - // this is mostly not used except for in testing - pub fn sign( - self: Arc, - secret_key: &SecretKey, - fork: &Fork, - genesis_validators_root: Hash256, - spec: &ChainSpec, - ) -> SignedBlobSidecar { - let signing_epoch = self.slot.epoch(T::slots_per_epoch()); - let domain = spec.get_domain( - signing_epoch, - Domain::BlobSidecar, - fork, - genesis_validators_root, - ); - let message = self.signing_root(domain); - let signature = secret_key.sign(message); - - SignedBlobSidecar { - message: self, - signature, - _phantom: PhantomData, - } - } } #[derive( diff --git a/consensus/types/src/sidecar.rs b/consensus/types/src/sidecar.rs index 89e5e6128..e784cc57f 100644 --- a/consensus/types/src/sidecar.rs +++ b/consensus/types/src/sidecar.rs @@ -2,14 +2,17 @@ use crate::beacon_block_body::KzgCommitments; use crate::test_utils::TestRandom; use crate::{ AbstractExecPayload, BeaconBlock, BlindedBlobSidecar, BlindedBlobSidecarList, BlobRootsList, - BlobSidecar, BlobSidecarList, BlobsList, EthSpec, SidecarList, SignedRoot, Slot, + BlobSidecar, BlobSidecarList, BlobsList, ChainSpec, Domain, EthSpec, Fork, Hash256, + SidecarList, SignedRoot, SignedSidecar, Slot, }; +use bls::SecretKey; use kzg::KzgProof; use serde::de::DeserializeOwned; use ssz::{Decode, Encode}; use ssz_types::VariableList; use std::fmt::Debug; use std::hash::Hash; +use std::marker::PhantomData; use std::sync::Arc; use tree_hash::TreeHash; @@ -29,13 +32,40 @@ pub trait Sidecar: + for<'a> arbitrary::Arbitrary<'a> { type BlobItems: BlobItems; + fn slot(&self) -> Slot; + fn build_sidecar>( blob_items: Self::BlobItems, block: &BeaconBlock, expected_kzg_commitments: &KzgCommitments, kzg_proofs: Vec, ) -> Result, String>; + + // this is mostly not used except for in testing + fn sign( + self: Arc, + secret_key: &SecretKey, + fork: &Fork, + genesis_validators_root: Hash256, + spec: &ChainSpec, + ) -> SignedSidecar { + let signing_epoch = self.slot().epoch(E::slots_per_epoch()); + let domain = spec.get_domain( + signing_epoch, + Domain::BlobSidecar, + fork, + genesis_validators_root, + ); + let message = self.signing_root(domain); + let signature = secret_key.sign(message); + + SignedSidecar { + message: self, + signature, + _phantom: PhantomData, + } + } } pub trait BlobItems: Sync + Send + Sized {