What Millrace is
Millrace is a token launchpad on Base, built on Uniswap v4 hooks. A creator launches a token against any pair: ETH, or any ERC20 contract. There is no allowlist. Every swap pays a fee that is set once, at launch, and split automatically inside the pool hook. Traders go on record with Callouts, the people behind them are Callers, the live channel of every trade and Callout is the Flume, and a share of every fee turns the Wheel: it buys the official Millrace token and burns it.
Every token has a total supply of 1,000,000,000, all of it placed in the pool as single-sided liquidity at the starting price. There is no presale and no team allocation.
Launching
- Name, ticker and logo. The ticker is 2 to 10 letters or numbers. The logo and any links are attached after launch with a free signed message.
- Pair. Pick ETH, WETH, USDC, cbBTC or paste any ERC20 address. The pair's USD price sets the starting market cap, about $3,000. If no price can be found you type it in.
- Fee. One slider sets the trading fee. It is charged on every buy and sell, and it is final: it cannot be changed after launch.
- Split. A second slider decides how the creator side of every fee is divided between you and all holders, from all-creator to all-holders.
- First buy (optional). Buy some of your own token in the launch transaction, at the starting price.
Launching costs 0.001 ETH plus network gas. Pairs with transfer fees or rebasing are rejected by the contracts.
Fees
The trading fee is chosen by the creator at launch. The minimum is 0.01% and the ceiling is 5%. On top of it the Uniswap pool charges its own 0.30%. Every captured fee is split three ways:
| Share | Goes to |
|---|---|
70% | The creator side. The creator chooses how it is divided between the creator and all holders of the token. |
15% | The platform, for the site, the indexer and the API. |
15% | The Wheel. |
If the creator sends half of the creator side to holders, the creator keeps 35% of each fee, all holders share 35%, the platform takes 15% and the Wheel takes 15%. Each token page shows its real breakdown. Fees are paid in the token's pair asset.
Holder rewards
The holders' share is paid out pro rata to what each wallet holds. Rewards accrue per token with reward-per-share accounting, so nothing has to be distributed by hand and there is no snapshot to game: your balance is settled every time it changes.
- Pool and infrastructure addresses (the pool manager, the hook, the factory, the routers and the dead address) are excluded from the supply that earns rewards.
- If a fee is captured while no eligible holder exists, the holders' share is credited to the creator instead.
- Claim any time from the token page or from your Portfolio. Rewards are paid in the token's pair asset. Claiming first settles any fees the pool has not yet processed, so it can take two transactions.
The Wheel
15% of every fee goes to the Wheel. The Wheel keeps its balance per pair asset. Once the treasury has set the official token, later swaps on other pools automatically buy the official token with the accrued share and burn it. There is no keeper and no manual step: a swap does the work once the accrued amount passes a small threshold.
- A buyback that cannot run never blocks a swap. It is skipped and the share stays in the Wheel.
- Until the official token is set, the share only accrues. Nothing is lost: it is spent as soon as the token is set.
- Pair assets the official pool cannot buy directly keep accruing until the treasury converts them.
- Live numbers are on the Stats page and the Home page.
Callouts
A Callout is your reason for buying, written down and signed. It is tied to a real buy, so you cannot call a token you do not hold.
- 10 to 500 characters of plain text. Optionally a target market cap and a horizon of 1 week, 1 month, 3 months, 6 months or 1 year.
- One Callout per buy. Each buy you make can carry one.
- It is graded from your entry price: the return since the buy is shown next to it. Reaching the target marks it as a hit. A horizon that passes without a hit marks it as missed.
- You can delete your own Callout. The buy cannot carry another one afterwards.
- You need a Caller profile to post. Callouts are opinions of their authors, not advice.
Callers and the Flume
A Caller profile has a unique username (3 to 20 characters: a to z, 0 to 9 and underscore), an optional display name, bio, X handle and photo up to 200 KB. There is one profile per wallet, and you can rename it once every 7 days. Some names, like admin and millrace, are reserved.
Follow callers to fill the Following tab of the Flume. The Flume also has Everyone, Big buys (large buys only), Callouts and Callers tabs, and a minimum size filter. Top Callers ranks callers by average return on their Callouts, win rate and volume.
Profiles, follows and Callouts are off-chain. They are signed with your wallet, cost no gas and never move funds.
Signed messages
Off-chain actions use EIP-191 personal_sign. Your wallet shows the exact text before you sign. Lines are separated by \n, addresses and hashes are lowercase, and Timestamp is milliseconds since the epoch, accepted within 10 minutes of server time.
Profile
MILLRACE profile
Address: <address>
Username: <username>
Name: <display name>
Bio: <bio>
X: <handle without @>
Avatar: <sha256 hex of the avatar string, or empty>
Timestamp: <ms>
Follow and unfollow
MILLRACE follow
Follower: <address>
Target: <address>
Action: follow | unfollow
Timestamp: <ms>
Callout
MILLRACE callout
Token: <token address>
Tx: <buy transaction hash>
Text: <text>
Target: <market cap in USD, integer, or empty>
Horizon: <1w | 1m | 3m | 6m | 1y, or empty>
Timestamp: <ms>
Delete a Callout
MILLRACE delete callout
Id: <id>
Timestamp: <ms>
Token logo and links (creator, within 30 minutes of launch)
MILLRACE metadata update
Token: <token address>
Logo: <uploaded logo path, or empty>
Website: <url or empty>
X: <url or empty>
Telegram: <url or empty>
Description: <text or empty>
Timestamp: <ms>
API
The same JSON API that powers this site is public and read-only for everyone. Base path /api. Amounts named *Amount are integer strings in base units. Signed writes use the messages above.
| Endpoint | Returns |
|---|---|
GET /api/tokens | Every token with price, market cap, volume, holders, fee split and sparkline. |
GET /api/tokens/:address | One token. Also /activity (trades) and /holders. |
GET /api/flume | The live Flume. Params tab, min, viewer, limit, before. |
GET /api/leaders | Top Callers. Params sort (avg, win, volume), range (7d, 30d, all). |
GET /api/profile/:username|address | A Caller profile with stats. |
GET /api/callout | Callouts. Params token, author, sort, limit, before. |
GET /api/wheel | The Wheel: accrued, spent, burned and recent flushes. |
GET /api/stats | Platform totals. |
GET /api/portfolio/:address | A wallet's holdings, trades and Callouts. |
GET /api/holder-rewards/:token/:address | Pending and claimed holder rewards. |
Contracts
Millrace runs on Base (chain id 8453), on the Uniswap v4 PoolManager. Addresses:
Risks
- Tokens launched here can lose all of their value. Anyone can launch anything: a token being listed is not an endorsement.
- A pair token is controlled by its own issuer. If it is paused, blacklists the pool or hook, or is upgraded maliciously, every pool paired with it is affected.
- Pairs with transfer fees are rejected. Rebasing and unusual tokens may behave unexpectedly even if they pass.
- A creator who picks a wrong or low starting price only affects their own pool, but you should check the price before you buy.
- Callouts are the opinions of their authors, graded by a past price. They are not advice and a good record does not predict the future.
- Prices, ranks and totals come from an indexer that can lag the chain by a few seconds.
- Fees reduce what you receive on every swap. Read the fee on the token page before you trade.