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.
- Resident in EU or CH
- Professional or above
- 18 or older
- Accredited
- Screened within 90 days
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:
| Condition | What it checks | Off when |
|---|---|---|
| Resident in | The residency code is in a set of up to 64 regions | No region chosen |
| Investor status at least | The status level is at or above a minimum | Minimum is Retail |
| Age at least | The attested age is at or above a minimum, up to 150 | Minimum is 0 |
| Screened within | The screening is no older than a window, up to 366 days | No 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.