diff --git a/pallets/vtoken-minting/Cargo.toml b/pallets/vtoken-minting/Cargo.toml index 8c0d7de06..5db3a3f78 100644 --- a/pallets/vtoken-minting/Cargo.toml +++ b/pallets/vtoken-minting/Cargo.toml @@ -22,6 +22,7 @@ pallet-balances = { workspace = true } xcm = { workspace = true } cumulus-primitives-core = { workspace = true } sp-core = { workspace = true } +sp-runtime = { workspace = true } bifrost-ve-minting = { workspace = true } [dev-dependencies] diff --git a/pallets/vtoken-minting/src/lib.rs b/pallets/vtoken-minting/src/lib.rs index e3140521d..4bebd2b38 100644 --- a/pallets/vtoken-minting/src/lib.rs +++ b/pallets/vtoken-minting/src/lib.rs @@ -191,7 +191,7 @@ pub mod pallet { RedeemSuccess { unlock_id: UnlockId, token_id: CurrencyIdOf, - to: AccountIdOf, + to: RedeemTo>, token_amount: BalanceOf, }, Rebonded { @@ -1197,6 +1197,7 @@ pub mod pallet { ) -> DispatchResult { let ed = T::MultiCurrency::minimum_balance(token_id); let mut account_to_send = account.clone(); + let mut redeem_to = RedeemTo::Native(account_to_send.clone()); if unlock_amount < ed { let receiver_balance = T::MultiCurrency::total_balance(token_id, &account); @@ -1206,6 +1207,7 @@ pub mod pallet { .ok_or(ArithmeticError::Overflow)?; if receiver_balance_after < ed { account_to_send = T::FeeAccount::get(); + redeem_to = RedeemTo::Native(T::FeeAccount::get()); } } if entrance_account_balance >= unlock_amount { @@ -1276,6 +1278,7 @@ pub mod pallet { dest, Unlimited, )?; + redeem_to = RedeemTo::Astar(receiver); }, RedeemType::Hydradx(receiver) => { let dest = MultiLocation { @@ -1295,6 +1298,7 @@ pub mod pallet { dest, Unlimited, )?; + redeem_to = RedeemTo::Hydradx(receiver); }, RedeemType::Interlay(receiver) => { let dest = MultiLocation { @@ -1314,6 +1318,7 @@ pub mod pallet { dest, Unlimited, )?; + redeem_to = RedeemTo::Interlay(receiver); }, RedeemType::Manta(receiver) => { let dest = MultiLocation { @@ -1333,6 +1338,7 @@ pub mod pallet { dest, Unlimited, )?; + redeem_to = RedeemTo::Manta(receiver); }, RedeemType::Moonbeam(receiver) => { let dest = MultiLocation { @@ -1364,6 +1370,7 @@ pub mod pallet { Unlimited, )?; } + redeem_to = RedeemTo::Moonbeam(receiver); }, }; } else { @@ -1457,7 +1464,7 @@ pub mod pallet { Self::deposit_event(Event::RedeemSuccess { unlock_id: *index, token_id, - to: account_to_send, + to: redeem_to, token_amount: unlock_amount, }); Ok(()) diff --git a/pallets/vtoken-minting/src/traits.rs b/pallets/vtoken-minting/src/traits.rs index d61ad5a77..33a37c6d5 100644 --- a/pallets/vtoken-minting/src/traits.rs +++ b/pallets/vtoken-minting/src/traits.rs @@ -19,6 +19,25 @@ // Ensure we're `no_std` when compiling for Wasm. use frame_support::pallet_prelude::Weight; +use parity_scale_codec::{Decode, Encode}; +use sp_core::H160; +use sp_runtime::RuntimeDebug; + +#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, scale_info::TypeInfo)] +pub enum RedeemTo { + /// Native chain. + Native(AccountId), + /// Astar chain. + Astar(AccountId), + /// Moonbeam chain. + Moonbeam(H160), + /// Hydradx chain. + Hydradx(AccountId), + /// Interlay chain. + Interlay(AccountId), + /// Manta chain. + Manta(AccountId), +} pub trait OnRedeemSuccess { fn on_redeem_success(