MMIXHash a block of items together with the previous block's hash, and publish it widely. Once enough blocks are stacked on a transaction, prune it; keep the root.
Every swap is a transaction. Every Ethereum block that trades becomes a CANON block, sealed into a hash chain the moment the next one begins. The contract keeps a single head and no history at all: the history lives in the logs, and it all hashes into the head. At the first touch of every 6.4-hour epoch the head is written down as a checkpoint, the thing miners timestamp and validators finalize.