11use super :: serde:: { de_hex_to_txs, de_number_to_u256, se_hex_to_number, se_txs_to_hex} ;
22use crate :: types:: consensus:: body:: Transactions ;
33use crate :: types:: consensus:: fork:: ForkName ;
4- use crate :: types:: wrapped:: bloom:: Bloom ;
5- use crate :: types:: wrapped:: bytes:: Bytes ;
64use crate :: types:: wrapped:: h160:: H160 ;
5+ use crate :: utils:: serde:: { hex_fixed_vec, hex_var_list} ;
76use ethereum_types:: { H256 , U256 } ;
87use serde:: { Deserialize , Serialize } ;
98use serde_this_or_that:: as_u64;
109use ssz:: Decode ;
1110use ssz_derive:: { Decode , Encode } ;
11+ use ssz_types:: { typenum, FixedVector , VariableList } ;
1212use superstruct:: superstruct;
13+ use tree_hash_derive:: TreeHash ;
14+
15+ pub type Bloom = FixedVector < u8 , typenum:: U256 > ;
16+ pub type ExtraData = VariableList < u8 , typenum:: U32 > ;
1317
1418#[ derive( Debug , PartialEq , Clone , Deserialize , Serialize , Encode , Decode ) ]
1519pub struct ExecutionPayload {
1620 pub parent_hash : H256 ,
1721 pub fee_recipient : H160 ,
1822 pub state_root : H256 ,
1923 pub receipts_root : H256 ,
24+ #[ serde( with = "hex_fixed_vec" ) ]
2025 pub logs_bloom : Bloom ,
2126 pub prev_randao : H256 , // 'difficulty' in the yellow paper
2227 #[ serde( deserialize_with = "as_u64" ) ]
@@ -27,7 +32,8 @@ pub struct ExecutionPayload {
2732 pub gas_used : u64 ,
2833 #[ serde( deserialize_with = "as_u64" ) ]
2934 pub timestamp : u64 ,
30- pub extra_data : Bytes ,
35+ #[ serde( with = "hex_var_list" ) ]
36+ pub extra_data : ExtraData ,
3137 #[ serde( deserialize_with = "de_number_to_u256" ) ]
3238 #[ serde( serialize_with = "se_hex_to_number" ) ]
3339 pub base_fee_per_gas : U256 ,
@@ -49,10 +55,12 @@ pub struct ExecutionPayload {
4955 Deserialize ,
5056 Encode ,
5157 Decode ,
58+ TreeHash
5259 ) , )
5360) ]
54- #[ derive( Debug , Clone , Serialize , Deserialize , Encode ) ]
61+ #[ derive( Debug , Clone , Serialize , Deserialize , Encode , TreeHash ) ]
5562#[ ssz( enum_behaviour = "transparent" ) ]
63+ #[ tree_hash( enum_behaviour = "transparent" ) ]
5664pub struct ExecutionPayloadHeader {
5765 #[ superstruct( getter( copy) ) ]
5866 pub parent_hash : H256 ,
@@ -61,6 +69,7 @@ pub struct ExecutionPayloadHeader {
6169 pub state_root : H256 ,
6270 #[ superstruct( getter( copy) ) ]
6371 pub receipts_root : H256 ,
72+ #[ serde( with = "hex_fixed_vec" ) ]
6473 pub logs_bloom : Bloom ,
6574 #[ superstruct( getter( copy) ) ]
6675 pub prev_randao : H256 ,
@@ -76,7 +85,8 @@ pub struct ExecutionPayloadHeader {
7685 #[ superstruct( getter( copy) ) ]
7786 #[ serde( deserialize_with = "as_u64" ) ]
7887 pub timestamp : u64 ,
79- pub extra_data : Bytes ,
88+ #[ serde( with = "hex_var_list" ) ]
89+ pub extra_data : ExtraData ,
8090 #[ superstruct( getter( copy) ) ]
8191 #[ serde( deserialize_with = "de_number_to_u256" ) ]
8292 #[ serde( serialize_with = "se_hex_to_number" ) ]
0 commit comments