Your coin pays
someone
every trade.
Launch an ERC-20 on Robinhood Chain and name a wallet. Up to 2% of the ETH side of every swap goes straight to it. A cause, a creator, a treasury, yourself. The cut is taken inside the pool, so a trade routed through an aggregator pays exactly what a trade from a wallet pays.
Fresh off the chain
read live, nothing cached, nothing curatedNothing has launched yet
The contracts are not deployed. This table fills itself straight from the chain the moment they are, with no curation and nothing that can be paid for.
Taxes leak.
Hooks don't.
The 2021 way to share fees was a tax in the token's transfer function, firing when the pool was on one side of the trade. It worked until it didn't: route the same swap through an aggregator and the pool was never the counterparty, so the tax never fired. By 2026 that pattern mostly reads as a honeypot.
Uniswap v4 moved the extension point into the pool itself. Our hook runs on every swap the pool serves, whoever sent it and however it got there, and it only ever touches the ETH side. Your coin stays a plain ERC-20 anyone can integrate without reading a tax table.
Set the terms, then live with them
Two numbers decide everything: what the pool charges on the ETH leg, and how much of that reaches the wallet you named. Both are written into the pool at launch and there is no function to change either afterwards. Drag them around and see what they mean.
Hard cap in the contract is 2%. Set once at launch, never editable.
The remainder funds the platform. Also fixed at launch.
0.8ETH
reaches the wallet you named
- fee collected
- 1 ETH
- to your wallet
- 0.8 ETH
- to treasury
- 0.2 ETH
Volume is something a coin either gets or does not. Most do not.
No black box.
Just code.
Every coin launched here is the same fixed-supply ERC-20 with nothing added to it. All of the fee logic lives in one hook attached to the pool, and every line of it is on this page or in the repo.
Read it before you send anything. It is short on purpose.
function beforeSwap(
address, PoolKey calldata key, SwapParams calldata params, bytes calldata
) external onlyPoolManager returns (bytes4, BeforeSwapDelta, uint24) {
PoolId id = key.toId();
PoolConfig memory c = _config[id];
// ETH is currency0. It is the specified currency exactly when the swap
// is exact-input zeroForOne, or exact-output the other way.
bool exactIn = params.amountSpecified < 0;
if (c.feeBps == 0 || exactIn != params.zeroForOne) {
return (IHooks.beforeSwap.selector, ZERO_DELTA, 0);
}
uint256 named = exactIn
? uint256(-params.amountSpecified)
: uint256(params.amountSpecified);
uint256 fee = (named * c.feeBps) / BPS;
if (fee == 0) return (IHooks.beforeSwap.selector, ZERO_DELTA, 0);
poolManager.take(key.currency0, address(this), fee);
_credit(id, c, fee);
return (
IHooks.beforeSwap.selector,
toBeforeSwapDelta(int128(uint128(fee)), 0),
0
);
}Pick a wallet. Launch the coin.
Minimum 0.005 ETH of liquidity, no allowlist, no application form, no waiting. Whether anyone trades it is a different question entirely.