Integrate
Every comfy-launched token and its trades, from this site's contracts.
Facts#
| Chain | 0G mainnet · 16661 |
|---|---|
| Pair | token / native 0G |
| Token | ERC-20 · no mint · no transfer tax |
| Liquidity | locked · no removal |
Contracts#
| Role | Address | Contract | From block |
|---|---|---|---|
| launcher | AgentLauncher | 45552863 | |
| hook | ComfyLaunchHook | 45552823 | |
| pool manager | CLPoolManager | 45552804 | |
| splitter | FeeSplitter | 45552817 | |
| locker | ComfyLocker | 45552863 |
Launches#
// topic0 0x20c8f644fcaa2f5b4960a99c98327b3d5bd9838194dae4a67dd914ec9c8249feevent Launched(bytes32 indexed poolId, address indexed token, address indexed creator, int24 openingTick, uint256 ladderSupply, uint256 launchFee)
The pool manager holds other pools, so keep only pool ids from Launched.
Trades#
// topic0 0x04206ad2b7c0f463bff3dd4f33c5735b0f2957a351e4f79763a4fa9e775dd237event Swap(bytes32 indexed id, address indexed sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee, uint16 protocolFee)// topic0 0x787cb3fc0a69467064364b0ecaef40dee4a3f7e29279d74b70e8ded6e4758a1fevent ChargeTaken(bytes32 indexed poolId, address indexed router, bool isBuy, uint256 quoteAmount, uint256 baseFee, uint256 openingFee, uint256 creatorTax, address currency)
charge = ChargeTaken.baseFee + ChargeTaken.openingFee + ChargeTaken.creatorTaxtrader 0G = Swap.amount0 - charge
Swap.amount0is 0G. Below zero, the trader paid.- Pair each
ChargeTakenwith the adjacentSwapin its pool whereSwap.senderisChargeTaken.router.ChargeTaken.quoteAmountis|Swap.amount0|, pluschargewhenChargeTakencomes first. - No
ChargeTakenmeans no charge. Swap.feeandSwap.protocolFeeare not the comfy charge.
Fees per pool#
Fees are set at launch. The creator can change the compute share. A change applies after the pool's next sweep. See Fees.
cast call 0x809ACD73Ac30b4E2D2dFd7d35b1FDA850DCd4334 'launchSnapshot(bytes32)((bool,bool,bool,address,uint64,uint64,uint16,uint16,uint32,uint16,uint16,uint32))' <poolId> --rpc-url https://evmrpc.0g.aicast call 0x500AcfBb2199D35ab1Aa87736665D76c56bf633e 'splitOf(bytes32)((bool,uint16,uint16,uint16,bytes32))' <poolId> --rpc-url https://evmrpc.0g.ai
| Call | Returns |
|---|---|
launchSnapshot | registered, initialized, quoteIsCurrency0, creator, launchedAt, launchBlock, baseFeeBps, creatorTaxBps, delaySeconds, openingBps, floorBps, decaySeconds |
splitOf | configured, protocolBps, creatorBps, creatorComputeBps, creatorIdentity |
Verify#
cast call 0x2F74d603f7B7D8B7BFc78ef04E09905B862bE86a 'isComfyToken(address)(bool)' <token> --rpc-url https://evmrpc.0g.aicast logs --from-block 45552863 --to-block 45652862 --address 0x2F74d603f7B7D8B7BFc78ef04E09905B862bE86a 'Launched(bytes32 indexed poolId, address indexed token, address indexed creator, int24 openingTick, uint256 ladderSupply, uint256 launchFee)' --rpc-url https://evmrpc.0g.ai
true means this launcher made the token. Query 100,000 blocks at a time.
