Hartii developer docs
Hartii is a group of independent production apps on Quai Network. Each one deploys its own contracts and runs its own API — there is no shared backend. Pick a product below.
Products
- HartiiLabs — the token launchpad at hartiilabs.com: one factory, a bonding curve per token that graduates into its own locked pool, and a public read API. New here? Start with Pricing a token — the page that answers the question every integrator asks first.
- HartiiSwap — the ecosystem's own Uniswap-V2 AMM: pools for any token, swaps, add/remove liquidity, LP farms, and a one-call Lens. 0.30% swap fee.
- QuaiAxe — mining that burns $QAXE (quaiaxe.com): no-code CREATE2 deposit addresses, an ownerless burn vault with a fixed 0.5% fee, a Lens for one-call reads, and a standard Quainance V2 QAXE/WQUAI pool.
- QuaiRelay — a single stateless contract that turns a QUAI transfer into a contract call, for wallets that can't send a plain transfer. No backend at all.
- Hartii Gallery — the NFT marketplace and creator platform at hartiigallery.com. Collection factory, five marketplace venues, public read API.
- Hartii Games — the skill-game arcade at hartiigames.com (plus the Biome dashboard at hartiibiome.com). Free play, ranked play with on-chain prize pools, cosmetics.
Network facts
| Network | Quai Network mainnet |
| Chain ID | 9 |
| Active zone | Cyprus-1 (the only zone live on mainnet) |
| Address prefix | 0x00 — every valid Cyprus-1 address's first byte is zero |
| RPC (HTTPS) | https://rpc.quai.network/cyprus1 |
| RPC (WSS) | wss://rpc.quai.network/cyprus1 |
| Explorer | https://quaiscan.io |
| Native currency | QUAI, 18 decimals |
| SDK | quais — never ethers on Quai |
| Mining reward maturity | new mining rewards are locked ~14 days (2-week base coinbase maturity) before they mature to a spendable balance (docs.qu.ai) — irrelevant to app logic, but it explains why a freshly-mined balance can look smaller than expected |
Gotchas every integrator hits
usePathing.quais.JsonRpcProvidercan append the zone path itself. If yourRPC_URLalready ends in/cyprus1, construct the provider with{ usePathing: false }or the SDK doubles the path. If yourRPC_URLis the bare host (no/cyprus1), use{ usePathing: true }and let the SDK add it. Both patterns are live in this ecosystem's own code — check whichRPC_URLyou're holding before picking one.getFeeDataneeds the zone. Call it asprovider.getFeeData(quais.Zone.Cyprus1), not with no argument — some providers return nothing without it. Live example:hartii-labs/src/pages/BlipSend.jsx.eth_getLogs/quai_getLogsblock range. The RPC caps how many blocks onegetLogscall can scan; this ecosystem's own code treats it defensively rather than relying on a documented cap — e.g. Hartii Gallery's live activity fallback scans only the most recent 1,000 blocks per call rather than the full chain. Unverified: the exact enforced cap was not confirmed against a live RPC error for this doc; chunk your scans and handle a range-too-large error rather than assuming a specific number.- Block time. ~5 seconds per Zone block on Cyprus-1 — measured directly:
quai_blockNumberminus 1,000 blocks, compared byquai_getBlockByNumbertimestamps, gives 4,973s / 1,000 blocks = 4.97s/block (checked 2026-09-23). Plan confirmations accordingly — this is not sub-second finality. - Zone-bound addresses. An address that doesn't start
0x00is not on Cyprus-1. Sending native QUAI to it with a same-zone call is unrecoverable — validate the prefix client-side before you let a user submit.
Contributing to these docs
Every fact here was checked against source code in the product's repo or a live GET/RPC call —
see each page's contracts/API tables for the addresses and endpoints used. Conventions for
writing more pages: CONVENTIONS.md in this repo.