Event decoding
Canonical event payloads, decoding statuses, provenance, and honest coverage claims.
Event decoding
Starkscan returns one canonical decoding result for an indexed event. Contract, global, transaction, and block event surfaces use the API result; the frontend does not independently upgrade raw payloads into a different interpretation.
Raw payload is authoritative
keys[]is the canonical indexed event-key array.data[]contains the complete indexed event data words.txHash,blockNumber, andlogIndexidentify the row.
Legacy rows that lack indexed payload.keys may reconstruct only the compatibility topic0–topic3 fields. Those rows do not prove that later keys were absent. Certification reports them as a separate legacy_incomplete_payload cohort; typed fields are an interpretation, never a replacement for raw evidence.
Decoding statuses
| Status | Meaning |
|---|---|
decoded | An authoritative ABI/schema produced typed fields and the payload passed validation. |
name_only | The event name is authoritative, but typed fields are unavailable or intentionally absent. |
unknown | No authoritative event name is available. Raw keys and data are still returned. |
The response separates event-name provenance from decoded-field provenance:
eventName,eventNameSource, andeventNameUnavailableReasondescribe attribution.decodedFields,decodedFieldsSource, anddecodedFieldsUnavailableReasondescribe typed fields.event_time_class_epoch_unavailableis an event-name reason.schema_unavailable,selector_only_attribution,payload_shape_mismatch, andschema_shape_unsupportedare decoded-field reasons.
{
"keys": ["0x...", "0x..."],
"data": ["0x...", "0x..."],
"decodingStatus": "decoded",
"eventName": "Transfer",
"eventNameSource": "class_abi",
"decodedFields": [{
"label": "amount",
"type": "core::integer::u256",
"source": "data",
"status": "decoded",
"rawValues": ["0x...", "0x..."],
"originIndexes": [0, 1],
"displayValue": "1"
}],
"decodedFieldsSource": "class_abi"
}Historical correctness
For upgraded contracts, Starkscan attributes an event to the class and schema active at the event's block when that evidence is materialized. Incomplete or ambiguous class epochs remain unavailable; the service does not silently use the contract's current class.
Event results are served from indexed, materialized facts. Request-time RPC, third-party explorers, ABI fetches, and trace calls are not used to make a response appear more decoded.
Read coverage honestly
Operational certification cohorts are bounded evidence, not a uniform claim about every event-emitting contract. A certification report keeps the event-emitting population, selected sample, upgrade/epoch cases, negative fixtures, and unavailable-reason breakdown separate. Never extrapolate beyond the declared population and row bounds.
Use the API reference for the exact ContractEventItem schema and Advanced utilities for bounded event-search patterns.