diff --git a/client/distance/src/lib.rs b/client/distance/src/lib.rs index 1b67e85fe2dba9c4a155440231ec8f5e664289d8..75f5d176fc22f3f2027cbbcb2d0127dcd9fdf9cc 100644 --- a/client/distance/src/lib.rs +++ b/client/distance/src/lib.rs @@ -40,21 +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") - }); + )? + .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, + B::Hash::default(), &StorageKey( frame_support::storage::storage_prefix( b"Distance", @@ -68,10 +71,14 @@ where .to_vec(), ), )? - .map_or_else(Default::default, |raw| { - pallet_distance::EvaluationPool::<AccountId32, IdtyIndex>::decode(&mut &raw.0[..]) - .expect("cannot decode EvaluationPool") - }); + .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.