The event model
An event is the unit of the registry. Every event is tied to one mapped contract, carries the factor before and after, the moment it takes effect, and the announcement it was reconciled against.
Event types
multiplier_stepis the common case on this chain: a dividend accrued intouiMultiplier(), with no transfer and no change inbalanceOf().splitandreverse_splitarrive the same way, as a ratio applied to the multiplier.cash_dividendanddistributioncover issuers that pay out instead of accruing.merger,spinoff,ticker_changeanddelistingare identity and termination events.
Fields
Factors are decimal strings with nine places, never floats. effective_at is the moment
the factor applies, which is not the same as the block the event was emitted in.
{
"id": "evt_aapl_2026_08_14",
"type": "multiplier_step",
"asset": { "ticker": "AAPL", "address": "0xaf3d…93f9", "chain_id": 4663 },
"multiplier_before": "1.000000000",
"multiplier_after": "1.000566080",
"effective_at": "2026-08-14T15:12:46Z",
"emitted_at": { "block": 36345344, "tx": "0x…" },
"source": { "kind": "issuer_filing", "ref": "…", "url": "https://…" },
"supersedes": null,
"duplicate_of": null,
"status": "applied"
}
Repeats and corrections
The log is young and it already contains both. Two events carry values identical to an earlier one with the same effective time, emitted at a different block. One contract was set to 2.000000000 and returned to 1.000000000 fifteen minutes later.
Neither is an accusation, a new mechanism gets corrections and a register is where corrections
belong. What is missing is a second copy to check against, which is what these fields are for: a repeat
is published with duplicate_of pointing at the first occurrence, a correction with
supersedes pointing at the value it replaces. Both stay in the log. Nothing is quietly
dropped.
Read absolutes, not deltas.
Every event carries the value before and the value after. An integrator that reads
multiplier_after lands in the right place even if an event arrives twice. An integrator
that computes a delta and compounds it arrives at four times the correct factor on the two contracts
where a repeat exists.
Sourcing
Every record carries the announcement it came from. When our record and the announcement disagree, the announcement wins: the record is corrected, the previous version stays addressable, and anything downstream that consumed the old figure is re-emitted.