Skip to main content
Technical proposal SIMD-0159 Activated

Relax Precompile Failure Constraint

  1. Idea
  2. Draft
  3. Review
  4. Accept
  5. Implement
  6. 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.

Source-backed reading aid · source language: EN

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 required
Validators & operators Impact unknown

No proposal-specific evidence was found for this group.

Action requirement unknown
Users & 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 unknown
Governance & ecosystem Impact unknown

No proposal-specific evidence was found for this group.

Action requirement unknown

Exact source revision

Full proposal document

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

Summary

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

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.

Provenance

Evidence & technical details

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

SIMD

Deployment Status

Document lifecycleActivated
CategoryCore protocol
Devnetactive Epoch 847
Testnetactive Epoch 755
Mainnet-Betaactive Epoch 760
9ypxGLzkMxi89eDerRKXWDXe44UY2z4hBig4mDhNq5Dp

Exact source revision

Sources & integrity

  • Proposal document pinned_commit_blob
    0616093b2952ed6de52c4a27d66aadd11d48d4f9
  • simd-document document · current · Sep 11, 2026
    0616093b2952ed6de52c4a27d66aadd11d48d4f9

One or more sources are unavailable.

One or more sources are unavailable.