@@ -208,16 +208,12 @@ func accessList(
208208 provider * ethrpc.Provider ,
209209) (types.AccessList , error ) {
210210 into := func (raw json.RawMessage , ret * types.AccessList , strictness ethrpc.StrictnessLevel ) error {
211- var response struct {
212- AccessList types.AccessList `json:"accessList,omitempty"`
213- }
214-
215- err := json .Unmarshal (raw , & response )
211+ decoded , err := decodeAccessListResponse (raw )
216212 if err != nil {
217- return fmt . Errorf ( "unable to decode eth_createAccessList response: %w" , err )
213+ return err
218214 }
219215
220- * ret = response . AccessList
216+ * ret = decoded
221217 return nil
222218 }
223219
@@ -243,3 +239,34 @@ func accessList(
243239
244240 return list , nil
245241}
242+
243+ func decodeAccessListResponse (raw json.RawMessage ) (types.AccessList , error ) {
244+ type accessTuple struct {
245+ Address * common.Address `json:"address"`
246+ StorageKeys []common.Hash `json:"storageKeys"`
247+ }
248+
249+ var response struct {
250+ AccessList []accessTuple `json:"accessList,omitempty"`
251+ }
252+
253+ err := json .Unmarshal (raw , & response )
254+ if err != nil {
255+ return nil , fmt .Errorf ("unable to decode eth_createAccessList response: %w" , err )
256+ }
257+
258+ list := make (types.AccessList , 0 , len (response .AccessList ))
259+
260+ for _ , tuple := range response .AccessList {
261+ if tuple .Address == nil {
262+ return nil , fmt .Errorf ("unable to decode eth_createAccessList response: missing required field 'address' for AccessTuple" )
263+ }
264+
265+ list = append (list , types.AccessTuple {
266+ Address : * tuple .Address ,
267+ StorageKeys : tuple .StorageKeys ,
268+ })
269+ }
270+
271+ return list , nil
272+ }
0 commit comments