Context
A payment touches up to four venues. Matching them by amounts and timestamps is fragile; maintaining an off-chain index of transaction hashes per payment is a second source of truth that can drift.Decision
Every movement carries the same 32-byte Corridor Reference in the venue’s native field. On Tempo the memo is an indexed event topic, soeth_getLogs filters by reference directly. The layout encodes version, kind, currency pair, flags, a UUIDv7, a keyed customer tag and a checksum.
Consequences
- Reconciliation is a join on the reference, the same on every venue.
- No customer identity on-chain: the customer tag is a keyed hash.
- A wrong or truncated reference fails its checksum instead of silently matching nothing.
- 32 bytes is fixed: new fields need a new version, and decoders reject unknown versions.
Alternatives rejected
- An indexer keyed by transaction hash: a second source of truth that must itself be reconciled.
- Free-form memos: not fixed size, not checksummed, and too easy to leak customer data into.