Abstract
On a thin pool, one large sell moves the price for every holder. Sidebook is an over-the-counter desk on Robinhood Chain where a seller lists a bag at a fixed price in ETH, and a buyer takes it directly. An escrow contract settles each deal in a single transaction, so the trade never passes through a pool and the chart never sees it.
1. The problem
Most tokens on Robinhood Chain trade in constant-product pools, where the pool keeps x · y = k. Selling Δx tokens into a pool that holds x tokens and y ETH pays out
ETH out = y · Δx / (x + Δx)
price after = price before · (x / (x + Δx))²Take a pool of 25 ETH and 600 million tokens, and a seller with 60 million tokens (6% of a one-billion supply). Sold into the pool, the bag returns about 2.27 ETH and the price drops 17.36% for everyone. Sold over a desk at 3% under spot, the same bag returns 2.425 ETH and the pool price does not move at all. The seller is paid more, and every other holder keeps their chart.
2. The desk
A listing sets:
- the token (any ERC-20 on Robinhood Chain) and the amount for sale;
- the price per token in ETH, set by the seller;
- an optional smallest and largest single fill, so a bag can be sold in pieces;
- an expiry.
A buyer picks a listing, chooses an amount inside its limits and pays the listed price. There is no auction and no slippage: the price shown is the price paid.
3. Settlement
The desk contract holds listed tokens in escrow and swaps them for ETH atomically. Its interface:
createListing(token, amount, pricePerToken, minFill, maxFill, expiresAt) → id
// pulls `amount` of `token` from the seller into escrow
takeListing(id, amount) payable
// requires minFill ≤ amount ≤ min(maxFill, remaining) and an unexpired listing
// requires msg.value == amount × pricePerToken
// sends the ETH to the seller and the tokens to the buyer in the same call
cancelListing(id)
// seller only: returns the unfilled tokens
events: ListingCreated, ListingFilled, ListingCancelledThe design keeps a few rules:
- Atomic. A take either moves both the ETH and the tokens or reverts. Neither side can be left half-paid.
- Only listed tokens are held. The contract holds nothing but the unfilled part of open listings.
- Sellers stay in control. Only the seller can cancel a listing, at any time, and an expired listing can only be returned to its seller.
Status
4. Prices and spread
Next to every listing the desk shows the token's live pool price and the spread to spot: how far the ask sits above or below it. Live prices come from DexScreener, price history from GeckoTerminal, and ETH in USD from Coinbase.
These prices are shown for reference only. Settlement never reads an oracle: a deal settles at the price the seller listed and the buyer accepted.
5. Custody
Sidebook is non-custodial. The site never holds keys or funds, and every action is a transaction the user signs in their own wallet. The site itself is only a window onto the contract: anyone can call the contract directly from the explorer.
6. The token
The project token has not launched. When it does, its contract address will appear at the top of the home page with a copy button, and here. Its supply and role will be published with the launch.
7. Limits
- Contract risk. Any smart contract can have bugs. The source will be published and verified on Blockscout before it holds funds.
- Price is the seller's. A listing can sit above spot. The desk shows the spread so the buyer can see it before taking.
- Token behaviour. Tokens with transfer fees or blocklists may not settle cleanly; the contract checks the amounts it actually receives.