Static Instruction Limit
- Idea
- Draft
- Review
- Accept
- Implement
- Active
Decision brief
Why this proposal matters
Transactions will fail execution in SVM if the transactions use more than 64 instructions, including CPI calls. This proposal is to make transactions that use more than 64 top-level instructions fail sanitization checks and be rejected by the network.
Proposal at a glance
What changes
- Any transaction that has more than 64 top-level instructions cannot be included in a block. If a block contains a transaction with more than 64 top-level instructions, the block must be marked as invalid.
- Transactions will fail execution in SVM if the transactions use more than 64 instructions, including CPI calls. This proposal is to make transactions that use more than 64 top-level instructions fail sanitization checks and be rejected by the network.
Stakeholder map
Who is affected
Builders & client teams Impact unknown
No proposal-specific evidence was found for this group.
Action requirement unknownValidators & operators Medium impact
Smaller upper bound on number of instructions can help performance of validator.
Action requirement unknownUsers & stakers Medium impact
Users are prevented from creating transactions that cannot be executed successfully.
Action requirement unknownGovernance & ecosystem Medium impact
Transactions will fail execution in SVM if the transactions use more than 64 instructions, including CPI calls. This proposal is to make transactions that use more than 64 top-level instructions fail sanitization checks and be rejected by the network.
Action requirement unknownExact source revision
Full proposal document
0616093b2952Summary
Transactions will fail execution in SVM if the transactions use more than 64 instructions, including CPI calls. This proposal is to make transactions that use more than 64 top-level instructions fail sanitization checks and be rejected by the network.
Motivation
The current limit of 64 instructions is a runtime failure, and makes sense in the context of CPIs. It is bad user experience to allow creation and submission of transactions that have no chance of being executed successfully. Several other checks worst-case performance scales with the number of top-level instructions in a transaction, so limiting this number can help the worst-case performance.
Alternatives Considered
- Do nothing.
- Allow transactions with more than 64 top-level instructions to be included in
blocks, but skip execution only taking fees.
- Checking the number of top-level instructions in a transaction is a relatively cheap operation and can be done very early in the processing of a transaction, similar to the current check that the number of required signatures matches the number of signatures provided.
- Additionally, if we still allow more than 64 top-level instructions in a transaction we would still need to parse all the instructions to determine the fee, so there is a performance benefit in strictly limiting the number of top-level instructions.
New Terminology
None.
Detailed Design
Any transaction that has more than 64 top-level instructions cannot be included in a block. If a block contains a transaction with more than 64 top-level instructions, the block must be marked as invalid.
Impact
- Users are prevented from creating transactions that cannot be executed successfully.
- Smaller upper bound on number of instructions can help performance of validator.
Security Considerations
- Requires a feature-gate to enable the new limit.
Drawbacks (Optional)
- Similar to the runtime check on number of instructions including CPI, logic is duplicated.
- Can no longer collect fees from transactions that are rejected due to new limit.
Backwards Compatibility (Optional)
- Some transactions that are currently valid will be rejected.
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 #160 · merged SIMD-0160: Static Instruction Limit 5 comments and reviews · Jan 19, 2026Why not allow them to be included but limit processing to fee payer validation? So before we load the program cache, we check the instruction count and fail the transaction immediately if it exceeds the limit but still allow fee collection?
GitHub ↗I view it similarly to having the number of signatures not match the required signatures field in the header; its' a basic sanitization check that can be checked extremely cheaply. checking it does not scale with any aspects of the transaction such as number of instructions, number of account lookup tables, etc.
GitHub ↗So long as we do it really early then I'm fine with prohibiting such transactions from being included. Can you write up a brief summary of this comment thread in the alternatives section?
GitHub ↗4398665f2ae72df927fd532effcb6b145903700a
GitHub ↗@Benhawkins18 can we merge this? we have approval from both FD and Anza teams
GitHub ↗Provenance
Evidence & technical details
Rollout or chain data, source revisions, freshness and integrity. 2
Provenance
Evidence & technical details
Rollout or chain data, source revisions, freshness and integrity.SIMD
Deployment Status
Feature Gate not yet created
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.
simd.watch community discussion · SIMD-0160
Powered by Giscus · Sign in with GitHub to comment
Community comments load when this section approaches the viewport.