nautechsystems/nautilus_trader · error · anyhow::Error

Unsupported execution verification schema version {installed

Error message

Unsupported execution verification schema version {installed}

What it means

Raised in database.rs:3691 (load_execution_verification_position) when the installed execution_verification schema version recorded in execution_schema_version exceeds VERIFICATION_SCHEMA_VERSION compiled into this binary. The library refuses to read verification state produced by a newer, unknown schema because row layouts and semantics may differ, preventing silent data corruption.

Source

Thrown at crates/adapters/blockchain/src/cache/database.rs:3691

    /// Loads the durable finalized-header and nonce position when verification is active.
    pub(crate) async fn load_execution_verification_position(
        &self,
        chain_id: u32,
        wallet_address: &str,
        manifest_version: &str,
        manifest_digest: &str,
    ) -> anyhow::Result<Option<ExecutionVerificationPosition>> {
        let installed = sqlx::query_scalar::<_, i16>(
            "SELECT version FROM execution_schema_version \
             WHERE component = 'evm_execution_verification'",
        )
        .fetch_optional(&self.pool)
        .await
        .context("failed to inspect execution verification schema")?;
        let Some(installed) = installed else {
            return Ok(None);
        };
        anyhow::ensure!(
            installed <= VERIFICATION_SCHEMA_VERSION,
            "Unsupported execution verification schema version {installed}"
        );
        let chain_id =
            i32::try_from(chain_id).context("Verification chain ID exceeds PostgreSQL INTEGER")?;
        let current = sqlx::query_as::<_, (String, String, i64, i64)>(
            "
            SELECT manifest_version, manifest_digest, next_canonical_nonce, revision
            FROM execution_verification_nonce
            WHERE chain_id = $1 AND wallet_address = $2
            ",
        )
        .bind(chain_id)
        .bind(wallet_address)
        .fetch_optional(&self.pool)
        .await
        .context("failed to load execution verification nonce position")?;
        let Some((stored_version, stored_digest, nonce, revision)) = current else {

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Run the binary version that supports the installed verification schema version.
  2. Inspect the installed version: SELECT version FROM execution_schema_version WHERE component = 'evm_execution_verification'; and confirm it matches your build's VERIFICATION_SCHEMA_VERSION.
  3. Roll the database back from backup if the upgrade was unintended, or upgrade the application binary instead of downgrading.
  4. Never hand-edit the version row to make an old binary accept new data.

Example fix

// before: mismatched binary
code.examples
// after: deploy the binary compiled against the installed verification schema
// (upgrade application to a release whose VERIFICATION_SCHEMA_VERSION >= installed)
Defensive patterns

Strategy: validation

Validate before calling

let installed: Option<i16> = sqlx::query_scalar(
    "SELECT version FROM execution_schema_version WHERE component = 'evm_execution_verification'",
).fetch_optional(&pool).await?;
if installed.map_or(false, |v| v > VERIFICATION_SCHEMA_VERSION) {
    anyhow::bail!("database verification schema {installed:?} newer than this binary");
}

Try / catch

match db.load_execution_verification_position(chain, wallet, ver, digest).await {
    Err(e) if e.to_string().contains("Unsupported execution verification schema version") => {
        // deploy the newer binary or restore the DB backup
    },
    other => other?,
}

Prevention

When it happens

Trigger: Loading execution verification position when SELECT version ... WHERE component = 'evm_execution_verification' returns a value greater than VERIFICATION_SCHEMA_VERSION (e.g. database was upgraded by a newer build, then an older binary reads it).

Common situations: Downgrading the node to an older release after the verification schema was upgraded; pointing an older binary at a database migrated by a newer deployment; mixed-version blue-green deployment where the old instance reads state the new instance upgraded.

Related errors


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/c9011285b13ff2ed. Report an issue: GitHub.