nautechsystems/nautilus_trader · error

validated manifest probe data

Error message

validated manifest probe data

What it means

This panic fires when probe.call_data cannot be parsed as alloy Bytes during manifest verification. Call data is expected to be validated hex (e.g. 0x-prefixed) before verification runs, so a parse failure means the manifest invariant was broken upstream. The expect is an internal guard protecting verify_call from malformed input.

Source

Thrown at crates/adapters/blockchain/src/rpc/verification.rs:708

                    }
                    VerificationOutcome::Disagreement(failure) => {
                        return VerificationOutcome::Disagreement(failure);
                    }
                    VerificationOutcome::Unavailable(failure) => {
                        return VerificationOutcome::Unavailable(failure);
                    }
                    VerificationOutcome::Retryable(failure) => {
                        return VerificationOutcome::Retryable(failure);
                    }
                    VerificationOutcome::LocallyInvalid(failure) => {
                        return VerificationOutcome::LocallyInvalid(failure);
                    }
                }
            }

            for probe in &contract.probes {
                let call_data =
                    Bytes::from_str(&probe.call_data).expect("validated manifest probe data");
                let expected = Bytes::from_str(&probe.expected_output)
                    .expect("validated manifest probe output");

                match self
                    .verify_call(None, &address, U256::ZERO, &call_data, block)
                    .await
                {
                    VerificationOutcome::Verified(verified) if verified.value == expected => {}
                    VerificationOutcome::Verified(_) => {
                        return VerificationOutcome::Disagreement(
                            self.failure(VerificationRead::DeploymentIdentity),
                        );
                    }
                    VerificationOutcome::Disagreement(failure) => {
                        return VerificationOutcome::Disagreement(failure);
                    }
                    VerificationOutcome::Unavailable(failure) => {
                        return VerificationOutcome::Unavailable(failure);

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Validate probe.call_data with Bytes::from_str before invoking verification
  2. Regenerate the manifest from tooling so call data is emitted as canonical hex
  3. Check each probe entry in the manifest JSON for malformed hex strings
  4. Report a validator gap if validation passes but parsing fails

Example fix

// before
Bytes::from_str(&probe.call_data).expect("validated manifest probe data");
// after
let call_data = Bytes::from_str(&probe.call_data)
    .map_err(|e| ManifestError::InvalidProbeData(probe_index, e))?;
Defensive patterns

Strategy: validation

Validate before calling

fn validate_probe(probe: &Probe) -> Result<(), String> {
    Bytes::from_str(&probe.call_data)
        .map(|_| ())
        .map_err(|e| format!("invalid probe call_data '{}': {e}", probe.call_data))
}

Type guard

fn is_valid_hex_bytes(s: &str) -> bool {
    let h = s.trim_start_matches("0x");
    !h.is_empty() && h.len() % 2 == 0 && h.chars().all(|c| c.is_ascii_hexdigit())
}

Prevention

When it happens

Trigger: verify_deployment_manifest called with a contract.probes entry whose call_data is not valid hex (odd length, non-hex chars, or empty).

Common situations: Hand-edited manifest probe entries; copying ABI selector/calldata without the 0x prefix in a form the parser rejects; a generator bug emitting truncated calldata.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


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