Hular runs on mainnet only. Chain names are lowercase strings in every request and response. The chains currently deployed are arbitrum, solana, and sui; ethereum and base are recognized names in the protocol but are not enabled right now, and GetChains is the source of truth for what is live. On EVM chains there are three contracts. HularEscrow receives every deposit (plain depositToken and depositNative calls land here) and pays refunds; its funds move to the solver only after the deposit settles past the deep-reorg check. HularSolver holds the operator float and pays fulfillments, gas drops, and voucher redemptions; only the solver can pull from the escrow, and only its registered executors can trigger that pull. HularRouter carries the swap, permit, permit2, and gasless entry points and forwards the funds into the escrow. GetChains returns the router as router; the quote’s router_address is the contract that specific quote deposits into. On Solana the program id carries every instruction. Deposits pay into the escrow, a program-derived account (DvCPeroncQwfZxWBzQxHbUYNr4wpYGRZ4AoNkj2iUqhA), and fulfillments pay out of the treasury FD819o8VXWWkkDkS2N3Qb7VumUnJBdJGNYE6oZWPXaA7, returned as treasury by GetChains. On Sui a single Move package carries every entry function, and one shared escrow object created at publish holds the deposit float, the referral voucher float, and the settlement markers. Deposits call deposit on the package with the escrow object; fulfillments pay out of the treasury address, which holds the operator float as an address balance. GetChains returns the package id as router, the escrow object id as escrow, and the treasury address as treasury. The only accepted token on Sui is native USDC, and it is identified by its full coin type string rather than an address.
Use the router_address returned on the quote rather than a hardcoded address. A plain cross-chain deposit binds to the escrow, a same-chain swap binds to the router, and the quote hash was priced against exactly one of them.

Availability is runtime state

A chain being listed here does not mean it is currently open for quoting. Quoting, indexing, and relaying are toggled per chain, and GetChains is the source of truth:
Build chain selectors from quote_enabled instead of a static list, and the selector stays correct when a chain is paused for maintenance.

Gas drop ceilings

The maximum native asset that can be delivered with a fulfillment, in base units of the destination chain’s native asset. GetChains returns the live value as max_gas_drop. See Gas drop.

Confirmations

Required confirmations are set per chain and scale with trade size in USD. They are not a constant you can hardcode: read required_confirmations and src_confirmations from the order returned by GetOrder and show progress from those two numbers.

Tokens

Token support is per chain and served by the catalog, not fixed here. ListTokens returns every quotable token with its chain, address, decimals, tier, and whether it supports EIP-2612 permit. See Token catalog.