From 6fdbc70a205e9ce252343032368632178a6e3e51 Mon Sep 17 00:00:00 2001 From: Jamie Ford Date: Fri, 23 Aug 2024 14:18:04 +1000 Subject: [PATCH 1/4] feat: use encoded address in ccm deposit metadata for swap requested event --- state-chain/chains/src/lib.rs | 7 +++++-- state-chain/pallets/cf-swapping/src/lib.rs | 9 ++++++++- state-chain/pallets/cf-swapping/src/tests.rs | 15 ++++++++++----- state-chain/traits/src/swapping.rs | 6 ++++-- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/state-chain/chains/src/lib.rs b/state-chain/chains/src/lib.rs index b4a99eab59..26808d6403 100644 --- a/state-chain/chains/src/lib.rs +++ b/state-chain/chains/src/lib.rs @@ -628,12 +628,15 @@ pub struct CcmChannelMetadata { } #[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, TypeInfo, Serialize, Deserialize)] -pub struct CcmDepositMetadata { +pub struct CcmDepositMetadataGeneric
{ pub source_chain: ForeignChain, - pub source_address: Option, + pub source_address: Option
, pub channel_metadata: CcmChannelMetadata, } +pub type CcmDepositMetadata = CcmDepositMetadataGeneric; +pub type CcmDepositMetadataEncoded = CcmDepositMetadataGeneric; + #[derive( PartialEqNoBound, EqNoBound, diff --git a/state-chain/pallets/cf-swapping/src/lib.rs b/state-chain/pallets/cf-swapping/src/lib.rs index 2ea8f8cee3..297ffb9fb3 100644 --- a/state-chain/pallets/cf-swapping/src/lib.rs +++ b/state-chain/pallets/cf-swapping/src/lib.rs @@ -1966,7 +1966,14 @@ pub mod pallet { output_address: T::AddressConverter::to_encoded_address( output_address.clone(), ), - ccm_deposit_metadata: ccm_deposit_metadata.clone(), + ccm_deposit_metadata: cf_chains::CcmDepositMetadataEncoded { + source_chain: ccm_deposit_metadata.source_chain, + source_address: ccm_deposit_metadata + .source_address + .clone() + .map(T::AddressConverter::to_encoded_address), + channel_metadata: ccm_deposit_metadata.channel_metadata.clone(), + }, }, }, origin: origin.clone(), diff --git a/state-chain/pallets/cf-swapping/src/tests.rs b/state-chain/pallets/cf-swapping/src/tests.rs index c48b4489fa..63313f0190 100644 --- a/state-chain/pallets/cf-swapping/src/tests.rs +++ b/state-chain/pallets/cf-swapping/src/tests.rs @@ -688,6 +688,14 @@ mod ccm { #[track_caller] fn init_ccm_swap_request(input_asset: Asset, output_asset: Asset, input_amount: AssetAmount) { let ccm_deposit_metadata = generate_ccm_deposit(); + let ccm_deposit_metadata_encoded = cf_chains::CcmDepositMetadataEncoded { + source_chain: ccm_deposit_metadata.source_chain, + source_address: ccm_deposit_metadata + .clone() + .source_address + .map(MockAddressConverter::to_encoded_address), + channel_metadata: ccm_deposit_metadata.channel_metadata.clone(), + }; let output_address = (*EVM_OUTPUT_ADDRESS).clone(); let encoded_output_address = MockAddressConverter::to_encoded_address(output_address.clone()); @@ -696,10 +704,7 @@ mod ccm { input_asset, input_amount, output_asset, - SwapRequestType::Ccm { - ccm_deposit_metadata: ccm_deposit_metadata.clone(), - output_address - }, + SwapRequestType::Ccm { ccm_deposit_metadata, output_address }, Default::default(), None, None, @@ -712,7 +717,7 @@ mod ccm { output_asset, input_amount, request_type: SwapRequestTypeEncoded::Ccm { - ccm_deposit_metadata, + ccm_deposit_metadata: ccm_deposit_metadata_encoded, output_address: encoded_output_address, }, origin, diff --git a/state-chain/traits/src/swapping.rs b/state-chain/traits/src/swapping.rs index 40796ef07e..248e58e051 100644 --- a/state-chain/traits/src/swapping.rs +++ b/state-chain/traits/src/swapping.rs @@ -1,4 +1,6 @@ -use cf_chains::{CcmDepositMetadata, ChannelRefundParameters, ForeignChainAddress, SwapOrigin}; +use cf_chains::{ + CcmDepositMetadataGeneric, ChannelRefundParameters, ForeignChainAddress, SwapOrigin, +}; use cf_primitives::{Asset, AssetAmount, Beneficiaries, DcaParameters, SwapRequestId}; use codec::{Decode, Encode, MaxEncodedLen}; use frame_support::sp_runtime::DispatchError; @@ -18,7 +20,7 @@ pub enum SwapRequestTypeGeneric
{ NetworkFee, IngressEgressFee, Regular { output_address: Address }, - Ccm { output_address: Address, ccm_deposit_metadata: CcmDepositMetadata }, + Ccm { output_address: Address, ccm_deposit_metadata: CcmDepositMetadataGeneric
}, } pub type SwapRequestType = SwapRequestTypeGeneric; From e0f47be68f61a66bb6471c2b89d1839ce23ad2cc Mon Sep 17 00:00:00 2001 From: Jamie Ford Date: Fri, 23 Aug 2024 15:51:43 +1000 Subject: [PATCH 2/4] refactor: address PR comments --- state-chain/pallets/cf-swapping/src/lib.rs | 31 +++++++++++++------- state-chain/pallets/cf-swapping/src/tests.rs | 17 +++++------ 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/state-chain/pallets/cf-swapping/src/lib.rs b/state-chain/pallets/cf-swapping/src/lib.rs index 297ffb9fb3..d9a047b4c4 100644 --- a/state-chain/pallets/cf-swapping/src/lib.rs +++ b/state-chain/pallets/cf-swapping/src/lib.rs @@ -7,7 +7,7 @@ use cf_amm::common::Side; use cf_chains::{ address::{AddressConverter, ForeignChainAddress}, ccm_checker::CcmValidityCheck, - CcmChannelMetadata, CcmDepositMetadata, ChannelRefundParameters, + CcmChannelMetadata, CcmDepositMetadata, CcmDepositMetadataEncoded, ChannelRefundParameters, ChannelRefundParametersEncoded, SwapOrigin, SwapRefundParameters, }; use cf_primitives::{ @@ -606,7 +606,7 @@ pub mod pallet { CcmFailed { reason: CcmFailReason, destination_address: EncodedAddress, - deposit_metadata: CcmDepositMetadata, + deposit_metadata: CcmDepositMetadataEncoded, origin: SwapOrigin, }, MaximumSwapAmountSet { @@ -1966,14 +1966,9 @@ pub mod pallet { output_address: T::AddressConverter::to_encoded_address( output_address.clone(), ), - ccm_deposit_metadata: cf_chains::CcmDepositMetadataEncoded { - source_chain: ccm_deposit_metadata.source_chain, - source_address: ccm_deposit_metadata - .source_address - .clone() - .map(T::AddressConverter::to_encoded_address), - channel_metadata: ccm_deposit_metadata.channel_metadata.clone(), - }, + ccm_deposit_metadata: utilities::to_ccm_deposit_metadata_encoded::< + T::AddressConverter, + >(ccm_deposit_metadata.clone()), }, }, origin: origin.clone(), @@ -2082,7 +2077,9 @@ pub mod pallet { Self::deposit_event(Event::::CcmFailed { reason, destination_address: encoded_destination_address, - deposit_metadata: ccm_deposit_metadata.clone(), + deposit_metadata: utilities::to_ccm_deposit_metadata_encoded::< + T::AddressConverter, + >(ccm_deposit_metadata.clone()), origin: origin.clone(), }); @@ -2266,6 +2263,8 @@ impl ExecutionCondition for NoPendingSwaps { } pub(crate) mod utilities { + use cf_chains::{address::AddressConverter, CcmDepositMetadataEncoded}; + use super::*; pub(crate) fn calculate_network_fee( @@ -2311,4 +2310,14 @@ pub(crate) mod utilities { .unwrap_or(u128::MAX), } } + + pub(super) fn to_ccm_deposit_metadata_encoded( + ccm_deposit_metadata: CcmDepositMetadata, + ) -> CcmDepositMetadataEncoded { + CcmDepositMetadataEncoded { + source_chain: ccm_deposit_metadata.source_chain, + source_address: ccm_deposit_metadata.source_address.map(Converter::to_encoded_address), + channel_metadata: ccm_deposit_metadata.channel_metadata, + } + } } diff --git a/state-chain/pallets/cf-swapping/src/tests.rs b/state-chain/pallets/cf-swapping/src/tests.rs index 63313f0190..b6ad707b09 100644 --- a/state-chain/pallets/cf-swapping/src/tests.rs +++ b/state-chain/pallets/cf-swapping/src/tests.rs @@ -182,6 +182,10 @@ fn assert_failed_ccm( ) .is_err()); + let ccm_metadata_encoded = utilities::to_ccm_deposit_metadata_encoded::< + ::AddressConverter, + >(ccm.clone()); + assert_event_sequence!( Test, RuntimeEvent::Swapping(Event::SwapRequested { .. }), @@ -190,7 +194,7 @@ fn assert_failed_ccm( destination_address: ref address_in_event, deposit_metadata: ref metadata_in_event, .. - }) if reason_in_event == &reason && address_in_event == &MockAddressConverter::to_encoded_address(destination_address) && metadata_in_event == &ccm, + }) if reason_in_event == &reason && address_in_event == &MockAddressConverter::to_encoded_address(destination_address) && metadata_in_event == &ccm_metadata_encoded, RuntimeEvent::Swapping(Event::SwapRequestCompleted { .. }), ); } @@ -688,14 +692,9 @@ mod ccm { #[track_caller] fn init_ccm_swap_request(input_asset: Asset, output_asset: Asset, input_amount: AssetAmount) { let ccm_deposit_metadata = generate_ccm_deposit(); - let ccm_deposit_metadata_encoded = cf_chains::CcmDepositMetadataEncoded { - source_chain: ccm_deposit_metadata.source_chain, - source_address: ccm_deposit_metadata - .clone() - .source_address - .map(MockAddressConverter::to_encoded_address), - channel_metadata: ccm_deposit_metadata.channel_metadata.clone(), - }; + let ccm_deposit_metadata_encoded = utilities::to_ccm_deposit_metadata_encoded::< + ::AddressConverter, + >(ccm_deposit_metadata.clone()); let output_address = (*EVM_OUTPUT_ADDRESS).clone(); let encoded_output_address = MockAddressConverter::to_encoded_address(output_address.clone()); From b901a8a0e5b5e9ee9248628b0d5f420836e780d2 Mon Sep 17 00:00:00 2001 From: Maxim Shishmarev Date: Fri, 23 Aug 2024 16:32:35 +1000 Subject: [PATCH 3/4] feat: add fok and dca params to SwapRequested event (#5193) * feat: add fok and dca params to SwapRequested event * chore: test dca and fok parameters are in event --- state-chain/pallets/cf-swapping/src/lib.rs | 6 +++++ state-chain/pallets/cf-swapping/src/tests.rs | 8 ++++++ .../pallets/cf-swapping/src/tests/dca.rs | 10 +++---- .../cf-swapping/src/tests/fill_or_kill.rs | 27 ++++++++++++++----- 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/state-chain/pallets/cf-swapping/src/lib.rs b/state-chain/pallets/cf-swapping/src/lib.rs index d9a047b4c4..845eb1dfd4 100644 --- a/state-chain/pallets/cf-swapping/src/lib.rs +++ b/state-chain/pallets/cf-swapping/src/lib.rs @@ -527,6 +527,8 @@ pub mod pallet { output_asset: Asset, origin: SwapOrigin, request_type: SwapRequestTypeEncoded, + refund_parameters: Option, + dca_parameters: Option, }, SwapRequestCompleted { swap_request_id: SwapRequestId, @@ -1972,6 +1974,10 @@ pub mod pallet { }, }, origin: origin.clone(), + refund_parameters: refund_params + .clone() + .map(|params| params.map_address(T::AddressConverter::to_encoded_address)), + dca_parameters: dca_params.clone(), }); match request_type { diff --git a/state-chain/pallets/cf-swapping/src/tests.rs b/state-chain/pallets/cf-swapping/src/tests.rs index b6ad707b09..7bdc48074c 100644 --- a/state-chain/pallets/cf-swapping/src/tests.rs +++ b/state-chain/pallets/cf-swapping/src/tests.rs @@ -719,6 +719,8 @@ mod ccm { ccm_deposit_metadata: ccm_deposit_metadata_encoded, output_address: encoded_output_address, }, + dca_parameters: None, + refund_parameters: None, origin, })); } @@ -1092,6 +1094,8 @@ fn swap_by_witnesser_happy_path() { request_type: SwapRequestTypeEncoded::Regular { output_address: encoded_output_address, }, + refund_parameters: None, + dca_parameters: None, origin: ORIGIN, })); @@ -2345,6 +2349,8 @@ fn network_fee_swap_gets_burnt() { input_amount: AMOUNT, output_asset: OUTPUT_ASSET, request_type: SwapRequestTypeEncoded::NetworkFee, + refund_parameters: None, + dca_parameters: None, origin: SwapOrigin::Internal, })); assert_has_matching_event!(Test, RuntimeEvent::Swapping(Event::SwapScheduled { .. }),); @@ -2385,6 +2391,8 @@ fn transaction_fees_are_collected() { input_amount: AMOUNT, output_asset: OUTPUT_ASSET, request_type: SwapRequestTypeEncoded::IngressEgressFee, + refund_parameters: None, + dca_parameters: None, origin: SwapOrigin::Internal, })); diff --git a/state-chain/pallets/cf-swapping/src/tests/dca.rs b/state-chain/pallets/cf-swapping/src/tests/dca.rs index d8351a9574..2666663aa6 100644 --- a/state-chain/pallets/cf-swapping/src/tests/dca.rs +++ b/state-chain/pallets/cf-swapping/src/tests/dca.rs @@ -62,17 +62,17 @@ fn dca_happy_path() { .execute_with(|| { assert_eq!(System::block_number(), INIT_BLOCK); - insert_swaps(&[params( - Some(DcaParameters { number_of_chunks: 2, chunk_interval: CHUNK_INTERVAL }), - None, - false, - )]); + const DCA_PARAMS: DcaParameters = + DcaParameters { number_of_chunks: 2, chunk_interval: CHUNK_INTERVAL }; + + insert_swaps(&[params(Some(DCA_PARAMS), None, false)]); assert_has_matching_event!( Test, RuntimeEvent::Swapping(Event::SwapRequested { swap_request_id: SWAP_REQUEST_ID, input_amount: INPUT_AMOUNT, + dca_parameters: Some(DCA_PARAMS), .. }) ); diff --git a/state-chain/pallets/cf-swapping/src/tests/fill_or_kill.rs b/state-chain/pallets/cf-swapping/src/tests/fill_or_kill.rs index de9b6c9d8b..835a9f0696 100644 --- a/state-chain/pallets/cf-swapping/src/tests/fill_or_kill.rs +++ b/state-chain/pallets/cf-swapping/src/tests/fill_or_kill.rs @@ -38,13 +38,26 @@ fn both_fok_and_regular_swaps_succeed_first_try() { .execute_with(|| { assert_eq!(System::block_number(), INIT_BLOCK); - insert_swaps(&vec![ - new_swap(None), - new_swap(Some(TestRefundParams { - retry_duration: DEFAULT_SWAP_RETRY_DELAY_BLOCKS, - min_output: INPUT_AMOUNT, - })), - ]); + const REFUND_PARAMS: TestRefundParams = TestRefundParams { + retry_duration: DEFAULT_SWAP_RETRY_DELAY_BLOCKS, + min_output: INPUT_AMOUNT, + }; + + let refund_parameters_encoded = + REFUND_PARAMS.into_channel_params(INPUT_AMOUNT).map_address(|refund_address| { + MockAddressConverter::to_encoded_address(refund_address) + }); + + insert_swaps(&vec![new_swap(None), new_swap(Some(REFUND_PARAMS))]); + + assert_has_matching_event!( + Test, + RuntimeEvent::Swapping(Event::SwapRequested { + swap_request_id: FOK_REQUEST_ID, + refund_parameters, + .. + }) if refund_parameters.as_ref() == Some(&refund_parameters_encoded), + ); assert_swaps_scheduled_for_block( &[REGULAR_SWAP_ID, FOK_SWAP_ID], From 0e5aa9d8b27b6b1ed7746a0ba0c70947ea0a774a Mon Sep 17 00:00:00 2001 From: Jamie Ford Date: Fri, 23 Aug 2024 17:20:52 +1000 Subject: [PATCH 4/4] refactor: use impl instead of utility function --- state-chain/chains/src/lib.rs | 14 ++++++++++-- state-chain/pallets/cf-swapping/src/lib.rs | 24 +++++--------------- state-chain/pallets/cf-swapping/src/tests.rs | 17 ++++++-------- 3 files changed, 25 insertions(+), 30 deletions(-) diff --git a/state-chain/chains/src/lib.rs b/state-chain/chains/src/lib.rs index 26808d6403..1d03874c44 100644 --- a/state-chain/chains/src/lib.rs +++ b/state-chain/chains/src/lib.rs @@ -12,8 +12,8 @@ use crate::{ }; pub use address::ForeignChainAddress; use address::{ - AddressDerivationApi, AddressDerivationError, EncodedAddress, IntoForeignChainAddress, - ToHumanreadableAddress, + AddressConverter, AddressDerivationApi, AddressDerivationError, EncodedAddress, + IntoForeignChainAddress, ToHumanreadableAddress, }; use cf_primitives::{ AssetAmount, BroadcastId, ChannelId, EgressId, EthAmount, Price, TransactionHash, @@ -637,6 +637,16 @@ pub struct CcmDepositMetadataGeneric
{ pub type CcmDepositMetadata = CcmDepositMetadataGeneric; pub type CcmDepositMetadataEncoded = CcmDepositMetadataGeneric; +impl CcmDepositMetadata { + pub fn to_encoded(self) -> CcmDepositMetadataEncoded { + CcmDepositMetadataEncoded { + source_chain: self.source_chain, + source_address: self.source_address.map(Converter::to_encoded_address), + channel_metadata: self.channel_metadata, + } + } +} + #[derive( PartialEqNoBound, EqNoBound, diff --git a/state-chain/pallets/cf-swapping/src/lib.rs b/state-chain/pallets/cf-swapping/src/lib.rs index ed5b55bbe6..2d4968cd62 100644 --- a/state-chain/pallets/cf-swapping/src/lib.rs +++ b/state-chain/pallets/cf-swapping/src/lib.rs @@ -2093,9 +2093,9 @@ pub mod pallet { output_address: T::AddressConverter::to_encoded_address( output_address.clone(), ), - ccm_deposit_metadata: utilities::to_ccm_deposit_metadata_encoded::< - T::AddressConverter, - >(ccm_deposit_metadata.clone()), + ccm_deposit_metadata: ccm_deposit_metadata + .clone() + .to_encoded::(), }, }, origin: origin.clone(), @@ -2208,9 +2208,9 @@ pub mod pallet { Self::deposit_event(Event::::CcmFailed { reason, destination_address: encoded_destination_address, - deposit_metadata: utilities::to_ccm_deposit_metadata_encoded::< - T::AddressConverter, - >(ccm_deposit_metadata.clone()), + deposit_metadata: ccm_deposit_metadata + .clone() + .to_encoded::(), origin: origin.clone(), }); @@ -2394,8 +2394,6 @@ impl ExecutionCondition for NoPendingSwaps { } pub(crate) mod utilities { - use cf_chains::{address::AddressConverter, CcmDepositMetadataEncoded}; - use super::*; pub(crate) fn calculate_network_fee( @@ -2441,14 +2439,4 @@ pub(crate) mod utilities { .unwrap_or(u128::MAX), } } - - pub(super) fn to_ccm_deposit_metadata_encoded( - ccm_deposit_metadata: CcmDepositMetadata, - ) -> CcmDepositMetadataEncoded { - CcmDepositMetadataEncoded { - source_chain: ccm_deposit_metadata.source_chain, - source_address: ccm_deposit_metadata.source_address.map(Converter::to_encoded_address), - channel_metadata: ccm_deposit_metadata.channel_metadata, - } - } } diff --git a/state-chain/pallets/cf-swapping/src/tests.rs b/state-chain/pallets/cf-swapping/src/tests.rs index 59200d34d0..f6447433fd 100644 --- a/state-chain/pallets/cf-swapping/src/tests.rs +++ b/state-chain/pallets/cf-swapping/src/tests.rs @@ -201,10 +201,6 @@ fn assert_failed_ccm( ) .is_err()); - let ccm_metadata_encoded = utilities::to_ccm_deposit_metadata_encoded::< - ::AddressConverter, - >(ccm.clone()); - assert_event_sequence!( Test, RuntimeEvent::Swapping(Event::SwapRequested { .. }), @@ -213,7 +209,7 @@ fn assert_failed_ccm( destination_address: ref address_in_event, deposit_metadata: ref metadata_in_event, .. - }) if reason_in_event == &reason && address_in_event == &MockAddressConverter::to_encoded_address(destination_address) && metadata_in_event == &ccm_metadata_encoded, + }) if reason_in_event == &reason && address_in_event == &MockAddressConverter::to_encoded_address(destination_address) && metadata_in_event == &ccm.to_encoded::<::AddressConverter>(), RuntimeEvent::Swapping(Event::SwapRequestCompleted { .. }), ); } @@ -711,9 +707,6 @@ mod ccm { #[track_caller] fn init_ccm_swap_request(input_asset: Asset, output_asset: Asset, input_amount: AssetAmount) { let ccm_deposit_metadata = generate_ccm_deposit(); - let ccm_deposit_metadata_encoded = utilities::to_ccm_deposit_metadata_encoded::< - ::AddressConverter, - >(ccm_deposit_metadata.clone()); let output_address = (*EVM_OUTPUT_ADDRESS).clone(); let encoded_output_address = MockAddressConverter::to_encoded_address(output_address.clone()); @@ -722,7 +715,10 @@ mod ccm { input_asset, input_amount, output_asset, - SwapRequestType::Ccm { ccm_deposit_metadata, output_address }, + SwapRequestType::Ccm { + ccm_deposit_metadata: ccm_deposit_metadata.clone(), + output_address + }, Default::default(), None, None, @@ -735,7 +731,8 @@ mod ccm { output_asset, input_amount, request_type: SwapRequestTypeEncoded::Ccm { - ccm_deposit_metadata: ccm_deposit_metadata_encoded, + ccm_deposit_metadata: ccm_deposit_metadata + .to_encoded::<::AddressConverter>(), output_address: encoded_output_address, }, dca_parameters: None,