Every VIRUS constant, every Pons parameter VIRUS reads live with its exact getter, and the chain and Uniswap addresses with their verification status.
§How to read this page
There are three kinds of numbers:
- VIRUS constants. Compiled into the VIRUS contracts. They cannot be changed by anyone, including the VIRUS admin.
- Pons parameters. Owned by Pons and read live, every time they are used. This page lists the exact getter for each. Where the Pons published source sets a default, it is given and labelled default. A default is not a live value; the deployed Pons contracts may hold something else. Check the live value with the getter.
- Addresses. Given only where they appear in the VIRUS reference audit (the project's specimen log of every borrowed or adapted behavior, not a security audit), with that document's classification.
§VIRUS constants
§Economics (VirusEconomics)
| Constant |
Value |
Meaning |
BPS |
10,000 |
Basis-point denominator |
TARGET_CONTROLLED_BPS |
80 |
Share of volume VIRUS aims to route to the feeder |
BURN_SHARE_BPS |
5,000 |
50% of feeder income burned from host supply |
DEV_SHARE_BPS |
3,000 |
30% of feeder income booked to the developer |
TREASURY_SHARE_BPS |
2,000 |
20% of feeder income to the treasury; the treasury also takes the rounding remainder |
INOCULATION_FEE_BPS |
250 |
2.5% of the host spent on the first buy, rounded up |
MAX_DEPTH |
3 |
Deepest VIRUS layer (ETH → host → v1 → v2 → v3) |
PARITY_TOTAL_BPS |
100 |
Parasite reference total fee (1.00%) |
PARITY_VENUE_BPS |
20 |
Parasite reference venue cut (0.20%) |
| Scaled unit |
bps × 10,000 |
Fee readouts in parts per 10^8 of volume |
§Registry (VirusRegistry)
| Constant |
Value |
Meaning |
TREASURY_DELAY |
2 days |
Between proposeTreasury and executeTreasury |
COORDINATOR_DELAY |
2 days |
Between proposeCoordinator and executeCoordinator |
§Coordinator (VirusLaunchCoordinator, private constants)
| Constant |
Value |
Meaning |
MAX_TOTAL_TRADE_FEE_BPS |
2,000 |
curveFeeBps + tax and hookFeeBps + tax must not exceed it (mirrors Pons) |
HOST_DECIMALS |
18 |
A host and its Pons pair economics must both report 18 decimals |
MAX_NAME_LENGTH |
64 bytes |
Mirrors PonsV2LaunchDeployer; name must be non-empty |
MAX_SYMBOL_LENGTH |
16 bytes |
Symbol must be non-empty |
MAX_LOGO_LENGTH |
512 bytes |
|
MAX_DESCRIPTION_LENGTH |
2,048 bytes |
|
MAX_SOCIAL_LENGTH |
256 bytes |
Each of twitter, telegram, discord, website, farcaster |
§App-side (not on chain)
| Setting |
Value |
| Slippage options |
50, 100, 300 bps (0.5%, 1%, 3%) |
| Default slippage |
100 bps (1%) |
| Minimum output |
floor(quote × (10,000 − slippage) / 10,000), never zero |
| Maximum route length |
MAX_DEPTH + 1 launches |
Pool-swap minHopPriceX36 |
0 (amountOutMinimum is the bound) |
§Pons parameters, read live
Every value in this section belongs to Pons. VIRUS reads it at the moment of use and never hardcodes it. Below, factory is the Pons V2 launch factory, hook is the meme hook (factory.memeHook()), and curve is a launch's bonding curve.
§Launch configs
| Parameter |
Getter |
Default |
Notes |
| Number of configs |
factory.launchConfigCount() |
— |
Configs are indexed from 0 |
| Config |
factory.getLaunchConfig(id) → {supply, curveFeeBps, phantomQuote, graduationThreshold, poolFee, tickSpacing, enabled} |
No published default recorded; read live |
Disabled configs are never offered |
| Supply |
getLaunchConfig(id).supply |
No published default recorded; read live |
The whole supply is minted to the curve |
| Curve base fee |
getLaunchConfig(id).curveFeeBps; per launch curve.feeBps() |
No published default recorded; read live |
The creator tax is solved against it |
| Pool LP fee |
getLaunchConfig(id).poolFee |
Must be 0 (CoreLpFeeMustBeZero) |
All post-graduation fees are hook fees |
| Tick spacing |
getLaunchConfig(id).tickSpacing |
No published default recorded; read live |
Part of the pool key |
§Host pair economics
| Parameter |
Getter |
Notes |
| Pair approval |
factory.approvedPairTokens(host) |
Owner-controlled (setPairTokenApproved) |
| Phantom quote reserve |
factory.pairTokenEconomics(host).phantomQuote; per launch curve.phantomQuote() |
Host units; replaces the config's figure for a custom-pair launch |
| Graduation threshold |
factory.pairTokenEconomics(host).graduationThreshold; per launch curve.graduationThreshold() and getLaunchedToken(virus).graduationThreshold |
Host units |
| Decimals |
factory.pairTokenEconomics(host).decimals |
VIRUS requires 18 |
§Fee policy
The live policy applies to new launches. Each launch keeps a frozen copy.
| Parameter |
Live getter |
Per-launch getter |
Default |
Ceiling |
| Protocol fee recipient |
hook.currentFeePolicy().protocolFeeRecipient |
factory.getLaunchFeePolicy(token).protocolFeeRecipient |
— |
— |
| Protocol fee share |
hook.currentFeePolicy().protocolFeeShareBps |
factory.getLaunchFeePolicy(token).protocolFeeShareBps, curve.protocolFeeShareBps() |
3,000 (30%) |
5,000 |
| Buyback burn share |
hook.currentFeePolicy().buybackBurnBps |
factory.getLaunchFeePolicy(token).buybackBurnBps |
5,000 |
— |
| Hook fee |
hook.currentFeePolicy().hookFeeBps |
factory.getLaunchFeePolicy(token).hookFeeBps |
100 (1.00%) |
1,000 |
| Max internal price impact |
hook.currentFeePolicy().maxInternalPriceImpactBps |
factory.getLaunchFeePolicy(token).maxInternalPriceImpactBps |
300 |
— |
Buybacks are disabled on every virus, so buybackBurnBps has no effect on VIRUS children.
§Creator tax and fee ceilings
| Parameter |
Getter |
Default |
Notes |
| Max creator tax |
factory.maxCreatorTaxBps() |
1,000, hard ceiling 1,000 |
A secondary source reports 10% on mainnet (UNVERIFIED). Not part of the Pons economics digest. |
| Creator tax of a launch |
getLaunchedToken(token).creatorTaxBps, curve.creatorTaxBps() |
— |
Set by VIRUS at launch |
| Combined curve ceiling |
— |
curveFeeBps + creatorTaxBps ≤ 2,000 |
Pons rule, mirrored by the coordinator |
| Combined pool ceiling |
— |
hookFeeBps + creatorTaxBps ≤ 2,000 |
Pons rule, mirrored by the coordinator |
§Launch gate and launch fee
| Parameter |
Getter |
Default |
Notes |
| Open launching |
factory.launchEnabled() |
— |
|
| Launch permission |
factory.canLaunch(address) |
— |
launchEnabled || whitelistedLaunchers[address]; VIRUS requires it for you and for the coordinator |
| Launch fee |
factory.launchFee() |
Not in the published source |
Wei; msg.value must equal it. A secondary source reports 0.0005 ETH (UNVERIFIED). |
| Launch forwarder |
factory.launchForwarder() |
— |
The only address allowed to call launchTokenFor. VIRUS does not use it. |
§Snipe tax
| Parameter |
Getter |
Default |
Notes |
| Starting rate |
factory.snipeTaxStartBps() |
9,900 |
Snapshotted per launch |
| Window |
factory.snipeTaxSeconds() |
15 seconds, maximum 60 |
A secondary source says "decays to zero over 5 seconds" (UNVERIFIED X5). Curve-side logic is not in the published source (UNVERIFIED X1). |
§Curve state (per launch)
| Parameter |
Getter |
| Reserves used for pricing |
curve.getReserves() → (quoteReserve, tokenReserve) |
| Real quote raised |
curve.realQuoteReserve() |
| Collected fee and tax (unswept) |
curve.quoteFeeBalance(), curve.creatorTaxBalance() |
| Pool reserve |
curve.reservedTokens() |
| Remaining sellable |
curve.sellableTokens() |
| Ready to graduate |
curve.readyToGraduate() |
| Graduated |
curve.graduated() |
§Pool state (per graduated launch)
| Parameter |
Getter |
| Pending base fees |
hook.pendingFees(poolId, currency) |
| Pending creator tax |
hook.pendingCreatorTax(poolId, currency) |
| Pending buyback |
hook.pendingBuyback(poolId, currency) |
| Sweep operator |
hook.feeSweepOperator() |
§Pons timings (published source)
| Parameter |
Value |
Class |
| Creator fee recipient override |
3-day timelock, then a 3-day execution window |
VERIFIED_PONS (source) |
| Swept-graduation rescue |
Available after 7 days in Swept |
VERIFIED_PONS (source) |
§Pons wiring
VIRUS configures only the Pons factory address. Every other Pons address is read from the factory:
| Contract |
Getter |
| Meme hook |
factory.memeHook() |
| Fee escrow |
factory.feeEscrow() |
| Uniswap V4 PoolManager |
factory.poolManager() |
| Uniswap V4 PositionManager |
factory.positionManager() |
| Launch locker |
factory.locker() |
§Addresses
No VIRUS contract addresses are given in these docs. The app reads them from its deployment configuration. Confirm any VIRUS address you are given against the wiring checks in Verify on chain.
§Robinhood Chain
| Item |
Value |
Class |
| Chain ID |
4663 (mainnet), 46630 (testnet) |
UNVERIFIED, consistent across several sources |
| Public RPC |
https://rpc.mainnet.chain.robinhood.com (rate limited) |
UNVERIFIED |
| Explorer |
https://robinhoodchain.blockscout.com (default). Uniswap's registry links a different Blockscout host, 8crv4vmq6tiu1yqr.blockscout.com. |
UNVERIFIED |
| WETH9 |
0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 |
UNVERIFIED; not used by VIRUS |
§Pons V2
| Contract |
Address |
Class |
| Launch factory |
0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e |
UNVERIFIED: stated in the Pons README and a secondary source; bytecode not checked. Fork test test_fork_FactoryWiring. |
| Fee escrow |
0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e |
UNVERIFIED (secondary source). Never used as a constant; read from factory.feeEscrow(). |
| Meme hook |
0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be044 |
UNVERIFIED (secondary source). Read from factory.memeHook(). |
| Buyback vault |
0x42df2a798f82289E177311362e8f5ccC45c1219c |
UNVERIFIED (secondary source). Not used by VIRUS. |
| Launch locker |
0x267444D099b10fB5Ed7c3Cc7B7c767AdcA574952 |
UNVERIFIED (secondary source). Read from factory.locker(). |
§Uniswap V4 on chain 4663
From Uniswap's first-party deployment registry (deployments/json/4663.json). Bytecode was not checked. Fork test test_fork_UniswapWiring asserts that the Pons factory uses these PoolManager and PositionManager addresses.
| Contract |
Address |
Class |
| PoolManager |
0x8366a39CC670B4001A1121B8F6A443A643e40951 |
UNVERIFIED |
| PositionManager |
0x58daec3116aae6D93017bAAea7749052E8a04fA7 |
UNVERIFIED |
| V4Quoter |
0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94 |
UNVERIFIED |
| StateView |
0xF3334192D15450CdD385c8B70e03f9A6bD9E673b |
UNVERIFIED |
| UniversalRouter (v2.1.2) |
0x204FAca1764B154221e35c0d20aBb3c525710498 |
UNVERIFIED |
| Permit2 |
0x000000000022D473030F116dDEE9F6B43aC78BA3 |
UNVERIFIED |
Universal Router encoding used by VIRUS: command V4_SWAP = 0x10; actions SWAP_EXACT_IN_SINGLE = 0x06, SETTLE_ALL = 0x0c, TAKE_ALL = 0x0f. Graduated-pool trading stays disabled in the production app until test_fork_UniversalRouterSwap passes.