Whitepaper

The Loam protocol specification

This document describes the protocol that is actually deployed on Base, in the terms a reviewer checks it in. Every figure below is a genesis constant or a governed parameter, named beside the on-chain call that returns it. Where a number moves โ€” circulating supply, pool depth โ€” this page does not print it; it points at /transparency, which reads it live instead of transcribing a value that will already be stale by the time this page is read.

1. What LOAM is

LOAM is an ERC-20 token on Base. Each LOAM in circulation is a redeemable claim on a share of a reserve the protocol holds in Pinto. It is minted by depositing Pinto into that reserve and redeemed back out of it; both directions are priced at the protocol's net asset value, computed on-chain and quotable before signing anything. LOAM is not a stablecoin and makes no promise to hold a fixed price โ€” the reserve it draws value from is itself denominated in an asset that moves, which the next section explains before anything else here can be evaluated.

2. What Pinto is

Pinto is a separate protocol on Base โ€” not ours, not operated by us, and not a token we control in any way. It issues a credit-based stablecoin, PINTO, that targets one US dollar by expanding and contracting supply on an hourly cycle rather than by holding collateral against it. PINTO has been trading below that target. A target is not a guarantee, and everything in this document that is denominated in Pinto โ€” the reserve, net asset value, the risk section โ€” inherits that fact rather than escaping it.

Symbol / decimalsPINTO / 6
Target$1.00 (not currently held)

3. Net asset value

Net asset value is the amount of Pinto standing behind one LOAM, and it is what mint and redeem are priced against. It is computed entirely from protocol-owned, on-chain balances โ€” the Pinto the reserve actually holds against the LOAM actually issued โ€” never from a market or pool spot price. Because it never reads a price surface that a single transaction can move, there is no in-block manipulation for NAV to be flash-loaned through.

navPintoPerSurco()view โ€” Pinto per LOAM, the price mint and redeem both use

The function and access-control surface behind this call โ€” the full facet map, read live rather than from a deployment record โ€” is catalogued on /technical, not repeated here.

4. Mint and redeem

Both directions are permissionless: anyone can call them directly against the contract, and either side can be quoted before committing to it with previewMint(uint256) or previewRedeem(uint256), neither of which changes state.

Mint fee โ€” mintFeeBps()30 bps โ€” 0.30%
Redeem fee โ€” redeemFeeBps()50 bps โ€” 0.50%
Where both of these fees gostays in the reserve

Both rates are read from the contract; the figures above are simply what those getters return. The mint fee and the redeem fee are retained by the reserve rather than paid to anyone โ€” that statement is about those two fees and no others. The protocol charges a third fee, on realised Silo yield, and that one is paid out; it is described immediately below.

โš ๏ธ Redeeming burns, as of the 2026-09 mint-on-demand upgrade. Per ADR 0046, a partial supersession of ADR 0029: the full LOAM amount being redeemed is destroyed, and reserveBox() โ€” unissued capacity โ€” is credited by the same amount. ADR 0029's guarantee still holds: mint-at-NAV stays perpetually available, because the counter goes back up by the full amount. What changed is only that the tokens are destroyed rather than parked at the diamond. The redeem fee is not a separate chunk carved off and burned; it is a haircut on the Pinto payout, so the redeemer simply receives less Pinto than a fee-free redemption would return, while the entire LOAM amount handed in is burned regardless. The Redeemed event's burned field again carries the full redeemed amount, exactly as its name says.

The performance fee

Reserve Pinto is deposited into Pinto's Silo, which pays yield when Pinto is at or above its target. The protocol takes a 10% performance fee on that realised yield. It is charged only on yield actually realised โ€” never on a mint, a redemption, or the reserve principal โ€” and unlike the two fees above it is paid out rather than retained.

Performance fee โ€” perfFeeBps()1000 bps โ€” 10%
Paid in PINTO to โ€” devAddr()0xEa29F43467be0f004c331DD8015FC5F80d8B0A92

devAddr() returns the same address as the founder escrow whose vesting schedule is published on /transparency. The accrual is in LibSilo.plantAndCompound: 10% of each realised harvest is booked to owedDevPinto and transferred in PINTO to devAddr() as deposits mature. Both terms are one call each against the diamond โ€” perfFeeBps() and devAddr().

5. Supply

maxSupply() returns 1,000,000,000. That is the cap, written once at genesis and never raised. totalSupply() is what has actually been issued; the difference, reserveBox(), is unissued capacity โ€” a counter the contract keeps, not tokens it holds. The token contract's own LOAM balance is zero. The identity is exact and every term in it is a public call โ€”

maxSupply()= totalSupply() + reserveBox()
circulatingSupply()= totalSupply() โˆ’ protocolLpSurco()

Until 2026-09, unissued capacity was pre-minted and held at the token's own contract address โ€” the same balance every automated risk scorer read as a single holder of the overwhelming majority of supply. It was never a holding: it could leave the contract only when someone minted against deposited Pinto. That pre-minted reserve was burned in a timelocked upgrade; nothing about NAV, circulating supply, fees or redemption changed, and /transparency shows the three reads that let a reviewer check that directly.

The live values behind that identity โ€” what has actually been issued, what sits unissued, and what share of the cap that represents โ€” are read on-chain and shown on /transparency rather than printed here as a literal, because they move: a figure quoted in this document would already be wrong by the time it is read.

6. Staking and vLOAM

LOAM can be staked into a separate, non-upgradeable contract that reports a second, non-transferable balance called vLOAM. vLOAM measures time staked, not amount deposited: it starts at a fraction of the staked amount and ramps toward the full amount over four years.

Grant at deposit โ€” grantBps()5% โ€” 500 bps
Full ramp โ€” ramp()126,144,000 s โ€” 4 years
Withdrawal lock7 days from deposit
Transferableno

vLOAM does not vote today. Governance, described next, runs through the Safe and timelock below; vLOAM is not wired into it or into any other governance surface. It is a duration measure other surfaces can read, and no more than that is built. grantBps and ramp are immutable, fixed at deployment with no setter โ€” the curve cannot change underneath a staker. The full function surface, including why vLOAM emits no Transfer events, is on /technical.

7. Governance

LOAM is an EIP-2535 diamond: calls route to facets by selector, and every change to that facet set is a diamondCut. There is no path to diamondCut that skips the chain below it.

TimelockController โ€” the diamond's owner(), and msg.sender to diamondCut0x6Cf2879291A343514F62c55448306a3f5E45EF9f
Delay โ€” getMinDelay()172,800 s โ€” 48 hours

The Safe queues a change, and it cannot execute one before the 48-hour delay elapses. It holds EXECUTOR_ROLE as well as PROPOSER_ROLE โ€” it is the only executor, and the zero address does not hold that role, so execution is not open to the public โ€” but that role only lets it submit the execution transaction once the delay has run. The account that calls diamondCut is the timelock itself: the diamond's owner() is the timelock address, so the timelock, not the Safe, is msg.sender to the cut. Between queueing and execution the scheduled change is visible on-chain to anyone watching. The access-control chain, traced against the deployed bytecode rather than assumed from convention, is on /technical.

Not every privileged action runs through that queue. A set of parameter setters on AdminFacet is gated on DEFAULT_ADMIN_ROLE, which the Safe holds, and those take effect the moment they are called, with no delay; the guardian's latches, described in the next section, are instant too. /transparency lists both sets. What is timelocked is the code itself โ€” diamondCut โ€” along with role grants, the mint and redeem fees, the venue, and devAddr.

8. Risks

Stated flatly, because a risk list that softens its own claims is not a disclosure:

PriceBacked, not pegged. No mechanism defends a fixed price for LOAM, and none is claimed.
Reserve valueThe reserve is denominated in Pinto. When Pinto trades below its target, the reserve can decline โ€” LOAM's backing falls with it, directly and without a cushion.
LiquidityLiquidity is thin. A holder who needs to exit at size may move the market price well away from net asset value.
Redemption can be halted instantlyA single role, GUARDIAN_ROLE โ€” held today by 0xc11D0a80F2f3ff6eba46cdB4f6CD3b0ff2D53beF โ€” can call latchRedemption() and stop every redeem immediately, or latchMint() and stop every mint. There is no timelock and no delay on this action, unlike the upgrade path described in the previous section. The Safe can lift the latch, and lifting it is not delayed either.

None of these is hypothetical or deferred to a future version: they are properties of the mechanism as deployed today, and they hold regardless of how the token performs.

9. What is not built

An earlier document describing this protocol's predecessor, Surco, promised a roadmap of features beyond what shipped โ€” and separately, in its own "live today" list, described a fee router that paid stakers a share of protocol revenue. Neither the roadmap items nor that reward exist in the deployed contracts, and this document does not describe any of them as forthcoming or partially built โ€” only as absent:

Engine 2 โ€” the credit portalnot built
Field surfacenot deployed โ€” not cut into the diamond
Hyper-Burnnot built
Emergency liquidity managernot built
Staker rewards from protocol feespays nothing โ€” staker share is 0 bps

Staking pays no reward today. The staker share of protocol fees is a fixed constant in the code, not a governed setting that could be raised โ€” it is 0 bps, and no facet exists in the deployed diamond to distribute a staker reward even if it were not. vLOAM, described above, measures staked duration only; it is not a claim on any fee stream.

Unlike Hyper-Burn, the credit portal, and the emergency liquidity manager โ€” for which no source exists at all โ€” a FieldFacet.sol does exist in the public source repository. Its existence in source is not evidence it is live: it is one of the facets the deployed diamond never cut in, and that is checkable directly, not asserted here. /technical reads the diamond's own IDiamondLoupe.facets() live, so a reviewer can confirm against the deployed bytecode that no such facet is part of it, rather than taking this page's word for it.

Every mechanism this document describes elsewhere โ€” minting, redeeming, staking, governance โ€” is complete and deployed as written. Nothing above is partially built or scheduled for a near-term upgrade; a future diamondCut could add any of it, but doing so would itself be a governed, timelocked change, disclosed through the same 48-hour window described in governance.

10. Status

Version1.0
Date2026-08-31

This document supersedes the earlier "Surco Whitepaper v2". That paper described a different token: a fixed supply ten times smaller than this token's 1,000,000,000 cap, 1% mint and 1% redeem fees against the 30 bps / 50 bps actually charged, and a roadmap of unbuilt features listed above as though under way. Where the two disagree, this document and the deployed contracts govern โ€” not the earlier paper.