Hartii developer docs

HartiiLabs

Contract map

Everything an indexer needs to pick up every token launched on hartiilabs.com, on one page. New launches now go through a second factory (V3), so index both factories. Every address below returned bytecode from quai_getCode and every event topic was matched against real logs on Quai mainnet (chain 9, Cyprus-1) at block 10366996 (2026-09-30).

1. Index these two factories

Both factories emit the same TokenLaunched event, so one handler covers both. V1 still accepts launches — keep indexing it.

FactoryAddressIndex from blockStatus
TokenFactoryV30x00249722868732Ee678b88Db668EAf7cC75Ae12A10356575Live — every new launch from hartiilabs.com
TokenFactory (V1)0x001AF1BbB40807fcb99C9Eeaa49dF5E91e7Efd428872950Live — the original factory

2. Events

topic0 is keccak256 of the signature.

EventEmitted bytopic0
TokenLaunched(address indexed token, address indexed curve, address indexed creator, string name, string symbol, bytes32 metadataHash)V1 and V3 factory0x57e2b1dd3b3baad37496efb283e2935bc1cfedc331530404a4530514e5e71356
LaunchConfigured(address indexed token, uint256 vestingDurationSecs, uint256 lockStartDelaySecs, uint256 creatorFeeShareBps, uint256 treasuryFeeShareBps, uint256 snipeWindowBlocks, bool autoBuyback)V3 factory only0x87811f92b40333fcc295e685f06b34bc066187e283798479a0ab372528df5b2a
Buy(address indexed buyer, uint256 quaiIn, uint256 tokensOut, uint256 fee)each token's curve0xbeae048c6d270d9469f86cf6e8fedda3c60ad770f16c24c9fc131c8e9a09101d
Sell(address indexed seller, uint256 tokensIn, uint256 quaiOut, uint256 fee)each token's curve0x846c37eef631e0943682d87352ec117c20008eb7f425c9b85ac011a6d4774cc0
Graduated(address indexed token, uint256 quaiReserve, uint256 tokenReserve)each token's curve0x1c858049e704460ab9455025be4078f9e746e3fd426a56040d06389edb8197db
LiquidityAdded(address indexed provider, uint256 quaiIn, uint256 tokensIn, uint256 shares)V3 curves after graduation0x64b83944e79c3ce8d4c297411de637c3e102d064677aac0c163976ebdcd6f50e
LiquidityRemoved(address indexed provider, uint256 quaiOut, uint256 tokensOut, uint256 shares)V3 curves after graduation0x1dc8bb69df2b8e91fbdcbfcf93d951b3f0000f085a95fe3f7946d6161439245d

3. How a token trades

  1. Launch. The factory emits TokenLaunched. token is a plain ERC-20 with 18 decimals; curve is where it trades. Both are EIP-1167 clones of the implementations in section 5.
  2. Bonding curve. Buys and sells hit the curve and emit Buy / Sell. The curve holds the QUAI reserve.
  3. Graduation. Graduated fires when the curve fills. The same curve contract then becomes the token's pool: Buy / Sell keep firing from the same address, so there is no new venue to discover. V3 curves also take LP deposits after graduation (LiquidityAdded / LiquidityRemoved).
  4. Optional HartiiSwap pair. Some tokens also have a Uniswap-V2-style pair on HartiiSwap (section 4). Resolve it with factory.getPair(token, WQUAI) — pairs are CREATE-deployed, so there is no init-code hash to compute.

4. HartiiSwap

A Uniswap V2 port, live since 2026-09-23. Pairs emit the standard V2 Mint, Burn, Swap and Sync events; the factory emits PairCreated. More in HartiiSwap.

5. Implementations

For source verification — every launch clones these.

6. Other live HartiiLabs contracts

Not needed for token indexing.

ContractAddressFrom blockStatus
LpLocker (time-locks LP, max 90 days)0x00276419b3aa2E7d034D2d54d52b59BdfFF4e60E10341499Live
AgentVaultFactory0x006C2be96D6Ca90d0105a2Bfa7aC2187f40e899d10341473Live — see Agent Terminal
HartiiProfiles0x0015f71de1574c772B6815D25B233C065f42c89610341682Live
LpArena v20x00614295C6AC13d3B7d93844b9BacC61a768082010351500Live
LpArena v10x0075B00Ca0313f88b0825BE62bBFB890c9F4C03F10341703Deprecated — unstake only
MiningVaultFactory v20x0024596369Fc22A22b720B0A959630913d8D680b10342308Live
MiningVaultFactory v10x0059f740fb9AD9F2Db19DA5Dac3b71bF6BD6B68c10341712Abandoned — never used, do not integrate
AchievementRewards0x001d607B22de6ACcFB4adEE62838DED222Aa0c8a10352297Live
QuaiRelay0x0031B09e63592B713768761cdDACC603974c10bD—Live — see QuaiRelay

7. Shortcuts

  • If you'd rather not scan logs: GET https://hartiilabs.com/api/tokens lists every indexed token, and GET https://hartiilabs.com/api/token/<address> returns one token with its curve address. See the API reference and how the indexer works.
  • When scanning yourself: Quai's quai_getLogs rejects ranges over 10,000 blocks, so page through in windows of 10,000 blocks or fewer.
Quai Network mainnet · chain 9 · Cyprus-1. Figures marked "read on" a date were read from the chain that day; re-read before relying on them.