Why
The advice not to build an L2 is right, and the reason is sharper than time against utility. An L2's sequencer, data availability and proof system are precisely the layer an application developer is renting. choosing-a-chain-is-a-lease argues that picking a chain is signing a lease whose terms — who runs the sequencer, who can reorder, what leaving costs — are the part nobody markets. That framing sets the study depth exactly: learn enough to read the lease, not enough to construct the building. Sequencer, batcher, state root and output proposal, L1 to L2 messaging, and the difference between optimistic and validity finality are lease terms. Operating them is a different job, and the four cases where it is the right job — rollup protocol engineer, modifying OP Stack or Orbit, building a sequencer, DA layer, bridge or fault proof, running a company appchain — share one property: all four operate the layer rather than rent it.
Then the part worth building a card around, because it is where the surprise lives. "Supports EIP-7702" reads as a single fact and is three: the protocol defines the authorization and its semantics; the chain has activated the fork so a node will accept the transaction; and the wallet can present the authorization to a human and get a signature. They are produced by different people on different schedules, and each can be true while the others are false.
Anvil gives you the first, a testnet gives you the first two, and only a wallet gives you the third — which is the one that decides whether anybody can use the thing. This is the same shape as pick-a-signer-not-a-brand, where one brand name turned out to be four independent supply chains, and the layer that fails is never the one being audited.
The third layer is also the one you do not control, and that is not incidental. share-the-code-you-write puts it as a rule: you can share the code you write and not the code you must obey. A wallet's signing UX is somebody else's product decision, shipped on their release schedule, and no amount of correctness on your side moves it. Which means the honest output of this work is not "7702 works" but a list of wallets where it works and a decision about the ones where it does not — fall back, block, or wait.
For an authorization specifically the failure mode is worse than refusal. The authorization is a new object the user is asked to sign, and a wallet that does not understand it can do something worse than reject: render an opaque blob and ask for a signature anyway. That trains users to approve what they cannot read, which is the habit every phishing flow depends on. agentic-intent-veto makes the same argument about spending caps — the check that passes is not the check that matters — and here the check is a human being asked to authorise a delegation they were shown as hex.
And the general rule underneath all of it: "works on my chain" is the blockchain form of "works on my machine." The environment that decides the outcome is the one you do not own, and the whole purpose of the second and third passes is to reach it early rather than at launch.
How it works
One phrase, three independent facts
| Layer | "Supported" means | What proves it | Who owns the schedule |
|---|---|---|---|
| Protocol | The authorization and its semantics are specified | A local test suite — Anvil is enough | The EIP process |
| Chain | The fork is active, a node accepts the transaction | A real RPC on a public testnet | The chain's operators |
| Wallet | A human can be shown the authorization and sign it | A wallet, and nothing else | Somebody else's roadmap |
Each can be true while the others are false, and the last row is the one that decides adoption — and the one you do not control.
What Anvil structurally cannot show you
| Anvil | A public L2 testnet | Why it matters | |
|---|---|---|---|
| Inclusion | Mines instantly, never reorders | A sequencer with its own policy | Delay and ordering are product behaviour, not noise |
| Fee | One number | L2 execution + L1 data | A transaction cheap locally can be dominated by calldata (l1-data-pricing-dimensions) |
| Finality | Final when mined | Confirmed ≠ final; withdrawals wait | "Done" means two different things to you and to the user |
| Wallet | None | Chain switching, signing UX, revocation | The layer that decides whether anyone can use it |
| Other users | None | A live mempool | Competition and failure under contention |
The first three are why the second pass exists. The fourth is why the third pass exists, and it is the one teams skip.
The matrix, which is the actual deliverable
| Wallet × chain | Accepts the authorization | Renders what is delegated | Shows the delegate address | Allows revocation |
|---|---|---|---|---|
| … | yes / no | plain language / opaque blob / nothing | yes / no | yes / no |
The middle column is the one that matters most and gets scored least. A wallet that refuses is an inconvenience; a wallet that shows hex and asks for a signature anyway is teaching the user the habit that phishing runs on.
When building an L2 is the right call
Four cases, and they share one property: all of them operate the layer rather than rent it.
- Becoming a rollup protocol engineer
- Modifying OP Stack or Arbitrum Orbit
- Building a sequencer, DA layer, bridge or fault proof
- Running a company appchain in production
Outside those, the sequencer and proof system are lease terms rather than components, and the return on studying them is knowing what to ask — which choosing-a-chain-is-a-lease already turns into a four-row term sheet.
Where it lands in Jayverse
- Devnet: an Anvil test suite proves the protocol only, not real support. Before claiming Rabbit supports EIP-7702/7715, build the separate wallet × chain matrix — does the wallet accept the authorization, render what's delegated, show the delegate address, and allow revocation.
- Wallet: block or fall back when a wallet renders the authorization as opaque hex instead of plain language. Track which wallets Jayverse's embedded wallet and any external wallet integration actually render readably, and treat that as a shipping gate, not a nice-to-have.
- Rabbit: separate "protocol defines it," "chain activated it," and "wallet can show it" in status docs. Don't collapse the three into one "supports 7702" claim; each is owned by a different party on a different schedule.
Key expressions
| Expression | 뜻 · 쓰이는 자리 |
|---|---|
| read the lease | 계약(임대) 조건을 파악하다 · 직접 운영하지 않고 필요한 만큼만 이해할 때의 비유. "enough to read the lease" |
| rent rather than operate | 소유·운영하지 않고 빌려 쓰다 · 인프라를 직접 돌리지 않고 사용만 할 때. "rent rather than operate" |
| lease terms | 임대 조건 · 통제할 수 없는 인프라의 제약을 비유할 때. "are lease terms" |
| works on my machine | 내 컴퓨터에서는 되는데(라는 핑계) · 환경에 따라 결과가 달라지는 문제를 꼬집는 표현. "the blockchain form of works on my machine" |
| fall back | 대체 수단으로 전환하다 · 원래 방법이 실패했을 때 취하는 다음 조치. "fall back, block, or wait" |
| opaque blob | 내용을 알 수 없는 뭉텅이 데이터 · 사용자가 이해 못 하는 서명 요청 내용을 가리킬 때. "render an opaque blob and ask for a signature" |
| who owns the schedule | 일정(주도권)을 누가 쥐고 있는가 · 통제권 없는 대상의 결정 권한을 설명할 때. "Who owns the schedule" |
| term sheet | 핵심 조건을 정리한 요약표 · 협상·의사결정의 조건들을 한눈에 정리할 때. "a four-row term sheet" |
| structurally cannot | 구조적으로 ~할 수 없다 · 도구 자체의 근본적 한계를 말할 때. "Anvil structurally cannot show you" |
| dominated by | ~에 의해 좌우되다/압도되다 · 비용의 대부분을 한 요인이 차지할 때. "can be dominated by calldata" |
| DA | 데이터 가용성(Data Availability) · 롤업이 트랜잭션 데이터를 공개적으로 게시하는 계층. "Building a sequencer, DA layer, bridge or fault proof" |
| OP | 옵티미즘 체인(Optimism) · 리니아 등 다른 L2와 경쟁하는 체인 중 하나로 언급. "Modifying OP Stack or Arbitrum Orbit" |
| Orbit | 아비트럼의 커스텀 체인 배포 프레임워크(Arbitrum Orbit) · 자체 L2/L3 롤업을 만들 때 쓰는 스택. "OP Stack or Arbitrum Orbit" |