Skip to content
TraceFast Docs

Contracts

Open the contract explorer in TraceFast →

Chain facts of a contract, expanded — one sentence per proven fact

A contract's entity page answers two different questions in two different places: what this contract is (chain facts and relationships), and what it has done (storage, events and the rest of the feeds).

What it is

The Chain facts card groups the proven statements:

GroupWhat it covers
NatureCarries code now, has ever carried code, was destroyed, was redeployed, is a precompile or a system contract
ArchitectureProxy and which family (storage slot, beacon, EIP-1167 clone, Safe), whether the implementation slot is mutable, whether it is itself an implementation, a beacon or a proxy admin, or immutable
InterfacesThe ERC interfaces the executing code presents — ERC-20, 721, 1155, 4626, 1271, 2981, 165
CapabilitiesPrivileged surfaces present in the code — mint, pause, blacklist, emergency withdraw — and, separately, the ones actually observed being used: an upgrade performed, a pause that happened, ownership renounced
AssetWhat kind of token it is, if it is one — see Tokens & Collections
DerivedFolded verdicts over the above: account type, lifecycle, proxy kind, control model, upgrade authority

Two rules make the card readable. A fact appears only when it was proven — absence is not a "no". And a fact claims exactly what it says: Pause function means a pause-family function exists in the code that executes, not that the contract is paused now, and not who may pause it.

Relationships

The structural links, read from both ends:

  • Deployed by — the account that executed the CREATE, with the deploying transaction and block. Where the lineage was never captured — pre-Byzantium deployments, externally created code — the row says so rather than guessing.
  • Implementation — what a proxy delegates to right now.
  • Implementations before — every implementation it has stood on, as block intervals. An interval with no end was still open at the edge of coverage.
  • Used by proxies — on an implementation contract, the proxies that have delegated to it. A sample, not a count — the page says so instead of implying completeness.
  • Delegated to by — accounts pointing at this code with an EIP-7702 delegation.
  • Same bytecode — how many contracts run byte-identical runtime code. The cluster itself lives at /bytecodes/{codeHash}.
  • Impersonates — for a lookalike contract, what it imitates.

Storage

The Storage tab — write totals, delegatecall share, call depth, and who writes here

Storage answers who writes this contract's state. The header counts total writes, unique slots touched, distinct callers and executors, the share of writes that arrived through DELEGATECALL, the deepest call that reached it, and the block range over which all of that was observed. A daily storage activity chart sits under them.

Counts marked ≈ are estimates. Writes counts every SSTORE, including writes that put back the value already there — it is not the number of times a value changed; that is counted separately below. Two badges sum the shape up: Proxy Storage when part of the writes arrive through DELEGATECALL, and Deep DeFi when calls deeper than five levels reach it.

Who writes here ranks the callers: the caller, the executor (the code that actually ran — for a proxy, the implementation), how many writes, how many transactions, and the block range of their activity. On a proxy this table is the clearest picture of a protocol's real users, because the executor column keeps proxy and implementation apart instead of merging them. Two tables follow it: Deep Call Analysis — writes from call stacks deeper than five levels, by executor, with the maximum and average depth — and, on a proxy, Implementation Writers — the implementations that wrote to its storage through DELEGATECALL.

How values change

Writing a slot and changing its value are different counts. Value Changes counts the times a slot's value changed at a block boundary: several writes of one slot in one block are one change, and a write that put back the same value is none. ≈ Slots Changed Value counts the distinct slots whose value ever changed.

  • What changes now — the slots that changed most over the last day or the last week, with how many changes and the last one. A slot is named as a variable where its key is known: slot 9 [Uniswap V4: PoolManager] is entry of mapping slot 9 for that address. History opens the slot's change history, one row per block, with the value before and after each change; the order of writes inside a transaction is on that transaction's State tab.
  • Parameters & references — the contract's plain slots (declared variables and packed fields) with their current value, by slot or by most recent change, shown as hex, a number or an address. Their names are not known without the contract's source. A slot set once and never again is usually a setting or an address the contract points at; a rarely changed slot with a recent change is a change of configuration.
  • Who reads, who writes — per day, the transactions that wrote to the contract's storage and those that only read it. A contract many transactions only read is one others depend on — the pattern of oracles, registries and pools used for quotes.

Where a value is not stated — not stored for that stretch of history, wiped by a self-destruct, or rewritten by the protocol at the end of the block — the page names the reason. It is never shown as a zero.

Storage outlives the code

A contract destroyed before Cancun, or an account whose EIP-7702 delegation was cleared, has no code today and still a history of writes. The Storage tab stays for it, with a line that the code is gone and the storage history is kept. For an investigation of a one-shot or self-destructed contract this is often the most valuable part left.

Events

The Events tab — decoded logs emitted by the contract

The log this contract itself emitted: block, transaction, log index, event name, and a decoded summary where the ABI is known — Transfer 0xdd52… → 0x3b4d… 31,670 USDC rather than raw topics. Undecoded logs are still listed; they simply keep their raw shape instead of a guessed name.

Accounts and storage are different questions

State Changes counts changes to the account — balance, nonce, code. Storage is about individual slots inside the contract. A busy contract can show State changes 1 while its storage carries hundreds of millions of writes: the account itself only ever changed when the code was deployed.

Destroyed and redeployed contracts

A contract that has been self-destructed keeps its page and its history: the nature facts say it held code and that the address is codeless now, and the timeline still shows what happened. Where code was deployed to the same address more than once, that is its own fact (redeployed), because the address is continuous while the code behind it is not.


Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown