Ruleset

A Ruleset is a set of rules specified by the creator that collectively permission the transfer of the token. Rulesets exist in a one-to-many relationship with Mint Managers - one ruleset can and should be used for all mints of a collection and can extend to other collections as well.
Rulesets allow creators to easily add/remove permissions to/from their collections by simplifying the interface through which they can modify the list of on-chain programs with which the collections can interact.
Ruleset State
let mut seeds = ['ruleset'.as_bytes(), name.as_bytes()];
pub struct Ruleset {
// version for potential future versioning
pub version: u8,
// authority who can update this ruleset
pub authority: Pubkey,
// collector who collects anything from this ruleset
pub collector: Pubkey,
// name for this ruleset (also used to derive ruleset address)
pub name: String,
// vector of allowed programs that can interact with this nft
pub allowed_programs: Vec<Pubkey>,
// vector of disallowed addresses that cannot interact with this nft
pub disallowed_addresses: Vec<Pubkey>,
// vector of rulesets, allows for composing rulesets together
pub extensions: Vec<Pubkey>,
}
The authority that creates a ruleset is the only party that can update it thereafter. A verified creator of a collection can create mint managers for all of the NFTs in their collection and similarly create a ruleset to permission their interactivity.
We envision a paradigm where there are 1-2 global rulesets commonly used by the majority of collections in the Solana ecosystem. A DAO or community of the top teams would moderate and modify the addresses in the allowlist rather than trying to play whack-a-mole with a denylist.
If a creator wants to employ a nuanced version of a global ruleset for their collection, they can do so via the ruleset's extensions field. If conflicts arise from an extension (i.e. you approve a program that's in the extended ruleset's denylist) your ruleset will always take precedence for you collection.
For example, say you are a creator that launches a collection and wants to use one of the global rulesets to govern your tokens. However, the closest global ruleset does not include your in-house developed staking platform that you want your tokens to be able to interact with. You can create a ruleset to include your staking platform in the allowlist and extend from the global ruleset as the base to take advantage of its allowlist + denylist.
Since managing this list will take considerable time and effort for the ruleset creator, each ruleset has a collector field. If a fee is implemented for minting tokens with the Creator Standard, the fee will be directed to the ruleset manager as an incentive to moderate the ruleset and allow new programs and builders to have their programs whitelisted.

Instructions

Visualizations

One-to-many behavior of rulesets - create one, apply to all NFTs in your collection
Your ruleset can extend a base ruleset and you can modify rules on top