mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-01 03:33:47 +00:00
Merge remote-tracking branch 'origin/unstable' into tree-states
This commit is contained in:
@@ -29,11 +29,18 @@ pub trait TryFromIter<T>: Sized {
|
||||
impl<T> TryFromIter<T> for Vec<T> {
|
||||
type Error = Infallible;
|
||||
|
||||
fn try_from_iter<I>(iter: I) -> Result<Self, Self::Error>
|
||||
fn try_from_iter<I>(values: I) -> Result<Self, Self::Error>
|
||||
where
|
||||
I: IntoIterator<Item = T>,
|
||||
{
|
||||
Ok(Self::from_iter(iter))
|
||||
// Pre-allocate the expected size of the Vec, which is parsed from the SSZ input bytes as
|
||||
// `num_items`. This length has already been checked to be less than or equal to the type's
|
||||
// maximum length in `decode_list_of_variable_length_items`.
|
||||
let iter = values.into_iter();
|
||||
let (_, opt_max_len) = iter.size_hint();
|
||||
let mut vec = Vec::with_capacity(opt_max_len.unwrap_or(0));
|
||||
vec.extend(iter);
|
||||
Ok(vec)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
use super::*;
|
||||
use ethereum_types::{H160, H256, U128, U256};
|
||||
use smallvec::{smallvec, ToSmallVec};
|
||||
|
||||
fn int_to_hash256(int: u64) -> Hash256 {
|
||||
let mut bytes = [0; HASHSIZE];
|
||||
@@ -16,7 +15,7 @@ macro_rules! impl_for_bitsize {
|
||||
}
|
||||
|
||||
fn tree_hash_packed_encoding(&self) -> PackedEncoding {
|
||||
self.to_le_bytes().to_smallvec()
|
||||
PackedEncoding::from_slice(&self.to_le_bytes())
|
||||
}
|
||||
|
||||
fn tree_hash_packing_factor() -> usize {
|
||||
@@ -89,9 +88,9 @@ impl TreeHash for U128 {
|
||||
}
|
||||
|
||||
fn tree_hash_packed_encoding(&self) -> PackedEncoding {
|
||||
let mut result = smallvec![0; 16];
|
||||
let mut result = [0; 16];
|
||||
self.to_little_endian(&mut result);
|
||||
result
|
||||
PackedEncoding::from_slice(&result)
|
||||
}
|
||||
|
||||
fn tree_hash_packing_factor() -> usize {
|
||||
@@ -111,9 +110,9 @@ impl TreeHash for U256 {
|
||||
}
|
||||
|
||||
fn tree_hash_packed_encoding(&self) -> PackedEncoding {
|
||||
let mut result = smallvec![0; 32];
|
||||
let mut result = [0; 32];
|
||||
self.to_little_endian(&mut result);
|
||||
result
|
||||
PackedEncoding::from_slice(&result)
|
||||
}
|
||||
|
||||
fn tree_hash_packing_factor() -> usize {
|
||||
@@ -133,9 +132,9 @@ impl TreeHash for H160 {
|
||||
}
|
||||
|
||||
fn tree_hash_packed_encoding(&self) -> PackedEncoding {
|
||||
let mut result = smallvec![0; 32];
|
||||
let mut result = [0; 32];
|
||||
result[0..20].copy_from_slice(self.as_bytes());
|
||||
result
|
||||
PackedEncoding::from_slice(&result)
|
||||
}
|
||||
|
||||
fn tree_hash_packing_factor() -> usize {
|
||||
@@ -155,7 +154,7 @@ impl TreeHash for H256 {
|
||||
}
|
||||
|
||||
fn tree_hash_packed_encoding(&self) -> PackedEncoding {
|
||||
self.as_bytes().to_smallvec()
|
||||
PackedEncoding::from_slice(self.as_bytes())
|
||||
}
|
||||
|
||||
fn tree_hash_packing_factor() -> usize {
|
||||
|
||||
@@ -14,9 +14,10 @@ pub const BYTES_PER_CHUNK: usize = 32;
|
||||
pub const HASHSIZE: usize = 32;
|
||||
pub const MERKLE_HASH_CHUNK: usize = 2 * BYTES_PER_CHUNK;
|
||||
pub const MAX_UNION_SELECTOR: u8 = 127;
|
||||
pub const SMALLVEC_SIZE: usize = 32;
|
||||
|
||||
pub type Hash256 = ethereum_types::H256;
|
||||
pub type PackedEncoding = SmallVec<[u8; BYTES_PER_CHUNK]>;
|
||||
pub type PackedEncoding = SmallVec<[u8; SMALLVEC_SIZE]>;
|
||||
|
||||
/// Convenience method for `MerkleHasher` which also provides some fast-paths for small trees.
|
||||
///
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use ssz_derive::Encode;
|
||||
use tree_hash::{Hash256, MerkleHasher, TreeHash, BYTES_PER_CHUNK};
|
||||
use tree_hash::{Hash256, MerkleHasher, PackedEncoding, TreeHash, BYTES_PER_CHUNK};
|
||||
use tree_hash_derive::TreeHash;
|
||||
|
||||
#[derive(Encode)]
|
||||
@@ -18,7 +18,7 @@ impl tree_hash::TreeHash for HashVec {
|
||||
tree_hash::TreeHashType::List
|
||||
}
|
||||
|
||||
fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding {
|
||||
fn tree_hash_packed_encoding(&self) -> PackedEncoding {
|
||||
unreachable!("List should never be packed.")
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,8 @@ pub struct BeaconBlock<T: EthSpec, Payload: ExecPayload<T> = FullPayload<T>> {
|
||||
pub body: BeaconBlockBodyMerge<T, Payload>,
|
||||
}
|
||||
|
||||
pub type BlindedBeaconBlock<E> = BeaconBlock<E, BlindedPayload<E>>;
|
||||
|
||||
impl<T: EthSpec, Payload: ExecPayload<T>> SignedRoot for BeaconBlock<T, Payload> {}
|
||||
impl<'a, T: EthSpec, Payload: ExecPayload<T>> SignedRoot for BeaconBlockRef<'a, T, Payload> {}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ use serde::{de::Error, Deserialize, Deserializer, Serialize, Serializer};
|
||||
use ssz::{Decode, DecodeError, Encode};
|
||||
use std::fmt;
|
||||
use std::str::FromStr;
|
||||
use tree_hash::TreeHash;
|
||||
use tree_hash::{PackedEncoding, TreeHash};
|
||||
|
||||
pub const GRAFFITI_BYTES_LEN: usize = 32;
|
||||
|
||||
@@ -159,7 +159,7 @@ impl TreeHash for Graffiti {
|
||||
<[u8; GRAFFITI_BYTES_LEN]>::tree_hash_type()
|
||||
}
|
||||
|
||||
fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding {
|
||||
fn tree_hash_packed_encoding(&self) -> PackedEncoding {
|
||||
self.0.tree_hash_packed_encoding()
|
||||
}
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ pub use crate::attestation_duty::AttestationDuty;
|
||||
pub use crate::attester_slashing::AttesterSlashing;
|
||||
pub use crate::beacon_block::{
|
||||
BeaconBlock, BeaconBlockAltair, BeaconBlockBase, BeaconBlockMerge, BeaconBlockRef,
|
||||
BeaconBlockRefMut,
|
||||
BeaconBlockRefMut, BlindedBeaconBlock,
|
||||
};
|
||||
pub use crate::beacon_block_body::{
|
||||
BeaconBlockBody, BeaconBlockBodyAltair, BeaconBlockBodyBase, BeaconBlockBodyMerge,
|
||||
|
||||
@@ -3,7 +3,7 @@ use safe_arith::{ArithError, SafeArith};
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
use ssz::{Decode, DecodeError, Encode};
|
||||
use test_random_derive::TestRandom;
|
||||
use tree_hash::{TreeHash, TreeHashType};
|
||||
use tree_hash::{PackedEncoding, TreeHash, TreeHashType};
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Deserialize, Serialize, TestRandom)]
|
||||
#[serde(transparent)]
|
||||
@@ -78,7 +78,7 @@ impl TreeHash for ParticipationFlags {
|
||||
u8::tree_hash_type()
|
||||
}
|
||||
|
||||
fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding {
|
||||
fn tree_hash_packed_encoding(&self) -> PackedEncoding {
|
||||
self.bits.tree_hash_packed_encoding()
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ use std::convert::TryFrom;
|
||||
use std::fmt::Debug;
|
||||
use std::hash::Hash;
|
||||
use test_random_derive::TestRandom;
|
||||
use tree_hash::TreeHash;
|
||||
use tree_hash::{PackedEncoding, TreeHash};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum BlockType {
|
||||
@@ -175,7 +175,7 @@ impl<T: EthSpec> TreeHash for BlindedPayload<T> {
|
||||
<ExecutionPayloadHeader<T>>::tree_hash_type()
|
||||
}
|
||||
|
||||
fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding {
|
||||
fn tree_hash_packed_encoding(&self) -> PackedEncoding {
|
||||
self.execution_payload_header.tree_hash_packed_encoding()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user