@@ -53,6 +53,7 @@ pub struct TransactionRequest {
53
53
pub data : Data ,
54
54
55
55
/// EIP-2930 access list
56
+ #[ serde( with = "access_list_item_camelcase" ) ]
56
57
pub access_list : Option < Vec < AccessListItem > > ,
57
58
/// Chain ID that this transaction is valid on
58
59
pub chain_id : Option < U64 > ,
@@ -62,6 +63,36 @@ pub struct TransactionRequest {
62
63
pub transaction_type : Option < U256 > ,
63
64
}
64
65
66
+ mod access_list_item_camelcase {
67
+ use ethereum:: AccessListItem ;
68
+ use ethereum_types:: { Address , H256 } ;
69
+ use serde:: { Deserialize , Deserializer } ;
70
+
71
+ #[ derive( Deserialize ) ]
72
+ struct AccessListItemDef {
73
+ address : Address ,
74
+ #[ serde( rename = "storageKeys" ) ]
75
+ storage_keys : Vec < H256 > ,
76
+ }
77
+
78
+ pub fn deserialize < ' de , D > ( deserializer : D ) -> Result < Option < Vec < AccessListItem > > , D :: Error >
79
+ where
80
+ D : Deserializer < ' de > ,
81
+ {
82
+ let access_item_defs_opt: Option < Vec < AccessListItemDef > > =
83
+ Option :: deserialize ( deserializer) ?;
84
+ Ok ( access_item_defs_opt. map ( |access_item_defs| {
85
+ access_item_defs
86
+ . into_iter ( )
87
+ . map ( |access_item_def| AccessListItem {
88
+ address : access_item_def. address ,
89
+ storage_keys : access_item_def. storage_keys ,
90
+ } )
91
+ . collect ( )
92
+ } ) )
93
+ }
94
+ }
95
+
65
96
impl TransactionRequest {
66
97
// We accept "data" and "input" for backwards-compatibility reasons.
67
98
// "input" is the newer name and should be preferred by clients.
0 commit comments