Relax Precompile Failure Constraint
- Idea
- Draft
- Review
- Accept
- Implement
- Active
Decision brief
Why this proposal matters
The Solana protocol currently prohibits block producers from including transactions with precompile instructions that fail signature verification. This constraint is not ideal since block producers may have to do work to verify precompiles without a guarantee that they can receive a fee from the transaction.
Proposal at a glance
What changes
- Precompile instruction-level signature: A signature specified inside a precompile instruction which must be verified successfully for the transaction to be executed successfully
- The Solana protocol currently prohibits block producers from including transactions with precompile instructions that fail signature verification. This constraint is not ideal since block producers may have to do work to verify precompiles without a guarantee that they can receive a fee from the transaction.
Stakeholder map
Who is affected
Builders & client teams Medium impact
The Solana protocol will no longer reject blocks with transactions that have failed precompile verification. Such transactions will be allowed to be recorded in a block and signature verification failures should be handled similarly to how SVM program errors are handled.…
Action may be requiredValidators & operators Impact unknown
No proposal-specific evidence was found for this group.
Action requirement unknownUsers & stakers Medium impact
End users that submit transactions with invalid precompile instructions will now be able to see clearly in explorers and other tooling that their transactions failed rather than those transactions being dropped. They will also be charged fees for such transactions.
Action requirement unknownGovernance & ecosystem Impact unknown
No proposal-specific evidence was found for this group.
Action requirement unknownExact source revision
Full proposal document
f1f6c8b05dc2Summary
The Solana protocol currently prohibits block producers from including transactions with precompile instructions that fail signature verification. This constraint is not ideal since block producers may have to do work to verify precompiles without a guarantee that they can receive a fee from the transaction.
Motivation
Ensure that block producers are sufficiently incentivized to include transactions which make use of precompile instructions by allowing such transactions to be included in a block even if verification fails.
Alternatives Considered
Also considered relaxing the constraint of having valid non-fee payer transaction-level signatures but those signatures are not signed by the fee payer so they could be altered in-flight.
New Terminology
- Precompile instruction-level signature: A signature specified inside a precompile instruction which must be verified successfully for the transaction to be executed successfully
Detailed Design
The Solana protocol will no longer reject blocks with transactions that have failed precompile verification. Such transactions will be allowed to be recorded in a block and signature verification failures should be handled similarly to how SVM program errors are handled. The transaction will be committed, fees deducted, but no other account state changes should be persisted.
Transaction Errors
While transaction errors are not required to be consistent for clients reaching consensus, they should follow the following specification to give consistent responses to downstream users and clients.
Precompile verification errors should now be mapped to
InstructionError::Custom(u32) such that each PrecompileError variant below
maps to a custom error code as annotated below:
pub enum PrecompileError {
InvalidPublicKey, // 0u32
InvalidRecoveryId, // 1u32
InvalidSignature, // 2u32
InvalidDataOffsets, // 3u32
InvalidInstructionDataSize, // 4u32
}
Impact
End users that submit transactions with invalid precompile instructions will now be able to see clearly in explorers and other tooling that their transactions failed rather than those transactions being dropped. They will also be charged fees for such transactions.
Block producers can be assured that compute time spent on verifying any non-fee payer signatures will be compensated with fees.
Security Considerations
NA
Drawbacks (Optional)
NA
Backwards Compatibility (Optional)
This change will require the use of a new feature gate which will remove the precompile failure constraint from produced blocks.
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 #159 · merged SIMD-0159: Relax Precompile Failure Constraint 20 comments and reviews · Jan 26, 2026yeah that's true. Realistically you should never sign to pay fees if not also signing as nonce-authority. But if you do it shouldn't be a wallet-draining mistake.
GitHub ↗as far as I am aware, transaction errors are not under consensus. Think the "should" in the description below indicates this is reccomended (not required). If that's our reccomendation, we should indicate the reason why we are reccomending it - I assume for consistency in reporting between clients?
GitHub ↗Correct, updated
GitHub ↗As discussed offline, we cannot relax the non-fee payer signature constraint because those signatures are not signed by the fee payer and could be tampered with in-flight.
GitHub ↗@apfitzge can you take another look? I removed the non-fee payer signature constraint changes.
GitHub ↗signed by?
GitHub ↗@lheeger-jump can you please take a look?
GitHub ↗This has approval from both Anza and Firedancer. If no one objects in the meantime, I will merge this a week from today
GitHub ↗Provenance
Evidence & technical details
Rollout or chain data, source revisions, freshness and integrity. 1
Provenance
Evidence & technical details
Rollout or chain data, source revisions, freshness and integrity.SIMD
Deployment Status
9ypxGLzkMxi89eDerRKXWDXe44UY2z4hBig4mDhNq5DpExact source revision
Sources & integrity
- Proposal document pinned_commit_blob
f1f6c8b05dc205552d3c290a854a438392701107 - simd-document document · current · Oct 19, 2026
f1f6c8b05dc205552d3c290a854a438392701107
One or more sources are unavailable.
simd.watch community discussion · SIMD-0159
Powered by Giscus · Sign in with GitHub to comment
Community comments load when this section approaches the viewport.