pallet-referenda: Detect incorrect pre-image length (#3850)

There has been a case that a referenda failed because the length given
to `submit` was incorrect. The pallet can actually check the length if
the pre-image already exists to ensure that these kind of issues are not
happening again.
This commit is contained in:
Bastian Köcher
2024-03-27 23:52:50 +00:00
committed by GitHub
parent 597ea9203a
commit 5d314eb03e
3 changed files with 43 additions and 0 deletions
+12
View File
@@ -424,6 +424,8 @@ pub mod pallet {
BadStatus,
/// The preimage does not exist.
PreimageNotExist,
/// The preimage is stored with a different length than the one provided.
PreimageStoredWithDifferentLength,
}
#[pallet::hooks]
@@ -462,6 +464,16 @@ pub mod pallet {
let proposal_origin = *proposal_origin;
let who = T::SubmitOrigin::ensure_origin(origin, &proposal_origin)?;
// If the pre-image is already stored, ensure that it has the same length as given in
// `proposal`.
if let (Some(preimage_len), Some(proposal_len)) =
(proposal.lookup_hash().and_then(|h| T::Preimages::len(&h)), proposal.lookup_len())
{
if preimage_len != proposal_len {
return Err(Error::<T, I>::PreimageStoredWithDifferentLength.into())
}
}
let track =
T::Tracks::track_for(&proposal_origin).map_err(|_| Error::<T, I>::NoTrack)?;
let submission_deposit = Self::take_deposit(who, T::SubmissionDeposit::get())?;