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
| Chain | Solana mainnet-beta |
| Fees | SOL, typically under $0.001 per transfer |
| Explorer | https://solscan.io |
| USDC | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v (6 decimals) |
| USDT | Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB (6 decimals) |
| $sOHM | launches 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
| Market | Discount | Paid as | Minimum |
|---|---|---|---|
| SOL | 7% | native SOL transfer to the treasury | 0.05 SOL |
| USDT | 6% | USDT SPL transfer | 5 USDT |
| USDC | 5% | USDC SPL transfer | 5 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:
- the transaction succeeded;
- your connected wallet is one of its signers;
- for SOL: the treasury's lamport balance rose and yours fell, using the pre- and post-balances Solana records for every transaction;
- for USDC, USDT and sOHM: the treasury's token balance for that exact mint rose and yours fell, using the recorded token balances;
- the amount is at or above the market minimum;
- 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
| Epoch | 5 minutes |
| Vesting | 5 days, linear |
| Stake lock | 1 hour from the latest deposit |
| Minimum stake | 300,000 sOHM |
| Supply | 1,000,000,000 sOHM, fixed |
| Session | 7 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.