Blog

The creator’s opening buy is not capped. We said otherwise. Here is the correction.

Our UI, our docs and our internal notes all said the creator could take at most 5% of supply at launch. A fork test proved the contract does the opposite. What the code actually does, why, and what we changed.

September 8, 2026 5 min readcorrectioncontracts

When we moved to the V3 design we carried over an assumption from the old one: that the creator’s opening buy was limited to 5% of supply. The old bonding-curve pool enforced exactly that. The launch modal said it. TODO-WIRING.md said it. We believed it.

It is not true, and the test that proved it is now in the repository.

What the token actually does

The launch-window rules live in the token’s _update hook. During the window, a transfer from a pool to a wallet is checked against a 5% wallet cap and a 5.5% cumulative cap — unless the transfer is the “atomic launch buy”: the block is the launch block, the factory has opened a recipient exemption, and the recipient matches. When that is true, the caps are skipped entirely.

LiquorLauncherToken._update (excerpt)
bool isAtomicLaunchBuy =
    block.number == launchBlock && _initialBuyRecipient != address(0) && to == _initialBuyRecipient;
if (!isAtomicLaunchBuy && block.number == launchBlock) {
    revert LaunchBlockBuyBlocked(to);
}
if (!isAtomicLaunchBuy) {
    // 5% wallet cap, 5.5% cumulative cap
}

The factory sets that recipient immediately before the opening buy and clears it immediately after. So the creator’s buy — and only the creator’s buy, and only in the launch block — is exempt. Everyone else’s first fill is at least one block later, under the caps.

Why it is designed that way

The exemption is not an oversight. In the launch block, the creator is the only party who can transact against the pool at all; there is nothing to protect other buyers from yet, because there are no other buyers. The caps exist to blunt whoever arrives in blocks +1 and +2. Applying them to the one transaction that cannot be a snipe would just be a rule for its own sake.

The trade-off is real, though. A creator can send 1 ETH with a launch and take roughly 42% of supply at the opening price. Nothing stops that except the fact that it is public: initialBuyAmount is in the TokenLaunched event and on the token page.

What we changed

  • The fork test suite now has two cases that assert the real behaviour from both sides: “exempts the creator opening buy from the anti-snipe caps” (the creator ends up holding more than maxTxLimit()) and “holds a later buyer to the max-transaction cap inside the window”.
  • The launch modal no longer claims a 5% cap. It shows what the buy will be and that it is uncapped.
  • TODO-WIRING.md and the Indonesian status notes were corrected, and say so in the text rather than silently.
  • The 5% figure in lib/bonding-curve.ts (maxCreatorInitialBuyEth) is flagged as dead code belonging to the old pool.

We would rather publish a correction than have the first person to find out be a buyer reading a launch event.