diff --git a/src/shim/state_tree.rs b/src/shim/state_tree.rs index e11a66e38390..a86b3fcb96c8 100644 --- a/src/shim/state_tree.rs +++ b/src/shim/state_tree.rs @@ -171,6 +171,8 @@ where Ok(StateTree::FvmV2(st)) } else if let Ok(st) = super::state_tree_v0::StateTreeV0::new_from_root(store.clone(), c) { Ok(StateTree::V0(st)) + } else if !store.has(c)? { + bail!("No state tree exists for the root {c}.") } else { let state_root = store.get_cbor::(c).ok().flatten(); let state_root_version = state_root diff --git a/src/state_manager/mod.rs b/src/state_manager/mod.rs index 24de41efc66f..53845000c9ef 100644 --- a/src/state_manager/mod.rs +++ b/src/state_manager/mod.rs @@ -857,6 +857,8 @@ where callback: Option) -> anyhow::Result<()>>, enable_tracing: VMTrace, ) -> Result { + let epoch = tipset.epoch(); + let has_callback = callback.is_some(); Ok(apply_block_messages( self.chain_store().genesis_block_header().timestamp, Arc::clone(&self.chain_store().chain_index), @@ -866,7 +868,14 @@ where tipset, callback, enable_tracing, - )?) + ) + .map_err(|e| { + if has_callback { + e + } else { + anyhow::anyhow!("Failed to compute tipset state@{epoch}: {e}") + } + })?) } #[instrument(skip_all)]