mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-19 13:58:28 +00:00
Block processing eip4844 (#3673)
* add eip4844 block processing * fix blob processing code * consensus logic fixes and cleanup * use safe arith
This commit is contained in:
@@ -34,4 +34,5 @@ pub mod eip4844 {
|
||||
.expect("should initialize BLS_MODULUS");
|
||||
}
|
||||
pub const BLOB_TX_TYPE: u8 = 5;
|
||||
pub const VERSIONED_HASH_VERSION_KZG: u8 = 1;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ use tree_hash::{PackedEncoding, TreeHash};
|
||||
|
||||
#[derive(Derivative, Debug, Clone, Serialize, Deserialize)]
|
||||
#[derivative(PartialEq, Eq, Hash)]
|
||||
pub struct KzgCommitment(#[serde(with = "BigArray")] [u8; 48]);
|
||||
pub struct KzgCommitment(#[serde(with = "BigArray")] pub [u8; 48]);
|
||||
|
||||
impl Display for KzgCommitment {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
use crate::test_utils::{RngCore, TestRandom};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_big_array::BigArray;
|
||||
use ssz::{Decode, DecodeError, Encode};
|
||||
use std::fmt;
|
||||
use tree_hash::{PackedEncoding, TreeHash};
|
||||
use serde_big_array::BigArray;
|
||||
|
||||
const KZG_PROOF_BYTES_LEN: usize = 48;
|
||||
|
||||
|
||||
@@ -193,6 +193,7 @@ pub type Address = H160;
|
||||
pub type ForkVersion = [u8; 4];
|
||||
pub type BLSFieldElement = Uint256;
|
||||
pub type Blob<T> = FixedVector<BLSFieldElement, <T as EthSpec>::FieldElementsPerBlob>;
|
||||
pub type VersionedHash = Hash256;
|
||||
|
||||
pub use bls::{
|
||||
AggregatePublicKey, AggregateSignature, Keypair, PublicKey, PublicKeyBytes, SecretKey,
|
||||
|
||||
@@ -35,6 +35,9 @@ pub trait ExecPayload<T: EthSpec>: Debug + Clone + PartialEq + Hash + TreeHash +
|
||||
fn fee_recipient(&self) -> Address;
|
||||
fn gas_limit(&self) -> u64;
|
||||
|
||||
/// This will return `None` on blinded blocks or pre-merge blocks.
|
||||
fn transactions(&self) -> Option<&Transactions<T>>;
|
||||
|
||||
// Is this a default payload? (pre-merge)
|
||||
fn is_default(&self) -> bool;
|
||||
}
|
||||
@@ -191,6 +194,10 @@ impl<T: EthSpec> ExecPayload<T> for FullPayloadMerge<T> {
|
||||
self.execution_payload.gas_limit
|
||||
}
|
||||
|
||||
fn transactions(&self) -> Option<&Transactions<T>> {
|
||||
Some(&self.execution_payload.transactions)
|
||||
}
|
||||
|
||||
// TODO: can this function be optimized?
|
||||
fn is_default(&self) -> bool {
|
||||
self.execution_payload == ExecutionPayloadMerge::default()
|
||||
@@ -235,6 +242,10 @@ impl<T: EthSpec> ExecPayload<T> for FullPayloadCapella<T> {
|
||||
self.execution_payload.gas_limit
|
||||
}
|
||||
|
||||
fn transactions(&self) -> Option<&Transactions<T>> {
|
||||
Some(&self.execution_payload.transactions)
|
||||
}
|
||||
|
||||
// TODO: can this function be optimized?
|
||||
fn is_default(&self) -> bool {
|
||||
self.execution_payload == ExecutionPayloadCapella::default()
|
||||
@@ -279,6 +290,10 @@ impl<T: EthSpec> ExecPayload<T> for FullPayloadEip4844<T> {
|
||||
self.execution_payload.gas_limit
|
||||
}
|
||||
|
||||
fn transactions(&self) -> Option<&Transactions<T>> {
|
||||
Some(&self.execution_payload.transactions)
|
||||
}
|
||||
|
||||
// TODO: can this function be optimized?
|
||||
fn is_default(&self) -> bool {
|
||||
self.execution_payload == ExecutionPayloadEip4844::default()
|
||||
@@ -347,6 +362,13 @@ impl<T: EthSpec> ExecPayload<T> for FullPayload<T> {
|
||||
})
|
||||
}
|
||||
|
||||
fn transactions<'a>(&'a self) -> Option<&'a Transactions<T>> {
|
||||
map_full_payload_ref!(&'a _, self.to_ref(), move |payload, cons| {
|
||||
cons(payload);
|
||||
Some(&payload.execution_payload.transactions)
|
||||
})
|
||||
}
|
||||
|
||||
fn is_default(&self) -> bool {
|
||||
match self {
|
||||
Self::Merge(payload) => payload.is_default(),
|
||||
@@ -428,6 +450,13 @@ impl<'b, T: EthSpec> ExecPayload<T> for FullPayloadRef<'b, T> {
|
||||
})
|
||||
}
|
||||
|
||||
fn transactions<'a>(&'a self) -> Option<&'a Transactions<T>> {
|
||||
map_full_payload_ref!(&'a _, self, move |payload, cons| {
|
||||
cons(payload);
|
||||
Some(&payload.execution_payload.transactions)
|
||||
})
|
||||
}
|
||||
|
||||
// TODO: can this function be optimized?
|
||||
fn is_default<'a>(&'a self) -> bool {
|
||||
match self {
|
||||
@@ -687,6 +716,10 @@ impl<T: EthSpec> ExecPayload<T> for BlindedPayload<T> {
|
||||
}
|
||||
}
|
||||
|
||||
fn transactions(&self) -> Option<&Transactions<T>> {
|
||||
None
|
||||
}
|
||||
|
||||
// TODO: can this function be optimized?
|
||||
fn is_default(&self) -> bool {
|
||||
match self {
|
||||
@@ -773,6 +806,10 @@ impl<'b, T: EthSpec> ExecPayload<T> for BlindedPayloadRef<'b, T> {
|
||||
}
|
||||
}
|
||||
|
||||
fn transactions(&self) -> Option<&Transactions<T>> {
|
||||
None
|
||||
}
|
||||
|
||||
// TODO: can this function be optimized?
|
||||
fn is_default<'a>(&'a self) -> bool {
|
||||
match self {
|
||||
@@ -828,6 +865,10 @@ impl<T: EthSpec> ExecPayload<T> for BlindedPayloadMerge<T> {
|
||||
self.execution_payload_header.gas_limit
|
||||
}
|
||||
|
||||
fn transactions(&self) -> Option<&Transactions<T>> {
|
||||
None
|
||||
}
|
||||
|
||||
fn is_default(&self) -> bool {
|
||||
self.execution_payload_header == ExecutionPayloadHeaderMerge::default()
|
||||
}
|
||||
@@ -871,6 +912,10 @@ impl<T: EthSpec> ExecPayload<T> for BlindedPayloadCapella<T> {
|
||||
self.execution_payload_header.gas_limit
|
||||
}
|
||||
|
||||
fn transactions(&self) -> Option<&Transactions<T>> {
|
||||
None
|
||||
}
|
||||
|
||||
fn is_default(&self) -> bool {
|
||||
self.execution_payload_header == ExecutionPayloadHeaderCapella::default()
|
||||
}
|
||||
@@ -914,6 +959,10 @@ impl<T: EthSpec> ExecPayload<T> for BlindedPayloadEip4844<T> {
|
||||
self.execution_payload_header.gas_limit
|
||||
}
|
||||
|
||||
fn transactions(&self) -> Option<&Transactions<T>> {
|
||||
None
|
||||
}
|
||||
|
||||
fn is_default(&self) -> bool {
|
||||
self.execution_payload_header == ExecutionPayloadHeaderEip4844::default()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user