From d59ef491953719e91532c848df6933da86faec17 Mon Sep 17 00:00:00 2001 From: Lldenaurois Date: Tue, 12 Oct 2021 22:09:48 +0200 Subject: [PATCH] Move runtime to with_transaction in order to Rollback state changes (#4067) * Move runtime to with_transaction in order to Rollback state changes * add assert_storage_noop to tests --- polkadot/runtime/parachains/src/disputes.rs | 53 +++++++++++---------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/polkadot/runtime/parachains/src/disputes.rs b/polkadot/runtime/parachains/src/disputes.rs index 1ec5515667..4059ed6378 100644 --- a/polkadot/runtime/parachains/src/disputes.rs +++ b/polkadot/runtime/parachains/src/disputes.rs @@ -22,7 +22,7 @@ use crate::{ session_info, }; use bitvec::{bitvec, order::Lsb0 as BitOrderLsb0}; -use frame_support::{ensure, traits::Get, weights::Weight}; +use frame_support::{ensure, storage::TransactionOutcome, traits::Get, weights::Weight}; use frame_system::pallet_prelude::*; use parity_scale_codec::{Decode, Encode}; use primitives::v1::{ @@ -739,26 +739,29 @@ impl Pallet { } fn filter_multi_dispute_data(statement_sets: &mut MultiDisputeStatementSet) { - let config = >::config(); + frame_support::storage::with_transaction(|| { + let config = >::config(); - let old_statement_sets = sp_std::mem::take(statement_sets); + let old_statement_sets = sp_std::mem::take(statement_sets); - // Deduplicate. - let dedup_iter = { - let mut targets = BTreeSet::new(); - old_statement_sets.into_iter().filter(move |set| { - let target = (set.candidate_hash, set.session); - targets.insert(target) - }) - }; + // Deduplicate. + let dedup_iter = { + let mut targets = BTreeSet::new(); + old_statement_sets.into_iter().filter(move |set| { + let target = (set.candidate_hash, set.session); + targets.insert(target) + }) + }; - *statement_sets = dedup_iter - .filter_map(|set| { - let filter = Self::filter_dispute_data(&config, &set); + *statement_sets = dedup_iter + .filter_map(|set| { + let filter = Self::filter_dispute_data(&config, &set); - filter.filter_statement_set(set) - }) - .collect(); + filter.filter_statement_set(set) + }) + .collect(); + TransactionOutcome::Rollback(()) + }) } // Given a statement set, this produces a filter to be applied to the statement set. @@ -1210,7 +1213,7 @@ mod tests { REWARD_VALIDATORS, }; use frame_support::{ - assert_err, assert_noop, assert_ok, + assert_err, assert_noop, assert_ok, assert_storage_noop, traits::{OnFinalize, OnInitialize}, }; use frame_system::InitKind; @@ -2836,7 +2839,7 @@ mod tests { ], }]; - Pallet::::filter_multi_dispute_data(&mut statements); + assert_storage_noop!(Pallet::::filter_multi_dispute_data(&mut statements)); assert_eq!( statements, @@ -2918,7 +2921,7 @@ mod tests { ], }]; - Pallet::::filter_multi_dispute_data(&mut statements); + assert_storage_noop!(Pallet::::filter_multi_dispute_data(&mut statements)); assert!(statements.is_empty()); }) @@ -3059,7 +3062,7 @@ mod tests { ]; let old_statements = statements.clone(); - Pallet::::filter_multi_dispute_data(&mut statements); + assert_storage_noop!(Pallet::::filter_multi_dispute_data(&mut statements)); assert_eq!(statements, old_statements); }) @@ -3096,7 +3099,7 @@ mod tests { )], }]; - Pallet::::filter_multi_dispute_data(&mut statements); + assert_storage_noop!(Pallet::::filter_multi_dispute_data(&mut statements)); assert!(statements.is_empty()); }) @@ -3188,7 +3191,7 @@ mod tests { }, ]; - Pallet::::filter_multi_dispute_data(&mut statements); + assert_storage_noop!(Pallet::::filter_multi_dispute_data(&mut statements)); assert_eq!( statements, @@ -3278,7 +3281,7 @@ mod tests { }, ]; - Pallet::::filter_multi_dispute_data(&mut statements); + assert_storage_noop!(Pallet::::filter_multi_dispute_data(&mut statements)); assert_eq!( statements, @@ -3333,7 +3336,7 @@ mod tests { )], }]; - Pallet::::filter_multi_dispute_data(&mut statements); + assert_storage_noop!(Pallet::::filter_multi_dispute_data(&mut statements)); assert!(statements.is_empty()); })