Docs

How Sill works

Sill is a page that builds Uniswap v3 transactions. A limit order is a real liquidity position — an NFT in your wallet — placed so that it can only ever buy, or only ever sell, at your price. Sill deploys no contract and holds nothing.

Getting started

You need a wallet (MetaMask, Rabby, Coinbase Wallet…) on Robinhood Chain, chain ID 4663. The app offers to add the network for you. You'll want:

  • ETH for gas. Robinhood documents two ways over from Ethereum: the canonical bridge (about ten minutes) and Relay (under a minute). See Robinhood's bridging docs.
  • USDG — Global Dollar, issued by Paxos — to place buy orders. Swap ETH for it on the Trade tab.
  • Shares, to place sell orders — Robinhood's own stock tokens.

Limit orders

A Uniswap v3 pool holds liquidity in ranges between price ticks. A position whose whole range sits on one side of the current price holds only one of the two tokens: below the price it's all USDG (or all shares, depending on how the pool orders its tokens), above it the other.

So a buy order is a position that holds only USDG, one tick-spacing wide, placed entirely below the market. It does nothing while the price is above it. When trades push the price down through it, the pool converts it — at the prices inside the band — into shares. A sell order is the mirror image: shares, placed above the market, converting into USDG as the price rises through it.

Placing the band

You type a price. Sill converts it to the pool's tick, then snaps the band away from the market onto the pool's tick grid, so the band's worst edge is your limit or better:

  • A buy's band ends at or below your limit; a sell's begins at or above it.
  • The band is always entirely out of range — strictly beyond the price on the side where it holds only what you pay with. If your limit is at or through the market, the nearest band that is still out of range is used, and the app says so.
  • The band is one tick-spacing wide: 0.1% in a 0.05% pool, 0.6% in a 0.3% pool, 2% in a 1% pool.

Each stock's orders go into the lowest-fee pool with real depth on both sides (at least $40,000, and $8,000 a side). Arbitrage keeps every pool within its own fee of the market, so the 0.05% pool tracks the price most tightly. A full fill trades at the geometric mean of the band's two edges — better than your limit — and you earn that pool's fee, less the protocol's share, on the volume that fills you.

The transaction is one call to the position manager: a selfPermitIfNecessary using the token's own EIP-2612 permit for the exact amount, then mint. The minimum the pool may take is set to what it would take at that liquidity, so if the price moves into your band before it lands, the pool computes zero liquidity and the mint is refused rather than placing a different order.

Filling & withdrawing

The Orders tab reads every position your wallet holds from the position manager and shows, for each, what it holds now and what it turns into next:

  • Waiting — the price hasn't reached your band. Cancel and every unit comes back (less rounding in the pool's favour, a few millionths of a cent).
  • Filling — the price is inside your band. Part is converted; the bar shows how much.
  • Filled — the price is past your band. It's 100% what you asked for.

Withdraw is one transaction: remove all liquidity, collect everything (what you bought plus fees) to your wallet, and burn the empty NFT. Its minimums are what the position is worth right now; if the price walks back into a filled order before the withdrawal lands, it's refused instead of paying you less than shown. With several orders filled, one transaction withdraws them all.

The chain doesn't record whether a band started as a buy or a sell — a band holding shares is either a sell that's waiting or a buy that has filled. Sill remembers the side of every order placed from this browser; for orders placed elsewhere it says what the band holds and what it would do next, which is true either way.

Ladders

Spread one amount across three or five bands, from your limit to 2%, 5% or 10% further away. The amount is split evenly (the last band takes the rounding, so the parts always sum to exactly what you entered); bands that land on the same ticks are merged. All of them are placed in one transaction with one signature.

Earning the fee

The Liquidity tab places an ordinary range position: both tokens, across ±5%, ±10%, ±25% or every price. While the price is inside your range, each trade pays you your share of the pool's fee; you hold a mix of USDG and shares that shifts as the price moves. Collect fees any time, remove half, or close it.

Trading now

The Trade tab buys or sells at the market through Uniswap's SwapRouter02, quoted on every fee tier by QuoterV2, with a minimum you choose (0.3%–1% slippage), and refuses trades that would move the price more than 3%. ETH ↔ USDG goes through the 0.01% WETH/USDG pool; buying ETH unwraps it to your wallet in the same transaction.

Risks

  • A filled order that isn't withdrawn can un-fill. If the price walks back through the band, the pool converts it back at the same prices. Nothing on chain withdraws for you.
  • An order may never fill. It waits until the price reaches it; there is no expiry.
  • Range positions lose against holding when the price moves a long way (impermanent loss); fees may or may not make up for it.
  • Smart-contract risk is Uniswap's and the token issuers': Sill adds no contract of its own, but can't remove theirs.
  • The tokens are Robinhood's. What each represents, and who may hold it, is set by its issuer — read Robinhood's terms.
  • Sill is experimental software and not investment advice.

How it's tested

Every transaction the app sends is built by one file, js/orders.js. A suite runs that same file against the real contracts on a fresh fork of Robinhood Chain: orders placed with permits in both pool orientations, filled by real trades through the pool, withdrawn with balances checked to the wei; a close refused when the price walks back; a mint refused when the price enters its band; a four-band ladder placed and cancelled in one transaction; a stranger refused; a too-small permit and an expired deadline refused; a range that earns fees in both tokens; ETH in and out. The score on the home page is published only for the version of that file actually on the site.

Contracts

All of them are someone else's, live on Robinhood Chain before Sill existed. Uniswap's are listed in Uniswap's own deployment record for chain 4663, and verified on the explorer.