Holding history

Held a balance at a past block, or without a break for days.

Holding history requirements check a balance in the past rather than now: what a wallet held at a given block or moment, or whether it held at least an amount for a number of days without a break.

What it's for

  • Held at a past block rewards people who held at a snapshot, such as "held our token on launch day". Buying after the snapshot doesn't help, so it can't be gamed later.
  • Held continuously for rewards long-term holders: "held at least 1 of our NFTs for the last 90 days". The check takes the lowest balance in the window, so the member must never have dipped below the amount. Someone who sold on day 40 and bought back on day 89 doesn't qualify, even though they hold it today.

Both work only on Ethereum and Base. They read the chain's past state, which only a full archive of the chain can answer, and Guild runs its own archive nodes for those two chains.

Set it up

  1. Under Who gets it, press Requirement and pick Held at a past block or Held continuously for.
  2. Pick Ethereum or Base.
  3. Choose the Asset Type: COIN for ETH, ERC20 for a token, ERC721 or ERC1155 for NFTs.
  4. Paste the Token Address for anything but COIN. Find it on the token's or collection's page in Etherscan or Basescan.
  5. For an NFT, enter a Token ID, or leave it empty to count the whole collection.
  6. For Held at a past block, enter either a Block Number or a Point In Time, not both. A time is resolved to the last block at or before it.
  7. For Held continuously for, enter the number of days in Held For (days).
  8. Set the balance to compare against and press Add requirement.

Gotchas

  • The Held continuously for window always ends now. A member who qualifies today stops qualifying if their balance later dips below the amount.
  • Held continuously for relies on the token's transfer history. Where a balance can change without a Transfer event, such as wrapping and unwrapping WETH, Guild can't prove the balance never dipped, and the check fails rather than guess.

Examples

  • Launch holders: Held at a past block, ERC20, your token on Base, at block 20,000,000, at least 100.
  • Diamond hands: Held continuously for, ERC721, your collection on Ethereum, 180 days, at least 1.

Requirement types

These are the exact types the requirement picker offers, with their fields as you see them in the form.

Chains (2): Ethereum, Base. See supported chains.

Held at a past block

Members connect a wallet to be checked.

Field Type Details
Balance Number Compare: at least, more than, at most, less than, exactly, anything but, between, within the last, older than.
Block Number Number, optional Evaluate the balance at this block. Mutually exclusive with timestamp.
Token Address Text, optional Required for every type except COIN. For example 0x1234567890123456789012345678901234567890.
Point In Time datetime-local, optional Resolved to the last block at or before this moment.
Token ID Text, optional ERC721 or ERC1155 token ID. Omit to count the whole collection.
Asset Type Choice One of: COIN, ERC20, ERC721, ERC1155.

Held continuously for

Members connect a wallet to be checked.

Field Type Details
Balance Number Compare: at least, more than, at most, less than, exactly, anything but, between, within the last, older than.
Token Address Text, optional Required for every type except COIN. For example 0x1234567890123456789012345678901234567890.
Held For (days) Number The balance must have stayed at or above the required amount for this many days, without dipping.
Token ID Text, optional ERC721 or ERC1155 token ID. Omit to count the whole collection.
Asset Type Choice One of: COIN, ERC20, ERC721, ERC1155.

All Guild docs