Skip to content

The Loot Primitive

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

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

PropertyMeaning
Asset typeETH (the native token in the contract enum), ERC20, or ERC721. A Loot never mixes asset types.
Play styleRandom, Equal, or Custom: how the pool is split 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 directly:

  • Pending — created but not yet live. Funding happens in this state.
  • Active — the start time has passed and the pool has been funded; participants can claim.
  • Ended — the window expired, all seats were taken, or the balance was 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 becomes 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 the 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 distribution. The contract layer keeps the Pool name because rewards are held in a pool that uses the OpenZeppelin Clones minimal-proxy pattern. See smart contracts.