Skip to content

System columns ​

The columns every row carries without your asking, read with a $ in front of the name.

ColumnTypeHolds
$chainchainthe row's chain
$blockbigintthe block the row was answered at
$blockHashbytes32that block's hash
$timestampdatetimethat block's timestamp
$addressaddressthe contract on a state row; the emitter on an event row
$sampleAtdatetimeon a sampled row, the boundary that selected it; null otherwise
$txbytes32the transaction hash — event rows only
$txIndexbigintthe transaction's index in the block — event rows only
$logIndexbigintthe log's index in the block — event rows only
$eventstringthe event's name — event rows only
$topicsbytes32[]the log's topics as the node gave them, topic0 first — event rows only
$databytesthe log's undecoded data — event rows only

A state row has the first six. An event row has all twelve.

cql
let stETH = ethereum:0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84;

from stETH at time '2026-09-20'..'2026-09-23' every 1d as s
| project { chain: $chain, block: $block, time: $timestamp, day: $sampleAt, contract: $address }

Open in workbench →

$block is a plain column: projecting it away changes nothing about which block a later call is answered at. Through an alias — s.$address, a.$block — a system column names one source's value when a join has put two side by side.

$storage ​

Not a column but a member of any address: s.$storage[slot] reads one 32-byte word of that contract's storage at the row's block. Read a storage slot.

See also ​