Use this file to discover all available pages before exploring further.
Access lists (EIP-2930) specify which addresses and storage slots a transaction will access, enabling gas savings by pre-warming these locations before execution.
AccessList is a branded array type representing EIP-2930 access lists. Each entry contains a contract address and the storage keys that will be accessed at that address.
import * as AccessList from '@tevm/voltaire/AccessList';import * as Address from '@tevm/voltaire/Address';import * as Hash from '@tevm/voltaire/Hash';// Create empty access listconst empty = AccessList.create();// Create from itemsconst list = AccessList.from([ { address: Address("0x742d35Cc6634C0532925a3b844Bc9e7595f51e3e"), storageKeys: [ Hash("0x0000000000000000000000000000000000000000000000000000000000000001"), Hash("0x0000000000000000000000000000000000000000000000000000000000000002"), ] }]);
import * as AccessList from '@tevm/voltaire/AccessList';const list = AccessList.from([ { address, storageKeys: [key1, key2] }]);// Calculate total access list costconst cost = AccessList.gasCost(list);// = ADDRESS_COST + (2 * STORAGE_KEY_COST)// = 2400n + 3800n = 6200n// Calculate net savings vs cold accessconst savings = AccessList.gasSavings(list);// Savings per address: 2600n - 2400n = 200n// Savings per key: 2100n - 1900n = 200n// Total: 200n + (2 * 200n) = 600n// Check if access list is beneficialif (AccessList.hasSavings(list)) { // Include access list in transaction}
import * as AccessList from '@tevm/voltaire/AccessList';let list = AccessList.create();// Add addresseslist = AccessList.withAddress(list, contractAddress);list = AccessList.withAddress(list, tokenAddress);// Add storage keys for specific addresslist = AccessList.withStorageKey(list, contractAddress, slot0);list = AccessList.withStorageKey(list, contractAddress, slot1);// Merge multiple access listsconst merged = AccessList.merge(list1, list2, list3);