From dd3c4415c7c2da02bebe6e1004ce3127cd381de6 Mon Sep 17 00:00:00 2001 From: zqh Date: Sun, 16 Jan 2022 22:37:36 +0800 Subject: [PATCH] remove sibling token --- modules/asset-registry/src/lib.rs | 3 +- node/service/src/chain_spec/karura.rs | 4 +- primitives/src/currency.rs | 10 +- runtime/acala/src/lib.rs | 10 +- runtime/common/src/lib.rs | 2 +- runtime/integration-tests/Cargo.toml | 2 +- .../relaychain/kusama_cross_chain_transfer.rs | 95 ++++++++-- runtime/integration-tests/src/runtime.rs | 11 ++ runtime/integration-tests/src/setup.rs | 54 +++++- runtime/karura/src/lib.rs | 179 +++++++++++------- runtime/mandala/src/lib.rs | 10 +- 11 files changed, 275 insertions(+), 105 deletions(-) diff --git a/modules/asset-registry/src/lib.rs b/modules/asset-registry/src/lib.rs index 861355082c..f8e6616633 100644 --- a/modules/asset-registry/src/lib.rs +++ b/modules/asset-registry/src/lib.rs @@ -103,6 +103,7 @@ pub mod module { pub symbol: Vec, pub decimals: u8, pub minimal_balance: Balance, + // pub units_per_second: Option, } #[pallet::error] @@ -324,7 +325,7 @@ impl Pallet { }) } - fn do_register_foreign_asset( + pub fn do_register_foreign_asset( location: &MultiLocation, metadata: &AssetMetadata>, ) -> Result { diff --git a/node/service/src/chain_spec/karura.rs b/node/service/src/chain_spec/karura.rs index 1525830677..2e77623930 100644 --- a/node/service/src/chain_spec/karura.rs +++ b/node/service/src/chain_spec/karura.rs @@ -30,7 +30,7 @@ use karura_runtime::{ DexConfig, FinancialCouncilMembershipConfig, GeneralCouncilMembershipConfig, HomaCouncilMembershipConfig, OperatorMembershipAcalaConfig, OrmlNFTConfig, ParachainInfoConfig, PolkadotXcmConfig, SS58Prefix, SessionConfig, SessionDuration, SessionKeys, SessionManagerConfig, SudoConfig, SystemConfig, TechnicalCommitteeMembershipConfig, - TokensConfig, VestingConfig, BNC, KAR, KSM, KUSD, LKSM, PHA, VSKSM, + TokensConfig, VestingConfig, KAR, KSM, KUSD, LKSM, }; use runtime_common::TokenInfo; @@ -46,7 +46,7 @@ fn karura_properties() -> Properties { let mut properties = Map::new(); let mut token_symbol: Vec = vec![]; let mut token_decimals: Vec = vec![]; - [KAR, KUSD, KSM, LKSM, BNC, VSKSM, PHA].iter().for_each(|token| { + [KAR, KUSD, KSM, LKSM].iter().for_each(|token| { token_symbol.push(token.symbol().unwrap().to_string()); token_decimals.push(token.decimals().unwrap() as u32); }); diff --git a/primitives/src/currency.rs b/primitives/src/currency.rs index d2b32ee68e..3dffbdfccf 100644 --- a/primitives/src/currency.rs +++ b/primitives/src/currency.rs @@ -200,11 +200,11 @@ create_currency_id! { // 149: Reserved for renBTC // 150: Reserved for CASH // 168 - 255: Kusama parachain tokens - BNC("Bifrost Native Token", 12) = 168, - VSKSM("Bifrost Voucher Slot KSM", 12) = 169, - PHA("Phala Native Token", 12) = 170, - KINT("Kintsugi Native Token", 12) = 171, - KBTC("Kintsugi Wrapped BTC", 8) = 172, + // BNC("Bifrost Native Token", 12) = 168, + // VSKSM("Bifrost Voucher Slot KSM", 12) = 169, + // PHA("Phala Native Token", 12) = 170, + // KINT("Kintsugi Native Token", 12) = 171, + // KBTC("Kintsugi Wrapped BTC", 8) = 172, } } diff --git a/runtime/acala/src/lib.rs b/runtime/acala/src/lib.rs index 4c82107450..1d3f4264e3 100644 --- a/runtime/acala/src/lib.rs +++ b/runtime/acala/src/lib.rs @@ -749,12 +749,12 @@ parameter_type_with_key! { TokenSymbol::KSM | TokenSymbol::LKSM | TokenSymbol::RENBTC | - TokenSymbol::BNC | - TokenSymbol::PHA | - TokenSymbol::VSKSM | + // TokenSymbol::BNC | + // TokenSymbol::PHA | + // TokenSymbol::VSKSM | TokenSymbol::ACA | - TokenSymbol::KBTC | - TokenSymbol::KINT | + // TokenSymbol::KBTC | + // TokenSymbol::KINT | TokenSymbol::TAI | TokenSymbol::CASH => Balance::max_value() // unsupported }, diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 4724bcbb4b..f2cf2d0a93 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -59,7 +59,7 @@ pub use precompile::{ StateRentPrecompile, }; pub use primitives::{ - currency::{TokenInfo, ACA, AUSD, BNC, DOT, KAR, KBTC, KINT, KSM, KUSD, LDOT, LKSM, PHA, RENBTC, VSKSM}, + currency::{TokenInfo, ACA, AUSD, DOT, KAR, KSM, KUSD, LDOT, LKSM, RENBTC}, AccountId, }; use sp_std::{marker::PhantomData, prelude::*}; diff --git a/runtime/integration-tests/Cargo.toml b/runtime/integration-tests/Cargo.toml index 6bdb6d0127..493d153f55 100644 --- a/runtime/integration-tests/Cargo.toml +++ b/runtime/integration-tests/Cargo.toml @@ -138,7 +138,7 @@ xcm-emulator = { git = "https://github.com/shaunxw/xcm-simulator", rev = "4d3bb9 acala-service = { path = "../../node/service", features = ["with-all-runtime"] } [features] -default = ["std"] +default = ["std", "with-karura-runtime"] no_std = [] with-mandala-runtime = [ "acala-service/with-mandala-runtime", diff --git a/runtime/integration-tests/src/relaychain/kusama_cross_chain_transfer.rs b/runtime/integration-tests/src/relaychain/kusama_cross_chain_transfer.rs index 4654be4f3a..d947e87448 100644 --- a/runtime/integration-tests/src/relaychain/kusama_cross_chain_transfer.rs +++ b/runtime/integration-tests/src/relaychain/kusama_cross_chain_transfer.rs @@ -23,6 +23,7 @@ use crate::setup::*; use frame_support::assert_ok; +use karura_runtime::parachains::bifrost::BNC_KEY; use karura_runtime::{AssetRegistry, KaruraTreasuryAccount}; use module_asset_registry::AssetMetadata; use module_relaychain::RelayChainCallBuilder; @@ -92,18 +93,53 @@ fn transfer_to_sibling() { polkadot_parachain::primitives::Sibling::from(2000).into_account() } - Karura::execute_with(|| { - assert_ok!(Tokens::deposit(BNC, &AccountId::from(ALICE), 100_000_000_000_000)); - }); + let sibling_location = MultiLocation::new(1, X2(Parachain(2001), GeneralKey(BNC_KEY.to_vec()))); Sibling::execute_with(|| { - assert_ok!(Tokens::deposit(BNC, &karura_reserve_account(), 100_000_000_000_000)); + // register asset + assert_ok!(AssetRegistry::register_foreign_asset( + Origin::root(), + Box::new(sibling_location.clone().into()), + Box::new(AssetMetadata { + name: b"Native Token".to_vec(), + symbol: b"BNC".to_vec(), + decimals: 12, + minimal_balance: Balances::minimum_balance() / 10, // 10% + }) + )); + assert_ok!(Tokens::deposit( + CurrencyId::ForeignAsset(0), + &karura_reserve_account(), + 100_000_000_000_000 + )); }); Karura::execute_with(|| { + // register foreign asset + assert_ok!(AssetRegistry::register_foreign_asset( + Origin::root(), + Box::new(sibling_location.clone().into()), + Box::new(AssetMetadata { + name: b"Sibling Token".to_vec(), + symbol: b"BNC".to_vec(), + decimals: 12, + minimal_balance: Balances::minimum_balance() / 10, // 10% + }) + )); + + assert_ok!(Tokens::deposit( + CurrencyId::ForeignAsset(0), + &AccountId::from(ALICE), + 100_000_000_000_000 + )); + assert_eq!( + Tokens::free_balance(CurrencyId::ForeignAsset(0), &TreasuryAccount::get()), + 0 + ); + assert_ok!(XTokens::transfer( Origin::signed(ALICE.into()), - BNC, + CurrencyId::ForeignAsset(0), 10_000_000_000_000, Box::new( MultiLocation::new( @@ -121,16 +157,25 @@ fn transfer_to_sibling() { 1_000_000_000, )); - assert_eq!(Tokens::free_balance(BNC, &AccountId::from(ALICE)), 90_000_000_000_000); + assert_eq!( + Tokens::free_balance(CurrencyId::ForeignAsset(0), &AccountId::from(ALICE)), + 90_000_000_000_000 + ); }); Sibling::execute_with(|| { - assert_eq!(Tokens::free_balance(BNC, &karura_reserve_account()), 90_000_000_000_000); - assert_eq!(Tokens::free_balance(BNC, &AccountId::from(BOB)), 9_989_760_000_000); + assert_eq!( + Tokens::free_balance(CurrencyId::ForeignAsset(0), &karura_reserve_account()), + 90_000_000_000_000 + ); + assert_eq!( + Tokens::free_balance(CurrencyId::ForeignAsset(0), &AccountId::from(BOB)), + 9_989_760_000_000 + ); assert_ok!(XTokens::transfer( Origin::signed(BOB.into()), - BNC, + CurrencyId::ForeignAsset(0), 5_000_000_000_000, Box::new( MultiLocation::new( @@ -148,12 +193,21 @@ fn transfer_to_sibling() { 1_000_000_000, )); - assert_eq!(Tokens::free_balance(BNC, &karura_reserve_account()), 95_000_000_000_000); - assert_eq!(Tokens::free_balance(BNC, &AccountId::from(BOB)), 4_989_760_000_000); + assert_eq!( + Tokens::free_balance(CurrencyId::ForeignAsset(0), &karura_reserve_account()), + 95_000_000_000_000 + ); + assert_eq!( + Tokens::free_balance(CurrencyId::ForeignAsset(0), &AccountId::from(BOB)), + 4_989_760_000_000 + ); }); Karura::execute_with(|| { - assert_eq!(Tokens::free_balance(BNC, &AccountId::from(ALICE)), 94_989_760_000_000); + assert_eq!( + Tokens::free_balance(CurrencyId::ForeignAsset(0), &AccountId::from(ALICE)), + 94_989_760_000_000 + ); }); } @@ -736,15 +790,28 @@ fn sibling_trap_assets_works() { TestNet::reset(); let mut kar_treasury_amount = 0; - let (bnc_asset_amount, kar_asset_amount) = (cent(BNC) / 10, cent(KAR)); + let (bnc_asset_amount, kar_asset_amount) = (1_000_000_000, cent(KAR)); fn sibling_account() -> AccountId { use sp_runtime::traits::AccountIdConversion; polkadot_parachain::primitives::Sibling::from(2001).into_account() } + let sibling_location = MultiLocation::new(1, X2(Parachain(2001), GeneralKey(BNC_KEY.to_vec()))); + Karura::execute_with(|| { - assert_ok!(Tokens::deposit(BNC, &sibling_account(), dollar(BNC))); + assert_ok!(AssetRegistry::register_foreign_asset( + Origin::root(), + Box::new(sibling_location.clone().into()), + Box::new(AssetMetadata { + name: b"Sibling Token".to_vec(), + symbol: b"BNC".to_vec(), + decimals: 12, + minimal_balance: Balances::minimum_balance() / 10, // 10% + }) + )); + + assert_ok!(Tokens::deposit(BNC, &sibling_account(), 1_000_000_000_000)); let _ = pallet_balances::Pallet::::deposit_creating(&sibling_account(), dollar(KAR)); kar_treasury_amount = Currencies::free_balance(KAR, &KaruraTreasuryAccount::get()); }); diff --git a/runtime/integration-tests/src/runtime.rs b/runtime/integration-tests/src/runtime.rs index b4e36aa97f..82469b326d 100644 --- a/runtime/integration-tests/src/runtime.rs +++ b/runtime/integration-tests/src/runtime.rs @@ -133,6 +133,9 @@ fn currency_id_convert() { CurrencyIdConvert::convert(MultiLocation::sibling_parachain_general_key(id, LDOT.encode())), None ); + + initiate_asset_registry(); + assert_eq!( CurrencyIdConvert::convert(MultiLocation::sibling_parachain_general_key( parachains::bifrost::ID, @@ -147,6 +150,10 @@ fn currency_id_convert() { )), Some(VSKSM) ); + assert_eq!( + CurrencyIdConvert::convert(MultiLocation::new(1, X1(Parachain(parachains::phala::ID)))), + Some(PHA) + ); assert_eq!( CurrencyIdConvert::convert(BNC), @@ -162,6 +169,10 @@ fn currency_id_convert() { parachains::bifrost::VSKSM_KEY.to_vec() )) ); + assert_eq!( + CurrencyIdConvert::convert(PHA), + Some(MultiLocation::new(1, X1(Parachain(parachains::phala::ID)))) + ); let native_currency: MultiAsset = ( MultiLocation::sibling_parachain_general_key(id, NATIVE_CURRENCY.encode()), diff --git a/runtime/integration-tests/src/setup.rs b/runtime/integration-tests/src/setup.rs index 347bc30d8e..f6db67bdb6 100644 --- a/runtime/integration-tests/src/setup.rs +++ b/runtime/integration-tests/src/setup.rs @@ -72,7 +72,7 @@ mod mandala_imports { pub use karura_imports::*; #[cfg(feature = "with-karura-runtime")] mod karura_imports { - pub use frame_support::{parameter_types, weights::Weight}; + pub use frame_support::{assert_ok, parameter_types, weights::Weight}; pub use karura_runtime::{ constants::parachains, create_x2_parachain_multilocation, get_all_module_accounts, AcalaOracle, AccountId, AssetRegistry, AuctionManager, Authority, AuthoritysOriginId, Balance, Balances, BlockNumber, Call, CdpEngine, @@ -86,9 +86,11 @@ mod karura_imports { TipPerWeightStep, TokenSymbol, Tokens, TreasuryPalletId, Utility, Vesting, XTokens, XcmConfig, XcmExecutor, EVM, NFT, }; + pub use module_asset_registry::AssetMetadata; pub use primitives::TradingPair; pub use runtime_common::{calculate_asset_ratio, cent, dollar, millicent, KAR, KSM, KUSD, LKSM}; pub use sp_runtime::{traits::AccountIdConversion, FixedPointNumber}; + pub use xcm::latest::prelude::*; parameter_types! { pub EnabledTradingPairs: Vec = vec![ @@ -123,6 +125,56 @@ mod karura_imports { (LKSM, NativeTokenExistentialDeposit::get() - 1), ]; } + + pub fn initiate_asset_registry() { + // BNC: ForeignAsset(0) + assert_ok!(module_asset_registry::Pallet::::do_register_foreign_asset( + &( + 1, + X2( + Parachain(parachains::bifrost::ID), + GeneralKey(parachains::bifrost::BNC_KEY.to_vec()), + ) + ) + .into(), + &AssetMetadata { + name: "BNC".as_bytes().to_vec(), + symbol: "BNC".as_bytes().to_vec(), + decimals: 12, + minimal_balance: 800 * (10u128.saturating_pow(12)) + } + )); + // VSKSM: ForeignAsset(1) + assert_ok!(module_asset_registry::Pallet::::do_register_foreign_asset( + &( + 1, + X2( + Parachain(parachains::bifrost::ID), + GeneralKey(parachains::bifrost::VSKSM_KEY.to_vec()), + ) + ) + .into(), + &AssetMetadata { + name: "VSKSM".as_bytes().to_vec(), + symbol: "VSKSM".as_bytes().to_vec(), + decimals: 12, + minimal_balance: 10 * (10u128.saturating_pow(12)) + } + )); + // PHA: ForeignAsset(2) + assert_ok!(module_asset_registry::Pallet::::do_register_foreign_asset( + &(1, X1(Parachain(parachains::phala::ID))).into(), + &AssetMetadata { + name: "PHA".as_bytes().to_vec(), + symbol: "PHA".as_bytes().to_vec(), + decimals: 12, + minimal_balance: 4000 * (10u128.saturating_pow(12)) + } + )); + } + pub const BNC: CurrencyId = CurrencyId::ForeignAsset(0); + pub const VSKSM: CurrencyId = CurrencyId::ForeignAsset(1); + pub const PHA: CurrencyId = CurrencyId::ForeignAsset(2); } #[cfg(feature = "with-acala-runtime")] diff --git a/runtime/karura/src/lib.rs b/runtime/karura/src/lib.rs index 37fcca7745..eab8c03b06 100644 --- a/runtime/karura/src/lib.rs +++ b/runtime/karura/src/lib.rs @@ -50,7 +50,7 @@ use sp_version::NativeVersion; use sp_version::RuntimeVersion; use frame_system::{EnsureRoot, RawOrigin}; -use module_asset_registry::{AssetIdMaps, EvmErc20InfoMapping, FixedRateOfForeignAsset}; +use module_asset_registry::{AssetIdMaps, AssetMetadata, EvmErc20InfoMapping, FixedRateOfForeignAsset}; use module_currencies::BasicCurrencyAdapter; use module_evm::{CallInfo, CreateInfo, EvmTask, Runner}; use module_evm_accounts::EvmAddressMapping; @@ -82,7 +82,7 @@ pub use xcm_executor::{traits::WeightTrader, Assets, Config, XcmExecutor}; mod weights; pub use frame_support::{ - construct_runtime, log, parameter_types, + assert_ok, construct_runtime, log, parameter_types, traits::{ Contains, ContainsLengthBound, Currency as PalletCurrency, EnsureOrigin, EqualPrivilegeOnly, Everything, Get, Imbalance, InstanceFilter, IsSubType, IsType, KeyOwnerProofSystem, LockIdentifier, Nothing, OnUnbalanced, @@ -114,8 +114,7 @@ pub use runtime_common::{ HomaCouncilInstance, HomaCouncilMembershipInstance, MaxTipsOfPriority, OperationalFeeMultiplier, OperatorMembershipInstanceAcala, Price, ProxyType, Rate, Ratio, RelayChainBlockNumberProvider, RelayChainSubAccountId, RuntimeBlockLength, RuntimeBlockWeights, SystemContractsFilter, TechnicalCommitteeInstance, - TechnicalCommitteeMembershipInstance, TimeStampedPrice, TipPerWeightStep, BNC, KAR, KBTC, KINT, KSM, KUSD, LKSM, - PHA, RENBTC, VSKSM, + TechnicalCommitteeMembershipInstance, TimeStampedPrice, TipPerWeightStep, KAR, KSM, KUSD, LKSM, RENBTC, }; mod authority; @@ -754,11 +753,11 @@ parameter_type_with_key! { TokenSymbol::KUSD => cent(*currency_id), TokenSymbol::KSM => 10 * millicent(*currency_id), TokenSymbol::LKSM => 50 * millicent(*currency_id), - TokenSymbol::BNC => 800 * millicent(*currency_id), // 80BNC = 1KSM - TokenSymbol::VSKSM => 10 * millicent(*currency_id), // 1VSKSM = 1KSM - TokenSymbol::PHA => 4000 * millicent(*currency_id), // 400PHA = 1KSM - TokenSymbol::KINT => 13333 * microcent(*currency_id), // 1.33 KINT = 1 KSM - TokenSymbol::KBTC => 66 * microcent(*currency_id), // 1KBTC = 150 KSM + // TokenSymbol::BNC => 800 * millicent(*currency_id), // 80BNC = 1KSM + // TokenSymbol::VSKSM => 10 * millicent(*currency_id), // 1VSKSM = 1KSM + // TokenSymbol::PHA => 4000 * millicent(*currency_id), // 400PHA = 1KSM + // TokenSymbol::KINT => 13333 * microcent(*currency_id), // 1.33 KINT = 1 KSM + // TokenSymbol::KBTC => 66 * microcent(*currency_id), // 1KBTC = 150 KSM TokenSymbol::ACA | TokenSymbol::AUSD | @@ -1114,7 +1113,7 @@ parameter_types! { vec![KUSD, KSM, KAR], vec![KSM, KAR], vec![LKSM, KSM, KAR], - vec![BNC, KUSD, KSM, KAR], + // vec![BNC, KUSD, KSM, KAR], ]; } @@ -1703,40 +1702,6 @@ impl Convert> for CurrencyIdConvert { match id { Token(KSM) => Some(MultiLocation::parent()), Token(KAR) | Token(KUSD) | Token(LKSM) => Some(native_currency_location(id)), - // Bifrost native token - Token(BNC) => Some(MultiLocation::new( - 1, - X2( - Parachain(parachains::bifrost::ID), - GeneralKey(parachains::bifrost::BNC_KEY.to_vec()), - ), - )), - // Bifrost Voucher Slot KSM - Token(VSKSM) => Some(MultiLocation::new( - 1, - X2( - Parachain(parachains::bifrost::ID), - GeneralKey(parachains::bifrost::VSKSM_KEY.to_vec()), - ), - )), - // Phala Native token - Token(PHA) => Some(MultiLocation::new(1, X1(Parachain(parachains::phala::ID)))), - // Kintsugi Native token - Token(KINT) => Some(MultiLocation::new( - 1, - X2( - Parachain(parachains::kintsugi::ID), - GeneralKey(parachains::kintsugi::KINT_KEY.to_vec()), - ), - )), - // Kintsugi wrapped BTC - Token(KBTC) => Some(MultiLocation::new( - 1, - X2( - Parachain(parachains::kintsugi::ID), - GeneralKey(parachains::kintsugi::KBTC_KEY.to_vec()), - ), - )), CurrencyId::ForeignAsset(foreign_asset_id) => AssetIdMaps::::get_multi_location(foreign_asset_id), _ => None, } @@ -1759,33 +1724,16 @@ impl Convert> for CurrencyIdConvert { MultiLocation { parents: 1, interior: X2(Parachain(para_id), GeneralKey(key)), - } => { - match (para_id, &key[..]) { - (parachains::bifrost::ID, parachains::bifrost::BNC_KEY) => Some(Token(BNC)), - (parachains::bifrost::ID, parachains::bifrost::VSKSM_KEY) => Some(Token(VSKSM)), - (parachains::kintsugi::ID, parachains::kintsugi::KINT_KEY) => Some(Token(KINT)), - (parachains::kintsugi::ID, parachains::kintsugi::KBTC_KEY) => Some(Token(KBTC)), - - (id, key) if id == u32::from(ParachainInfo::get()) => { - // Karura - if let Ok(currency_id) = CurrencyId::decode(&mut &*key) { - // check `currency_id` is cross-chain asset - match currency_id { - Token(KAR) | Token(KUSD) | Token(LKSM) => Some(currency_id), - _ => None, - } - } else { - // invalid general key - None - } + } if ParaId::from(para_id) == ParachainInfo::get() => { + if let Ok(currency_id) = CurrencyId::decode(&mut &key[..]) { + match currency_id { + Token(KAR) | Token(KUSD) | Token(LKSM) => Some(currency_id), + _ => None, } - _ => None, + } else { + None } } - MultiLocation { - parents: 1, - interior: X1(Parachain(parachains::phala::ID)), - } => Some(Token(PHA)), _ => None, } } @@ -1992,8 +1940,99 @@ pub type SignedPayload = generic::SignedPayload; /// Extrinsic type that has already been checked. pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. -pub type Executive = - frame_executive::Executive, Runtime, AllPallets, ()>; +pub type Executive = frame_executive::Executive< + Runtime, + Block, + frame_system::ChainContext, + Runtime, + AllPallets, + AssetRegistryUpgrade, +>; + +pub struct AssetRegistryUpgrade; +impl frame_support::traits::OnRuntimeUpgrade for AssetRegistryUpgrade { + fn on_runtime_upgrade() -> Weight { + // BNC + assert_ok!(module_asset_registry::Pallet::::do_register_foreign_asset( + &( + 1, + X2( + Parachain(parachains::bifrost::ID), + GeneralKey(parachains::bifrost::BNC_KEY.to_vec()), + ) + ) + .into(), + &AssetMetadata { + name: "BNC".as_bytes().to_vec(), + symbol: "BNC".as_bytes().to_vec(), + decimals: 12, + minimal_balance: 800 * (10u128.saturating_pow(12)) + } + )); + assert_ok!(module_asset_registry::Pallet::::do_register_foreign_asset( + &( + 1, + X2( + Parachain(parachains::bifrost::ID), + GeneralKey(parachains::bifrost::VSKSM_KEY.to_vec()), + ) + ) + .into(), + &AssetMetadata { + name: "VSKSM".as_bytes().to_vec(), + symbol: "VSKSM".as_bytes().to_vec(), + decimals: 12, + minimal_balance: 10 * (10u128.saturating_pow(12)) + } + )); + + // PHA + assert_ok!(module_asset_registry::Pallet::::do_register_foreign_asset( + &(1, X1(Parachain(parachains::phala::ID))).into(), + &AssetMetadata { + name: "PHA".as_bytes().to_vec(), + symbol: "PHA".as_bytes().to_vec(), + decimals: 12, + minimal_balance: 4000 * (10u128.saturating_pow(12)) + } + )); + + // kintsugi + assert_ok!(module_asset_registry::Pallet::::do_register_foreign_asset( + &( + 1, + X2( + Parachain(parachains::kintsugi::ID), + GeneralKey(parachains::kintsugi::KINT_KEY.to_vec()), + ) + ) + .into(), + &AssetMetadata { + name: "KINT".as_bytes().to_vec(), + symbol: "KINT".as_bytes().to_vec(), + decimals: 12, + minimal_balance: 13333 * (10u128.saturating_pow(12)) + } + )); + assert_ok!(module_asset_registry::Pallet::::do_register_foreign_asset( + &( + 1, + X2( + Parachain(parachains::kintsugi::ID), + GeneralKey(parachains::kintsugi::KBTC_KEY.to_vec()), + ) + ) + .into(), + &AssetMetadata { + name: "KBTC".as_bytes().to_vec(), + symbol: "KBTC".as_bytes().to_vec(), + decimals: 8, + minimal_balance: 66 * (10u128.saturating_pow(8)) + } + )); + 0 + } +} #[cfg(not(feature = "disable-runtime-api"))] impl_runtime_apis! { diff --git a/runtime/mandala/src/lib.rs b/runtime/mandala/src/lib.rs index 8b9c107de7..75bf73fb94 100644 --- a/runtime/mandala/src/lib.rs +++ b/runtime/mandala/src/lib.rs @@ -778,15 +778,15 @@ parameter_type_with_key! { TokenSymbol::AUSD => cent(*currency_id), TokenSymbol::DOT => 10 * millicent(*currency_id), TokenSymbol::LDOT => 50 * millicent(*currency_id), - TokenSymbol::BNC => 800 * millicent(*currency_id), // 80BNC = 1KSM - TokenSymbol::VSKSM => 10 * millicent(*currency_id), // 1VSKSM = 1KSM - TokenSymbol::PHA => 4000 * millicent(*currency_id), // 400PHA = 1KSM + // TokenSymbol::BNC => 800 * millicent(*currency_id), // 80BNC = 1KSM + // TokenSymbol::VSKSM => 10 * millicent(*currency_id), // 1VSKSM = 1KSM + // TokenSymbol::PHA => 4000 * millicent(*currency_id), // 400PHA = 1KSM TokenSymbol::KUSD | TokenSymbol::KSM | TokenSymbol::LKSM | TokenSymbol::RENBTC | - TokenSymbol::KINT | - TokenSymbol::KBTC | + // TokenSymbol::KINT | + // TokenSymbol::KBTC | TokenSymbol::TAI => 10 * millicent(*currency_id), TokenSymbol::ACA | TokenSymbol::KAR |