Official MASTR logo MASTR Support the work
Contents
← Wiki home

Blockchain fundamentals

Contract storage: the persistent state a transaction changes

Code executes, but balances, permissions and configuration survive in the contract's storage.

Technical reference · EVM state · 1 min read

Research articles and reference entries are published in English. Navigation is available in seven languages.

In this article
  1. Persistent data
  2. Upgrades make layout consequential
  3. Sources and originals

Persistent data

An EVM contract can keep values in persistent storage. Solidity assigns slots according to its storage-layout rules, with specific arrangements for packed values, mappings and dynamic arrays. A transaction can update that state when execution succeeds, and later calls read the new values.

This is where an application may record an owner, a user's debt, an allowance, a pause flag or an implementation address. Reading source code without checking the deployed state leaves important questions unanswered: which account is the owner now, is the contract paused, and which parameters are active?

Upgrades make layout consequential

An upgrade can execute new logic over old storage. If the replacement logic interprets a slot differently, data that used to represent one value can acquire a different meaning. Compatibility is therefore more than whether the new functions compile.

For an investigation, preserve both the code identity and the block at which state was read. Proxy upgrades explain how logic changes while an address remains the same. Evidence snapshots explain why a current read cannot establish what the storage contained before a disputed transaction.

Sources and originals

Related reading

MASTR

Support independent research

The investigations, original evidence and guides here are free to read. Voluntary donations help fund the research and keep MASTR’s tools available.

Open wallet