From b80639b71928060539d89ab4507b0a505299636b Mon Sep 17 00:00:00 2001 From: Frederik Gartenmeister Date: Tue, 21 Nov 2023 18:32:36 +0100 Subject: [PATCH] Fix: Transfer debt (#1615) * fix: blocking transfer debt by epoch and redemptions. * feat: make change_id deterministic * fix: build --- pallets/pool-system/src/impls.rs | 5 +++-- pallets/pool-system/src/tests/mod.rs | 6 ++++-- runtime/common/src/lib.rs | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pallets/pool-system/src/impls.rs b/pallets/pool-system/src/impls.rs index 1b00e0697b..03bfafb0b7 100644 --- a/pallets/pool-system/src/impls.rs +++ b/pallets/pool-system/src/impls.rs @@ -401,12 +401,13 @@ impl ChangeGuard for Pallet { type PoolId = T::PoolId; fn note(pool_id: Self::PoolId, change: Self::Change) -> Result { + // NOTE: Essentially, this key-generation allows to override previously + // submitted changes, if they are identical. + let change_id: Self::ChangeId = T::Hashing::hash(&change.encode()); let noted_change = NotedPoolChange { submitted_time: T::Time::now(), change, }; - - let change_id: Self::ChangeId = T::Hashing::hash(¬ed_change.encode()); NotedChange::::insert(pool_id, change_id, noted_change.clone()); Self::deposit_event(Event::ProposedChange { diff --git a/pallets/pool-system/src/tests/mod.rs b/pallets/pool-system/src/tests/mod.rs index b7d0797ad6..66499205c2 100644 --- a/pallets/pool-system/src/tests/mod.rs +++ b/pallets/pool-system/src/tests/mod.rs @@ -2449,12 +2449,14 @@ mod changes { let change = PoolChangeProposal::new([Requirement::DelayTime(2)]); let change_id_3 = PoolSystem::note(DEFAULT_POOL_ID, change).unwrap(); - // Same change but different moment; + // Same change but different moment so overwrites util::advance_secs(1); let change = PoolChangeProposal::new([Requirement::DelayTime(2)]); let change_id_4 = PoolSystem::note(DEFAULT_POOL_ID, change).unwrap(); - let ids = [change_id_1, change_id_2, change_id_3, change_id_4]; + assert_eq!(change_id_4, change_id_3); + + let ids = [change_id_1, change_id_2, change_id_3]; assert_eq!(BTreeSet::from(ids.clone()).len(), ids.len()); }); } diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 097fff8002..a53eb904fa 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -293,7 +293,7 @@ pub mod changes { }, }, LoansChange::::Policy(_) => vec![week, blocked], - LoansChange::::TransferDebt(_, _, _, _) => vec![epoch, blocked], + LoansChange::::TransferDebt(_, _, _, _) => vec![], }; PoolChangeProposal::new(requirements)