← All postsEngineering

Building a global settlement layer on Base

We rebuilt the mint and redeem path on Coinbase's L2 to get sub-2-second confirmation across every supported market. Without sacrificing the broker-dealer guarantees underneath.

Flo Team
Flo Finance
5 min read
Building a global settlement layer on Base

Two years ago we had the mint path open in front of us on a Tuesday afternoon and watched it take eleven seconds end-to-end. Six of those seconds were a broker confirmation we couldn't move. The other five were us. We closed the laptop and decided we needed to rebuild the on-chain leg before any partner saw it. Last quarter we shipped the rebuild on Base. The user-visible part now lands under 1.8 seconds across every market we support. Here's the architecture, and the trade-offs that made it work.

What I couldn't change

The broker leg still settles T+1 (US equities) or T+2 (other markets) with the exchange. That's not a problem I get to solve at the engineering layer. What I can solve is the user-facing part. From "call mint" to "token in wallet, contractually backed." Most mints clear in seconds because token supply is pre-positioned where capacity allows; during heavy volume, Flo Capital SPC reconciles with the broker leg on the standard cycle.

We're not replacing T+1. We're carrying liquidity so the typical user doesn't feel it.

Why Base

Three things mattered to me when I picked the chain. Block time, cost, and Coinbase's distribution. Base's 2-second block time is fast enough that the on-chain confirmation isn't the bottleneck anymore. The broker fill is. Gas is cheap enough that we can sponsor it on the consumer side without burning unit economics. And every Coinbase customer is one click from a Base wallet, which makes partner UX shorter than it would be on any L1.

The mint path, end to end

  1. Partner calls /v1/mint with asset, notional_usdc, slippage_bps, settlement currency and chain, and gas sponsor.
  2. We instruct the broker (IBKR primary, Alpaca secondary) to acquire the underlying.
  3. Broker confirms fill via webhook. Flo Capital SPC takes legal title; underlying held in segregated brokerage accounts at the broker-dealer in the SPC's name.
  4. Smart contract on Base mints the token to the partner's specified wallet.
  5. We emit a signed attestation linking the on-chain token to the off-chain custody record.

Steps 2 and 3 take about six seconds end to end. We don't make the user wait for them. The contract mints the moment the broker fill confirms. The Flo Capital SPC legal-title transfer happens in the background and reconciles inside the same daily reporting cycle.

Reconciliation

Proof of reserves runs daily. At 00:00 UTC we rebuild the full Merkle tree of broker-side positions and post the root on-chain. In parallel, Accountable runs an independent diff against the contract's total supply and serves the result via a public API. If the diff drifts past two basis points, new mints halt automatically until the Flo Capital SPC operator reconciles. We've tripped this twice in staging. Both were broker-side reporting lag, not actual divergence. I'd rather false-positive on this than false-negative on it, and the math says the same thing.

We're not replacing T+1. We're carrying liquidity so the typical user doesn't feel it.

What I'd do differently

I over-engineered the cross-chain bridging on day one. Chainlink CCIP wired to Arbitrum and Ethereum before we had a single partner who needed either. If I did this again, Base-only for the first ninety days, then add chains based on actual partner demand. Build for the user you have, not the user you think you'll have.

I'm sure we'll find more of these as more customers go live. If you're building something similar and you've made different trade-offs at the on-chain leg, I'd actually like to hear what broke first.

Written by Flo Team, Flo Finance
More posts →