Protocol
FORGE integrates against PONS v2 on Robinhood Chain through the published factory/router/escrow contracts. Addresses and launch config IDs must be treated as deploy-time/runtime configuration, never copied permanently from this document.
Official docs reviewed: https://docs.ponsfamily.com/v2
As of the docs reviewed on 2026-10-08:
canLaunch(address) rather than assuming launch access.The PONS factory remains the actual launch mechanism. FORGE needs its own fee-recipient vault contract, not a copy of PONS launch logic.
At launch:
PONS creatorFeeRecipient = AgentFeeVault(agent)Then:
PONS Fee Escrow
|
| claim by AgentFeeVault
v
AgentFeeVault
| platformFeeBps of gross (default 15%) -> FORGE platform fee address [untouched by tip]
| then callerTipBps of remaining pool (default 1%) -> msg.sender
| rest of remaining pool -> Agent beneficiary/action destinationThis keeps PONS economics canonical while making the FORGE platform fee auditable. The claim tip is carved from the beneficiary pool only. BPS values are read live from AgentFeeVaultFactory at claim time. See Fee keeper for profitability-gated auto-claims.
Button in Review & Launch (and CLI --dry-run / simulate):
canLaunch(user)salt (namespaced to the creator wallet)previewLaunchEconomics → pin expectedEconomicsAgentFeeVaultFactory.predictVault(agentId, owner, beneficiary) → vault ECA (owner = creator wallet)predictLaunchAddresses with full launch terms (including creatorFeeRecipient = vault ECA) → token ECA + curve ECALaunchSimulation object (addresses, salt, economics hash, fees, expiry) for the UI to displayDo not deploy the vault in this step. Do not send a transaction.
ForgeLaunchRouter.launch(...) (or launchAndBuy overload) that:- deploys the vault at the predicted CREATE2 address - calls PONS launch with creatorFeeRecipient set to that vault - optionally performs opening buy in the same call
VaultCreated + TokenLaunched from the same txNever cache launch config IDs forever. Read current list/config before every simulate. Re-simulate if any pinned input changes.
Forbidden: separate “deploy vault” tx then later “launch token” tx as the default creator path.
Minimum factory event:
event TokenLaunched(
address indexed token,
address indexed curve,
address indexed deployer,
address pairToken,
uint256 launchConfigId,
uint256 graduationThreshold
);On event:
tokenslauncheslaunch.createdUse the exact ABI from the deployed PONS version. Persist all trade quantities from emitted values rather than recomputing from a requested amount because the finishing buy can be partially filled.
For each trade persist at minimum:
Use the on-chain quote/read methods for current displayed execution estimates. Opening snipe-tax behavior must be included in quotes when active; do not show a curve-only quote that differs from settlement.
When graduation is detected:
CURVE -> GRADUATING -> POOLmode=pool with curve then graduated pool address)poolAddress when knownPONS documents an escrow with native and ERC-20 ledgers. The AgentFeeVault reference implementation expects an escrow interface like:
interface IPonsFeeEscrow {
function claim() external;
function claimToken(address token) external;
function balanceOf(address recipient) external view returns (uint256);
function balanceOfToken(address recipient, address token) external view returns (uint256);
}The vault calls claim as itself, receives the asset, then immediately splits it.
Important:
delegatecallsetBeneficiary / transferOwnership after launchagentId (CREATE2 salt); no need to redeploy vault to migrate the fee walletThe FORGE token is launched through the same PONS factory as creator tokens. Special treatment is only in FORGE's product DB:
The chain launch remains normal and indexable.
CLI steps:
pnpm launch:forge --config ./launch/forge.json
-> assert chain 4663
-> factory.canLaunch(deployer)
-> read enabled config
-> preview economics
-> predict/deploy official FORGE AgentFeeVault if used
-> explicit typed confirmation
-> launchToken / launch-and-buy router
-> wait receipt
-> parse TokenLaunched
-> write receipt JSON locally
-> call authenticated admin import endpoint OR run import scriptRH_CHAIN_ID=4663
RH_RPC_HTTP_PRIMARY=
RH_RPC_HTTP_SECONDARY=
RH_RPC_WS_PRIMARY=
RH_RPC_WS_SECONDARY=
PONS_FACTORY_ADDRESS=
PONS_FEE_ESCROW_ADDRESS=
PONS_LAUNCH_AND_BUY_ADDRESS=
PONS_DEPLOYMENT_BLOCK=
PONS_DEFAULT_LAUNCH_CONFIG_ID=
PONS_DEFAULT_PAIR_TOKEN=Do not commit production addresses until verified from official docs/deployment records.