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
- Confirm probe.expected_output is a complete even-length hex string (0x... optional)
- Re-capture the expected output from a real eth_call via the manifest tooling
- Pre-validate expected_output with Bytes::from_str in a CI check on the manifest
- 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
- Capture expected outputs via tooling that emits canonical hex
- Lint manifests for even-length hex strings
- Round-trip manifests through serde before use
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
- validated proxy target hash
- validated manifest probe data
- validated proxy target address
- Chart function must be callable, was {type(func)}
- Chart '{name}' not found.{suggestion_text} Available charts:
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/aebca7085f109688.
Report an issue: GitHub.