Skip to content

The Loot Primitive

A Loot is the protocol’s core primitive: a verifiable reward campaign escrowed on-chain. On the contract layer it is implemented as a Pool; product, UI, and API surfaces uniformly call it a Loot. The two map one-to-one.

Every Loot is described by a small set of parameters, fixed at creation:

PropertyMeaning
Asset typeETH (native coin), ERC20, or ERC721. A Loot never mixes asset types.
Play styleRandom, Equal, or Custom — how the pool splits among claimers.
WindowstartTime (0 = starts immediately) and endTime (0 = never expires).
SeatsmaxClaimers — how many wallets can claim. Must be greater than zero.
ContributionWhether addresses other than the creator may add funds.
GatesThe eligibility conditions a participant must pass. See Gates.
StatusPendingActiveEnded, derived from on-chain state.

A Loot has exactly three statuses, computed from on-chain state rather than stored:

  • Pending — created but not yet live. Funding happens here.
  • Active — the start time has passed and the pool has been funded; participants can claim.
  • Ended — the window expired, all seats are taken, or the balance is exhausted.
  1. Create. The creator calls the factory, which deploys a dedicated minimal-proxy pool and snapshots the configuration on-chain.
  2. Fund. The creator deposits the rewards while the Loot is Pending. If contribution is enabled, others can add funds too — but only during the Pending window. Once the Loot turns Active, the balance is locked.
  3. Verify. A participant passes the Gates; the verifier issues an EIP-712 voucher.
  4. Claim. The participant submits the voucher; the pool computes or reads their allocation and transfers it. One wallet, one claim.
  5. Reclaim. After the Loot ends, contributors recover any unclaimed balance pro-rata. See reclaim.

In a GameFi context, Loot carries the semantics of exploration, challenge, and reward — a full “participate → qualify → earn” loop rather than a one-way gift. It is more visceral than Gift or Reward and more concrete than Drop: it names the thing being claimed, not merely the act of sending. The contract layer keeps the Pool name because rewards are custodied in a pool that reuses the OpenZeppelin Clones minimal-proxy pattern. See smart contracts.