Owner powers and trust
The list below is the set of onlyOwner functions in the source, not a summary of intentions.
The v2 owner is powerful, and the contracts say so in their own comments. Read this before deciding what
the word "immutable" is doing in anyone's marketing.
What the V2 factory owner can do
addLaunchConfig / updateLaunchConfigsetPairTokenEconomics / setPairTokenApprovedsetLaunchFee, setLaunchEnabled, setWhitelistedLaunchersetMaxCreatorTaxBpssetSnipeTaxStartBps / setSnipeTaxSecondssetGraduationExecutor / setLaunchDeployer / setLaunchForwardersetCreatorFeeRecipient + executeCreatorFeeRecipientChangerescueCurveFees, forceSweptGraduation, rescueSweptGraduationrescueSweptGraduation releases a stuck launch's swept reserves to one address, and only 7 days after the sweep. Seeding stays permissionless throughout that wait, so anyone can end the window early and permanently with one call to createGraduatedPool.What the hook owner can do
setHookFeeBpsMAX_HOOK_FEE_BPS = 1,000 bps (10%). The constructor sets it to 100 bps (1%). Pools already registered keep their snapshotted rate.setProtocolFeeShareBpsMAX_PROTOCOL_FEE_SHARE_BPS = 5,000 bps). The constructor sets it to 3,000 bps (30%).setProtocolFeeRecipient, setFeeSweepOperatorsetFactorysetBuybackVault, setBuybackBurnBps, setMaxInternalPriceImpactBpsbuybackEnabled = false), so these settings change nothing for any launch made here.What nobody can do
- Renounce ownership of the V2 stack.
renounceOwnership()reverts withOwnershipCannotBeRenouncedonAgiV2LaunchFactory,AgiV2MemeHook,AgiV2LaunchLockerandAgiV2BuybackVault. An ownerless stack could never rotate a fee sweep operator or recover a creator's recipient, and every live launch would still depend on those powers. Ownership can still be handed over, two-step, to a new owner. - Unlock liquidity. Neither locker exposes a withdraw, transfer, burn or arbitrary-call function. The position NFT stays where it is.
- Take someone else's fees.
AgiV2FeeEscrowis a pull ledger;claim()paysmsg.senderand nobody else. - Mint, pause or blacklist a launch token. Both launch tokens are fixed-supply ERC-20s with no admin functions. Metadata is set in the constructor.
- Upgrade anything. There are no proxies anywhere in either tree. A fix means a new deployment; the old one keeps running exactly as it is.
- Change a launched token's economics. The curve receives its fee, tax, phantom reserve, threshold and fee policy as constructor immutables, and the factory snapshots the pool fee, tick spacing and fee policy per launch.
V1's factory and locker use OpenZeppelin's Ownable2Step as it comes, without the
renounceOwnership() override that Model V2 applies to its own four contracts. A V1 owner
therefore can renounce, which would permanently freeze the protocol fee recipient and the
fee-collector whitelist on the locker, with no way to appoint anyone who could change them. Not
renouncing is an operational rule we would be keeping, not a guarantee the code makes.
Quote assets have their own issuers, who can pause or restrict them. Uniswap V4's PoolManager
and PositionManager are third-party singletons. Robinhood Chain is an L2 with its own
sequencer. None of that is under the control of these contracts; the rescue paths exist precisely because
it is not.