|
19 | 19 | #![feature(associated_type_bounds)] |
20 | 20 |
|
21 | 21 | use frame_system::pallet_prelude::BlockNumberFor; |
22 | | -use log::error; |
23 | 22 | pub use pallet::*; |
24 | 23 | use sp_mmr_primitives::{LeafDataProvider, OnNewRoot}; |
25 | | -use sp_runtime::traits::One; |
26 | | -use sp_runtime::{DigestItem, Saturating}; |
| 24 | +use sp_runtime::traits::{CheckedSub, One}; |
| 25 | +use sp_runtime::DigestItem; |
27 | 26 | use sp_subspace_mmr::subspace_mmr_runtime_interface::get_mmr_leaf_data; |
28 | 27 | use sp_subspace_mmr::{LeafDataV0, MmrDigest, MmrLeaf}; |
29 | 28 |
|
@@ -52,16 +51,12 @@ impl<T: Config> LeafDataProvider for Pallet<T> { |
52 | 51 | type LeafData = MmrLeaf<BlockNumberFor<T>, T::Hash>; |
53 | 52 |
|
54 | 53 | fn leaf_data() -> Self::LeafData { |
55 | | - let block_number = frame_system::Pallet::<T>::block_number().saturating_sub(One::one()); |
| 54 | + let block_number = frame_system::Pallet::<T>::block_number() |
| 55 | + .checked_sub(&One::one()) |
| 56 | + .expect("`block_number` will always be >= 1; qed"); |
56 | 57 | let block_hash = frame_system::Pallet::<T>::parent_hash(); |
57 | | - // unfortunately, we Leaf data provider trait expects the impl to be infallible |
58 | | - // but our host function might fail for any reason but practically shouldn't since |
59 | | - // we are querying the immediate parent block |
60 | | - // We will just log an error in case of such ever happening |
61 | | - let leaf_data = get_mmr_leaf_data(block_hash.into()).unwrap_or_else(|| { |
62 | | - error!(target: "runtime::subspace_mmr", "Failed to fetch leaf data for Block hash{block_hash:?}"); |
63 | | - Default::default() |
64 | | - }); |
| 58 | + let leaf_data = get_mmr_leaf_data(block_hash.into()) |
| 59 | + .expect("leaf data for parent hash must always be derived; qed"); |
65 | 60 | MmrLeaf::V0(LeafDataV0 { |
66 | 61 | block_number, |
67 | 62 | block_hash, |
|
0 commit comments