How VVVX works
Every coin on VVVX is created the same way, in one transaction, by the
same contract. Every coin trades against VVV, and every fee it earns is paid out in VVV
— to the creator, to the coin’s holders, and to the platform. Once the launch
transaction lands, neither the creator nor we can change the supply, the liquidity or the
split, so it is worth reading once.
What a launch is
Creating a coin mints a fixed supply of — tokens and puts
every single one of them into liquidity. There is no team allocation, no vesting, no
treasury and no airdrop.
The creator picks one of two shapes:
- VVV only. The whole supply goes single-sided into one
Uniswap V3 pool, COIN against VVV.
- VVV and one more asset. Half the supply opens the COIN/VVV pool and the other half
opens a second pool against one of the —
whitelisted assets — WETH, USDC and cbBTC among them. Both pools open at
the same price, so there is nothing to arbitrage at the first block.
Either way circulating supply at launch is zero. Every token anyone will ever hold has
to be bought out of a pool at a price the pool sets. The creator has no bag to dump, because
the creator was never given one.
Supply
—fixed, no mint function
Opening valuation
—fully diluted, both pools
Circulating at launch
0before the first buy
Creator pre-buy cap
—optional, same transaction
Every coin opens at the same valuation: the contract requires the opening fully-diluted
valuation to land inside —, checked against a price feed for
both pools. It is a narrow band rather than a single number because two things move
underneath a launch — ticks are aligned, so the reachable valuations sit a step apart,
and the oracle can update between a price being quoted and the transaction landing. A price
older than — is refused outright rather than used.
That is not a setting a creator can move. A launchpad where creators pick their own opening
number mostly gets used to open high, and then a buyer’s first job is deciding whether
the valuation in front of them means anything. Fixing it means the only thing separating one
coin from another is what happens after it opens.
The pre-buy
In the same transaction that creates the pools, a creator may buy up to
— tokens — — of
supply — at the opening price, out of the VVV pool, paying in VVV like anybody
else. It is capped by the contract and it is shown on the coin’s page, so you can
always see whether a creator took it and how much.
Creating a coin is a single transaction that deploys the contract, opens one or two pools,
seeds them and locks the positions, so it is not a cheap one — budget roughly
7 million gas for a VVV-only launch and 12 million for a two-pool one.
Everything after it (buying, selling, collecting, claiming) costs what an ordinary swap costs.
The coin contract itself has no owner once it exists: no mint, no burn-from, no pause, no
blacklist. Its name, ticker, image and links are written on-chain at creation
and cannot be edited afterwards. There is no ongoing transfer tax either — the one
exception is the optional anti-snipe window, which lasts two
blocks and then stops forever.
The anti-snipe window
A creator can launch a coin with an anti-snipe window: a tax on the very first buys,
which is burned. It is optional and off by default, it is chosen in the launch
transaction, and it cannot be changed, tuned or turned off afterwards — the
token has no setter for it.
The schedule is hard-coded, so a buyer learns one rule rather than one rule per coin:
- a buy in the launch block is taxed —;
- a buy in the next block is taxed —;
- every buy after that is taxed nothing, forever.
That is two blocks — about
4 seconds on Base.
The tax is sent to the dead address, exactly as the coin side of every collected fee is.
Neither the creator nor VVVX receives any of it.
Buys only, and that is Uniswap’s doing, not a choice
A sell inside the window is untouched. A Uniswap V3 pool checks what it
receives when you sell into it: if the token took a cut on the way in, the pool
would see less than it was promised and revert the whole trade rather than settle it
short. A sell-side tax would therefore not tax sellers, it would stop them selling. So the
window taxes the one direction it can — coins leaving one of the coin’s own
launch pools.
The creator’s own first buy is exempt. It happens inside the launch transaction,
while the factory still holds the supply; the window starts when that transaction ends.
A quote during the window is not what you keep
This is the part worth reading twice. The pool pays out the full quoted amount, and
the token burns the tax afterwards, on the way to your wallet. Everything that checks a swap
— the quoter, the pool, and the amountOutMinimum your slippage setting
produces — is looking at the pool’s payout, not at what arrives. A slippage
setting cannot see this tax and will not stop it. A buy with slippage set to 0.5%, made
in the launch block, succeeds and delivers half.
So during the window the trade panel on this site shows the post-tax figure as
“you receive”, shows the tax on its own line, labels “minimum
received” as the pre-tax figure it is, and makes you press the button twice. It also
refuses aggregator routes for those few seconds: an aggregator’s path is built inside
a third party’s API, and an exact-output leg through a taxed pool spends your whole
input and returns half the coins while still passing the router’s own check. Every
route this site builds itself is exact-input.
What the badge does and does not promise
A coin launched with the window carries a badge wherever it is listed. While the window is
open the badge says so and counts the blocks down; afterwards it reads
launched with an anti-snipe window — past tense, because nothing is being
taxed any more.
The caveat. The token taxes the pools its own launch created and no others.
Anyone — including the creator, using the untaxed pre-buy — can open a pool for
the same coin at a different Uniswap fee tier and trade there untaxed. This site checks
every enabled fee tier against both of a coin’s quote assets, cross-checks each pool
it finds against the coin’s own isLaunchPool, and withdraws the badge
and says so plainly when it finds one the launch did not create. The trade panel here
only ever routes through the launch pools.
VVV, and the second pair
VVV is not optional. Every coin launched here has a COIN/VVV pool, it is the pool the
chart and the pre-buy use, and it is the asset every fee is ultimately paid in. A creator can
add one more pool; they cannot replace the first one, and they cannot pick VVV as the second
pair (the factory reverts PairIsVvv).
The second pair has to be on the whitelist, and the whitelist has one entry requirement:
a USD price feed the contract can read. There are
— assets listed, priced two ways:
Chainlink
Assets with a feed
WETH, USDC, cbBTC, LINK, AAVE and the rest with a published
Chainlink “/ USD” aggregator on
Base. The contract reads the feed at launch and refuses an
answer older than —.
TWAP
Assets priced by TWAP
No Chainlink feed, but a real pool: a 30-minute time-weighted average of the
asset’s own concentrated-liquidity pool against WETH, multiplied by
Chainlink’s ETH/USD. A stale reference price or an unreadable pool reverts the
launch rather than producing a number.
An asset with neither is not listed at all and a launch against it reverts
PairUnpriced. That is not caution for its own sake: without a price the second
pool’s opening tick would be unchecked, and a creator could open it near zero and buy
half the supply for a few wei. Every listed asset, its feed address and what that feed reads
are on the transparency page.
One more detail decided by the contract rather than the creator: the coin’s address is
mined so that it always sorts above both of its pair assets. The pools then only ever
have to be reasoned about in one direction, which removes an entire class of silently-wrong
maths.
The price range
These are concentrated-liquidity pools, so the supply is not spread evenly across every
possible price. It sits inside one range, and the opening price is exactly the top of that
range.
A coin opens at — fully diluted, and the range reaches about
— above that before the pool has no coins left to sell.
Buying walks the price up the range; selling walks it back down.
Range ceiling
—where the pool runs out of coins
Pool fee
—every trade, both directions
The contract requires the opening price to equal the top of the range to the tick, not merely
to sit at or above it. Above a concentrated range there is no liquidity at all, and a pool with
no liquidity lets the price travel through that region for nothing — so a launch that
started above its own range would advertise one valuation and trade at another. Refusing
anything but exact equality is what makes the opening number on a coin’s page real.
Why the LP cannot move
The liquidity position is not burned to a dead address and it is not held by us. It is
transferred, during the launch transaction, to a contract that exists only to hold it and
collect its income.
What makes that a lock is not a feature the contract has. It is the list of functions the
contract does not have:
×transferFromThe position cannot be sent anywhere, by anyone, ever.
×approveNobody can be given permission to move it later.
×decreaseLiquidityThe liquidity itself can never be pulled back out of the pool.
×ownerThere is no admin, so there is no admin to compromise or bribe.
×upgradeToIt is not a proxy. The code it launched with is the code forever.
In a concentrated-liquidity pool the deposited tokens only become withdrawable by calling
decreaseLiquidity. A contract that never implements it cannot release the
principal — not for the creator, not for us, not for anyone who ever finds a key. The only
value that can ever leave the lock is fee income, and only along the routes described below.
There is no unlock date, because there is no unlock. A conventional timelock would be
weaker than this: it would mean a way out exists and is merely waiting for a clock. Here there
is no way out to wait for, on any date, for anyone.
A two-pool coin has two positions and the lock holds both. The coin’s page lists
them, and you can check who owns each one on the Uniswap position manager from a block explorer
in a few seconds.
Fees and who gets them
Every trade pays a — fee to the pool it goes through, and
that fee accrues to the locked position in both of that pool’s currencies — part
in the quote asset, part in the coin itself. The three cases are handled differently.
The coin’s own side is burned
Whatever arrives as the coin itself is sent to the dead address. Paying anybody in thousands
of different launch tokens would be worthless dust, and selling them would be sell pressure
aimed at that coin’s own holders. The lock earns no dividends, so burning the coins it
holds takes nothing from anyone else — it just takes supply out of existence.
The VVV is split the moment it arrives
Fees from the COIN/VVV pool are already in VVV, and they are divided in the same transaction
that collects them:
- The creator — —, credited inside the lock
and pulled with a claim on the coin’s page or on My coins. Nothing is pushed at
anybody: a creator address that rejected an incoming transfer would otherwise be able to
make the split revert for everyone.
- The coin’s holders — —, paid into
the coin contract and shared out per token. That is the dividend described below.
- The platform — —, sent to
—. That address is immutable; there is no function
that changes it.
All three shares are constants in the lock contract with no setter, which is why
this page reads them off the chain rather than stating them. Changing them would mean a new
lock and a new factory; coins already launched keep the terms they launched under.
Second-pair fees go through the keeper first
A coin’s second pool earns in its own pair asset —
WETH, USDC, whatever it is — not in VVV. The lock records
those under accrued and holds them. A keeper
(—) then swaps them to VVV through the one router address
fixed in the lock at deployment, and the VVV is split exactly as above.
This is the only part of the system with a trusted role in it, so it is worth being precise
about its size. The keeper cannot reach a liquidity position or any principal; it can only
spend fees already collected. The swap output must be VVV, the router is fixed, the allowance
granted is exactly the amount being swapped and is reset to zero afterwards, and the returning
VVV is split by the same constants. The worst a compromised keeper can do is accept a bad
price on one conversion, losing part of the fees accrued in that single call.
The transparency page lists the keeper and router addresses as the
contract reports them.
Until a conversion happens, those fees sit in the lock. The coin’s page shows them as
waiting, and Analytics totals them across every coin.
Collecting is permissionless
Anyone can trigger a collection for any coin, from the coin’s page or straight
from a block explorer. That is safe in the sense that matters — the lock can only ever
pay the creator it recorded, the holders of that coin, and the immutable platform address, so
the caller cannot direct a wei of it anywhere. It has one consequence worth knowing about,
which is under the risks.
Nothing can redirect the fees
On some exchanges it can. A vote-escrow DEX lets its governance attach a gauge to a
pool, after which that pool’s trading fees go to the token holders who voted for it
rather than to the position that provided the liquidity — without the creator’s
involvement or consent.
Uniswap is a plain concentrated-liquidity exchange. It has no
gauges, no vote-directed emissions and no mechanism that can send a pool’s fees anywhere but to
the position that earned them. One thing does come off the top, and it is not ours: the
exchange keeps a share of every swap fee as a protocol fee. On the
— pools used here that share is one sixth — measured,
not quoted, the pools read back feeProtocol 0x66 — so five sixths of the
fee reaches the locked position and the rest goes to the exchange.
Coins launched for an X account
A coin can be launched for an X account instead of for a wallet. When it is, the
creator share of its fees does not belong to whoever sent the launch transaction: it accrues
in the fee lock under a separate contract, filed against that account’s
numeric X user id, and only a wallet the account has bound can move it.
The id is the truth; a handle is not
An X handle can be renamed, and an account can be sold or taken over, so a handle identifies
nobody in particular a year from now. The numeric id cannot be changed and never moves
between accounts, so that is what is written on chain and that is what this site shows. VVVX
has no handle resolver: where you see an id, nothing here claims to know whose it is,
and the link beside it goes to X so that X can answer that question.
Binding a wallet, and the key that authorises it
Nothing on a blockchain can check who owns an X account, so something off chain has to
vouch for it. Here that is a single key — the signer — which signs an
authorisation naming one id and one wallet, and the binding contract verifies that signature
and nothing else. Anybody may submit a valid authorisation; the signature is the permission,
not the sender.
What that means, plainly: whoever holds the signer key can bind any X id to any wallet,
and could therefore take the unclaimed creator fees of any account that has not claimed
yet. There is no on-chain way around it. What limits it is that the signer is a separate
key from the one that deploys the contracts and the one the platform fee is paid to, that it
can sign nothing but bindings — it holds no money, owns no contract, and cannot move a
coin, a pool or a fee — and that every binding it authorises is an event on chain, so a
wrong one is visible immediately and for ever. The signer may be a
multi-signature Safe rather than one key — the contract accepts a contract
wallet’s signature as readily as a key’s — and it is worth reading which it
is, because a Safe’s owners can be rotated and a bare key’s cannot: the signer
address is fixed at deployment and has no setter. The signer’s address, and the binding
contract’s, are on the transparency page and on
the claims page, read from the chain.
Unclaimed fees wait, and are never swept
An account that has bound no wallet is the normal resting state, not a fault. Its fees
accrue in the lock and nobody at all can move them — not the platform, not the
signer, not the binding contract itself. There is no expiry, no reclaim and no sweep: they
wait for as long as it takes, and the day a wallet is bound they are claimable in full.
Two things an X launch cannot do
A pre-buy is refused on an X launch: there is no wallet the coins would belong to,
and letting the sender pre-buy on somebody else’s coin would be a gift to whoever sent
it. And the creator role cannot be transferred away from the account — the fee stream
belongs to the id, and it is not for sale.
Everything else is identical. The supply, the locked liquidity, the split, the holder
dividends and the anti-snipe window all behave exactly as they do on
any other coin; a coin can perfectly well be launched for an X account and with an
anti-snipe window.
Holder dividends
Every coin launched here is an ERC-20 with one extra ability: it can pay its holders. When a
collection happens, the holders’ share of the VVV is sent into the coin contract and
credited per token held, to everyone at once, without anybody being iterated over.
It accumulates. Your claimable amount grows with every collection while you hold, and stops
growing the moment you sell — what you have already accrued stays yours and is still
claimable afterwards. Claim on the coin’s page, or claim several at once from
My coins. The VVV goes straight to your wallet.
Addresses that earn nothing
Some balances are not holdings, and counting them would quietly take the dividend away from
the people it is for. Fixed at creation and never changed afterwards: the COIN/VVV
pool, the second pool if there is one, the lock, the factory, the
coin contract itself, and the dead address. Coins sitting in a pool are not
anybody’s, and coins in the lock are on their way to being burned.
An excluded balance does not count toward the eligible supply either, so it does not dilute
the share of the holders who do earn. A pool somebody else creates later is not
excluded — the coin has no owner who could add one — so it earns like any other
holder. That is an accepted consequence of having no admin at all.
The first distribution, before anybody holds anything
Right after a launch every token is in the pools, so the eligible supply is zero and there is
nobody to divide a dividend among. Rather than revert or lose it, the coin holds the
VVV as undistributed and folds it into the next distribution once at least
— tokens are in hands that can earn. Nothing is lost and
nothing divides by zero; the coin’s page shows the held amount.
The coin’s picture
Choose a file from your phone or computer. The browser shrinks it to 512×512 and
re-encodes it before anything leaves the page — which also strips the EXIF data a phone
camera attaches, so the coordinates of where you took the photo are not published along with
your coin.
What is written on-chain is an IPFS CID: the identifier IPFS itself would give those
exact bytes. VVVX serves the picture, which is why it appears instantly and needs no gateway
— but the reference is not a link to VVVX. If this site were ever replaced, anyone
holding the file could pin it and every coin’s picture would resolve again. Launchpads
that store an id from their own database instead lose every image the day they shut down.
A CID is a name, not a promise of storage. It says what the bytes are, so anybody
holding them can prove they are the right ones — it does not make them exist somewhere
forever. The picture stays reachable while somebody keeps a copy: VVVX does while it runs,
and after that only if you or someone else has pinned it. If a coin’s image matters to
you, pin the file yourself; it costs nothing and it is the only version of this that does not
depend on us.
PNG, JPEG, GIF and WebP. SVG is refused: it is a document that can carry scripts, and a coin
image is not a place to accept those. If you already pinned an image yourself, you can paste
its CID instead of choosing a file.
Buying with ETH
A coin trades in one pool or two, and neither of them takes ETH.
Most people arriving at a coin hold nothing else, so the trade panel takes
ETH as well — and works out how to get it there.
Three routes are priced every time you type an amount:
- Straight through the pair pool, when the coin’s second pair is
WETH: the router wraps your
ETH and swaps it, in one transaction with no approval.
- Through VVV: WETH into VVV on
Uniswap, then VVV into the coin — still one transaction.
- Through the aggregator: KyberSwap buys VVV across every
Base venue, then the coin is bought here. Two confirmations,
and the panel says so before you start.
Whichever actually delivers more of the coin is the one used. A single-transaction route wins
unless a two-step route beats it by a real margin, because a second signature is worth more
than a fraction of a percent. You can also pay in VVV or in the coin’s pair asset
directly, and the panel picks the pool that matches.
You never grant the aggregator an allowance: the leg it performs is paid in
ETH itself, which is not a token and cannot be spent by anyone on
your behalf. Its contract address is pinned in this site’s code and checked before
anything is signed. And the amount bought on Uniswap is taken from
what actually arrived in your wallet, never from what the quote predicted.
If you stop between two steps, you are holding VVV — not a loss, and not a stuck
transaction. Switch Pay with to VVV and the buy finishes.
One exception, for about four seconds. While a coin’s
anti-snipe window is open, the aggregator routes are not offered:
their path is built inside a third party’s API and cannot be shown to be exact-input,
and an exact-output leg through a taxed pool spends the whole input for half the coins while
still passing the router’s own check. The Uniswap routes are
unaffected and every one of them is exact-input. The quote you see during that window is also
pre-tax at the pool; the panel shows what you keep.
Contracts
Five contracts, all non-upgradeable, deployed once. The addresses are below, each linked to
its block explorer; the transparency page adds the rest —
the price feeds, the router, and every constant read live off the chain.
- Factory — deploys the coin, creates one or two pools, seeds the liquidity,
hands the positions to the lock and runs the optional pre-buy, in one transaction.
- Coin — fixed supply, no owner, no mint, no tax, and a
claim()
that pays its holder their VVV.
- Fee lock — holds the positions forever, burns the coin side of every fee and
splits the VVV between the creator, the holders and VVVX.
- Pair registry — the whitelist of assets a second pool may use, and each
one’s price feed.
- VVV/USD feed — a time-weighted average of the VVV pool multiplied by
Chainlink’s ETH/USD. Every dollar figure on this site comes from it.
Not yet deployed
VVVX has no contracts on Base mainnet. Verified addresses and source links appear
here once it does, and the contracts are meaningless to trust until you can read them at a
real address.
Risks, stated plainly
The lock promises exactly one thing: the liquidity stays in the pools, and fee income is
split the way this page says. Everything else about a coin — whether it turns out to be
worth anything — belongs to the market. Here is what is left over after the mechanics,
stated once, without softening.
A collection can be front-run
collect is permissionless, and the dividend it pays is credited to whoever holds
the coin in that block. So somebody can buy, collect and claim in one transaction, take
a share of the pot that was built up while they held nothing, and sell again. We have written
the attack ourselves and it works.
It is an accepted trade-off, not an oversight. The alternative is to gate collection
behind a privileged address, and a permissioned collect is a worse deal for holders: it means
the fees only move when we say so. The mitigation is operational rather than clever —
the keeper collects often, which keeps the uncollected pot small, and a small pot is not worth
the gas to skim. If you are holding a coin with a large uncollected balance, collecting it
yourself is the cheapest defence and anybody may do it.
Prices come from oracles, and oracles go stale
Opening valuations are enforced against a Chainlink feed or a 30-minute TWAP of a real pool
multiplied by Chainlink’s ETH/USD. Both can be wrong, and both can stop answering. The
contract’s response to a stale or unreadable price is always the same: revert the
launch. There is no fallback source and no “last known good” value, because a
launch priced off a broken feed is exactly the outcome the band exists to prevent. A TWAP is
also harder to move than a spot price, but it is not impossible — it is an average of a
pool somebody could push, over half an hour, at their own cost.
The keeper is a trusted role, bounded
Second-pair fees only become VVV when the keeper converts them. If the keeper stops, those
fees sit in the lock indefinitely — visible, not lost, and still convertible the day it
runs again. If the keeper is compromised, the damage is slippage on a conversion, bounded by
the fees accrued in that one call. It cannot reach a liquidity position, cannot change where
the output goes, and cannot pay itself.
An anti-snipe badge can be worked around
The window taxes buys out of the pools the launch itself created, and it can only do
that — the token knows which pools those are and nothing else. Anyone can open a pool
for the same coin at a different Uniswap fee tier and trade there untaxed, and a creator
holding an untaxed pre-buy can do it in the launch block. This site checks every enabled fee
tier against the coin’s own isLaunchPool and withdraws the badge when it
finds such a pool, but the check runs here, not on chain: the token itself keeps no
record that its badge no longer means anything.
The other half of the same caution: a quote during the window is pre-tax. The pool
pays out in full and the tax is burned afterwards, so nothing a router or a slippage setting
checks can see it. Any other interface, and any wallet’s own simulation, will show you
the pool’s figure. See the anti-snipe window.
The platform address cannot be changed
That cuts both ways and it is worth saying so. Nobody can redirect the platform’s share
to themselves, and nobody — including us — can move it if the key behind it is
ever lost. The share would keep being paid to an address that cannot spend it.
Everything else
Locked liquidity is not a price floor, not a promise and not a reason to buy. A creator with
a pre-buy holds coins they can sell like anyone else, and the coin’s page says whether
they took one. A second pool means two prices that arbitrage keeps roughly together, not
exactly. And the coin contracts have no admin at all, which is the point — but it also
means there is nobody to call when something about a particular coin goes wrong.