From b345b70b6557b64e898a42836c3f110ab5e35319 Mon Sep 17 00:00:00 2001 From: Gav Date: Tue, 9 May 2023 16:15:55 +0100 Subject: [PATCH 1/2] Timeout only if the referendum is not queued --- frame/referenda/src/lib.rs | 20 ++++++++++++++------ frame/referenda/src/tests.rs | 2 ++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/frame/referenda/src/lib.rs b/frame/referenda/src/lib.rs index 68837376c5b33..f6bcf87d5990f 100644 --- a/frame/referenda/src/lib.rs +++ b/frame/referenda/src/lib.rs @@ -79,7 +79,7 @@ use frame_support::{ }; use scale_info::TypeInfo; use sp_runtime::{ - traits::{AtLeast32BitUnsigned, Dispatchable, One, Saturating, Zero}, + traits::{AtLeast32BitUnsigned, Dispatchable, One, Saturating, Zero, Bounded}, DispatchError, Perbill, }; use sp_std::{fmt::Debug, prelude::*}; @@ -1054,9 +1054,9 @@ impl, I: 'static> Pallet { Some(x) => x, None => return (ReferendumInfo::Ongoing(status), false, ServiceBranch::Fail), }; + // Default the alarm to the end of the world. let timeout = status.submitted + T::UndecidingTimeout::get(); - // Default the alarm to the submission timeout. - let mut alarm = timeout; + let mut alarm = T::BlockNumber::max_value(); let branch; match &mut status.deciding { None => { @@ -1097,11 +1097,12 @@ impl, I: 'static> Pallet { ServiceBranch::Preparing } } else { + alarm = timeout; ServiceBranch::NoDeposit } } // If we didn't move into being decided, then check the timeout. - if status.deciding.is_none() && now >= timeout { + if status.deciding.is_none() && now >= timeout && !status.in_queue { // Too long without being decided - end it. Self::ensure_no_alarm(&mut status); Self::deposit_event(Event::::TimedOut { index, tally: status.tally }); @@ -1186,7 +1187,11 @@ impl, I: 'static> Pallet { }, } - let dirty_alarm = Self::ensure_alarm_at(&mut status, index, alarm); + let dirty_alarm = if alarm < T::BlockNumber::max_value() { + Self::ensure_alarm_at(&mut status, index, alarm) + } else { + Self::ensure_no_alarm(&mut status) + }; (ReferendumInfo::Ongoing(status), dirty_alarm || dirty, branch) } @@ -1210,10 +1215,13 @@ impl, I: 'static> Pallet { } /// Cancel the alarm in `status`, if one exists. - fn ensure_no_alarm(status: &mut ReferendumStatusOf) { + fn ensure_no_alarm(status: &mut ReferendumStatusOf) -> bool { if let Some((_, last_alarm)) = status.alarm.take() { // Incorrect alarm - cancel it. let _ = T::Scheduler::cancel(last_alarm); + true + } else { + false } } diff --git a/frame/referenda/src/tests.rs b/frame/referenda/src/tests.rs index 0a1561d001a7d..39f1945bf4f3b 100644 --- a/frame/referenda/src/tests.rs +++ b/frame/referenda/src/tests.rs @@ -190,6 +190,8 @@ fn queueing_works() { set_balance_proposal_bounded(i), DispatchTime::After(0), )); + } + for i in [1, 2, 4] { assert_ok!(Referenda::place_decision_deposit(RuntimeOrigin::signed(i), i as u32)); // TODO: decision deposit after some initial votes with a non-highest voted coming // first. From dd595dacdf39300bc72a02ff6e17e3ecc493ded3 Mon Sep 17 00:00:00 2001 From: command-bot <> Date: Tue, 9 May 2023 16:56:51 +0000 Subject: [PATCH 2/2] ".git/.scripts/commands/fmt/fmt.sh" --- frame/referenda/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frame/referenda/src/lib.rs b/frame/referenda/src/lib.rs index f6bcf87d5990f..dd352d0af40cb 100644 --- a/frame/referenda/src/lib.rs +++ b/frame/referenda/src/lib.rs @@ -79,7 +79,7 @@ use frame_support::{ }; use scale_info::TypeInfo; use sp_runtime::{ - traits::{AtLeast32BitUnsigned, Dispatchable, One, Saturating, Zero, Bounded}, + traits::{AtLeast32BitUnsigned, Bounded, Dispatchable, One, Saturating, Zero}, DispatchError, Perbill, }; use sp_std::{fmt::Debug, prelude::*};