nautechsystems/nautilus_trader · error

validated manifest probe output

Error message

validated manifest probe output

What it means

Same guard as the probe call data, but for probe.expected_output: the expected eth_call response bytes must be valid hex for the comparison in verify_call to run. The expect asserts the manifest was pre-validated; hitting it means malformed expected_output slipped through.

Source

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

                        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);
                    }
                    VerificationOutcome::Retryable(failure) => {

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Confirm probe.expected_output is a complete even-length hex string (0x... optional)
  2. Re-capture the expected output from a real eth_call via the manifest tooling
  3. Pre-validate expected_output with Bytes::from_str in a CI check on the manifest
  4. File a bug if the official validator accepts malformed output

Example fix

// before
let expected = Bytes::from_str(&probe.expected_output)
    .expect("validated manifest probe output");
// after
let expected = Bytes::from_str(&probe.expected_output)
    .map_err(|e| ManifestError::InvalidProbeOutput(probe_index, e))?;
Defensive patterns

Strategy: validation

Validate before calling

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

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 with a probe whose expected_output is empty, odd-length, or contains non-hex characters.

Common situations: Recording a probe's expected output by hand from a logs viewer that strips 0x or inserts spaces; truncating output during copy/paste; a manifest producer emitting a textual description instead of bytes.

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/aebca7085f109688. Report an issue: GitHub.