mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-21 05:44:44 +00:00
* Remove use of ethers_core::RlpStream
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* Remove old code
* Simplify keccak call
* Remove unused package
* Merge branch 'unstable' of https://github.com/ethDreamer/lighthouse into remove_use_of_ethers_core
* Merge branch 'unstable' into remove_use_of_ethers_core
* Run clippy
* Merge branch 'remove_use_of_ethers_core' of https://github.com/dospore/lighthouse into remove_use_of_ethers_core
* Check all cargo fmt
* migrate to alloy primitives init
* fix deps
* integrate alloy-primitives
* resolve dep issues
* more changes based on dep changes
* add TODOs
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* Revert lock
* Add BeaconBlocksByRange v3
* continue migration
* Revert "Add BeaconBlocksByRange v3"
This reverts commit e3ce7fc5ea.
* impl hash256 extended trait
* revert some uneeded diffs
* merge conflict resolved
* fix subnet id rshift calc
* rename to FixedBytesExtended
* debugging
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fix failed test
* fixing more tests
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* introduce a shim to convert between the two u256 types
* move alloy to wrokspace
* align alloy versions
* update
* update web3signer test certs
* refactor
* resolve failing tests
* linting
* fix graffiti string test
* fmt
* fix ef test
* resolve merge conflicts
* remove udep and revert cert
* cargo patch
* cyclic dep
* fix build error
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* resolve conflicts, update deps
* merge unstable
* fmt
* fix deps
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* resolve merge conflicts
* resolve conflicts, make necessary changes
* Remove patch
* fmt
* remove file
* merge conflicts
* sneaking in a smol change
* bump versions
* Merge remote-tracking branch 'origin/unstable' into migrate-to-alloy-primitives
* Updates for peerDAS
* Update ethereum_hashing to prevent dupe
* updated alloy-consensus, removed TODOs
* cargo update
* endianess fix
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fmt
* fix merge
* fix test
* fixed_bytes crate
* minor fixes
* convert u256 to i64
* panic free mixin to_low_u64_le
* from_str_radix
* computbe_subnet api and ensuring we use big-endian
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fix test
* Simplify subnet_id test
* Simplify some more tests
* Add tests to fixed_bytes crate
* Merge branch 'unstable' into migrate-to-alloy-primitives
148 lines
4.9 KiB
Rust
148 lines
4.9 KiB
Rust
use super::*;
|
|
use crate::case_result::compare_result;
|
|
use crate::decode::{snappy_decode_file, yaml_decode_file};
|
|
use serde::Deserialize;
|
|
use ssz::Decode;
|
|
use tree_hash::TreeHash;
|
|
use types::{BeaconBlock, BeaconState, Hash256, SignedBeaconBlock};
|
|
|
|
#[derive(Debug, Clone, Deserialize)]
|
|
struct SszStaticRoots {
|
|
root: String,
|
|
#[serde(rename(deserialize = "signing_root"))]
|
|
_signing_root: Option<String>,
|
|
}
|
|
|
|
/// Runner for types that implement `ssz::Decode`.
|
|
#[derive(Debug, Clone)]
|
|
pub struct SszStatic<T> {
|
|
roots: SszStaticRoots,
|
|
serialized: Vec<u8>,
|
|
value: T,
|
|
}
|
|
|
|
/// Runner for `BeaconState` (with tree hash cache).
|
|
#[derive(Debug, Clone)]
|
|
pub struct SszStaticTHC<T> {
|
|
roots: SszStaticRoots,
|
|
serialized: Vec<u8>,
|
|
value: T,
|
|
}
|
|
|
|
/// Runner for types that require a `ChainSpec` to be decoded (`BeaconBlock`, etc).
|
|
#[derive(Debug, Clone)]
|
|
pub struct SszStaticWithSpec<T> {
|
|
roots: SszStaticRoots,
|
|
serialized: Vec<u8>,
|
|
value: T,
|
|
}
|
|
|
|
fn load_from_dir<T: SszStaticType>(path: &Path) -> Result<(SszStaticRoots, Vec<u8>, T), Error> {
|
|
let roots = yaml_decode_file(&path.join("roots.yaml"))?;
|
|
let serialized = snappy_decode_file(&path.join("serialized.ssz_snappy"))
|
|
.expect("serialized.ssz_snappy exists");
|
|
let value = yaml_decode_file(&path.join("value.yaml"))?;
|
|
|
|
Ok((roots, serialized, value))
|
|
}
|
|
|
|
impl<T: SszStaticType> LoadCase for SszStatic<T> {
|
|
fn load_from_dir(path: &Path, _fork_name: ForkName) -> Result<Self, Error> {
|
|
load_from_dir(path).map(|(roots, serialized, value)| Self {
|
|
roots,
|
|
serialized,
|
|
value,
|
|
})
|
|
}
|
|
}
|
|
|
|
impl<T: SszStaticType> LoadCase for SszStaticTHC<T> {
|
|
fn load_from_dir(path: &Path, _fork_name: ForkName) -> Result<Self, Error> {
|
|
load_from_dir(path).map(|(roots, serialized, value)| Self {
|
|
roots,
|
|
serialized,
|
|
value,
|
|
})
|
|
}
|
|
}
|
|
|
|
impl<T: SszStaticType> LoadCase for SszStaticWithSpec<T> {
|
|
fn load_from_dir(path: &Path, _fork_name: ForkName) -> Result<Self, Error> {
|
|
load_from_dir(path).map(|(roots, serialized, value)| Self {
|
|
roots,
|
|
serialized,
|
|
value,
|
|
})
|
|
}
|
|
}
|
|
|
|
pub fn check_serialization<T: SszStaticType>(
|
|
value: &T,
|
|
serialized: &[u8],
|
|
deserializer: impl FnOnce(&[u8]) -> Result<T, ssz::DecodeError>,
|
|
) -> Result<(), Error> {
|
|
// Check serialization
|
|
let serialized_result = value.as_ssz_bytes();
|
|
compare_result::<usize, Error>(&Ok(value.ssz_bytes_len()), &Some(serialized.len()))?;
|
|
compare_result::<Vec<u8>, Error>(&Ok(serialized_result), &Some(serialized.to_vec()))?;
|
|
|
|
// Check deserialization
|
|
let deserialized_result = deserializer(serialized);
|
|
compare_result(&deserialized_result, &Some(value.clone()))?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub fn check_tree_hash(expected_str: &str, actual_root: &[u8]) -> Result<(), Error> {
|
|
let expected_root = hex::decode(&expected_str[2..])
|
|
.map_err(|e| Error::FailedToParseTest(format!("{:?}", e)))?;
|
|
let expected_root = Hash256::from_slice(&expected_root);
|
|
let tree_hash_root = Hash256::from_slice(actual_root);
|
|
compare_result::<Hash256, Error>(&Ok(tree_hash_root), &Some(expected_root))
|
|
}
|
|
|
|
impl<T: SszStaticType + TreeHash + Decode> Case for SszStatic<T> {
|
|
fn result(&self, _case_index: usize, _fork_name: ForkName) -> Result<(), Error> {
|
|
check_serialization(&self.value, &self.serialized, T::from_ssz_bytes)?;
|
|
check_tree_hash(&self.roots.root, self.value.tree_hash_root().as_slice())?;
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl<E: EthSpec> Case for SszStaticTHC<BeaconState<E>> {
|
|
fn result(&self, _case_index: usize, fork_name: ForkName) -> Result<(), Error> {
|
|
let spec = &testing_spec::<E>(fork_name);
|
|
check_serialization(&self.value, &self.serialized, |bytes| {
|
|
BeaconState::from_ssz_bytes(bytes, spec)
|
|
})?;
|
|
|
|
let mut state = self.value.clone();
|
|
let cached_tree_hash_root = state.update_tree_hash_cache().unwrap();
|
|
check_tree_hash(&self.roots.root, cached_tree_hash_root.as_slice())?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl<E: EthSpec> Case for SszStaticWithSpec<BeaconBlock<E>> {
|
|
fn result(&self, _case_index: usize, fork_name: ForkName) -> Result<(), Error> {
|
|
let spec = &testing_spec::<E>(fork_name);
|
|
check_serialization(&self.value, &self.serialized, |bytes| {
|
|
BeaconBlock::from_ssz_bytes(bytes, spec)
|
|
})?;
|
|
check_tree_hash(&self.roots.root, self.value.tree_hash_root().as_slice())?;
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl<E: EthSpec> Case for SszStaticWithSpec<SignedBeaconBlock<E>> {
|
|
fn result(&self, _case_index: usize, fork_name: ForkName) -> Result<(), Error> {
|
|
let spec = &testing_spec::<E>(fork_name);
|
|
check_serialization(&self.value, &self.serialized, |bytes| {
|
|
SignedBeaconBlock::from_ssz_bytes(bytes, spec)
|
|
})?;
|
|
check_tree_hash(&self.roots.root, self.value.tree_hash_root().as_slice())?;
|
|
Ok(())
|
|
}
|
|
}
|