nautechsystems/nautilus_trader · error · anyhow::Error

Profiler receipt transaction hash does not match its ingesti

Error message

Profiler receipt transaction hash does not match its ingestion watermark

What it means

Profiler verification guard: the verified receipt's transaction hash differs from the hash recorded in the ingestion watermark, so the receipt belongs to a different transaction and the profiler event cannot be attested.

Source

Thrown at crates/adapters/blockchain/src/execution/client.rs:4198

    pool_address: Address,
    pool: &Pool,
    verification: &VerificationCoordinator,
) -> anyhow::Result<()> {
    let transaction_hash = B256::from_str(&position.transaction_hash).with_context(|| {
        format!(
            "Invalid profiler transaction hash {}",
            position.transaction_hash
        )
    })?;
    let receipt = verified_value(
        verification.verify_receipt(&transaction_hash).await,
        "profiler watermark receipt",
    )?;
    anyhow::ensure!(
        receipt.status,
        "Profiler transaction did not execute successfully"
    );
    anyhow::ensure!(
        receipt.transaction_hash == transaction_hash,
        "Profiler receipt transaction hash does not match its ingestion watermark"
    );
    anyhow::ensure!(
        receipt.block_number == position.number
            && receipt.block_hash == expected_block_hash
            && receipt.transaction_index == u64::from(position.transaction_index),
        "Profiler receipt position does not match its ingestion watermark"
    );
    let matching_logs = receipt
        .logs
        .iter()
        .filter(|log| rpc_log::extract_log_index(log).ok() == Some(position.log_index))
        .collect::<Vec<_>>();
    anyhow::ensure!(
        matching_logs.len() == 1,
        "Profiler receipt contains {} logs at global index {}; expected exactly one",
        matching_logs.len(),

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Re-ingest the profiler watermark from the correct transaction
  2. Check for block reorgs that swapped the watermark transaction
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/adapters/blockchain/src/execution/client.rs:4198 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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