Hartii Biome docs

Games

HPAY (formerly PayLink)

HPAY at hartiibiome.com/hpay is Hartii's payment page (called PayLink until Biome 1.10.0).

The workspace has three tabs, in this order:

  • Your link (the default for a bare /hpay; ?mode=receive still opens it): connect your wallet to get your own payment link and its QR code first. With a verified Hartii @handle the native QUAI link is the short ?to=@handle one; without one it uses your checksummed Cyprus-1 address. A handle is optional. Request an amount updates the link and QR code. Payment asset for your receive link selects QUAI or qualified WQI; WQI uses an asset-bound v2 request. Your address and its own QR follow below. Account/network changes rebuild the view. Get a handle opens an in-page registration window: see get your @handle.
  • Create a link: make a payment link with an amount, a QUAI dollar price or an expiry.
  • Send to @name: pay a Hartii @handle or a pasted Quai address from your wallet.

An Inbox side card shows up to five newest payments from the existing QUAI inbox reader for the connected wallet. It names incomplete or failed reads and links to the full inbox; it is not a combined QUAI/WQI total.

Links with ?to=, ?amount=, ?amt= or ?memo= open Send as before; ?mode=receive|send|create picks a tab.

HPAY holds no funds. Your wallet signs the transfer; there is no HPAY service fee. Network gas is charged in addition to the payment and shown as an estimate before signing.

Direct WQI payments

The 1.27.0 release adds WQI as a second payment asset. WQI is the reviewed ERC-20 token on Quai's account ledger, at the pinned WQI contract. It is not native Qi. A WQI payment is a direct token transfer to the recipient's wallet; the sender separately needs QUAI for network gas. HPAY does not approve a spender, wrap or unwrap Qi, swap assets, or connect to a utility biller. A bill reference is only a link label: the money goes to the address in the request, so confirm that recipient accepts WQI.

The amount is exact, up to 18 decimal places. WQI has no qualified dollar quote or dollar peg in HPAY; QUAI prices are never applied to it. Before the wallet can ask you to sign, HPAY checks the configured deployment identity and token metadata, the token balance, separate QUAI gas, and the exact transfer. Review the asset, recipient, amount and gas, then approve the transaction in your own wallet.

WQI links use asset-bound Request v2 fields (v=2, asset=WQI, the pinned token and a WQI: recipient marker). Existing v1 requests remain native QUAI. A v1-only reader must refuse a v2 WQI link rather than treat it as a QUAI payment; do not strip the marker or asset fields to make an old reader accept it. Details: HPAY Request v1 and v2.

Since Games/Biome 1.21.0 HPAY also has tools for shops and groups, all Beta (see HPAY tools); the inbox joined them in 1.24.0.

Send to @name

  1. Enter a handle (@name) or a 0x... address, an amount and an optional memo. Amounts are parsed exactly as decimal strings with at most 18 decimal places; invalid input is refused.
  2. The handle is resolved on-chain, read-only. HartiiProfiles.ownerOfName supplies the owner; profileOf checks the displayed name at HartiiProfiles 0x0015f71de1574c772B6815D25B233C065f42c896. Handles use 3-16 ASCII characters: a-z, 0-9, _, with uppercase folded to lowercase. A mismatching profile is refused. An unavailable display-only profile read does not replace a verified owner address.
  3. Check the full checksummed recipient address, name and amount. Unknown names, zero addresses, Qi-ledger addresses, addresses outside Cyprus-1 and ambiguous results are refused.
  4. Review the confirmation card and connect your wallet. Unknown or wrong network state cannot authorize a send. Account/network events update the wallet display and invalidate an unsent HPAY review when the selected payer or network changes.
  5. Press Send. After the gas estimate, HPAY re-reads the reviewed handle owner and checks the wallet's currently selected authorized account and mainnet chain again. A changed or unverifiable owner stops sending and requires a fresh review. The recipient is never silently replaced by a new owner. A changed or disconnected payer also stops the wallet request.
  6. Check the address, amount and network in the wallet prompt before approving. The transaction carries the reviewed payer and recipient, a gas limit and the available live gas price. HPAY checks that the wallet is on chain 9 right before the request and does not pass a chain id in it: Pelagus 1.0.62 otherwise signs at a network fee of 0 whenever its fee setting is not Auto, and the network refuses that transaction.

Pelagus uses a plain QUAI transfer. Blip and other supported injected wallets use QuaiRelay. The existing estimate adds 20% gas headroom; a fallback estimate is labelled when a live estimate is unavailable. Gas estimation and recipient checks do not send funds. A wallet-method namespace fallback repeats the final checks before making its request.

Wallet state and on-chain ownership can change after the last read. A plain transfer pays the explicit reviewed address, so the final wallet review remains necessary. HPAY does not automatically resend a rejected or uncertain payment, and a returned transaction hash makes the paid button single-use.

Submitted, pending and confirmed

Sent means the wallet returned a transaction hash. HPAY then waits for a receipt. On the Send to @name tab, a receipt with status 1 shows In a block. It counts as final after 12 confirmations; the transaction link shows how many it has. (Before Biome 1.21.0 this line said "Confirmed on-chain".) Missing, partial or unrecognized receipt status remains pending; it is neither confirmation nor proof of failure. Pending is not delivery. A status-0 receipt means the transfer failed; it can still consume network gas. If confirmation is delayed, check the transaction link before considering another payment.

The browser keeps a local safety record. A pending or unknown outcome stays blocked across reloads, and starting a new personal-payment intent does not clear it. If the wallet returned the original transaction hash, use it to check that attempt. If no unique hash came back, a manually supplied same-terms hash is only a read-only candidate: it cannot prove that it was this invocation or unlock another payment. Keep the hold and check the original wallet activity; do not send again blindly. After the node proves that the original fixed request failed with status 0, a still-valid bill request may be reviewed again with the same request identity. Confirmed, unknown or expired fixed requests do not become a new payment.

Recovery binds the original payment model as well as payer, recipient, asset and exact amount. It also requires the freshly read raw receipt's transaction and block identity to agree with the decoded payment and canonical block. A different plain/relay/token model or block hash cannot release the original hold. Wallet listener cleanup does not replace a returned hash or turn an uncertain wallet result into permission to resend.

The request page /pay counts confirmations itself. It says In a block with a count such as "3 of 12 confirmations" and says Confirmed on-chain only at 12. 12 confirmations is a placeholder until finality on Quai has been measured on mainnet; it is not a proven safe depth.

Nothing was sent means the network refused the transaction before accepting it: the fee your wallet set was too low, the wallet does not hold enough QUAI for the amount plus the fee, or the gas limit was refused. A refused transaction was never broadcast and cannot confirm later, so it is safe to try again. If a fee refusal repeats, set the network fee in your wallet to Auto. Claim, OTC Link and Airdrop treat a refusal the same way. Any other error after the wallet was opened stays status unknown: check your wallet before sending again.

The legacy /pay.html page shows a submitted transaction link; use the explorer to establish its final receipt status. It has the same final wallet checks and handle-owner refusal. If a handle changes, reload that payment page and review its newly resolved address before paying.

https://hartiibiome.com/hpay?to=@name&amount=5 fills the Send tab. Every field is validated; a link never sends on its own. The visitor still reviews the payment and approves it in their wallet.

An amount typed or linked as text can be at most 100 characters. A longer one is refused with "That amount is too long. Enter a number like 1.5." (Before Games/Biome 1.21.0 and Gallery 2.2.11 a crafted amount= of tens of thousands of digits could freeze the page for seconds; the parser is now linear.) The newer amt field takes exact units: QUAI wei in Request v1, or WQI base units in an explicit Request v2. See HPAY Request v1 and v2.

A handle link resolves the current owner when opened; it does not permanently bind that name to the original link creator. Use a checked address link when the recipient must remain fixed. A handle's name alone is not proof of the link creator's identity.

Privacy and network requests

The browser asks your injected wallet for accounts/network state and uses the Quai RPC for handle, contract, balance, gas and receipt reads. Quaiscan helps discover native QUAI history. The RPC, explorer, hosting site and wallet receive their normal request and network metadata; a shared payment URL can expose its address, amount, memo and reference. WQI history is read from the public node, and HPAY uses no historical price service for WQI. These notes are not a promise of zero collection by those services.

Since 1.26.0 the receipt page of a confirmed payment also makes one read to hartiigames.com for the payee's account type: a plain GET that carries the payee's public address, with no cookie and no referrer, and nothing is written. The inbox, the Statement and every PDF make no such call. See PDF receipts and your account type.

A memo containing bidirectional-control or zero-width characters is rejected, a ?amount= of 1,000,000,000 QUAI or more is not pre-filled (the page warns instead), and an invalid ?amt= is reported as ignored. If the wallet account or chain changes while the signing popup is open, the confirm card and any receipt stay visible with a warning to check your wallet before sending again; the single-send guard stays on. The wallet-method fallback is used only on JSON-RPC -32601 or EIP-1193 4200, never after a free-text error that could follow a broadcast.

Recipient, amount, memo and reference can be encoded in a shared link, browser history or clipboard. Do not put private information in them. Memo and reference are link/display text and are not included in transaction calldata. Local activity and payment safety records stay in the browser; they are not private cloud bills. Submitted transactions expose payer, recipient, asset, amount and transaction details on the public chain; removing a link or local browser history cannot erase them. HPAY does not ask for a private key or mnemonic in the page.

Dedicated HPAY and existing Biome records

hartiipay.app serves the same reviewed HPAY behavior on its own origin. Biome's existing HPAY routes and shared links are retained. Saved sales, local activity/history markers and pending payment or registration safety records belong to the browser origin that created them: nothing is transferred automatically, and there is no cross-domain lock. Before switching domains, check outstanding payments in your original Biome workspace. An empty history or unblocked form on the new domain does not prove that an original payment failed. See the Hartii sites guide.

HPAY tools (Beta)

Games/Biome 1.21.0 adds tools for shops, groups and websites (the Inbox followed in 1.24.0). They are Beta: tested by the project's own test suites. Start with small amounts.

All of them are non-custodial. The payer's own wallet signs; native QUAI may use QuaiRelay, while WQI transfers directly. The money goes from the payer straight to the address in the request. Hartii holds no keys, funds or balances, takes no fee, runs no swap or ramp, and the tools add no smart contract. The payer pays the normal network fee.

ToolWhereWhat it does
Point of sale/hpay/posQUAI dollar-priced sales or exact WQI requests, with no WQI dollar conversion. Details
Receipt/hpay/receiptRebuilds QUAI or WQI payment evidence from the chain, including eligible PDFs. Details
Create a link/hpay, Create a linkQUAI requests may be dollar-priced; WQI uses exact-unit requests. Details
Pay page/pay/@name, /pay/0x...Direct QUAI or reviewed WQI payments. Details
Split a bill/hpay/splitQUAI dollar requests or exact WQI shares, with disclosed matching adjustments and a board of who has paid. Details
Statement/hpay/statementIncoming-only QUAI and WQI; it is not the two-sided Dashboard. Details
Inbox/hpay/inboxQUAI and WQI payments an address sent and received. Details
Dashboard/hpay/dashboardPlanned selected-range QUAI or WQI sent/received totals, with CSV and two-sided PDF. Details
Pay with HPAY button/hpay/button, hpay.jsA button for any website. Button
Check a paymenthpayVerify.mjsverifyPayment for a shop's server. verifyPayment

The link formats, dollar quote and payment matcher are in HPAY Request v1 and v2. For walkthroughs, see direct WQI payments, the Dashboard, HPAY: take payments in a shop and HPAY: read your inbox. The inbox is a list of payments, not of HPAY receipts: the chain cannot tell an HPAY payment from any other transfer.

/paylink and /paylink.html redirect permanently (301) to /hpay, preserving the query string. Previously shared /pay.html?... payment links keep working. On Hartii Gallery the payment-link feature is still called PayLink and shares HPAY's wallet sender code (see Relay).

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.