Chapter 12 · Reference

Reference

Live addresses, Arc constants, functions and errors in one place.

Addresses below are read from the deployment manifest the app is running with, so they match what the rest of the site signs against. Arc constants and function lists are copied from the contracts and the deploy script.

Live addresses

ContractAddress
Chain id5042
PoolManager (Uniswap v4)0x8366a39CC670B4001A1121B8F6A443A643e40951
HookarcHook0x73F1e4860cbCA84B2ad87b02bb3BE10009D86ACc
LaunchFactory0x3B6d691A6f04D8c0439b9A7742bE728056fa14dF
Router0x87E33edb815c8dF4B0ba238dDE2D3E28e5248Ec2
QuoteRegistry0x2a963fdA242a09CDb3D7e2a52abF2DfeA050D22e
LPLocker0x594ddBF68750e1cf871f46e8Bb0c83917C728485
CreatorFeeNFT0xaF984054d43eB4d4F1429F48383A851a8CFa7D6A
FlywheelBurner0x5D09070F59D81f005989a12092AD55750e0ee2Ca
TokenMetadata (image, description, links)0xe5FeB8042486A97af66cD5603B325382f7518406
Owner0x8d7CAC91b23c301c31Ef81A386121ab2b8e1Fb7a
Treasury (cirBTC fee sink)0x8d7CAC91b23c301c31Ef81A386121ab2b8e1Fb7a
$HARC token (official)not launched yet
Deploy block21190486
Canary passedyes

$HARC is launched outside Hookarc; the address above is the only official one and stays "not launched yet" until it is set. A zero hook address means the app is running with the pre-deploy manifest and the write gate is closed.

Arc constants

NameValue
ChainArc mainnet, id 5042, Circle's L1, EVM (Osaka)
RPChttps://rpc.mainnet.arc.io
Explorerhttps://explorer.arc.io/address/<address>
Block time≈ 0.5 s, deterministic finality
Native gas tokenUSDC (18-decimal native balance)
USDC (ERC-20 view, quote)0x3600000000000000000000000000000000000000, 6 decimals
cirBTC (quote)0x171A4217b86A807A64eB94757Db6849fb4bDbAA0, 8 decimals
Chainlink USDC / USD0x84EA90AC252Dc437031461836DB5164219147905, 8 decimals, 86,400 s heartbeat
Chainlink BTC / USD0xa109B535C70C8Be9995be64Bb6751AcDB27e03De, 8 decimals, 86,400 s heartbeat
Registry heartbeat90,000 s
Sequencer feednone (Arc is an L1)
PoolManager0x8366a39CC670B4001A1121B8F6A443A643e40951
V4Quoter0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94
StateView0xF3334192D15450CdD385c8B70e03f9A6bD9E673b
Multicall30xcA11bde05977b3631167028862bE2a173976CA11
CREATE2 deployer0x4e59b44847b379578588920cA78FbF26c0B4956C

Constants

NameValueWhere
PROTOCOL_FEE_BPS30HookarcHook
CREATOR_FEE_BPS50HookarcHook
CREATION_FEE1 USDC (1e18 native wei)LaunchFactory
SUPPLY1,000,000,000 × 1e18OpeningPrice
FDV_USD_810,000 × 1e8OpeningPrice
TICK_SPACING60LaunchFactory, OpeningPrice
LP fee0PoolKey
Quote decimals accepted6 to 18QuoteRegistry
SEQUENCER_GRACE1 hour (unused on Arc)QuoteRegistry
Registry heartbeat (mainnet)90,000 sDeployArc
MAX_SNIPE_WINDOW50,000 blocksBlocks
MAX_SNIPE_MAX_BUY_BPS1,000Blocks
MAX_SNIPE_TAX_BPS5,000Blocks
MAX_BURN_BPS1,000Blocks
MAX_POT_BPS500Blocks
MAX_HALT_STALENESS7 daysBlocks

Functions

LaunchFactory

FunctionAccessNotes
launch(LaunchParams) payableanyonevalue must equal CREATION_FEE
launchWithBlocks(LaunchParams, Blocks.Config) payableanyonevalidates the config first
predictTokenAddress(creator, name, symbol, salt)viewCREATE2 address before launching
poolKeyFor(token, quote)viewrebuilds the PoolKey with the right orientation
setHook(hook)owner, once
setLaunchesPaused(bool)ownernew launches only
withdrawCreationFees(to)ownernative USDC; to must be able to receive it

HookarcHook

FunctionAccessNotes
register(...)factorycalled inside the launch
claimCreatorFees(tokenId, to)NFT ownertokenId = poolId
claimPot(poolId, to)the winnerpays potOwed[id][msg.sender]
sweepProtocolFees(quote)anyoneto the configured sink
claimProtocolFees(quote, to)owner
setFeeSink(quote, sink)owner
setTrustedRouter(router, bool)owner
previewBuyFees(poolId, quoteIn)viewprotocol, creator, pot, total
quoteOf(poolId) / isLive(poolId)viewused by the Router
pools, blockConfig, snipeCapQuote, pot, potCount, potOwed, protocolFees, creatorFees, feeSink, trustedRouterpublic state

Router

FunctionNotes
buy(key, quoteIn, minOut, recipient, deadline) payableapprove the router for USDC or cirBTC; quoteIn in raw units
sell(key, tokensIn, minOut, recipient, deadline)approve the router for the token

QuoteRegistry

FunctionAccess
priceUsd8(quote)view, strict
quoteHalted(quote, maxStaleness)view, lenient
quoteDecimals(quote) / isKnown(quote) / quotes(quote) / sequencerUp()view
add(quote, feed, heartbeat)owner
disableForNewLaunches(quote)owner
setSequencerFeed(feed)owner

FlywheelBurner

FunctionAccess
configure(key, maxQuotePerCall)owner, once
setMaxQuotePerCall(v)owner
buybackAndBurn(quoteIn, minOut)owner, once per block
harc() / totalQuoteSpent() / totalBurned()view

Errors

ErrorRaised byWhen
HookNotSet, LaunchesPaused, WrongCreationFeeLaunchFactorylaunch preconditions
UnknownQuote, QuoteDisabled, StalePrice, BadPrice, SequencerDownQuoteRegistrypriceUsd8
BadFeed, BadQuoteDecimals (outside 6 to 18), AlreadyAddedQuoteRegistryadd
PriceZero, PriceOutOfRangeOpeningPriceopening price derivation
BadBlockConfigBlockslaunchWithBlocks
OnlyFactory, BadPoolKey, AlreadyRegisteredHookarcHookinitialise / register
PoolNotLive, LaunchLocked, ExactOutputNotSupportedHookarcHookevery swap
QuoteHalted, OverSnipeCapHookarcHookbuys with Halt Guard / Anti-Snipe
LiquidityLocked, AlreadySeeded, NotAuthorizedHookarcHookliquidity paths
NotFeeOwner, NothingToClaim, BadRecipient, NoFeeSinkHookarcHookclaims and sweeps
UnknownPool, Expired, ZeroRecipient, ValueMismatch, TooLittleReceived, TransferFromFailed, RefundFailedRouterbuy / sell
NotSingleSided, OnlyFactory, TransferFailedLPLockerseed
NotConfigured, OverCap, OncePerBlock, InsufficientBalance, TooLittleReceived, BadKeyFlywheelBurnerbuybacks

Events

Launched, Registered, BlocksSet, HookSwap, AutoBurned, PotAdvanced, PotWon, PotClaimed, CreatorFeesClaimed, ProtocolFeesClaimed, ProtocolFeesSwept, FeeSinkSet, TrustedRouterSet, Seeded, Burned, plus the ownership events. The indexer chapter lists which of them feed which table.

read the code
  • contracts/deployments/arc.json the manifest these addresses come from
  • contracts/script/ArcAddresses.sol the Arc constants
  • web/lib/abis.ts the ABI subset the app calls