Expand description
Policy-Aware Capabilities – tie instruction behavior to validation requirements.
A Capability declares what an instruction intends to do (mutate treasury,
touch journal, call external programs, etc.). An InstructionPolicy binds
capabilities to the validation rules they require.
§How It Works
-
Declare which capabilities your instruction needs:
ⓘconst DEPOSIT_CAPS: CapabilitySet = CapabilitySet::new() .with(Capability::MutatesState) .with(Capability::TouchesJournal); -
Define the policy that maps capabilities → validation requirements:
ⓘconst POLICY: InstructionPolicy<4> = InstructionPolicy::new() .when(Capability::MutatesState, PolicyRequirement::Authority) .when(Capability::TouchesJournal, PolicyRequirement::JournalCapacity) .when(Capability::ExternalCall, PolicyRequirement::PostMutationCheck); -
At runtime, enforce the policy against the instruction’s declared caps:
ⓘpolicy.enforce(&DEPOSIT_CAPS, &ctx)?;
This makes Hopper smart – capabilities automatically trigger the correct set of validation guards.
Structs§
- Capability
Set - A set of capabilities declared for an instruction.
- Instruction
Policy - Instruction policy – maps capabilities to validation requirements.
- Policy
Pack Descriptor - Descriptor for a named policy pack with full metadata.
- Policy
Rule - A policy rule: when capability C is active, requirement R must be met.
- Requirement
Set - A set of active policy requirements.
Enums§
- Capability
- Instruction capability flags.
- Policy
Class - High-level classification of what a policy governs.
- Policy
Requirement - What validation is required when a capability is active.
Constants§
- ACCOUNT_
CLOSE_ CAPS - Capabilities for an account close instruction.
- ACCOUNT_
CLOSE_ POLICY - Capabilities for an account close instruction.
- ACCOUNT_
INIT_ CAPS - Capabilities for an account init instruction.
- ACCOUNT_
INIT_ POLICY - Capabilities for an account initialization instruction.
- AUTHORITY_
CHANGE_ CAPS - Capabilities for an authority change instruction.
- AUTHORITY_
CHANGE_ POLICY - Capabilities for an instruction that modifies authority/permissions.
- EXTERNAL_
CALL_ CAPS - Capabilities for a CPI-invoking instruction.
- EXTERNAL_
CALL_ POLICY - Capabilities for an instruction that makes external calls via CPI.
- JOURNAL_
TOUCH_ CAPS - Capabilities for a journal-writing instruction.
- JOURNAL_
TOUCH_ POLICY - Capabilities for an instruction that appends to a journal segment.
- MIGRATION_
SENSITIVE_ CAPS - Capabilities for a migration/realloc instruction.
- MIGRATION_
SENSITIVE_ POLICY - Capabilities for an instruction that reallocates an account (migration-sensitive).
- NAMED_
POLICY_ PACKS - All named policy packs with full descriptors, in order.
- READ_
ONLY_ AUDIT_ CAPS - Capabilities for a read-only audit instruction.
- READ_
ONLY_ AUDIT_ POLICY - Capabilities for a read-only audit/inspection instruction.
- SHARD_
MUTATION_ CAPS - Capabilities for a shard-modifying instruction.
- SHARD_
MUTATION_ POLICY - Capabilities for an instruction that modifies shard data in a sharded account.
- TREASURY_
WRITE_ CAPS - Capabilities for a treasury write instruction.
- TREASURY_
WRITE_ POLICY - Capabilities for an instruction that writes to treasury/vault balances.