# Hartii Claim (beta)

Live on Quai Mainnet after independent review and an Orchard rehearsal with real transactions.
The page reads the deployment manifest; a null address disables signing.

Fund one time-limited campaign of native QUAI or standard fee-less ERC-20 tokens. Upload
address,amount CSV, or use address-only rows with a common amount. Duplicate addresses
are merged by adding amounts. Review every invalid row and the exact total. Build the
Merkle root, download a backup and publish or verify its public leaves URL. Approve the
exact token total separately, then fund. Share the campaign link or QR code.

Creation initially costs 5 QUAI plus funding and gas. Each successful claim initially
costs 0.05 QUAI plus gas. Owner caps are 50 QUAI and 1 QUAI; fees are read live. A third
party can pay the fee and gas, but the allocation always goes to the committed account.
Relayer claimFor batches of up to 50 claims are contract/API functionality; one failed
item reverts the whole batch. The page claims one allocation per wallet action.

Expiry is mandatory and at most 90 days. After expiry the creator can reclaim the
unclaimed tracked balance, even while paused. Pause blocks creation and claims. No
owner rescue or permanent lock option exists. Reclaim is not automatic. A creator
contract must accept QUAI to reclaim native funds; lost keys cannot be recovered.

Beta — audited by our own tests only; use small campaigns first. Hartii does not vet
creators or tokens. Only immutable, fee-less ERC-20s are safe to fund a campaign with.
Taxed, rebasing, blacklisting and nonstandard tokens are unsupported — a token whose admin
switches on a transfer tax mid-campaign makes every remaining claim **and** the reclaim
revert, leaving funds stuck in that campaign with no rescue path. A failed native
delivery/refund rolls back.

Leaves schema: {version:1,campaignId:"decimal",root:"0x…",leaves:[["0xaddress","baseUnits"]]}.
The tuple position is the leaf index. Leaves hash packed uint256 campaign ID, uint256
index, address and uint256 amount, with sorted-pair Keccak hashing and odd-node promotion.
Files are capped at 5 MB. Hosted storage additionally caps at 10,000 leaves — above that,
self-host leaves.json via an absolute metadataURI (the page supports pasting one in, and
always offers a download). `leafCount` itself is not capped on-chain; the Merkle root is the
real gate. Self-hosting requires a CORS-readable URL. The page verifies the root, ID, count
and total against the contract before claiming. If storage fails, obtain leaves.json from
the creator and use the recovery file picker.

Addresses and allocations in the leaves file are public; chain activity is permanent.
Settings and activity are stored locally. Cloudflare, RPC providers, Labs and self-hosted
file servers receive requests. Keep a backup; storage uptime is not guaranteed.

If a wallet returns an ambiguous error, do not resend. Paste the transaction hash in
Activity and check its matching receipt. Reset never erases an unresolved submission.

Reclaiming right at expiry may briefly show "retrying…" while the chain confirms the
campaign is actually expired — this is expected and resolves automatically within a
few minutes, without resubmitting anything.
