diff --git a/client/distance/src/lib.rs b/client/distance/src/lib.rs index 1b67e85fe2dba9c4a155440231ec8f5e664289d8..c19c29fd2f3a44a18086882f085bb4e69d3fb6df 100644 --- a/client/distance/src/lib.rs +++ b/client/distance/src/lib.rs @@ -40,19 +40,24 @@ where Backend: sc_client_api::Backend<B>, IdtyIndex: Decode + Encode + PartialEq + TypeInfo, { - let pool_index = client + let pool_index = if let Some(index) = client .storage( parent, &StorageKey( frame_support::storage::storage_prefix(b"Distance", b"CurrentPoolIndex").to_vec(), ), ) - .expect("CurrentIndex is Err") - .map_or(0, |raw| { - u32::decode(&mut &raw.0[..]).expect("cannot decode CurrentIndex") - }); + .ok() + .flatten() + .map_or(None, |raw| u32::decode(&mut &raw.0[..]).ok()) + { + index + } else { + log::error!("🧙 [distance oracle] CurrentPoolIndex cannot be decoded"); + return Ok(sp_distance::InherentDataProvider::<IdtyIndex>::new(None)); + }; - let published_results = client + let published_results = if let Some(results) = client .storage( parent, &StorageKey( @@ -67,11 +72,17 @@ where ) .to_vec(), ), - )? - .map_or_else(Default::default, |raw| { - pallet_distance::EvaluationPool::<AccountId32, IdtyIndex>::decode(&mut &raw.0[..]) - .expect("cannot decode EvaluationPool") - }); + ) + .ok() + .flatten() + .map_or(None, |raw| { + pallet_distance::EvaluationPool::<AccountId32, IdtyIndex>::decode(&mut &raw.0[..]).ok() + }) { + results + } else { + log::error!("🧙 [distance oracle] EvaluationPool cannot be decoded"); + return Ok(sp_distance::InherentDataProvider::<IdtyIndex>::new(None)); + }; // Have we already published a result for this period? // The block author is guaranteed to be in the owner_keys.