Skip to content

Commit

Permalink
refactor: Added explicit requirement to have alwayse refund params
Browse files Browse the repository at this point in the history
  • Loading branch information
Janislav committed Feb 13, 2025
1 parent cd53b1d commit f5b685f
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 63 deletions.
4 changes: 2 additions & 2 deletions api/bin/chainflip-broker-api/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ pub trait Rpc {
channel_metadata: Option<CcmChannelMetadata>,
boost_fee: Option<BasisPoints>,
affiliate_fees: Option<Affiliates<AccountId32>>,
refund_parameters: Option<RefundParametersRpc>,
refund_parameters: RefundParametersRpc,
dca_parameters: Option<DcaParameters>,
) -> RpcResult<SwapDepositAddress>;

Expand Down Expand Up @@ -189,7 +189,7 @@ impl RpcServer for RpcServerImpl {
channel_metadata: Option<CcmChannelMetadata>,
boost_fee: Option<BasisPoints>,
affiliate_fees: Option<Affiliates<AccountId32>>,
refund_parameters: Option<RefundParametersRpc>,
refund_parameters: RefundParametersRpc,
dca_parameters: Option<DcaParameters>,
) -> RpcResult<SwapDepositAddress> {
Ok(self
Expand Down
36 changes: 17 additions & 19 deletions api/lib/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ use anyhow::{anyhow, bail, Context, Result};
use async_trait::async_trait;
pub use cf_chains::{address::AddressString, RefundParametersRpc};
use cf_chains::{
evm::to_evm_address, CcmChannelMetadata, Chain, ChainCrypto, ChannelRefundParameters,
ChannelRefundParametersEncoded, ForeignChain,
evm::to_evm_address, CcmChannelMetadata, Chain, ChainCrypto, ChannelRefundParametersEncoded,
ForeignChain,
};
use cf_primitives::DcaParameters;
pub use cf_primitives::{AccountRole, Affiliates, Asset, BasisPoints, ChannelId, SemVer};
Expand Down Expand Up @@ -316,7 +316,7 @@ pub struct SwapDepositAddress {
pub channel_id: ChannelId,
pub source_chain_expiry_block: NumberOrHex,
pub channel_opening_fee: U256,
pub refund_parameters: Option<RefundParametersRpc>,
pub refund_parameters: RefundParametersRpc,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
Expand Down Expand Up @@ -373,12 +373,21 @@ pub trait BrokerApi: SignedExtrinsicApi + StorageApi + Sized + Send + Sync + 'st
channel_metadata: Option<CcmChannelMetadata>,
boost_fee: Option<BasisPoints>,
affiliate_fees: Option<Affiliates<AccountId32>>,
refund_parameters: Option<RefundParametersRpc>,
refund_parameters: RefundParametersRpc,
dca_parameters: Option<DcaParameters>,
) -> Result<SwapDepositAddress> {
let destination_address = destination_address
.try_parse_to_encoded_address(destination_asset.into())
.map_err(anyhow::Error::msg)?;

let internal_refund_parameters = ChannelRefundParametersEncoded {
retry_duration: refund_parameters.retry_duration,
refund_address: refund_parameters
.refund_address
.try_parse_to_encoded_address(source_asset.into())
.map_err(anyhow::Error::msg)?,
min_price: refund_parameters.min_price,
};
let (_tx_hash, events, header, ..) = self
.submit_signed_extrinsic_with_dry_run(
pallet_cf_swapping::Call::request_swap_deposit_address_with_affiliates {
Expand All @@ -389,17 +398,7 @@ pub trait BrokerApi: SignedExtrinsicApi + StorageApi + Sized + Send + Sync + 'st
channel_metadata,
boost_fee: boost_fee.unwrap_or_default(),
affiliate_fees: affiliate_fees.unwrap_or_default(),
refund_parameters: refund_parameters
.map(|rpc_params: ChannelRefundParameters<AddressString>| {
Ok::<_, anyhow::Error>(ChannelRefundParametersEncoded {
retry_duration: rpc_params.retry_duration,
refund_address: rpc_params
.refund_address
.try_parse_to_encoded_address(source_asset.into())?,
min_price: rpc_params.min_price,
})
})
.transpose()?,
refund_parameters: internal_refund_parameters,
dca_parameters,
},
)
Expand All @@ -425,11 +424,10 @@ pub trait BrokerApi: SignedExtrinsicApi + StorageApi + Sized + Send + Sync + 'st
channel_id: *channel_id,
source_chain_expiry_block: (*source_chain_expiry_block).into(),
channel_opening_fee: (*channel_opening_fee).into(),
refund_parameters: refund_parameters.as_ref().map(|params| {
params.map_address(|refund_address| {
refund_parameters: refund_parameters
.map_address(|refund_address| {
AddressString::from_encoded_address(&refund_address)
})
}),
}),
}
)
}
Expand Down
41 changes: 14 additions & 27 deletions state-chain/pallets/cf-ingress-egress/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ use deposit_origin::DepositOrigin;
#[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, TypeInfo, CloneNoBound)]
#[scale_info(skip_type_params(T, I))]
pub struct TransactionRejectionDetails<T: Config<I>, I: 'static> {
pub refund_address: Option<ForeignChainAddress>,
pub refund_address: ForeignChainAddress,
pub asset: TargetChainAsset<T, I>,
pub amount: TargetChainAmount<T, I>,
pub deposit_details: <T::TargetChain as Chain>::DepositDetails,
Expand Down Expand Up @@ -469,12 +469,12 @@ pub mod pallet {
destination_address: ForeignChainAddress,
broker_fees: Beneficiaries<AccountId>,
channel_metadata: Option<CcmChannelMetadata>,
refund_params: Option<ChannelRefundParameters<ForeignChainAddress>>,
refund_params: ChannelRefundParameters<ForeignChainAddress>,
dca_params: Option<DcaParameters>,
},
LiquidityProvision {
lp_account: AccountId,
refund_address: Option<ForeignChainAddress>,
refund_address: ForeignChainAddress,
},
}

Expand Down Expand Up @@ -1112,7 +1112,7 @@ pub mod pallet {
}

for tx in ScheduledTransactionsForRejection::<T, I>::take() {
if let Some(Ok(refund_address)) = tx.refund_address.clone().map(TryInto::try_into) {
if let Ok(refund_address) = tx.refund_address.clone().try_into() {
if let Ok(api_call) =
<T::ChainApiCall as RejectCall<T::TargetChain>>::new_unsigned(
tx.deposit_details.clone(),
Expand All @@ -1132,11 +1132,6 @@ pub mod pallet {
tx_id: tx.deposit_details,
});
}
} else {
FailedRejections::<T, I>::append(tx.clone());
Self::deposit_event(Event::<T, I>::TransactionRejectionFailed {
tx_id: tx.deposit_details,
});
}
}
}
Expand Down Expand Up @@ -1887,7 +1882,7 @@ impl<T: Config<I>, I: 'static> Pallet<T, I> {
output_address: destination_address,
},
broker_fees,
refund_params,
Some(refund_params),
dca_params,
origin.into(),
);
Expand Down Expand Up @@ -2209,9 +2204,8 @@ impl<T: Config<I>, I: 'static> Pallet<T, I> {
destination_asset: output_asset,
destination_address: destination_address_internal,
broker_fees,
refund_params: Some(
refund_params.map_address(|address| address.into_foreign_chain_address()),
),
refund_params: refund_params
.map_address(|address| address.into_foreign_chain_address()),
dca_params,
channel_metadata,
};
Expand Down Expand Up @@ -2262,9 +2256,8 @@ impl<T: Config<I>, I: 'static> Pallet<T, I> {
// since by boosting the protocol is committing to accept the deposit.
if TransactionsMarkedForRejection::<T, I>::take(broker_id, &tx_id).is_some() {
let refund_address = match &action {
ChannelAction::Swap { refund_params, .. } => refund_params
.as_ref()
.map(|refund_params| refund_params.refund_address.clone()),
ChannelAction::Swap { refund_params, .. } =>
refund_params.refund_address.clone(),
ChannelAction::LiquidityProvision { refund_address, .. } =>
refund_address.clone(),
};
Expand Down Expand Up @@ -2517,9 +2510,8 @@ impl<T: Config<I>, I: 'static> Pallet<T, I> {
destination_address: destination_address_internal,
broker_fees,
channel_metadata: channel_metadata.clone(),
refund_params: Some(
refund_params.map_address(|address| address.into_foreign_chain_address()),
),
refund_params: refund_params
.map_address(|address| address.into_foreign_chain_address()),
dca_params: dca_params.clone(),
};

Expand Down Expand Up @@ -2900,10 +2892,7 @@ impl<T: Config<I>, I: 'static> DepositApi<T::TargetChain> for Pallet<T, I> {
let (channel_id, deposit_address, expiry_block, channel_opening_fee) = Self::open_channel(
&lp_account,
source_asset,
ChannelAction::LiquidityProvision {
lp_account: lp_account.clone(),
refund_address: Some(refund_address),
},
ChannelAction::LiquidityProvision { lp_account: lp_account.clone(), refund_address },
boost_fee,
)?;

Expand All @@ -2924,15 +2913,13 @@ impl<T: Config<I>, I: 'static> DepositApi<T::TargetChain> for Pallet<T, I> {
broker_id: T::AccountId,
channel_metadata: Option<CcmChannelMetadata>,
boost_fee: BasisPoints,
refund_params: Option<ChannelRefundParametersDecoded>,
refund_params: ChannelRefundParametersDecoded,
dca_params: Option<DcaParameters>,
) -> Result<
(ChannelId, ForeignChainAddress, <T::TargetChain as Chain>::ChainBlockNumber, Self::Amount),
DispatchError,
> {
if let Some(params) = &refund_params {
T::SwapLimitsProvider::validate_refund_params(params.retry_duration)?;
}
T::SwapLimitsProvider::validate_refund_params(refund_params.retry_duration)?;
if let Some(params) = &dca_params {
T::SwapLimitsProvider::validate_dca_params(params)?;
}
Expand Down
20 changes: 8 additions & 12 deletions state-chain/pallets/cf-swapping/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,7 @@ pub mod pallet {
boost_fee: BasisPoints,
channel_opening_fee: T::Amount,
affiliate_fees: Affiliates<T::AccountId>,
refund_parameters: Option<ChannelRefundParametersEncoded>,
refund_parameters: ChannelRefundParametersEncoded,
dca_parameters: Option<DcaParameters>,
},
/// A swap is scheduled for the first time
Expand Down Expand Up @@ -898,6 +898,7 @@ pub mod pallet {
broker_commission: BasisPoints,
channel_metadata: Option<CcmChannelMetadata>,
boost_fee: BasisPoints,
refund_parameters: ChannelRefundParametersEncoded,
) -> DispatchResult {
Self::request_swap_deposit_address_with_affiliates(
origin,
Expand All @@ -910,7 +911,7 @@ pub mod pallet {
Default::default(),
// This extrinsic is for backwards compatibility and does not support new
// features like FoK or DCA
None,
refund_parameters,
None,
)
}
Expand Down Expand Up @@ -1078,7 +1079,7 @@ pub mod pallet {
channel_metadata: Option<CcmChannelMetadata>,
boost_fee: BasisPoints,
affiliate_fees: Affiliates<T::AccountId>,
refund_parameters: Option<ChannelRefundParametersEncoded>,
refund_parameters: ChannelRefundParametersEncoded,
dca_parameters: Option<DcaParameters>,
) -> DispatchResult {
let broker = T::AccountRoleRegistry::ensure_broker(origin)?;
Expand All @@ -1105,15 +1106,10 @@ pub mod pallet {
.map_err(address_error_to_pallet_error::<T>)?;

// Convert the refund parameter from `EncodedAddress` into `ForeignChainAddress` type.
let refund_params_internal = refund_parameters
.clone()
.map(|params| {
params.try_map_address(|addr| {
T::AddressConverter::try_from_encoded_address(addr)
.map_err(|_| Error::<T>::InvalidRefundAddress.into())
})
})
.transpose()?;
let refund_params_internal = refund_parameters.clone().try_map_address(|addr| {
T::AddressConverter::try_from_encoded_address(addr)
.map_err(|_| Error::<T>::InvalidRefundAddress.into())
})?;

if let Some(ccm) = channel_metadata.as_ref() {
let destination_chain: ForeignChain = destination_asset.into();
Expand Down
2 changes: 1 addition & 1 deletion state-chain/runtime/src/chainflip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -696,7 +696,7 @@ macro_rules! impl_deposit_api_for_anychain {
broker_id: Self::AccountId,
channel_metadata: Option<CcmChannelMetadata>,
boost_fee: BasisPoints,
refund_parameters: Option<ChannelRefundParametersDecoded>,
refund_parameters: ChannelRefundParametersDecoded,
dca_parameters: Option<DcaParameters>,
) -> Result<(ChannelId, ForeignChainAddress, <AnyChain as cf_chains::Chain>::ChainBlockNumber, FlipBalance), DispatchError> {
match source_asset.into() {
Expand Down
2 changes: 1 addition & 1 deletion state-chain/traits/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -748,7 +748,7 @@ pub trait DepositApi<C: Chain> {
broker_id: Self::AccountId,
channel_metadata: Option<CcmChannelMetadata>,
boost_fee: BasisPoints,
refund_params: Option<ChannelRefundParametersDecoded>,
refund_params: ChannelRefundParametersDecoded,
dca_params: Option<DcaParameters>,
) -> Result<(ChannelId, ForeignChainAddress, C::ChainBlockNumber, Self::Amount), DispatchError>;
}
Expand Down
2 changes: 1 addition & 1 deletion state-chain/traits/src/mocks/deposit_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ impl<C: Chain, T: Chainflip> DepositApi<C> for MockDepositHandler<C, T> {
broker_id: Self::AccountId,
channel_metadata: Option<CcmChannelMetadata>,
boost_fee: BasisPoints,
_refund_params: Option<ChannelRefundParametersDecoded>,
_refund_params: ChannelRefundParametersDecoded,
_dca_params: Option<DcaParameters>,
) -> Result<
(cf_primitives::ChannelId, ForeignChainAddress, C::ChainBlockNumber, Self::Amount),
Expand Down

0 comments on commit f5b685f

Please sign in to comment.