Skip to content
Snippets Groups Projects
Unverified Commit 682f8cd2 authored by thiolliere's avatar thiolliere Committed by GitHub
Browse files

`set_validation_data` register weight manually, do not use refund when the pre...

`set_validation_data` register weight manually, do not use refund when the pre dispatch is zero. (#7327)

Related https://github.com/paritytech/polkadot-sdk/issues/6772

For an extrinsic, in the post dispatch info, the actual weight is only
used to reclaim unused weight. If the actual weight is more than the pre
dispatch weight, then the extrinsic is using the minimum, e.g., the
weight used registered in pre dispatch.

In parachain-system pallet one call is `set_validation_data`. This call
is returning an actual weight, but the pre-dispatch weight is 0.

This PR fix the disregard of actual weight of `set_validation_data` by
registering it manually.
parent a31d26dc
No related merge requests found
Pipeline #513109 waiting for manual action with stages
in 37 minutes and 21 seconds
......@@ -45,7 +45,7 @@ use cumulus_primitives_core::{
use cumulus_primitives_parachain_inherent::{MessageQueueChain, ParachainInherentData};
use frame_support::{
defensive,
dispatch::{DispatchResult, Pays, PostDispatchInfo},
dispatch::DispatchResult,
ensure,
inherent::{InherentData, InherentIdentifier, ProvideInherent},
traits::{Get, HandleMessage},
......@@ -567,11 +567,12 @@ pub mod pallet {
/// if the appropriate time has come.
#[pallet::call_index(0)]
#[pallet::weight((0, DispatchClass::Mandatory))]
// TODO: This weight should be corrected.
// TODO: This weight should be corrected. Currently the weight is registered manually in the
// call with `register_extra_weight_unchecked`.
pub fn set_validation_data(
origin: OriginFor<T>,
data: ParachainInherentData,
) -> DispatchResultWithPostInfo {
) -> DispatchResult {
ensure_none(origin)?;
assert!(
!<ValidationData<T>>::exists(),
......@@ -692,7 +693,12 @@ pub mod pallet {
vfp.relay_parent_number,
));
Ok(PostDispatchInfo { actual_weight: Some(total_weight), pays_fee: Pays::No })
frame_system::Pallet::<T>::register_extra_weight_unchecked(
total_weight,
DispatchClass::Mandatory,
);
Ok(())
}
#[pallet::call_index(1)]
......
title: Correctly register the weight n `set_validation_data` in `cumulus-pallet-parachain-system`
doc:
- audience: Runtime Dev
description: |
The actual weight of the call was register as a refund, but the pre-dispatch weight is 0,
and we can't refund from 0. Now the actual weight is registered manually instead of ignored.
crates:
- name: cumulus-pallet-parachain-system
bump: patch
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment