Integrate
How Commodity Pairs reads a launch, written down so you can do the same. Not a substitute for argus.world/docs.
Network
chain id 5042 (0x13b2)
explorer https://arc-scan.org
USDC 0x3600000000000000000000000000000000000000 6 decimals (ERC-20 view)
native accounting is 18 decimals — one balance, 1e12 apart
PoolManager 0x8366a39CC670B4001A1121B8F6A443A643e40951
StateView 0xF3334192D15450CdD385c8B70e03f9A6bD9E673b
PositionManager 0x6049c9a0e26405C0985f9E3685C87d0aE917f82B
UniversalRouter 0x4fcA4a51Ab4F23A7447b3284fBd7D73289A89Fb1- Arc refuses JSON-RPC array batching. Several clients do it by default.
eth_getLogscaps at 10,000 blocks per request and 20,000 results per response, refusing the whole query either way.- Arc mines roughly 170,000 blocks a day, so a naive backfill is expensive.
- Multicall3 is at its canonical address. Contract-level aggregation is a different mechanism and works fine.
The Portal registry
Index every Portal, not only the current one. A launch answers from the Portal that created it, permanently.
| Portal | Family | Words | Deploy block | Address |
|---|---|---|---|---|
| #7current | hooked-v4 | 11 | 20,395,275 | 0xB021Be536808f551b31789422Fd28a6c9c6e97Da |
| #6 | hooked-v4 | 11 | 20,240,260 | 0xA5628A11c412596E1f63b75a2C0284F843C549d6 |
| #5 | hooked-v4 | 10 | 20,081,606 | 0x07a688a001f416cC433c68Ff56Aa26bC5131Cc6E |
| #4 | hooked-v4 | 10 | 19,690,658 | 0xa36c443A797771Df82533B8B4A86F0AFfd970862 |
| #3 | hooked-v4 | 9 | 19,674,154 | 0x7A17Ab0106C46C0be30623F3EB7F299CC0058338 |
| #2 | legacy-v3 | 10 | 19,056,397 | 0xBed9880A0ba12722ba4b8791c0B6F8c74338246C |
| #1 | legacy-v3 | 10 | 18,817,867 | 0x0F1C7Cb26D6cD36BD4189E41947658b39437587A |
Decoding the record
Pick the decoder from the Portal address, never the word count. LAUNCH_STRUCT_WORDS() answers 11 on both #7 and #6. A ten-word v4 record and a legacy v3 record are both ten words with different fields. Portal #7 answers registry(); #6 reverts.
hooked v4, eleven words, by index
0 address creator 6 uint16 buyTaxBps
1 int24 tickStart 7 uint16 sellTaxBps
2 bool tokenIsToken0 8 uint256 positionId
3 address locker 9 int24 tickBond
4 address hook 10 address quoteAsset
5 address splitter
ten words drop quoteAsset; the quote is USDC
nine words drop tickBond too; read bonding from the hook
legacy v3 creator, tickStart, tickBond, tokenIsToken0, bonded,
pool, processor, tracker, locker, positionIdA zero-address creator means that one Portal has no record. Ask the others before concluding anything. A timeout, a provider error or an undecodable response is an unresolved lookup, never an absence.
Pool identity and price
The hook is part of the pool key, so a pool id cannot come from the pair alone. Prefer the emitted poolId or hook.poolId(), then check it against the key you computed.
poolId = keccak256(abi.encode(
currency0, currency1, fee, tickSpacing, hooks
))
currencies sorted numerically by address
this family uses fee 10000 and tickSpacing 200
r = sqrtPriceX96^2 / 2^192 raw currency1 per raw currency0
quote per token = r if the launch token is currency0
= 1 / r if it is currency1
human units = that * 10^(tokenDecimals - quoteDecimals)Keep the value as an exact integer ratio until it is formatted. Read both tokens’ decimals and the launch’s own quote, and read totalSupply() rather than assuming a default.
What produces wrong answers
- Treating the PoolManager’s balances as one pool’s reserves. It holds balances for every pool it serves; use
StateView.getSlot0andgetLiquidityper pool id. - Sharing one buy/sell classifier between v3 and v4. The sign conventions are opposite, and v4 amounts are from the swapper’s perspective.
- Counting a Portal
DevBuyevent and the matching PoolManagerSwapas two trades. - Inferring bonded status from the tick. The hook latches it during a swap and a retreat does not clear it.
- Adding credited, paid and converted revenue together. They are three lifecycle stages, not three balances.
- Deduplicating Arc’s native USDC movements against the 0x3600 ERC-20 view by amount. Native transfers log from the EIP-7708 pseudo-address, and collapsing them loses legitimate repeated transfers.
Pinning
Addresses and ABIs come from the Argus bundle in this repository at reference/argus-v4.json (version 3, generated 2026-09-12, retrieved 2026-09-16). It hashes to 54c1706ffde06d24347b890b4ce04ec5fa9abcaf927c2b14b1eaf6f05092a07a. The Argus docs publish 94f7e126fd2f0a9fe34f1c4b82d7f8082eef9757a5822895f3c0a6d1c9d3da1f for the same filename. Verify whichever copy you fetch.
Names, symbols, links and images are written by whoever launched the token. An approved quote asset is not issuer verification and not a backing.