nautechsystems/nautilus_trader · error · anyhow::Error
Execution payload protocol version {} is not supported
Error message
Execution payload protocol version {} is not supported What it means
This ensure! check validates that a deserialized ExecutionPayloadState row was written with the same EXECUTION_PAYLOAD_PROTOCOL_VERSION the current code supports. A payload stored by a newer (or older, unsupported) schema version of the software cannot be safely decoded, so the load is refused.
Source
Thrown at crates/adapters/blockchain/src/cache/database.rs:7484
}
}
fn execution_payload_state_from_row(
row: &sqlx::postgres::PgRow,
) -> anyhow::Result<ExecutionPayloadState> {
Ok(ExecutionPayloadState {
deployment_id: row.try_get("deployment_id")?,
protocol_version: row.try_get("protocol_version")?,
operation: row.try_get("operation")?,
active_key_id: row.try_get("active_key_id")?,
})
}
fn validate_execution_payload_state(
state: &ExecutionPayloadState,
keys: &PayloadKeySet,
) -> anyhow::Result<()> {
anyhow::ensure!(
state.protocol_version == EXECUTION_PAYLOAD_PROTOCOL_VERSION,
"Execution payload protocol version {} is not supported",
state.protocol_version
);
anyhow::ensure!(
state.deployment_id == keys.deployment_id(),
"Execution payload deployment ID does not match this database"
);
anyhow::ensure!(
state.active_key_id.as_slice() == keys.active_key_id(),
"Configured active payload key does not match the database active key"
);
Ok(())
}
async fn lock_execution_payload_operation(
transaction: &mut Transaction<'_, Postgres>,
) -> anyhow::Result<()> {View on GitHub (pinned to 18893faf8b)
Solutions
- Run the binary version that wrote the payload, or upgrade to a version matching the stored protocol_version
- Migrate or rebuild the cache database so payloads are stored with the supported protocol version
- Point the node at a cache database created by the same software version
Defensive patterns
Strategy: validation
Validate before calling
if stored.protocol_version != EXECUTION_PAYLOAD_PROTOCOL_VERSION {
return Err(format!("payload written by incompatible version (protocol {})", stored.protocol_version));
} Prevention
- Keep software versions and the cache database version-aligned
- Never share one cache database across different node versions
- Check the release notes for protocol version changes before upgrading or downgrading
When it happens
Trigger: Loading an execution payload row whose stored protocol_version differs from EXECUTION_PAYLOAD_PROTOCOL_VERSION — typically after rolling back to an older build or pointing the cache at a database written by a newer release.
Common situations: Downgrading the binary while keeping an existing cache database; sharing one Postgres cache between nodes running different versions; restoring a snapshot from another deployment.
Related errors
- Execution schema version {} is newer than supported version
- Unsupported execution verification schema version {installed
- Implement FromRow for FuturesSpread
- Implement FromRow for OptionSpread
- Verified finalized transaction count advanced without an act
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/2ee4ed755b109dcb.
Report an issue: GitHub.