Revoking is easy. Making it hold is the hard part.

Atoll is the durable authorization layer for Solana. Withdraw a permission and a transaction signed before it can no longer execute. The minute the withdrawal took effect goes on a permanent record.

Free to call · permissionless · built on Token ACL

Failed

Two held transactions landed after the withdrawal. Both failed.

  1. 21:05:48503,654,225GrantAuthoritysigned at gen 0Refused: GenerationMismatch
  2. 21:05:47503,654,217Settledurable nonceRefused: AuthorityWithdrawn
  3. 21:05:39503,654,173Withdrawngen 0 → 1
  4. 21:00:40503,652,368GrantAuthoritygen 0succeeded
  5. 21:00:38503,652,356Openedgen 0

Devnet · 24 Sep 2026 · times UTC. Every row links to Solscan.

THE GAP

A signature does not expire. It waits.

An ordinary Solana transaction goes stale in under a minute. A durable nonce removes that clock. The transaction stays valid for as long as a stored value is unchanged. Days. Weeks.

So “already signed” is not a window of seconds you can wait out. It is an open-ended one. Every permission you grant can be spent by a transaction that was written while you still trusted it, at a moment you do not choose.

Revoking the permission does not reach that transaction. Nothing about cancelling an authority makes an existing signature stop being a valid signature.

Their transaction is durable. That is why the withdrawal has to be.

WHY ATOLL

Four things we claim, and the order matters.

Two are ours. Two are parity, and we say so first.

No. 1ours

Revoking is the easy part

Making it hold is not.

No. 2ours

Proof of effect

You will be asked when the withdrawal took hold. Have an answer.

No. 3parity

Enforcement inside settlement

A dashboard badge can be ignored. A settlement rule cannot.

No. 4parity

Free at the read

Enforcement cannot fail for billing reasons.

HOW IT WORKS

Four steps, and none of them is us deciding anything.

Granted by a principal, held on Solana, checked by your program, withdrawn on the record.

  1. A principal grants an authority.

    One permission for one agent, signed by both: who may act, under which policy, until when. We never decide who gets it.

  2. It lives on Solana.

    With an expiry and a live withdrawal state. Any program reads it directly. No server to call, no uptime to wait on.

  3. Programs check it before value moves.

    Not after. If the authority is missing, expired or withdrawn, the transaction fails.

  4. The withdrawal holds, and leaves a record.

    The record

    When the principal withdraws, every agent's grant goes with it. Anything signed earlier that checks Atoll fails when it lands, including a grant that would give it back. The withdrawal is written to Solana: the slot, the time, and who pulled it.

Free to call, permanently
Any Solana program can call it
Built as a Token ACL gate

Two accounts. No signer. No payer. Nothing writable.

Any Solana program can ask whether a standing authority is still good. It costs you nothing, it needs no permission from us, and a refusal fails your transaction rather than returning a boolean you can ignore.

king_tide/src/lib.rsgen 0 · authority standing
let mut data = Vec::with_capacity(    EVALUATE_DISCRIMINATOR.len() + 2,);data.extend_from_slice(&EVALUATE_DISCRIMINATOR);data.extend_from_slice(    &args.policy_version.to_le_bytes(),);// Neither account signs; neither is writable.let evaluate = Instruction {    program_id: REEF_PROGRAM_ID,    accounts: vec![        AccountMeta::new_readonly(            ctx.accounts.grant.key(),            false,        ),        AccountMeta::new_readonly(            ctx.accounts.source_root.key(),            false,        ),    ],    data,};// A refusal here never reaches the write below.invoke(    &evaluate,    &[        ctx.accounts.grant.to_account_info(),        ctx.accounts.source_root.to_account_info(),        ctx.accounts.reef_program.to_account_info(),    ],)?;

Ok(())settlement continues

withdrawnslot 503,654,173 · 21:05:39 UTCon the record ↗

devnet · held Settle, signed before the withdrawalfailed
Program 1111…1111 invoke [1]Program 1111…1111 successProgram BZAN…jYdU invoke [1]Program log: Instruction: SettleProgram 1111…1111 invoke [2]Program 1111…1111 successProgram REEf…vsbx invoke [2]Program log: Instruction: EvaluateAuthorityProgram data: UoMELQ6fpCZQ…Program log: AnchorError thrown in programs/reef/src/authority/rules.rs:161. Error Code: AuthorityWithdrawn. Error Number: 6011. Error Message: authority has been withdrawn — the root is no longer active.Program REEf…vsbx consumed 9476 of 183282 compute unitsProgram REEf…vsbx failed: custom program error: 0x177bProgram BZAN…jYdU consumed 29044 of 202850 compute unitsProgram BZAN…jYdU failed: custom program error: 0x177b
slot 503,654,217 · 21:05:47 UTC · Solscan ↗
accounts
grant, source_root
signers
none
payer
none
writes
nothing
budget
< 20k CU
on refusal
your tx fails
emits
AuthorityEvaluated

Holding a permissioned asset instead? Reef answers Token ACL's thaw and freeze questions under the discriminators the standard fixes. You integrate nothing.