Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.inkyswap.com/llms.txt

Use this file to discover all available pages before exploring further.

Anti-snipe on V2 is a captcha gate. It is not a fee penalty. The 2 percent fee stays constant for the full curve, including inside the anti-snipe window.

What anti-snipe does

When you launch a token, you can pick an anti-snipe window of 0, 20, 40, or 60 seconds. During this window, any buy or sell call that does not include a valid captcha signature reverts with CaptchaRequired(). The captcha is signed by an off chain signer that the InkyPump UI uses automatically. A normal user on inkypump.com does not see anything different. A bot that calls the contract directly cannot trade until the window ends. After the window closes, the captcha check is skipped and anyone can trade without a signature.

The four options

antiSnipeDurationEffect
0 secondsNo anti-snipe. Anyone can trade from the first block.
20 secondsBrief gate. Good if you want to publish the contract address before opening up.
40 secondsMedium gate.
60 secondsThe maximum. Useful for high profile launches where you expect bot pressure.

What it actually protects against

It protects against scripts that watch the mempool and try to land a buy in the same block as the launch. Those scripts cannot produce the captcha signature, so their transactions revert. It does not protect against humans clicking fast on the UI. The UI gets the captcha signature automatically, so any human user can buy as soon as the launch is live.

Who is exempt

The creator’s prebuy at launch (the optional ETH sent as msg.value on createLaunch) bypasses the captcha check. This is because the creator’s prebuy is executed in the same transaction as createLaunch, before the anti-snipe window starts running.

How to set the duration at launch

The launch form on inkypump.com has an anti-snipe section with the four options as buttons. The selected value becomes the antiSnipeDuration field on the launch. On chain you pass it as part of CreateLaunchParams:
struct CreateLaunchParams {
    // ...
    uint32 antiSnipeDuration; // 0, 20, 40, or 60
    // ...
}
The field is a uint32 so the contract accepts any value, but the UI restricts the choice to the four supported options.

How the gate is implemented

The check lives in LaunchTradingModule._verifyCaptcha:
function _verifyCaptcha(
    InkyPumpTypes.LaunchConfig storage config,
    uint256 launchId,
    address account,
    InkyPumpTypes.CaptchaAuth calldata captcha
) internal {
    uint32 duration = config.antiSnipeDuration;
    if (duration == 0) return;
    if (block.timestamp > uint256(config.launchTimestamp) + duration) return;
    if (captcha.signature.length == 0) revert CaptchaRequired();
    // ECDSA signature verification against the configured signer
}
Two early exits make the gate a no op outside the window: duration == 0 (anti-snipe is off) and block.timestamp past the end of the window.

What the UI shows

When the anti-snipe window is active on a token, a thin bar appears at the top of the trade page with a countdown. The bar says “Anti-Snipe Active, Bot protection, Ends in MM:SS”. The countdown reflects the real on chain remaining time. After the countdown ends, the bar disappears and trading continues normally.