← All case studies

A Custom Plasma L2 With In-House Validators

CTO at Morpher Labs · 2020 - 2023

Why we ran our own Plasma sidechain at Morpher in 2020, what 1-second blocks bought us, what they cost us, and how we eventually consolidated onto Polygon and Base when the L2 ecosystem matured.

Layer 2
Plasma
Settlement
EVM

Problem

Morpher trades 2,000+ synthetic markets across equities, commodities, crypto, forex, and indices. Trading needs three things from its execution layer: predictable confirmation times, predictable fees, and high enough throughput to handle volatility windows when everybody trades the same five symbols at once.

In 2020, Ethereum mainnet did none of those things at the price point we needed. Gas was unpredictable. Confirmation was probabilistic for the time horizons traders care about. And the L2 ecosystem (Optimism, Arbitrum, later Base) was not yet production-ready for a non-trivial trading platform. Polygon was usable but the economics for our specific trade pattern were not great at the time.

We needed an execution layer we could control end to end.

Constraints

State had to be auditable on Ethereum L1. We wanted a public anchor a user or auditor could verify independently. The shape of that anchor was a daily Merkle-root commitment, not a full Plasma exit game.

Block times had to be predictable. For a trading product, the difference between "1 second" and "averages 1 second but sometimes 30" is the difference between a working order book and angry support tickets.

Validators had to be operable by us. We did not have the resources to bootstrap a decentralized validator set, and we accepted the centralization tradeoff for the operational benefit of being able to reason about the system.

Architecture

A Plasma-style chain with an in-house validator set running 1-second blocks. A daily Merkle-root writeback to Ethereum L1 served as the public audit trail. A custom bridge handled deposits and withdrawals.

The validator set was small and operated entirely by us. That made it fast and predictable. It also meant we owned the operational responsibility for keeping it up, for rotating keys, and for monitoring for writeback failures.

The daily writeback gave anyone the ability to verify that the off-chain state we reported matched the on-chain commitment. We did not implement a full Plasma exit game. The writeback was the auditability layer, not a unilateral user-exit mechanism. That was a deliberate scoping decision, and it is the truthful description of what we shipped.

Application-level bridges handled the asset entry and exit paths. We kept the bridge logic small and well-audited rather than reach for a generalized bridge framework, which would have introduced more attack surface than we needed.

My role

Architecture for the chain and the bridge. Validator operation. Settlement bridge implementation and audit coordination. The "is this still the right answer" review every six to twelve months as the L2 ecosystem matured around us.

Outcome

Several hundred thousand on-chain transactions processed across the in-house chain over its operational lifetime. The chain delivered the predictable 1-second blocks we designed for. Trading worked.

When Base launched with credible production guarantees and gas economics that finally beat what we could provide ourselves, we ran the calculus again and migrated. Morpher's trading volume is on Base now. The in-house chain did its job, and we retired it when the alternatives caught up. The wallet, by virtue of the chain-agnostic architecture, did not need to change for the migration.

Tradeoffs

The honest description of the trust model is "in-house chain with a daily Merkle-root writeback to L1." That gave auditors a public anchor and a verifiable state commitment. It did not give users a unilateral exit path the way a modern rollup does. We made that tradeoff knowingly. It worked because the platform was the only place a user would ever interact with their position; there was no use case for sovereign exit while the platform was running.

A centralized validator set is a known limitation. It was the right tradeoff for a small team that needed predictable execution before any of the modern L2 frameworks were production-ready. It is the wrong tradeoff once those frameworks exist.

I would not build the same architecture today, and I did not have to keep it. Migrating to Base when the math turned was the lived version of "build for the product you have, retire the complexity when the market catches up."

The lesson I take into Permissionless and any future protocol work: pick the execution layer for the product, not the other way around. Be willing to own complexity when the product needs guarantees the market does not yet provide. Be equally willing to retire that complexity when the market catches up.