revm_context_interface/transaction/eip2930.rs
1use auto_impl::auto_impl;
2use primitives::{Address, B256};
3
4/// Access list type is introduced in EIP-2930, and every
5/// transaction after it contains access list.
6///
7/// **Note**: Iterator over access list returns account address and storage slot keys that
8/// are warm loaded before transaction execution.
9///
10/// Number of account and storage slots is used to calculate initial tx gas cost.
11#[auto_impl(&, Box, Arc, Rc)]
12pub trait AccessListTr {
13 /// Iterate over access list.
14 fn access_list(&self) -> impl Iterator<Item = (Address, impl Iterator<Item = B256>)>;
15
16 /// Returns number of account and storage slots.
17 fn access_list_nums(&self) -> (usize, usize) {
18 let storage_num = self.access_list().map(|i| i.1.count()).sum();
19 let account_num = self.access_list().count();
20
21 (account_num, storage_num)
22 }
23}