Every commodity, priced twice.Argus Portal #7 · Arc · chain 5042Argus docs
Partners

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_getLogs caps 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.

PortalFamilyWordsDeploy blockAddress
#7currenthooked-v41120,395,2750xB021Be536808f551b31789422Fd28a6c9c6e97Da
#6hooked-v41120,240,2600xA5628A11c412596E1f63b75a2C0284F843C549d6
#5hooked-v41020,081,6060x07a688a001f416cC433c68Ff56Aa26bC5131Cc6E
#4hooked-v41019,690,6580xa36c443A797771Df82533B8B4A86F0AFfd970862
#3hooked-v4919,674,1540x7A17Ab0106C46C0be30623F3EB7F299CC0058338
#2legacy-v31019,056,3970xBed9880A0ba12722ba4b8791c0B6F8c74338246C
#1legacy-v31018,817,8670x0F1C7Cb26D6cD36BD4189E41947658b39437587A

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, positionId

A 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.getSlot0 and getLiquidity per 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 DevBuy event and the matching PoolManager Swap as 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.