Inspired by some discussions and posts about transaction ordering (like this one), we’re thinking about how we might maintain the desirable properties of our transaction ordering policy (such as low latency, transparency, and ability to decentralize without affecting policy) with measures to reduce the prevalence of “latency racing” among transaction submitters.
Toward that end, we’re looking at potential policies that have the following properties:
- Dark mempool: Submitted transactions are not visible to anyone other than the sequencer, until they are included in the published sequence. This prevents parties from front-running or sandwiching others’ transactions. (The sequencer is trusted not to engage in such tactics.)
- Low latency: Every transaction that arrives at the sequencer is emitted into the sequence within some time bound, perhaps 1/2 second.
- Over short time intervals, transactions with higher “tip” (per-gas priority fee) are ordered first. This is intended to induce parties who are contending for fast placement to do so by increasing their tip rather than expending resources to reduce their latency in delivering transactions to the sequencer.
- Stable after decentralization: The goals of the policy will still be satisfied, after the sequencer is decentralized (assuming a suitable supermajority of sequencers apply the policy honestly).
One policy that might work would divide time into “chunks” of 1/2 second each, and sort the transactions arriving within the same chunk into decreasing tip order, breaking ties by earliest arrival. The sequencer would buffer incoming transactions for up to 1/2 second, then sort the buffer and emit into the sequence in sorted order, before repeating the process for the next chunk.
There are also more sophisticated algorithms that provide similar guarantees without having sharp boundaries between chunks.
We’re interested in the community’s feedback on transaction ordering policies along those general lines, as we consider whether to pursue a change like this.