DOCUMENTATION

How sOHM works

Everything that happens when you stake, bond, claim and unstake, and exactly what is read from Solana along the way.

Overview

sOHM is an OHM-style (3,3) reserve protocol on Solana. It has three parts: staking (sOHM → stOHM, compounding every epoch), bonds (SOL, USDC or USDT → discounted sOHM, vested), and a treasury (one Solana wallet holding every bond payment and every staked sOHM).

Network

ChainSolana mainnet-beta
FeesSOL, typically under $0.001 per transfer
Explorerhttps://solscan.io
USDCEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v (6 decimals)
USDTEs9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB (6 decimals)
$sOHMlaunches on pump.fun; the mint address appears at the top of the app the moment it is live

Only the two mint addresses above are accepted for stablecoin bonds. A token that merely calls itself USDC or USDT is ignored, because payments are matched by mint address, never by name.

Wallet & sessions

The app uses Phantom. Connecting asks for one message signature (ed25519), which costs nothing and moves no funds. The server verifies that signature against your public key and treats it as a session for 7 days. Unstaking and claiming require a valid session, so only the wallet that owns a position can move it. Stakes and bonds need no session, since each one is its own signed Solana transaction.

Staking

Staking is a real transfer of sOHM from your wallet to the treasury. The server reads the confirmed transaction from Solana and credits stOHM only if it succeeded, was signed by your wallet and moved sOHM into the treasury. The amount credited is the amount that arrived on-chain. A fresh stake locks the position for one hour before it can be unstaked, and the minimum deposit is 300,000 sOHM.

Rebase & index

Your stOHM is stored as a share of the pool. Every epoch the global index is multiplied by 1 + rate, so every stOHM balance grows by the same percentage at the same moment. Between epochs the app interpolates the index so your balance ticks smoothly.

rate per epoch = (1 + APY)^(1 / epochs per year) − 1
stOHM balance  = shares × index

For the first 24 hours after the token goes live, a launch boost lifts the APY. The dashboard shows the boosted rate and a countdown while it is active.

Bonds

Each market sells sOHM at a discount to the market price, vesting linearly over 5 days.

bond price  = sOHM price × (1 − discount)
USD value   = amount × SOL price   (SOL)   ·   amount × 1   (USDC, USDT)
sOHM owed   = USD value ÷ bond price
MarketDiscountPaid asMinimum
SOL7%native SOL transfer to the treasury0.05 SOL
USDT6%USDT SPL transfer5 USDT
USDC5%USDC SPL transfer5 USDC

The SOL price comes from Coinbase spot, with CoinGecko as the fallback, refreshed every 30 seconds. The sOHM price is read from the deepest Solana pool once the token trades; before that it is the opening price of the pump.fun bonding curve. Vested sOHM can be claimed at any time: Claim & stake moves it straight into stOHM, Claim to wallet queues it for payout.

Payment verification

Phantom signs and sends the payment, then the app posts only the transaction signature. The server fetches the confirmed transaction from a Solana RPC node and checks:

  1. the transaction succeeded;
  2. your connected wallet is one of its signers;
  3. for SOL: the treasury's lamport balance rose and yours fell, using the pre- and post-balances Solana records for every transaction;
  4. for USDC, USDT and sOHM: the treasury's token balance for that exact mint rose and yours fell, using the recorded token balances;
  5. the amount is at or above the market minimum;
  6. the signature has never been credited before.

The credited amount is the smaller of what left your wallet and what arrived in the treasury. Because it reads balance changes instead of parsing instructions, the check is correct for plain transfers, routed transfers, Token-2022 mints and tokens with transfer fees. If you close the page before it finishes, paste the signature under Credit by signature in the app.

Treasury

The treasury is one Solana wallet. Its key is held offline by the operator and never touches the server. Every 20 seconds the server reads its SOL balance and its USDC, USDT and sOHM token accounts from the chain, and the dashboard shows them with their USD value.

Payouts

Unstakes (after the lock) and "claim to wallet" both join the payout queue, and each payout is sent from the treasury on Solana. Claim & stake never leaves the protocol and takes effect immediately.

Parameters

Epoch5 minutes
Vesting5 days, linear
Stake lock1 hour from the latest deposit
Minimum stake300,000 sOHM
Supply1,000,000,000 sOHM, fixed
Session7 days per signature

API

GET  /api/config     network, mint, token mints, limits
GET  /api/metrics    APY, index, epoch, treasury (on-chain), bonds, tape
GET  /api/session    ?wallet=…                    message to sign
POST /api/account    { wallet }                   staked, bonds, pending payouts
POST /api/intent     { wallet, kind, market }     accounts + blockhash for the transfer
POST /api/bond       { wallet, market, tx }       verify payment, record bond
POST /api/stake      { wallet, tx }               verify deposit, credit stOHM
POST /api/claim      { wallet, autostake, auth }
POST /api/unstake    { wallet, amount, auth }

Custody model

The sOHM token has a fixed supply, so rebases do not mint new tokens on-chain. The index, stOHM balances, bond vesting and the payout queue are kept in the sOHM ledger. Every deposit, every bond payment and the treasury itself are real Solana transactions and balances, and payouts are sent from the treasury wallet by the operator. The APY is an emission rate paid in sOHM, so its dollar value moves with the sOHM price.