From a5ab783f8a83588430ec204c53530b5e977c5adf Mon Sep 17 00:00:00 2001 From: Adam Dossa Date: Wed, 19 Jun 2024 12:02:00 +0100 Subject: [PATCH] Fix event ordering for automatic settlement affirms (#1682) Fix event ordering for automatic settlement affirms --- pallets/settlement/src/lib.rs | 38 ++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/pallets/settlement/src/lib.rs b/pallets/settlement/src/lib.rs index d35e7948f6..c0a9750a35 100644 --- a/pallets/settlement/src/lib.rs +++ b/pallets/settlement/src/lib.rs @@ -976,15 +976,7 @@ impl Module { for portfolio_id in instruction_info.portfolios_pending_approval() { UserAffirmations::insert(portfolio_id, instruction_id, AffirmationStatus::Pending); } - for portfolio_id in instruction_info.portfolios_pre_approved_difference() { - UserAffirmations::insert(portfolio_id, instruction_id, AffirmationStatus::Affirmed); - AffirmsReceived::insert(instruction_id, portfolio_id, AffirmationStatus::Affirmed); - Self::deposit_event(RawEvent::InstructionAutomaticallyAffirmed( - did, - *portfolio_id, - instruction_id, - )); - } + for mediator_id in instruction_info.mediators() { InstructionMediatorsAffirmations::::insert( instruction_id, @@ -1021,15 +1013,6 @@ impl Module { } VenueInstructions::insert(venue_id, instruction_id, ()); - if let SettlementType::SettleOnBlock(block_number) = settlement_type { - let weight_limit = Self::execute_scheduled_instruction_weight_limit( - instruction_info.fungible_transfers(), - instruction_info.nfts_transferred(), - instruction_info.off_chain(), - ); - Self::schedule_instruction(instruction_id, block_number, weight_limit); - } - Self::deposit_event(RawEvent::InstructionCreated( did, venue_id, @@ -1041,6 +1024,16 @@ impl Module { memo, )); + for portfolio_id in instruction_info.portfolios_pre_approved_difference() { + UserAffirmations::insert(portfolio_id, instruction_id, AffirmationStatus::Affirmed); + AffirmsReceived::insert(instruction_id, portfolio_id, AffirmationStatus::Affirmed); + Self::deposit_event(RawEvent::InstructionAutomaticallyAffirmed( + did, + *portfolio_id, + instruction_id, + )); + } + if !instruction_info.mediators().is_empty() { Self::deposit_event(RawEvent::InstructionMediators( instruction_id, @@ -1048,6 +1041,15 @@ impl Module { )); } + if let SettlementType::SettleOnBlock(block_number) = settlement_type { + let weight_limit = Self::execute_scheduled_instruction_weight_limit( + instruction_info.fungible_transfers(), + instruction_info.nfts_transferred(), + instruction_info.off_chain(), + ); + Self::schedule_instruction(instruction_id, block_number, weight_limit); + } + Ok(instruction_id) }