diff --git a/bridges/snowbridge/pallets/inbound-queue-v2/src/mock.rs b/bridges/snowbridge/pallets/inbound-queue-v2/src/mock.rs index 919a6182af23a..436bbe4e5290c 100644 --- a/bridges/snowbridge/pallets/inbound-queue-v2/src/mock.rs +++ b/bridges/snowbridge/pallets/inbound-queue-v2/src/mock.rs @@ -14,7 +14,7 @@ use snowbridge_core::TokenId; use snowbridge_inbound_queue_primitives::{v2::MessageToXcm, Log, Proof, VerificationError}; use sp_core::H160; use sp_runtime::{ - traits::{IdentityLookup, MaybeEquivalence}, + traits::{IdentityLookup, MaybeConvert}, BuildStorage, }; use sp_std::{convert::From, default::Default, marker::PhantomData}; @@ -76,13 +76,10 @@ impl BenchmarkHelper for Test { } pub struct MockTokenIdConvert; -impl MaybeEquivalence for MockTokenIdConvert { - fn convert(_id: &TokenId) -> Option { +impl MaybeConvert for MockTokenIdConvert { + fn maybe_convert(_id: TokenId) -> Option { Some(Location::parent()) } - fn convert_back(_loc: &Location) -> Option { - None - } } pub struct MockAccountLocationConverter(PhantomData); diff --git a/bridges/snowbridge/pallets/inbound-queue/src/mock.rs b/bridges/snowbridge/pallets/inbound-queue/src/mock.rs index 1cad021f8eb7a..4a81e4243c12d 100644 --- a/bridges/snowbridge/pallets/inbound-queue/src/mock.rs +++ b/bridges/snowbridge/pallets/inbound-queue/src/mock.rs @@ -13,7 +13,7 @@ use snowbridge_core::{ use snowbridge_inbound_queue_primitives::{v1::MessageToXcm, Log, Proof, VerificationError}; use sp_core::{H160, H256}; use sp_runtime::{ - traits::{IdentifyAccount, IdentityLookup, MaybeEquivalence, Verify}, + traits::{IdentifyAccount, IdentityLookup, MaybeConvert, Verify}, BuildStorage, FixedU128, MultiSignature, }; use sp_std::{convert::From, default::Default}; @@ -214,13 +214,10 @@ impl TransactAsset for SuccessfulTransactor { } pub struct MockTokenIdConvert; -impl MaybeEquivalence for MockTokenIdConvert { - fn convert(_id: &TokenId) -> Option { +impl MaybeConvert for MockTokenIdConvert { + fn maybe_convert(_id: TokenId) -> Option { Some(Location::parent()) } - fn convert_back(_loc: &Location) -> Option { - None - } } impl inbound_queue::Config for Test { diff --git a/bridges/snowbridge/pallets/system-v2/src/lib.rs b/bridges/snowbridge/pallets/system-v2/src/lib.rs index 9d76237f8f2a5..32a5e8f46ed7f 100644 --- a/bridges/snowbridge/pallets/system-v2/src/lib.rs +++ b/bridges/snowbridge/pallets/system-v2/src/lib.rs @@ -36,10 +36,10 @@ use snowbridge_outbound_queue_primitives::{ v2::{Command, Initializer, Message, SendMessage}, OperatingMode, SendError, }; -use snowbridge_pallet_system::{ForeignToNativeId, NativeToForeignId}; +use snowbridge_pallet_system::ForeignToNativeId; use sp_core::{H160, H256}; use sp_io::hashing::blake2_256; -use sp_runtime::traits::MaybeEquivalence; +use sp_runtime::traits::MaybeConvert; use sp_std::prelude::*; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; @@ -200,7 +200,6 @@ pub mod pallet { .ok_or(Error::::LocationConversionFailed)?; if !ForeignToNativeId::::contains_key(token_id) { - NativeToForeignId::::insert(location.clone(), token_id); ForeignToNativeId::::insert(token_id, location.clone()); } @@ -255,12 +254,9 @@ pub mod pallet { } } - impl MaybeEquivalence for Pallet { - fn convert(foreign_id: &TokenId) -> Option { - ForeignToNativeId::::get(foreign_id) - } - fn convert_back(location: &Location) -> Option { - NativeToForeignId::::get(location) + impl MaybeConvert for Pallet { + fn maybe_convert(foreign_id: TokenId) -> Option { + snowbridge_pallet_system::Pallet::::maybe_convert(foreign_id) } } } diff --git a/bridges/snowbridge/pallets/system-v2/src/tests.rs b/bridges/snowbridge/pallets/system-v2/src/tests.rs index 20e4107683254..53b80fa80f31b 100644 --- a/bridges/snowbridge/pallets/system-v2/src/tests.rs +++ b/bridges/snowbridge/pallets/system-v2/src/tests.rs @@ -135,10 +135,6 @@ fn register_all_tokens_succeeds() { let foreign_token_id = EthereumSystemV2::location_to_message_origin(tc.native.clone()).unwrap(); - assert_eq!( - NativeToForeignId::::get(reanchored_location.clone()), - Some(foreign_token_id) - ); assert_eq!( ForeignToNativeId::::get(foreign_token_id), Some(reanchored_location.clone()) diff --git a/bridges/snowbridge/pallets/system/src/lib.rs b/bridges/snowbridge/pallets/system/src/lib.rs index 7d043d80eb3e5..d277186bd5b9d 100644 --- a/bridges/snowbridge/pallets/system/src/lib.rs +++ b/bridges/snowbridge/pallets/system/src/lib.rs @@ -52,7 +52,7 @@ use snowbridge_outbound_queue_primitives::{ }; use sp_core::{RuntimeDebug, H160, H256}; use sp_io::hashing::blake2_256; -use sp_runtime::{traits::MaybeEquivalence, DispatchError, SaturatedConversion}; +use sp_runtime::{traits::MaybeConvert, DispatchError, SaturatedConversion}; use sp_std::prelude::*; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; @@ -231,12 +231,7 @@ pub mod pallet { /// Lookup table for foreign token ID to native location relative to ethereum #[pallet::storage] pub type ForeignToNativeId = - StorageMap<_, Blake2_128Concat, TokenId, xcm::v5::Location, OptionQuery>; - - /// Lookup table for native location relative to ethereum to foreign token ID - #[pallet::storage] - pub type NativeToForeignId = - StorageMap<_, Blake2_128Concat, xcm::v5::Location, TokenId, OptionQuery>; + StorageMap<_, Blake2_128Concat, TokenId, Location, OptionQuery>; #[pallet::genesis_config] #[derive(frame_support::DefaultNoBound)] @@ -494,7 +489,6 @@ pub mod pallet { .ok_or(Error::::LocationConversionFailed)?; if !ForeignToNativeId::::contains_key(token_id) { - NativeToForeignId::::insert(location.clone(), token_id); ForeignToNativeId::::insert(token_id, location.clone()); } @@ -535,12 +529,9 @@ pub mod pallet { } } - impl MaybeEquivalence for Pallet { - fn convert(foreign_id: &TokenId) -> Option { + impl MaybeConvert for Pallet { + fn maybe_convert(foreign_id: TokenId) -> Option { ForeignToNativeId::::get(foreign_id) } - fn convert_back(location: &Location) -> Option { - NativeToForeignId::::get(location) - } } } diff --git a/bridges/snowbridge/pallets/system/src/tests.rs b/bridges/snowbridge/pallets/system/src/tests.rs index 93a1fba38d584..ac33cd2993f2f 100644 --- a/bridges/snowbridge/pallets/system/src/tests.rs +++ b/bridges/snowbridge/pallets/system/src/tests.rs @@ -269,7 +269,6 @@ fn register_all_tokens_succeeds() { Default::default() )); - assert_eq!(NativeToForeignId::::get(tc.reanchored.clone()), Some(tc.foreign)); assert_eq!(ForeignToNativeId::::get(tc.foreign), Some(tc.reanchored.clone())); System::assert_last_event(RuntimeEvent::EthereumSystem(Event::::RegisterToken { diff --git a/bridges/snowbridge/primitives/inbound-queue/src/v1.rs b/bridges/snowbridge/primitives/inbound-queue/src/v1.rs index cc0edda11913b..6eba682f72f74 100644 --- a/bridges/snowbridge/primitives/inbound-queue/src/v1.rs +++ b/bridges/snowbridge/primitives/inbound-queue/src/v1.rs @@ -9,7 +9,7 @@ use frame_support::{traits::tokens::Balance as BalanceT, PalletError}; use scale_info::TypeInfo; use snowbridge_core::TokenId; use sp_core::{Get, RuntimeDebug, H160, H256}; -use sp_runtime::{traits::MaybeEquivalence, MultiAddress}; +use sp_runtime::{traits::MaybeConvert, MultiAddress}; use sp_std::prelude::*; use xcm::prelude::{Junction::AccountKey20, *}; @@ -104,7 +104,7 @@ pub struct MessageToXcm< CreateAssetCall: Get, CreateAssetDeposit: Get, Balance: BalanceT, - ConvertAssetId: MaybeEquivalence, + ConvertAssetId: MaybeConvert, EthereumUniversalLocation: Get, GlobalAssetHubLocation: Get, { @@ -171,7 +171,7 @@ where InboundQueuePalletInstance: Get, Balance: BalanceT + From, AccountId: Into<[u8; 32]>, - ConvertAssetId: MaybeEquivalence, + ConvertAssetId: MaybeConvert, EthereumUniversalLocation: Get, GlobalAssetHubLocation: Get, { @@ -230,7 +230,7 @@ where InboundQueuePalletInstance: Get, Balance: BalanceT + From, AccountId: Into<[u8; 32]>, - ConvertAssetId: MaybeEquivalence, + ConvertAssetId: MaybeConvert, EthereumUniversalLocation: Get, GlobalAssetHubLocation: Get, { @@ -426,7 +426,7 @@ where let total_fee_asset: Asset = (Location::parent(), asset_hub_fee).into(); let asset_loc = - ConvertAssetId::convert(&token_id).ok_or(ConvertMessageError::InvalidToken)?; + ConvertAssetId::maybe_convert(token_id).ok_or(ConvertMessageError::InvalidToken)?; let mut reanchored_asset_loc = asset_loc.clone(); reanchored_asset_loc diff --git a/bridges/snowbridge/primitives/inbound-queue/src/v2/converter.rs b/bridges/snowbridge/primitives/inbound-queue/src/v2/converter.rs index 6b0e9b6efb2f2..43c086e2f7448 100644 --- a/bridges/snowbridge/primitives/inbound-queue/src/v2/converter.rs +++ b/bridges/snowbridge/primitives/inbound-queue/src/v2/converter.rs @@ -10,7 +10,7 @@ use frame_support::ensure; use snowbridge_core::TokenId; use sp_core::{Get, RuntimeDebug, H160}; use sp_io::hashing::blake2_256; -use sp_runtime::{traits::MaybeEquivalence, MultiAddress}; +use sp_runtime::{traits::MaybeConvert, MultiAddress}; use sp_std::prelude::*; use xcm::{ prelude::{Junction::*, *}, @@ -103,7 +103,7 @@ where CreateAssetDeposit: Get, EthereumNetwork: Get, InboundQueueLocation: Get, - ConvertAssetId: MaybeEquivalence, + ConvertAssetId: MaybeConvert, GatewayProxyAddress: Get, EthereumUniversalLocation: Get, AssetHubFromEthereum: Get, @@ -163,7 +163,7 @@ where assets.push(AssetTransfer::ReserveDeposit(asset)); }, EthereumAsset::ForeignTokenERC20 { token_id, value } => { - let asset_loc = ConvertAssetId::convert(&token_id) + let asset_loc = ConvertAssetId::maybe_convert(*token_id) .ok_or(ConvertMessageError::InvalidAsset)?; let reanchored_asset_loc = asset_loc .reanchored(&AssetHubFromEthereum::get(), &EthereumUniversalLocation::get()) @@ -329,7 +329,7 @@ where CreateAssetDeposit: Get, EthereumNetwork: Get, InboundQueueLocation: Get, - ConvertAssetId: MaybeEquivalence, + ConvertAssetId: MaybeConvert, GatewayProxyAddress: Get, EthereumUniversalLocation: Get, AssetHubFromEthereum: Get, @@ -402,7 +402,6 @@ mod tests { add_location_override, reanchor_to_ethereum, LocationIdConvert, }; use sp_core::{H160, H256}; - use sp_runtime::traits::MaybeEquivalence; const GATEWAY_ADDRESS: [u8; 20] = hex!["eda338e4dc46038493b885327842fd3e301cab39"]; parameter_types! { @@ -420,11 +419,8 @@ mod tests { } pub struct MockFailedTokenConvert; - impl MaybeEquivalence for MockFailedTokenConvert { - fn convert(_id: &TokenId) -> Option { - None - } - fn convert_back(_loc: &Location) -> Option { + impl MaybeConvert for MockFailedTokenConvert { + fn maybe_convert(_id: TokenId) -> Option { None } } diff --git a/bridges/snowbridge/primitives/outbound-queue/src/v1/converter/mod.rs b/bridges/snowbridge/primitives/outbound-queue/src/v1/converter/mod.rs index 7acc8e7479791..7f6275fa331e7 100644 --- a/bridges/snowbridge/primitives/outbound-queue/src/v1/converter/mod.rs +++ b/bridges/snowbridge/primitives/outbound-queue/src/v1/converter/mod.rs @@ -13,7 +13,7 @@ use super::message::{Command, Message, SendMessage}; use frame_support::{ensure, traits::Get}; use snowbridge_core::{AgentId, ChannelId, ParaId, TokenId, TokenIdOf}; use sp_core::{H160, H256}; -use sp_runtime::traits::MaybeEquivalence; +use sp_runtime::traits::MaybeConvert; use sp_std::{iter::Peekable, marker::PhantomData, prelude::*}; use xcm::prelude::*; use xcm_executor::traits::{ConvertLocation, ExportXcm}; @@ -48,7 +48,7 @@ where EthereumNetwork: Get, OutboundQueue: SendMessage, AgentHashedDescription: ConvertLocation, - ConvertAssetId: MaybeEquivalence, + ConvertAssetId: MaybeConvert, { type Ticket = (Vec, XcmHash); @@ -194,7 +194,7 @@ struct XcmConverter<'a, ConvertAssetId, Call> { } impl<'a, ConvertAssetId, Call> XcmConverter<'a, ConvertAssetId, Call> where - ConvertAssetId: MaybeEquivalence, + ConvertAssetId: MaybeConvert, { fn new(message: &'a Xcm, ethereum_network: NetworkId, agent_id: AgentId) -> Self { Self { @@ -413,7 +413,7 @@ where let token_id = TokenIdOf::convert_location(&asset_id).ok_or(InvalidAsset)?; - ConvertAssetId::convert(&token_id).ok_or(InvalidAsset)?; + ConvertAssetId::maybe_convert(token_id).ok_or(InvalidAsset)?; // Check if there is a SetTopic and skip over it if found. let topic_id = match_expression!(self.next()?, SetTopic(id), id).ok_or(SetTopicExpected)?; diff --git a/bridges/snowbridge/primitives/outbound-queue/src/v1/converter/tests.rs b/bridges/snowbridge/primitives/outbound-queue/src/v1/converter/tests.rs index b2b6e3c1d9954..9ce5bb8b29d30 100644 --- a/bridges/snowbridge/primitives/outbound-queue/src/v1/converter/tests.rs +++ b/bridges/snowbridge/primitives/outbound-queue/src/v1/converter/tests.rs @@ -62,13 +62,10 @@ impl SendMessageFeeProvider for MockErrOutboundQueue { } pub struct MockTokenIdConvert; -impl MaybeEquivalence for MockTokenIdConvert { - fn convert(_id: &TokenId) -> Option { +impl MaybeConvert for MockTokenIdConvert { + fn maybe_convert(_id: TokenId) -> Option { Some(Location::new(1, [GlobalConsensus(ByGenesis(WESTEND_GENESIS_HASH))])) } - fn convert_back(_loc: &Location) -> Option { - None - } } #[test] diff --git a/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/convert.rs b/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/convert.rs index 6edf44e320385..f64554e42756a 100644 --- a/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/convert.rs +++ b/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/convert.rs @@ -14,7 +14,7 @@ use crate::v2::{ use crate::v2::convert::XcmConverterError::{AssetResolutionFailed, FilterDoesNotConsumeAllAssets}; use sp_core::H160; -use sp_runtime::traits::MaybeEquivalence; +use sp_runtime::traits::MaybeConvert; use sp_std::{iter::Peekable, marker::PhantomData, prelude::*}; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; @@ -64,7 +64,7 @@ pub struct XcmConverter<'a, ConvertAssetId, Call> { } impl<'a, ConvertAssetId, Call> XcmConverter<'a, ConvertAssetId, Call> where - ConvertAssetId: MaybeEquivalence, + ConvertAssetId: MaybeConvert, { pub fn new(message: &'a Xcm, ethereum_network: NetworkId) -> Self { Self { @@ -174,7 +174,7 @@ where // Ensure PNA already registered let token_id = TokenIdOf::convert_location(&asset_id).ok_or(InvalidAsset)?; - ConvertAssetId::convert(&token_id).ok_or(InvalidAsset)?; + ConvertAssetId::maybe_convert(token_id).ok_or(InvalidAsset)?; commands.push(Command::MintForeignToken { token_id, recipient, amount }); } diff --git a/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/mod.rs b/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/mod.rs index 5da68a01626ca..c4459a05c7c51 100644 --- a/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/mod.rs +++ b/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/mod.rs @@ -15,7 +15,7 @@ use frame_support::{ traits::{Contains, Get, ProcessMessageError}, }; use snowbridge_core::{ParaId, TokenId}; -use sp_runtime::traits::MaybeEquivalence; +use sp_runtime::traits::MaybeConvert; use sp_std::{marker::PhantomData, ops::ControlFlow, prelude::*}; use xcm::prelude::*; use xcm_builder::{CreateMatcher, ExporterFor, MatchXcm}; @@ -53,7 +53,7 @@ where UniversalLocation: Get, EthereumNetwork: Get, OutboundQueue: SendMessage, - ConvertAssetId: MaybeEquivalence, + ConvertAssetId: MaybeConvert, AssetHubParaId: Get, { type Ticket = (Vec, XcmHash); diff --git a/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/tests.rs b/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/tests.rs index 58501066743bf..bb5a88c73c809 100644 --- a/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/tests.rs +++ b/bridges/snowbridge/primitives/outbound-queue/src/v2/converter/tests.rs @@ -62,13 +62,10 @@ impl SendMessageFeeProvider for MockErrOutboundQueue { } pub struct MockTokenIdConvert; -impl MaybeEquivalence for MockTokenIdConvert { - fn convert(_id: &TokenId) -> Option { +impl MaybeConvert for MockTokenIdConvert { + fn maybe_convert(_id: TokenId) -> Option { Some(Location::new(1, [GlobalConsensus(ByGenesis(WESTEND_GENESIS_HASH))])) } - fn convert_back(_loc: &Location) -> Option { - None - } } #[test] diff --git a/bridges/snowbridge/test-utils/src/mock_converter.rs b/bridges/snowbridge/test-utils/src/mock_converter.rs index 333460814ec99..d40e3cf97bd49 100644 --- a/bridges/snowbridge/test-utils/src/mock_converter.rs +++ b/bridges/snowbridge/test-utils/src/mock_converter.rs @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: 2023 Snowfork use codec::Encode; -use frame_support::sp_runtime::traits::MaybeEquivalence; +use frame_support::sp_runtime::traits::MaybeConvert; use snowbridge_core::TokenIdOf; use sp_core::H256; use std::{cell::RefCell, collections::HashMap}; @@ -35,12 +35,8 @@ pub fn reanchor_to_ethereum( } pub struct LocationIdConvert; -impl MaybeEquivalence for LocationIdConvert { - fn convert(id: &H256) -> Option { - IDENTIFIER_TO_LOCATION.with(|b| b.borrow().get(id).and_then(|l| Option::from(l.clone()))) - } - fn convert_back(lol: &Location) -> Option { - LOCATION_TO_IDENTIFIER - .with(|b| b.borrow().get(&lol.encode()).and_then(|id| Option::from(*id))) +impl MaybeConvert for LocationIdConvert { + fn maybe_convert(id: H256) -> Option { + IDENTIFIER_TO_LOCATION.with(|b| b.borrow().get(&id).and_then(|l| Option::from(l.clone()))) } } diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/bridge_to_ethereum_config.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/bridge_to_ethereum_config.rs index 2ccbfd8847232..4aaa038b50fb6 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/bridge_to_ethereum_config.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/bridge_to_ethereum_config.rs @@ -372,9 +372,9 @@ pub mod benchmark_helpers { } pub(crate) mod migrations { - use alloc::vec::Vec; use frame_support::pallet_prelude::*; use snowbridge_core::TokenId; + use xcm::VersionedLocation; #[frame_support::storage_alias] pub type OldNativeToForeignId = StorageMap< @@ -399,18 +399,6 @@ pub(crate) mod migrations { }; snowbridge_pallet_system::ForeignToNativeId::::translate_values(translate_westend); - let old_keys = OldNativeToForeignId::::iter_keys().collect::>(); - for old_key in old_keys { - if let Some(old_val) = OldNativeToForeignId::::get(&old_key) { - snowbridge_pallet_system::NativeToForeignId::::insert( - &xcm::v5::Location::try_from(old_key.clone()).expect("valid location"), - old_val, - ); - } - OldNativeToForeignId::::remove(old_key); - weight.saturating_accrue(T::DbWeight::get().reads_writes(1, 2)); - } - weight } }