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.
Where it lands in Jayverse
- Verex: write down the slot-absorption number for each time-sensitive path. For an order at the close, a dispute filing, and an oracle update, list how many slots of delay each can absorb before the outcome changes — the page's own exercise, applied to the real settlement pipeline.
- Devnet: the view-freeze deadline is a network-latency parameter, not a crypto one. When Devnet moves toward an OP-Stack L2, the same two-sided failure (too early lets a censor win, too late rejects an honest block) applies to sequencer confirmation windows and needs its own measured value, not a borrowed default.
- OFA / Auditor: narrow the condition, don't remove it. FOCIL's inclusion rule is conditional ("while space remains") and defends against evasion by pricing the condition separately (its own gas allowance); OFA's solver commitments and the Auditor's methodology should each state their condition as narrowly and checkably.
Key expressions
| Expression | 뜻 · 쓰이는 자리 |
|---|---|
| fork-choice rule | 포크 선택 규칙(어떤 블록을 정식 체인으로 인정할지 정하는 규칙) · 검열 저항을 강제할 때 · "stops being a norm and becomes a fork-choice rule" |
| inclusion-list | 반드시 포함해야 할 트랜잭션 목록(인클루전 리스트) · 검열 방지를 위해 제안자에게 강제하는 목록 · "moves inclusion-list authorship from one proposer" |
| withhold votes | 투표(증명)를 보류하다 · 규칙 위반 블록에 표를 주지 않는 집행 방식 · "Attesters withhold votes from blocks that ignore" |
| canonical | (체인상) 정식으로 인정된 · 최종 채택된 블록을 가리킬 때 · "a censoring block cannot become canonical" |
| downstream of | ~에서 파생된·~의 결과인 · 한 설계 결정이 나머지를 좌우할 때 · "everything argued about it is downstream of that one line" |
| absorb | (지연을) 감내하다·흡수하다 · 시스템이 얼마나 지연을 버틸 수 있는지 물을 때 · "the number of slots it can absorb" |
| 1-of-N | 참여자 중 단 한 명만 정직해도 되는 신뢰 가정 · 위원회 설계의 핵심 전제를 가리킬 때 · "1-of-N honesty" |
| propagation luck | (네트워크) 전파 운·타이밍 운 · 지연 때문에 정직한 블록이 불이익받는 상황 · "rejected over propagation luck" |
| hands the attacker the condition | 조건 자체를 공격 지점으로 내주다 · 조건부 규칙이 악용 여지를 만들 때 · "hands the attacker the condition" |
| the watchman and the watched | 감시자와 감시 대상이 같은 존재 · 검열자가 스스로를 감시하는 구조적 결함을 가리키는 비유 · "the watchman and the watched were the same seat" |
| FOCIL | 포크초이스 강제 포함목록(Fork-Choice enforced Inclusion Lists) · 검열저항을 프로토콜 규칙으로 강제하는 이더리움 제안 · "FOCIL moves inclusion-list authorship from one proposer" |
| EIP-7805 | 이더리움 개선제안 7805번 · FOCIL 메커니즘을 정의하는 스펙 문서 · "In EIP-7805 read only the Rationale and the parameters" |