Expand description
Solana invariant enforcement procedural macro.
§#invariant_enforced Attribute Macro
Injects invariant checks into Solana instruction handlers. This macro:
- Identifies state mutations in the function body
- Injects invariant checks after mutations
- Validates check syntax at compile-time
- Emits compile errors if invariants cannot be verified
§Security Properties
- Deterministic injection order (alphabetical by state variable)
- No silent failures (compile error if invariant can’t be resolved)
- Tamper detection: Hash embedded in generated code comments
- Type-safe: All injected code type-checked by Rust compiler
§Example
ⓘ
#[invariant_enforced(
"invariants/token.invar",
"balance >= 0",
"supply == sum_of_balances"
)]
pub fn transfer(
from: &mut Account,
to: &mut Account,
amount: u64,
) -> ProgramResult {
from.balance = from.balance.checked_sub(amount)?;
to.balance = to.balance.checked_add(amount)?;
// Invariant checks automatically injected here
Ok(())
}Attribute Macros§
- invariant_
enforced - Procedural attribute macro for enforcing invariants on Solana instruction handlers.