Skip to content
Docs

Concepts

Rule sets

Groups of conditions joined by OR, and how long a pass may last.

A rule set is an issuer's eligibility policy, written once and never changed. Holders prove it; the transfer hook of every mint bound to it reads the result.

Group 1, all of
  • Resident in EU or CH
  • Professional or above
  • 18 or older
or
Group 2, all of
  • Accredited
  • Screened within 90 days
A wallet that meets either group can prove the rule set.
Up to four groups, joined by OR; each group joins its conditions with AND

Groups and conditions#

A rule set has one to four groups. A wallet meets the rule set when every condition in at least one group holds. Each group can read any of the four attributes:

ConditionWhat it checksOff when
Resident inThe residency code is in a set of up to 64 regionsNo region chosen
Investor status at leastThe status level is at or above a minimumMinimum is Retail
Age at leastThe attested age is at or above a minimum, up to 150Minimum is 0
Screened withinThe screening is no older than a window, up to 366 daysNo window chosen

Every group must read at least one attribute.

How long a pass lasts#

The issuer sets the longest a rule pass may last, from one second to 366 days. A holder chooses a shorter pass when proving. The pass also ends no later than:

  • the credential's expiry and each attribute's expiry,
  • the end of the screening window, measured from the screening date, for the group the holder meets.

A screening window therefore has to cover the whole pass, not only the moment of proving.

Rule sets do not change#

A rule set's address is derived from its issuer and a random nonce, and its conditions can never be edited. To change a policy, write a new rule set and bind a new mint to it. Existing mints keep the rule set they were bound to.

Pass funds#

Each rule set holds pass funds: SOL its issuer adds and can take back while unused. Every rule pass Writ records against the rule set pays the pass fee from them. See Write a rule set and Token.

Who can see what#

Rule sets are public. Anyone can read the conditions; the app shows them in plain words and as the predicate the circuit checks, for example:

region ∈ {EU, CH} ∧ status ≥ 2 (Professional) ∧ age ≥ 18

An issuer sees which wallets hold a live pass for its rule set, by address. It never sees a holder's values.