nautechsystems/nautilus_trader · error
Missing data in burn event log
Error message
Missing data in burn event log
What it means
parse_burn_event_hypersync in the blockchain adapter's uniswap_v3 parsing module throws this when the Hypersync-decoded Burn event data is absent (the decoded payload is None), so the mandatory fields (amount, amount0, amount1, ticks) cannot be constructed. The library treats a burn log without decodable data as unusable rather than emitting a partial event. It is a data-integrity guard on the on-chain log ingestion path.
Source
Thrown at crates/adapters/blockchain/src/exchanges/parsing/uniswap_v3/burn.rs:114
.as_ref(),
);
let pool_identifier = PoolIdentifier::Address(Ustr::from(&pool_address.to_string()));
Ok(BurnEvent::new(
dex,
pool_identifier,
extract_block_number(log)?,
extract_transaction_hash(log)?,
extract_transaction_index(log)?,
extract_log_index(log)?,
owner,
tick_lower,
tick_upper,
decoded.amount,
decoded.amount0,
decoded.amount1,
))
} else {
Err(anyhow::anyhow!("Missing data in burn event log"))
}
}
/// Parses a burn event from an RPC log.
///
/// # Errors
///
/// Returns an error if the log parsing fails or if the event data is invalid.
pub fn parse_burn_event_rpc(dex: SharedDex, log: &RpcLog) -> anyhow::Result<BurnEvent> {
rpc_log::validate_event_signature(log, BURN_EVENT_SIGNATURE_HASH, "Burn")?;
let owner = rpc_log::extract_address_from_topic(log, 1, "owner")?;
// Extract int24 tickLower from topic2 (stored as a 32-byte padded value)
let tick_lower_bytes = rpc_log::extract_topic_bytes(log, 2)?;
let tick_lower = i32::from_be_bytes(tick_lower_bytes[28..32].try_into()?);
// Extract int24 tickUpper from topic3 (stored as a 32-byte padded value)View on GitHub (pinned to 18893faf8b)
Solutions
- Check that the log actually comes from a canonical Uniswap V3 pool and has a non-empty data field (data.len() >= expected 32-byte words for the Burn event).
- Verify the Hypersync query/ABI registration for the Burn event so the decoder produces Some(decoded); re-sync or re-fetch the log if decoding failed.
- Inspect the raw log: if topic0 is the Burn signature but data is empty, the source contract is non-conforming — filter it out upstream.
- Update the adapter/Hypersync client versions if decoding regressed after a dependency bump, then re-run the ingestion.
Example fix
// before
let decoded = decode_burn(log); // may be None
// after
if log.data.is_empty() {
tracing::warn!(tx = ?log.transaction_hash, "skipping burn log with empty data");
return Ok(None); // or filter before calling parse_burn_event_hypersync
}
let event = parse_burn_event_hypersync(&log)?; Defensive patterns
Strategy: validation
Validate before calling
fn can_parse_burn(log: &Log) -> bool {
log.data.len() >= 96 // amount, amount0, amount1 words
} Type guard
fn has_decoded_burn(decoded: &Option<BurnDecoded>) -> bool {
decoded.is_some()
} Try / catch
match parse_burn_event_hypersync(&log) {
Ok(event) => handle(event),
Err(e) if e.to_string().contains("Missing data in burn event log") => {
tracing::warn!("skipping malformed burn log");
}
Err(e) => return Err(e),
} Prevention
- Filter logs with empty/short data sections before batch parsing.
- Keep the Hypersync ABI registration for Burn in sync with adapter versions.
- Only ingest logs from canonical Uniswap V3 pool addresses.
- Log skipped/malformed events with tx hash for later investigation.
When it happens
Trigger: Calling parse_burn_event_hypersync with a Hypersync log whose decoded data field is None — e.g. the log's topic0 matched the Burn signature but the data section was absent, truncated, or Hypersync failed to decode it into the expected Burn struct.
Common situations: Ingesting logs from a malformed or non-standard contract that emits a Burn-shaped topic0 without conforming data; Hypersync ABI registration drift after a Uniswap V3 contract upgrade; querying a block range that includes partially indexed logs; copy-pasting a log from another DEX into a test fixture.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Missing data in collect event log
- Missing data in initialize event log
- Missing data in mint event log
- Missing data in pool created event log
- Missing data in swap event log
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/27ab511016bd2941.
Report an issue: GitHub.