import * as State from 'tevm/State';
import * as Address from 'tevm/Address';
import { Keccak256 } from 'tevm/crypto';
// Compute storage slot for mapping: balances[userAddress]
function computeMappingSlot(key: Uint8Array, baseSlot: bigint): bigint {
const encoded = Bytes64();
encoded.set(new Uint8Array(32 - key.length).fill(0), 0);
encoded.set(key, 32 - key.length);
encoded.set(encodeBigInt(baseSlot, 32), 32);
const hash = Keccak256.hash(encoded);
return BigInt(Hex.fromBytes(hash));
}
const tokenAddress = Address("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48");
const userAddress = Address("0x742d35Cc6634C0532925a3b844Bc9e7595f51e3e");
// balances mapping at slot 1
const userBalanceSlot = computeMappingSlot(userAddress, 1n);
const userBalanceKey = State.StorageKey(tokenAddress, userBalanceSlot);
console.log(`User balance at slot: ${userBalanceSlot}`);