Skip to main content
Technical proposal SIMD-0242 Implemented

Static Nonce Account Only

  1. Idea
  2. Draft
  3. Review
  4. Accept
  5. Implement
  6. Active

Decision brief

Why this proposal matters

The advance nonce instruction in a transaction can currently specify any account in the transaction as the account to advance. This proposal would restrict the advance nonce instruction to only be able to advance a statically included account.

Source-backed reading aid · source language: EN

Proposal at a glance

What changes

  • nonce transaction
  • A transaction that includes SystemInstruction::AdvanceNonceAccount as its first instruction.
  • nonce account

Stakeholder map

Who is affected

Builders & client teams Medium impact

Clients who currently send nonce-transactions with looked up nonce accounts will need to change their behavior.

Action may be required
Validators & operators Medium impact

Leader nodes MUST drop nonce transactions that do not meet this requirement without including them in a block.

Action may be required
Users & stakers Medium impact

Clients who currently send nonce-transactions with looked up nonce accounts will need to change their behavior.

Action may be required
Governance & ecosystem Medium impact

The advance nonce instruction in a transaction can currently specify any account in the transaction as the account to advance. This proposal would restrict the advance nonce instruction to only be able to advance a statically included account.

Action requirement unknown

Exact source revision

Full proposal document

Source-language document. Technical identifiers and evidence remain unchanged. 0616093b2952

Summary

The advance nonce instruction in a transaction can currently specify any account in the transaction as the account to advance. This proposal would restrict the advance nonce instruction to only be able to advance a statically included account.

Motivation

  • There is a separate proposal to relax the constraints on transaction account resolution. That proposal would allow transactions with invalid lookups or duplicate accounts to be included in a block, pay fees, but not processed.
  • However, that relaxation cannot happen without specifying the interaction with nonce accounts. Rather than complicating the protocol and specifying the interactions between lookups and nonces, this proposal aims to simplify by restricting nonce accounts to statically declared accounts.

New Terminology

No new terminology is introduced. Clarification of existing terminology is provided:

  • nonce transaction
    • A transaction that includes SystemInstruction::AdvanceNonceAccount as its first instruction.
  • nonce account
    • The account specified in the first account of the SystemInstruction::AdvanceNonceAccount instruction in a nonce transaction.
  • statically included account
    • An account that has its' Pubkey directly included in the transaction message.

Detailed Design

  • Nonce transactions MUST have a nonce account index that is less the number of statically included accounts in the transaction.
  • Leader nodes MUST drop nonce transactions that do not meet this requirement without including them in a block.
  • Nonce transactions that do not meet this requirement are invalid and MUST result in the entire block being rejected by the validators.

Alternatives Considered

  • Do nothing
    • This means we cannot relax account resolution constraints
  • Delete nonces entirely
    • preferred by some, but is a separate proposal and a more thought-out transition plan is necessary.

Impact

  • Clients who currently send nonce-transactions with looked up nonce accounts will need to change their behavior.

Security Considerations

  • Requires a feature-gate to be enabled to avoid forking the network.

Backwards Compatibility

  • Some previously valid transactions may not be valid under the new restrictions.

Evidence graph

Related proposals and rollout

One or more sources are unavailable.

Upstream review record

Upstream discussion & review

GitHub review is editorial context, not evidence of on-chain support, voting, or outcome.

PR #242 · merged SIMD-0242: Static Nonce Account Only 28 comments and reviews · Jan 26, 2026
@topointon-jump

Just curious - why is this check not in the SVM transaction sanitization, instead of the block builder? This might make sense from an API perspective, and so that users are charged for submitting these invalid transactions.

GitHub ↗
@apfitzge

it could be done in SVM, really anywhere before we get to actually publishing a block. Likely the best place to do that is as early as possible though, since without loading the nonce account to determine if its valid or not we cannot charge fees.

GitHub ↗
@agca52

%ヽ(´∀`)ノ♪

GitHub ↗
@apfitzge

@topointon-jump, as discussed elsewhere, agave will implement feature-gated checks in the runtime to check the new constraint and fail the transaction. This detail is implementation specific, which iirc we should avoid in proposals, so making a comment here for your records. Agave's runtime will mark these transactions with a specific error, which should enable frankendancer to use it w/ minimal changes.

GitHub ↗
@apfitzge

@jstarry or @t-nelson, do you have any remaining comments? if not, would appreciate an approval so we can close this and begin implementation.

GitHub ↗
@apfitzge

@Benhawkins18 approval has been received from anza (@jstarry) and firedancer (@topointon-jump). Can we merge, or initiate "final comment" period for this proposal?

GitHub ↗

simd.watch community discussion · SIMD-0242

Powered by Giscus · Sign in with GitHub to comment

Community comments load when this section approaches the viewport.

Provenance

Evidence & technical details

Rollout or chain data, source revisions, freshness and integrity.
2

SIMD

Deployment Status

Document lifecycleImplemented
CategoryCore protocol
Devnetactive Epoch 980
Testnetactive Epoch 872
Mainnet-Betaactive Epoch 890
7VVhpg5oAjAmnmz1zCcSHb2Z9ecZB2FQqpnEwReka9Zm

Exact source revision

Sources & integrity

  • Proposal document pinned_commit_blob
    0616093b2952ed6de52c4a27d66aadd11d48d4f9
  • simd-document document · stale · Sep 10, 2026
    0616093b2952ed6de52c4a27d66aadd11d48d4f9

One or more sources are unavailable.