Claim & Settlement
A claim settles only against a voucher signed by the verifier for a participant who passed the Gates. The contract checks the authorization on-chain before releasing funds.
The EIP-712 voucher
Section titled “The EIP-712 voucher”The voucher is an EIP-712 typed-data signature over a ClaimAuth struct. The domain binds the signature to one specific pool:
domain = { name: "GatollRewardPool", version: "1", chainId, verifyingContract: <pool address>}
ClaimAuth = { address poolAddress; // the target pool address recipient; // who receives the reward uint256 amount; // fungible amount or NFT count uint256[] tokenIds; // NFT ids (empty otherwise) uint256 deadline; // expiry (unix seconds) uint256 nonce; // single-use, issued by the verifier}The flow
Section titled “The flow”- The participant passes the Loot’s Gates.
- The verifier issues a
ClaimAuthfor the participant’s wallet, assigns a single-usenoncefor that(pool, recipient), sets a shortdeadline, and signs it. - Someone submits
claim(auth, signature)to the pool — either the recipient themselves, or a platform relayer when the Loot has gas-free claims enabled. - The pool verifies the claim and, if every check passes, computes or reads the allocation and transfers it to
recipient.
For Random and Equal Loots, the voucher carries a zero allocation and the contract computes the amount at claim time. For Custom Loots, the verifier signs the exact amount or token IDs.
Gas-free relay path
Section titled “Gas-free relay path”Pools that support relay expose RELAY_ENABLED and hold an immutable reference to a RelayerRegistry. The claim check is:
recipient == msg.sender || RelayerRegistry.isRelayer(msg.sender)- Self-claim — the participant pays gas and submits (always available).
- Relay — a registry-whitelisted EOA submits and pays gas; funds still transfer only to the signed
recipient. - Anyone else — reverts. Leaving submission fully open would let mempool snipers race random-pool claims; the registry closes that vector and allows instant revoke if a relayer key is compromised.
A compromised relayer can at worst spend its own gas sending legitimate rewards to legitimate recipients. It cannot rewrite recipient without a new verifier signature. Creators fund relay seats off-chain with a native-coin gas deposit; when seats are exhausted, the product falls back to self-claim.
On-chain verification
Section titled “On-chain verification”Before moving any funds, the pool independently checks that:
- the signature recovers to the pool’s snapshotted verifier address;
poolAddressequals this pool (no cross-pool reuse);recipientequals the caller or the caller is a registered relayer;deadlinehas not passed;- the
noncehas not been used; - the recipient has not already claimed, and a seat is available.
Replay protection
Section titled “Replay protection”Four independent properties make a voucher non-replayable: it is bound to one pool (domain + poolAddress), one recipient, a single-use nonce the contract burns on use, and a short deadline. On top of that, the contract enforces one claim per wallet per Loot. A leaked or reused voucher is inert; it can only ever do exactly what the verifier authorized, once.
This is the core of Gatoll’s trust model: the verifier decides eligibility, but the contract decides settlement. Even a misbehaving verifier cannot make the pool pay the same address twice or pay against the wrong pool. The relayer only chooses who pays gas, never who gets paid.