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}