Why
The instructive move is the one that looks like a downgrade. Today the deposit contract knows what a validator credential is: 48 bytes of public key, 96 bytes of signature metadata. Those constants are the contract holding an opinion about a cryptographic scheme it does not own, and every future scheme is blocked by it. The draft does not answer that by teaching the contract a second scheme — it makes the field variable-length and moves validity elsewhere. The contract stops understanding credentials and becomes transport for them. That is the generalisable technique, and it is counterintuitive precisely because the instinct in a migration is to add knowledge rather than remove it.
The retirement mode is the other half, and its irreversibility is the feature, not the risk. A one-way system call reads like danger — no rollback, no undo, no second chance. But consider the reversible version: if BLS retirement could be lifted, then no new BLS deposits, ever is not a guarantee, it is a current setting, and anyone who captures the switch restores the old scheme. The property being bought is exactly the impossibility of restoration. A switch that can be flipped back does not retire anything; it pauses it.
Which relocates the whole design problem to before the flip. A reversible change can be tested in production, because the cost of being wrong is a revert. An irreversible one moves every test in front of the switch and leaves nothing behind it, so the real question is never how do we build the switch — it is what evidence would be sufficient to flip it, and can that evidence be gathered on the live system without flipping. That is a specification problem wearing a smart contract's clothes, and it is why this draft is worth reading even by someone who will never touch BLS.
The reason variable-length is hard is aggregation, and it is worth naming. BLS12-381 gave the consensus layer more than a size: it gave aggregation. Hundreds of thousands of attestations per slot are tractable because n signatures still occupy 96 bytes and verification finishes in a pairing. Most post-quantum candidates — hash-based, lattice-based — either do not aggregate or aggregate far more expensively, so this draft is not proposing a migration. It is proposing something more modest and more useful: clear the deposit contract out of the way now, so it is not the obstacle on the day a migration is actually decided.
And the change that needs an EIP is a type, not an algorithm. bytes48 pubkey becomes bytes pubkey plus a scheme identifier. That one line is large because the deposit contract is the only execution-layer contract the beacon chain reads, and its log format is hardcoded into every client, every staking service and every indexer. The hardest code to change is not complex code — it is widely-read code, and nothing in the diff tells you which kind you are touching.
The line to this project is direct. A settlement contract accumulates opinions the same way: a signature format, an oracle payload shape, a resolution encoding, token decimals. Each one is a constant today and a migration problem later, and the day a scheme underneath has to change, the only two options are the ones in this draft — make the contract variable-length and let something else judge validity, or build a one-way door and be certain before walking through it. storage-collision-admin-takeover is the reminder of what a switch is when nobody is watching it: an admin power, and the invariant that guards it belongs in the same commit as the switch.
How it works
Two mechanisms, and what each one actually buys
| Mechanism | What it changes | What it buys | What it costs |
|---|---|---|---|
| Variable-length credentials (up to 8,192 bytes, from fixed 48 / 96) | The contract stops encoding one scheme's dimensions | Any future scheme fits without touching the contract | Validity has to be judged somewhere else, and that somewhere becomes load-bearing |
| BLS retirement mode (system call, one way) | New deposits under the old scheme become impossible | A guarantee rather than a setting — nobody can restore it | Every test moves in front of the flip; there is no after |
Three modes, and the draft's actual status
| Mode | What it permits | Reversible? |
|---|---|---|
disabled |
No deposits | — |
BLS enabled |
BLS onboarding, as today | — |
BLS retired |
No call can re-enable BLS onboarding | No |
Status as reported: draft, awaiting editor review, with contract address and activation timing undecided. And 8,192 bytes reads generous until you price hash-based signatures — for a SPHINCS+-class scheme it is headroom, not abundance. Meanwhile EIP-8141 opens opt-in quantum-safe signatures at the execution layer while this opens the same door at the consensus layer: two layers moving the same direction at once.
The pattern worth stealing
Do not teach the contract the new thing. Stop it knowing the old thing. A contract that validates a specific format must be changed for every new format; a contract that carries opaque bytes and defers judgement never needs changing again for that reason. The trade is explicit: the judgement does not vanish, it relocates — and wherever it lands inherits the security weight the constants used to carry.
Note the residue, too. Variable up to 8,192 bytes is still an opinion, just a looser one. Every migration of this shape leaves a bound behind, and the bound is the next generation's constant.
Designing a one-way door
| Question | Why it decides the design |
|---|---|
| What evidence is sufficient to flip? | There is no rollback, so the flip criterion is the safety mechanism |
| Can that evidence be gathered without flipping? | If not, the switch cannot be justified, only risked |
| What is the granularity? | One global flip, per-scheme, or per-credential-type — coarser is simpler and less recoverable |
| Is there a delay in front of it? | A timelock is the only undo available, and it undoes the decision, never the state |
| Who can call it, and what watches them? | A one-way switch is an admin power; the invariant guarding it belongs in the same commit |
The inventory this project can build today
Every constant in a settlement path that describes something the contract does not own is a future migration:
| Opinion held today | Could it become variable-length? |
|---|---|
| Signature scheme and length | Usually yes — verification can move to a precompile or a verifier contract |
| Oracle payload encoding | Yes, if resolution logic reads a decoded struct rather than raw offsets |
| Resolution record shape | Harder — settlement genuinely has to understand outcomes |
| Collateral token decimals | Yes, and this one bites earliest in practice |
| Address size | Rarely considered, and the first thing a different chain breaks |
Producing that table costs an afternoon and is useful even if no migration ever happens, because it is also the list of assumptions a second chain would violate. Reads with quick-slots-10s, which is the same exercise for time.
Review clarification
Protocol proposal first, design principle second
The immediate subject is an Ethereum protocol migration affecting the execution layer, consensus clients, validator onboarding, staking services and indexers. The reusable lesson is not an official Ethereum policy: a contract should understand only what it needs to enforce its own invariants. The current deposit path is already closer to transport than to a full BLS verifier, so the direction is better described as BLS-shaped transport → scheme-neutral transport. Complexity moves to the consensus or verifier layer; it does not disappear.
Split at trust and change boundaries
MarketFactory → EventMarket → fixed IResolver
├─ ChainlinkResolver
├─ CommitteeResolver
└─ TLSProofResolver
EventMarket should keep positions, collateral, finality and payout invariants together so redemption remains atomic. A resolver converts vendor-specific evidence into a canonical {status, outcome, resolvedAt} and receives no arbitrary custody authority. Pin it when the market is created; approve replacements only for future markets.
Do not split because a function is long. Split when security authority, upgrade cadence, failure mode or implementation choice genuinely differs; otherwise use an internal function or library. Variable length must remain bounded for gas and denial-of-service safety. Design the core around stable economic invariants and place changing formats behind bounded, versioned interfaces.
Where it lands in Jayverse
- Verex: inventory every hardcoded settlement opinion. List every place Verex's settlement path hardcodes a fact it does not own — signature format and length, oracle payload encoding, resolution record shape, collateral decimals, address size — and mark each as variable-length-capable or not; that table is useful even if nothing ever migrates.
- Verex: keep the resolver a scheme-neutral transport. A resolver should convert vendor-specific evidence into a canonical status/outcome/resolvedAt struct with no arbitrary custody authority, pinned at market creation; approve a replacement resolver only for future markets, never retroactively.
- Auditor: require a flip criterion for any one-way admin switch. Before any irreversible switch ships (a BLS-retirement-style flag, a resolver lock), write down what evidence is sufficient to flip it and whether that evidence can be gathered without flipping — and land the invariant guarding the call in the same commit as the switch.
- Devnet/CI: bound every variable-length field. Any field that becomes variable-length to accommodate a future scheme must carry an explicit size bound, tested on devnet before it reaches Verex's settlement contracts, so a generalization never opens a gas/DoS hole.
Key expressions
| Expression | 뜻 · 쓰이는 자리 |
|---|---|
| migration surface | 이관(마이그레이션) 대상이 되는 범위 전체 · 코드가 암묵적으로 갖고 있는 가정들의 목록을 가리킬 때. "That list is the migration surface" |
| hold an opinion about | ~에 대해 (암묵적) 전제·가정을 갖고 있다 · 계약이 특정 형식을 당연시하고 있다는 뜻으로. "the opinion it held about the old one" |
| widely-read code | 여러 곳에서 참조되는(널리 읽히는) 코드 · 바꾸기 어려운 이유가 복잡함이 아니라 참조 범위임을 설명할 때. "it is widely-read code" |
| one-way door | 되돌릴 수 없는 결정(비유) · 한번 내리면 취소 불가능한 설계 선택을 가리킬 때. "Designing a one-way door" |
| load-bearing | (구조상) 핵심적인, 없으면 무너지는 · 검증 책임이 옮겨간 곳이 중요해졌다고 말할 때. "that somewhere becomes load-bearing" |
| headroom, not abundance | 여유는 있지만 넉넉한 건 아니다 · 숫자가 생각보다 빠듯함을 지적할 때. "it is headroom, not abundance" |
| reads generous | (수치가) 넉넉해 보이다 · 실제로는 부족할 수 있는 크기를 언급할 때. "8,192 bytes reads generous" |
| bites earliest in practice | 실제로 가장 먼저 문제로 드러나다 · 여러 가정 중 가장 빨리 탈나는 것을 짚을 때. "this one bites earliest in practice" |
| wearing X's clothes | X인 척 위장한, X의 외피를 두른 · 실제 본질은 다른 문제임을 비유할 때. "wearing a smart contract's clothes" |
| flip (a switch) | (되돌릴 수 없는) 스위치를 전환하다 · 일방향 전환을 실행하는 행위를 가리킬 때. "sufficient to flip it" |
| BLS12-381 | 페어링 친화적 타원곡선(pairing-friendly elliptic curve) · 검증자 서명 집계(aggregation)에 쓰이는 곡선 규격. "hardcoded BLS12-381 dimensions" |
| BLS | BLS 서명 방식(Boneh-Lynn-Shacham signature scheme) · 검증자 온보딩에 쓰이던 기존 서명 스킴을 가리킴. "adds a BLS retirement mode" |
| SPHINCS+ | 해시 기반 양자내성 서명 스킴(hash-based post-quantum signature scheme) · BLS를 대체할 후보 중 하나로 언급됨. "a SPHINCS+-class scheme" |
| deposit contract | 이더리움 비콘체인 입금 계약 · 검증자 등록에 쓰이는 특정 온체인 컨트랙트를 가리킴. "the deposit contract's hardcoded BLS12-381 dimensions" |