SIPMILL
CA at launch0x0000…0000
Buy · at launch

01How it works

You approve USDG and create a plan: which stock, how many USDG per buy, how often. A keeper calls the contract when a buy is due; the contract pulls exactly that amount from your wallet, swaps it on Uniswap V3 and sends the stock token straight to you. Cancel any time; nothing is ever held by Sipmill.

Two transactions from you: approve on USDG, then createPlan on the Sipmill contract. The first buy is due the moment the plan exists; after that, one buy per interval. Every buy is one transaction that emits PlanExecuted and shows up on /proof.

02Limits

per buy1 – 50 USDG (250 or 1,000 with the token, see 09)
interval1 – 31 days (the site offers daily, weekly, every 2 weeks, monthly)
active plans5 per wallet
slippage0.1 – 3% in the contract; the site offers 0.5%, 1%, 2%
first buydue immediately when the plan is created
missed buysnot caught up: if a buy is skipped, the next one happens on the next scheduled time, once
stocks10 Robinhood stock tokens with a USDG pool, listed on /proof

03The keeper

The keeper is a server key run by the team. Once a minute it checks which plans are due, simulates execute(planId), and sends the transaction if the simulation passes.

What it cannot do. execute takes one argument, the plan id. The keeper has no price or amount parameter. The contract sets the floor from the higher of the pool's current price and its 30-minute average, minus your max slippage. If the price moved more than that, the buy waits and retries. The amount is the one you chose and the recipient is always the plan's own wallet (see 04). The keeper never holds USDG or stock tokens.

Gas. The keeper pays gas in ETH (about $0.01 per buy). It is topped up manually by the team. Once the token exists, that ETH comes from the creator wallet that receives its creator fees.

If the keeper stops, plans are only delayed. When it runs again, each due plan buys once and moves to its next scheduled time. If the owner key has to replace a leaked keeper key, it calls setKeeper; that is the only thing the owner can change about running plans.

04Price floor

The keeper has no price or amount parameter. The contract sets the floor from the higher of the pool's current price and its 30-minute average, minus your max slippage. If the price moved more than that, the buy waits and retries. Inside the buy transaction the contract reads the pool's current price (slot0) and its 30-minute average (TWAP), takes the higher of the two, computes how many stock tokens your USDG should get, and takes off your slippage. If the swap would return less, it reverts and nothing moves. The keeper retries later (5 min, 15 min, 1 h, 6 h).

Numbers on this site are the unofficial pool price, live, from Uniswap V3 on Robinhood Chain. They are not a quote from Robinhood and can differ from stock market prices.

05Risks

  • Stock tokens are not shares. They are tokenized exposure issued by Robinhood, not available to US persons. Holding one does not make you a shareholder.
  • USDG can be paused or frozen by its issuer. While paused, no buy can happen; plans resume on their own afterwards. A frozen wallet cannot buy.
  • Pools can run dry. Some pools are small (marked thin pool); a thin pool means a worse price for bigger buys, or a buy that waits until the floor can be met.
  • The allowance is the real risk. Approve only what you plan to spend. The site approves 3, 6 or 12 buys, never unlimited. You can set it to zero at any time (06).
  • The contract is small and verified, not reviewed by an outside firm. It holds no funds between transactions; read it on Blockscout before you approve.
  • If the keeper key leaks, the owner can replace the keeper with setKeeper. Because the floor uses the higher of the current price and the 30-minute average, moving the pool price for a moment cannot push a buy below it; what a leaked key can still do is delay buys. Cancelling the plan or revoking the approval stops it.
  • Getting USDG on Robinhood Chain is up to you (the Robinhood app or a bridge). You also need a little ETH for gas.

06Cancel & revoke

Cancel a plan: on /plans, press Cancel plan on its card. One transaction (cancelPlan(id)); no further buys for that plan.

Revoke the allowance: on /plans, press Revoke allowance. This sends approve(contract, 0) on USDG and stops every plan of the wallet at once, even ones still marked active.

If this website is down: open the contract on Blockscout (address in 08), tab Contract → Write, connect your wallet and call cancelPlan with your plan id. To revoke, open the USDG token on Blockscout ↗, Write → approve(<Sipmill contract>, 0).

07API

Read-only JSON, no key. Rate limit 10 requests per second per IP. All responses send Cache-Control: no-store and Access-Control-Allow-Origin: *. Press Run to fetch from this page.

GET /api/quote

Live QuoterV2 quote. stock one of the listed symbols, usdg 1–1000.

GET /api/stocks

The listed stock tokens, their pools and live pool data.

GET /api/stats

Totals from the contract's event log. A number is null only when the indexer has nothing to count yet; stale: true means the RPC is behind and the last indexed block is shown.

GET /api/executions

Every PlanExecuted, newest first. limit, before=<id>, wallet=0x….

GET /api/activity

PlanCreated and PlanCancelled, newest first.

GET /api/plans

Plans of one wallet with keeper status and the wallet's cap. wallet=0x… required.

GET /api/healthz

Service, RPC, indexer and keeper health.

08Contract

SipmillPlansloading…
keeperloading…
ownerloading…
USDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
SwapRouter020xCaf681a66D020601342297493863E78C959E5cb2
V3 factory0x1f7d7550B1b028f7571E69A784071F0205FD2EfA
ABIplans-abi.json

Functions

createPlan(token, fee, usdgPerBuy, interval, maxSlipBps)anyone; for your own wallet
cancelPlan(id)only the plan's wallet
execute(id)only the keeper; no other argument
setKeeper(address)only the owner; replaces the keeper key
setHoldToken(address)only the owner, once; turns on the cap tiers
capOf · minOutOf · isDueviews

No upgrade, no pause, no sweep, no fee. Constants are fixed at deploy: 1 USDG minimum, 50 / 250 / 1,000 USDG caps, holding thresholds 2,000,000 and 10,000,000, interval 1–31 days, slippage 0.1–3%, 5 active plans.

09The token

Holding the token raises your per-buy cap: 50 → 250 → 1,000 USDG. That is the only thing it does.

At least 2,000,000 tokens (0.2% of supply) → 250 USDG per buy; at least 10,000,000 (1%) → 1,000 USDG. The contract checks your balance at every buy; if you sell below the threshold, a bigger plan waits until you hold enough again or cancel it. Until the token exists the cap is 50 USDG for everyone.

Once the token exists, its creator fees go to the creator wallet and pay for the keeper's gas and the server. No buyback, no yield, no revenue share.

10FAQ

Does Sipmill ever hold my USDG?

No. USDG moves from your wallet to the pool inside the buy transaction, and the stock token goes from the pool to your wallet in the same transaction. /proof shows the contract's live USDG balance.

Why did a buy not happen?

Your plan card on /plans says why: not enough allowance, not enough USDG, over your cap, USDG paused, or the price floor was not met. The keeper sends nothing until the reason is gone.

Can I change a plan?

No. Cancel it and create a new one; both are one transaction.

Which wallets work?

Browser extension wallets: MetaMask, Rabby, Coinbase Wallet. The site adds Robinhood Chain (4663) to your wallet if needed.

What does it cost?

No Sipmill fee. You pay the pool's fee (0.05% or 0.3%, shown in the calculator) inside the price, and gas in ETH for approve and create. The keeper pays gas for the buys.

Is this financial advice?

No. It is a tool that buys what you tell it to.