State Changes
Inspect the Storage and account state that a transaction actually persists on-chain.
State Changes answers: what did this transaction ultimately change on-chain?
It compares Storage, nonce, and balance-related state before and after execution. Unlike Execution Trace, it retains only the final write, making it useful for verifying that a transaction truly changed contract state.
Start with an example
Read this transaction's state changes
1. Inspect UniswapV3Pool.slot0.tick
Expand UniswapV3Pool to find slot0.tick changing from -247248 to -275057. Tick is the pool's discrete current-price position. Its change proves that the swap changed the pool price, rather than merely transferring an asset.
feeGrowthGlobal0X128 and observations[0].blockTimestamp also change in this group. They record accumulated fees and an updated oracle observation—common accompanying writes for a Uniswap V3 swap.
2. Inspect X Pepe balances and allowances
In the X Pepe group, _balances[UniswapV3Pool], _balances[TokenStaker], and _allowances[...] all change. They show changed token balances for the pool and staker, and an allowance written by the intermediate contract for a subsequent operation.
This confirms what Token Flow shows: Token Flow makes the X Pepe transfers, staking, and withdrawals visible; State Changes confirms their final balances and allowance.
How to read State Changes
- Start with contract-address groups and focus on the application contract you care about.
- Then read the variable name and Slot. Variable names appear when source and Storage Layout are available; raw Slots still identify the change when decoding is unavailable.
- Compare Before and After to confirm the final stored value. The decoded view and Slot table both show it.
- To learn which call wrote a Slot, return to Execution Trace or Source Debugger for call context.
Notes
- State Changes shows the difference between the beginning and end of a transaction. Intermediate writes that are later overwritten may not appear.
- Mapping and dynamic-array Slots are usually hash-derived. Decoding variable names and keys depends on ABI, source, and compilation information.
- A Storage write does not always mean a user asset changed: price, oracle observations, and allowances also live in Storage.
