@@ -43,6 +43,7 @@ pub const MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: usize = 16;
4343pub const MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD : usize = 2 ;
4444
4545/// Composite types
46+ pub type BlockAccessList = SszList < u8 , MAX_BYTES_PER_TRANSACTION > ;
4647pub type Transaction = SszList < u8 , MAX_BYTES_PER_TRANSACTION > ;
4748pub type Transactions = SszList < Transaction , MAX_TRANSACTIONS_PER_PAYLOAD > ;
4849pub type Withdrawals = SszList < Withdrawal , MAX_WITHDRAWALS_PER_PAYLOAD > ;
@@ -133,6 +134,7 @@ pub enum ForkName {
133134 Deneb ,
134135 Electra ,
135136 Fulu ,
137+ Amsterdam ,
136138}
137139
138140#[ derive( Debug , Clone , HashTreeRoot , SszEncode , SszDecode ) ]
@@ -236,6 +238,46 @@ pub struct ExecutionPayloadV3 {
236238 pub excess_blob_gas : u64 ,
237239}
238240
241+ #[ derive( Debug , Clone , HashTreeRoot , SszEncode , SszDecode ) ]
242+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
243+ #[ cfg_attr(
244+ feature = "rkyv" ,
245+ derive( rkyv:: Archive , rkyv:: Serialize , rkyv:: Deserialize )
246+ ) ]
247+ pub struct ExecutionPayloadV4 {
248+ pub parent_hash : Hash32 ,
249+ pub fee_recipient : Address20 ,
250+ pub state_root : Hash32 ,
251+ pub receipts_root : Hash32 ,
252+ #[ cfg_attr( feature = "serde" , serde( with = "crate::serde_wrappers::bytes_array" ) ) ]
253+ pub logs_bloom : LogsBloom ,
254+ pub prev_randao : Hash32 ,
255+ pub block_number : u64 ,
256+ pub gas_limit : u64 ,
257+ pub gas_used : u64 ,
258+ pub timestamp : u64 ,
259+ #[ cfg_attr( feature = "serde" , serde( with = "crate::serde_wrappers::ssz_list" ) ) ]
260+ #[ cfg_attr( feature = "rkyv" , rkyv( with = crate :: rkyv_wrappers:: AsSszList ) ) ]
261+ pub extra_data : ExtraData ,
262+ pub base_fee_per_gas : Uint256Bytes ,
263+ pub block_hash : Hash32 ,
264+ #[ cfg_attr(
265+ feature = "serde" ,
266+ serde( with = "crate::serde_wrappers::nested_ssz_list" )
267+ ) ]
268+ #[ cfg_attr( feature = "rkyv" , rkyv( with = crate :: rkyv_wrappers:: AsNestedSszList ) ) ]
269+ pub transactions : Transactions ,
270+ #[ cfg_attr( feature = "serde" , serde( with = "crate::serde_wrappers::ssz_list" ) ) ]
271+ #[ cfg_attr( feature = "rkyv" , rkyv( with = crate :: rkyv_wrappers:: AsSszList ) ) ]
272+ pub withdrawals : Withdrawals ,
273+ pub blob_gas_used : u64 ,
274+ pub excess_blob_gas : u64 ,
275+ #[ cfg_attr( feature = "serde" , serde( with = "crate::serde_wrappers::ssz_list" ) ) ]
276+ #[ cfg_attr( feature = "rkyv" , rkyv( with = crate :: rkyv_wrappers:: AsSszList ) ) ]
277+ pub block_access_list : BlockAccessList ,
278+ pub slot_number : u64 ,
279+ }
280+
239281#[ derive( Debug , Clone , HashTreeRoot , SszEncode , SszDecode ) ]
240282#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
241283#[ cfg_attr(
@@ -285,6 +327,21 @@ pub struct NewPayloadRequestElectraFulu {
285327 pub execution_requests : ExecutionRequests ,
286328}
287329
330+ #[ derive( Debug , Clone , HashTreeRoot , SszEncode , SszDecode ) ]
331+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
332+ #[ cfg_attr(
333+ feature = "rkyv" ,
334+ derive( rkyv:: Archive , rkyv:: Serialize , rkyv:: Deserialize )
335+ ) ]
336+ pub struct NewPayloadRequestAmsterdam {
337+ pub execution_payload : ExecutionPayloadV4 ,
338+ #[ cfg_attr( feature = "serde" , serde( with = "crate::serde_wrappers::ssz_list" ) ) ]
339+ #[ cfg_attr( feature = "rkyv" , rkyv( with = crate :: rkyv_wrappers:: AsSszList ) ) ]
340+ pub versioned_hashes : VersionedHashes ,
341+ pub parent_beacon_block_root : Hash32 ,
342+ pub execution_requests : ExecutionRequests ,
343+ }
344+
288345#[ derive( Debug , Clone ) ]
289346#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
290347#[ cfg_attr(
@@ -296,6 +353,7 @@ pub enum NewPayloadRequest {
296353 Capella ( NewPayloadRequestCapella ) ,
297354 Deneb ( NewPayloadRequestDeneb ) ,
298355 ElectraFulu ( NewPayloadRequestElectraFulu ) ,
356+ Amsterdam ( NewPayloadRequestAmsterdam ) ,
299357}
300358
301359impl NewPayloadRequest {
@@ -305,6 +363,7 @@ impl NewPayloadRequest {
305363 NewPayloadRequest :: Capella ( req) => req. hash_tree_root ( hasher) ,
306364 NewPayloadRequest :: Deneb ( req) => req. hash_tree_root ( hasher) ,
307365 NewPayloadRequest :: ElectraFulu ( req) => req. hash_tree_root ( hasher) ,
366+ NewPayloadRequest :: Amsterdam ( req) => req. hash_tree_root ( hasher) ,
308367 }
309368 }
310369}
0 commit comments