Wallets and identities
A transaction hash does not identify an individual fill. A transaction can contain several participations and executions; after a reorg it can occur in another block.
Wallet roles
owner is the order owner, signer signs the order, and the transaction sender submits the transaction. They can differ. The owners filter selects order owners; it is not a signer or transaction-sender filter. Never fill in an unknown identity by assuming these roles share an address.
An intent identity does not prove execution. An inclusion identity changes on reinclusion; the transaction identity can stay the same. Exact intent-to-execution correlation requires more evidence than a shared transaction hash.
What to save
Keep eventId, entityId, assessmentRevision, correctionOf, transaction/intent/occurrence relations and the permitted payload. Save the subscription binding and checkpoint separately, in the same transaction as effects when accepting a checkpoint.
Deduplicate by eventId; use entity and revision to update state. The same event ID with different contents is a conflict: stop applying and retain safe diagnostics.
Transport identities
frameSequence orders this connection’s frames. position is a journal batch boundary. eventOrdinal is the index in the original batch before filtering. Positions and ordinals can have gaps; connection frame sequences cannot.
connectionId and subscription generation fence ACKs; historyGeneration identifies retained history. Reconnect starts a new frame sequence. See frames and versions.
