Skip to main content

Crate sentri_solana_macro

Crate sentri_solana_macro 

Source
Expand description

Solana invariant enforcement procedural macro.

§#invariant_enforced Attribute Macro

Injects invariant checks into Solana instruction handlers. This macro:

  1. Identifies state mutations in the function body
  2. Injects invariant checks after mutations
  3. Validates check syntax at compile-time
  4. 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.