Why
The old inclusion-list designs asked the censor to police himself. One proposer wrote the list, and that proposer could be exactly the party leaving the transaction out — the watchman and the watched were the same seat. FOCIL's committee is not primarily about redundancy; it is about separating those two roles, and it buys a specific and unusually cheap trust assumption: 1-of-N honesty. One member out of sixteen reflecting their own mempool is enough to force inclusion. That is the whole design, and everything argued about it is downstream of that one line.
The enforcement is the real change, and it is a change of category rather than degree. Today, excluding a transaction is not a protocol violation — it is a choice a builder makes, and the only pressure against it is social. Putting the check into fork choice means attesters simply do not vote for a block that ignores the list, and a block without votes never becomes canonical. There is no route around it — not through a relay, not through a builder — because the thing being changed is not who builds but what counts as a block.
The cost lands in two places, and both are worth more than the headline. First, safety now depends on a timing parameter: lists arriving after the view-freeze deadline are ignored for that slot. Set it late and an honest block can be rejected over propagation luck; set it early and a censor only has to delay list gossip slightly to win. That is protocol security resting on network latency, which is a physical property, not a cryptographic one. Second, enforcement is conditional — roughly "include the list's valid transactions while block space remains" — because an unconditional rule would make honest proposers fail when the list overflows the block. And a conditional rule always creates its own evasion: the moment "if there is space" appears, consuming the space becomes the new censorship. FOCIL answers that by separating the gas accounting so the attack is expensive, which is the right answer and does not repeal the principle: unconditional rules fail honest participants, conditional rules turn the condition into the attack surface, and the quality of a design is how narrowly and verifiably the condition is written.
How it works
What moves where
| Before | Under FOCIL | |
|---|---|---|
| Who writes the list | one proposer — possibly the censor | a randomly drawn committee plus the proposer |
| Trust needed | that one party is honest | 1-of-N — one member reflecting their mempool |
| Enforcement | social pressure; omission is legal | fork choice — attesters withhold votes |
| Route around it | relay, builder | none — what counts as a block changed |
The slot has to hold three things in order
- Committee members build lists from their own mempool view and gossip them on a dedicated subnet.
- The builder or proposer assembles a block having seen those lists.
- Attesters compare the block against the lists they saw — and different attesters can have seen different sets.
Step 3 is why a view-freeze deadline exists at all: lists arriving after it are not counted for that slot.
The freeze deadline is a two-sided failure
| Set it | Failure |
|---|---|
| too late | an honest block is rejected because a list arrived slowly |
| too early | a censor wins by delaying list gossip slightly |
There is no setting that is safe in both directions, only a setting matched to observed network latency — which is why this parameter is the spec.
Unconditional versus conditional, as a general rule
- Unconditional: safe to state, but it can make an honest participant unable to comply.
- Conditional: protects the honest participant, and hands the attacker the condition.
- Therefore: design quality lives in how narrow and checkable the condition is — here, separate gas accounting so filling the block to deny space costs real money.
The part that is actually yours
Censorship resistance in a prediction market is not philosophy, it is settlement accuracy: an order at the close, a dispute, an oracle update. FOCIL does not promise "cannot be censored"; it promises the cost of censoring becomes explicit. What you write in a design doc is not FOCIL — it is the number of slots each time-sensitive path can absorb.