How Bidwall works
A fresh token's pool usually has its SOL spread over every price, so there is almost nothing right under the chart. Bidwall lets the project rent SOL bids that sit just below the price for a set number of days, paid to the people who provide them.
The idea
On a Raydium CLMM pool, liquidity can be placed in a price range. SOL placed in a range below the current price waits there as bids: when someone sells, the price walks down into that SOL instead of falling through empty space. Bidwall is a market for exactly that SOL. A project says how much it wants, how far below the price, for how long and at what yearly rate. LPs bring the SOL from their own wallets and get paid by the minute.
Open the app to see it on a live pool: the chart is the pool's real liquidity, read from its tick arrays on mainnet, and the slider shows what a rental would add under the price.
Who does what
| Puts in | Gets | |
|---|---|---|
| Project | Rent in SOL, streamed to each LP; the listing fee | SOL bids below its price for the term |
| LP | SOL in its own Raydium CLMM position | All of the rent and all trading fees on its range |
| Bidwall | Transaction building, checks, the board | 0.5 SOL per listing and 10 % on top of streamed rent |
A listing, step by step
- List. The project picks its token and a Raydium CLMM pool against SOL. If there is none, the app builds Raydium's own pool creation, signed and paid by the project. It sets the target depth, the band below the price, the yearly rate, the term (3 to 60 days) and an optional fuse floor. One transaction pays the listing fee and carries the listing as a memo. Mint and freeze authority must be revoked.
- Join. An LP opens a SOL-only position from just under the current price down through the band. The server builds Raydium's open position instruction; the position NFT lands in the LP's wallet. The same transaction carries a join memo.
- Rent. Bidwall reads every joined position, checks its owner, pool and size, and fills the target in join order. The project then streams rent to each counted LP through Jupiter Lock: one stream per LP, unlocking every minute until the term ends, recipient fixed, cancellable by the project only. LPs claim whenever they like, straight to SOL.
- While it runs. LPs can collect fees, add SOL or exit at any time. If an LP pulls its liquidity or moves its position NFT while rent is streaming, the listing flags it and the project can end that stream; the LP keeps what already unlocked.
- Turnover. Bidwall measures the SOL in the band that does not come from listing LPs. Once that organic depth reaches the target, the listing shows "Turned over" and the project may end the remaining streams early.
- Fuse. Bidwall samples the pool price every minute. When most of the last 20 minutes sit below the floor, the listing shows "Fuse tripped", joining pauses and every LP sees a one-click exit. Nothing closes a position for you.
- Term end. Streams finish unlocking. LPs claim the rest and keep or close their positions.
The rent
For each LP: rent = counted lamports × rate (bps) × seconds left ÷ (10,000 × 31,536,000), rounded down. It unlocks in 60-second steps; the rounding remainder unlocks at the start.
Example: 100 SOL of depth for 14 days at 40 % a year is 1.534 SOL of rent, all of it to LPs. The project also pays 0.153 SOL to Bidwall on top, and the 0.5 SOL listing fee. If the project ends the streams on day 7, LPs keep the 0.767 SOL that unlocked and the other half goes back to the project.
Programs used
There is no Bidwall program. Every action is a transaction on these programs, built and simulated by our server and signed by your wallet:
| Raydium CLMM | CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK | positions, pool creation, depth |
| Jupiter Lock | LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn | rent streams, no protocol fee |
| SPL Memo | MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr | the registry |
The registry
There is no database of listings. Listings, joins and rent payments are memos in the users' own transactions, and each of those transactions touches the treasury …. The server reads the treasury's history, keeps a memo only if its transaction succeeded and its signer paid what the memo claims, then reads the positions and streams themselves from the chain. Anyone can rebuild the board from the same public data.
bw1:list:{json}in the listing transaction, which pays the listing fee.bw1:join:<listing>:<position>in the LP's open position transaction.bw1:rent:<listing>:<position>:<stream>:<lamports>in each rent transaction, which pays the 10 % share.
Risks
- Custody. Your position NFT and your rent stream belong to your wallet. Every transaction is simulated before you see it, with every SOL amount listed.
- Price risk is yours. If the price falls into your range, your SOL becomes the token, as on any Raydium position. There is no loss cover.
- The fuse is an alert. It cannot close positions; you exit from your wallet.
- Rent can end early. The project may end streams at turnover, after the fuse, or when an LP pulls liquidity. Unlocked rent always stays with the LP.
- Projects can stop paying. Rent is certain only once it is streamed: a project may decide not to stream to new LPs. Check the listing before joining.
- Third-party programs. Raydium CLMM and Jupiter Lock are upgradeable by their teams.
Fees
Projects pay a 0.5 SOL listing fee and 10 % on top of the rent they stream, both straight to the treasury inside their own transactions. LPs pay Bidwall nothing. Everyone pays normal Solana network fees, a small priority fee and refundable account rent.
API
The app uses the same public endpoints. Reads: GET /api/listings, GET /api/listings/{id}, GET /api/wallet/{address}, GET /api/token/{mint}, GET /api/pool/{pool}?rent=300&band=10, GET /api/config. Builders: POST /api/tx/{pool|list|join|add|collect|exit|rent|cancel|claim} with a JSON body including wallet; each returns unsigned v0 transactions in base64 with their SOL lines. Sign them in order and send them anywhere, or through POST /api/send.