From 031fb06f4f9e84ac47a697940cf161894cd58634 Mon Sep 17 00:00:00 2001 From: sulijia <984115358@qq.com> Date: Fri, 29 Mar 2024 13:48:23 +0800 Subject: [PATCH] Gas cost is only calculated in ondemand mode --- pallets/liquidation/src/lib.rs | 7 +++++-- pallets/liquidation/src/mock.rs | 6 ++++-- pallets/order/src/lib.rs | 4 +++- pallets/order/src/mock.rs | 21 +++++++++++++++------ runtime/src/lib.rs | 19 ++++++++++++++----- 5 files changed, 41 insertions(+), 16 deletions(-) diff --git a/pallets/liquidation/src/lib.rs b/pallets/liquidation/src/lib.rs index a22b8a8..fa5a6ee 100644 --- a/pallets/liquidation/src/lib.rs +++ b/pallets/liquidation/src/lib.rs @@ -168,8 +168,11 @@ pub mod pallet { let base_account_balance = ::Currency::free_balance(&base_account); let (collator, real_gas_cost) = match T::OrderGasCost::gas_cost(n) { - Some((collator, real_gas_cost)) => (collator, real_gas_cost), - None => { + Ok(cost) => match cost { + Some((collator, real_gas_cost)) => (collator, real_gas_cost), + None => return, + }, + Err(_) => { Self::deposit_event(Event::Error(Error::::FailedToFetchRealGasCost.into())); return; }, diff --git a/pallets/liquidation/src/mock.rs b/pallets/liquidation/src/mock.rs index bc8404d..9fb6c88 100644 --- a/pallets/liquidation/src/mock.rs +++ b/pallets/liquidation/src/mock.rs @@ -190,9 +190,11 @@ where T: pallet_order::Config, T::AccountId: From<[u8; 32]>, { - fn gas_cost(_block_number: BlockNumberFor) -> Option<(T::AccountId, Balance)> { + fn gas_cost( + _block_number: BlockNumberFor, + ) -> Result, sp_runtime::DispatchError> { let account = T::AccountId::try_from(COLLATOR_BYTES).unwrap(); - Some((account, 10000000 as u128)) + Ok(Some((account, 10000000 as u128))) } } diff --git a/pallets/order/src/lib.rs b/pallets/order/src/lib.rs index de1512a..1ca3110 100644 --- a/pallets/order/src/lib.rs +++ b/pallets/order/src/lib.rs @@ -407,5 +407,7 @@ impl Pallet { } pub trait OrderGasCost { - fn gas_cost(block_number: BlockNumberFor) -> Option<(T::AccountId, Balance)>; + fn gas_cost( + block_number: BlockNumberFor, + ) -> Result, DispatchError>; } diff --git a/pallets/order/src/mock.rs b/pallets/order/src/mock.rs index 26c13be..ff681f3 100644 --- a/pallets/order/src/mock.rs +++ b/pallets/order/src/mock.rs @@ -115,13 +115,22 @@ where T: crate::Config, T::AccountId: From<[u8; 32]>, { - fn gas_cost(block_number: BlockNumberFor) -> Option<(T::AccountId, Balance)> { - let sequece_number = >::block_2_sequence(block_number)?; - let order = >::order_map(sequece_number)?; + fn gas_cost( + block_number: BlockNumberFor, + ) -> Result, sp_runtime::DispatchError> { + let sequece_number = >::block_2_sequence(block_number); + if sequece_number.is_none() { + return Ok(None); + } + let order = >::order_map( + sequece_number.ok_or(sp_runtime::DispatchError::Other("sequece_number is none"))?, + ) + .ok_or(sp_runtime::DispatchError::Other("Not exist order"))?; let mut r = [0u8; 32]; r.copy_from_slice(order.orderer.encode().as_slice()); - let account = T::AccountId::try_from(r).ok()?; - Some((account, order.price)) + let account = T::AccountId::try_from(r) + .map_err(|_| sp_runtime::DispatchError::Other("Account error"))?; + Ok(Some((account, order.price))) } } @@ -142,7 +151,7 @@ pub mod mock_pallet { impl Pallet { pub fn get_gas_cost(block_number: BlockNumberFor) -> Option<(T::AccountId, Balance)> { - T::OrderGasCost::gas_cost(block_number) + T::OrderGasCost::gas_cost(block_number).unwrap() } } } diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index e5267ac..e7038ce 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -696,13 +696,22 @@ where T: pallet_order::Config, T::AccountId: From<[u8; 32]>, { - fn gas_cost(block_number: BlockNumberFor) -> Option<(T::AccountId, Balance)> { - let sequece_number = >::block_2_sequence(block_number)?; - let order = >::order_map(sequece_number)?; + fn gas_cost( + block_number: BlockNumberFor, + ) -> Result, sp_runtime::DispatchError> { + let sequece_number = >::block_2_sequence(block_number); + if sequece_number.is_none() { + return Ok(None); + } + let order = >::order_map( + sequece_number.ok_or(sp_runtime::DispatchError::Other("sequece_number is none"))?, + ) + .ok_or(sp_runtime::DispatchError::Other("Not exist order"))?; let mut r = [0u8; 32]; r.copy_from_slice(order.orderer.encode().as_slice()); - let account = T::AccountId::try_from(r).ok()?; - Some((account, order.price)) + let account = T::AccountId::try_from(r) + .map_err(|_| sp_runtime::DispatchError::Other("Account error"))?; + Ok(Some((account, order.price))) } }