From aabefe76024919393dda0a9b0c1e11ba2629ed8b Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 5 Jan 2024 16:38:33 +0100 Subject: [PATCH 1/6] referrals preregister parachain accounts --- pallets/referrals/src/lib.rs | 1 + pallets/referrals/src/migration.rs | 47 ++++++++++++++++++++++++++++++ runtime/hydradx/src/migrations.rs | 6 ++-- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 pallets/referrals/src/migration.rs diff --git a/pallets/referrals/src/lib.rs b/pallets/referrals/src/lib.rs index fcc880345..487426d72 100644 --- a/pallets/referrals/src/lib.rs +++ b/pallets/referrals/src/lib.rs @@ -43,6 +43,7 @@ pub mod weights; #[cfg(any(feature = "runtime-benchmarks", test))] mod benchmarking; +pub mod migration; #[cfg(test)] mod tests; pub mod traits; diff --git a/pallets/referrals/src/migration.rs b/pallets/referrals/src/migration.rs new file mode 100644 index 000000000..0dc7db4d1 --- /dev/null +++ b/pallets/referrals/src/migration.rs @@ -0,0 +1,47 @@ +// Copyright (C) 2020-2024 Intergalactic, Limited (GIB). +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use super::*; +use frame_support::{traits::Get, weights::Weight}; +use sp_core::crypto::AccountId32; +use sp_runtime::traits::{IdentifyAccount, Verify}; + +const PARACHAIN_CODES: [(&str, &str); 1] = [("BALLS", "Account")]; + +pub fn preregister_parachain_codes() -> Weight +where + ::AccountId: From, +{ + let mut weight: Weight = Weight::zero(); + for (code, account_id) in PARACHAIN_CODES.into_iter() { + let code: ReferralCode = code.as_bytes().to_vec().try_into().unwrap(); + let maybe_who: Option = + <::Signer as IdentifyAccount>::AccountId::try_from( + account_id.as_bytes(), + ) + .ok(); + + if let Some(who) = maybe_who { + let who: T::AccountId = who.into(); + if !ReferralCodes::::contains_key(code.clone()) { + ReferralCodes::::insert(&code, &who); + ReferralAccounts::::insert(&who, code); + Referrer::::insert(&who, (Level::default(), Balance::zero())); + weight = weight.saturating_add(T::DbWeight::get().writes(3)); + } + } + } + weight +} diff --git a/runtime/hydradx/src/migrations.rs b/runtime/hydradx/src/migrations.rs index 5e4f6833b..32650df78 100644 --- a/runtime/hydradx/src/migrations.rs +++ b/runtime/hydradx/src/migrations.rs @@ -2,6 +2,7 @@ use crate::Vec; use frame_support::{codec::alloc::vec, traits::OnRuntimeUpgrade, weights::Weight}; pub struct OnRuntimeUpgradeMigration; +use super::Runtime; impl OnRuntimeUpgrade for OnRuntimeUpgradeMigration { #[cfg(feature = "try-runtime")] @@ -9,8 +10,9 @@ impl OnRuntimeUpgrade for OnRuntimeUpgradeMigration { Ok(vec![]) } - fn on_runtime_upgrade() -> Weight { - Weight::zero() + fn on_runtime_upgrade() -> Weight + { + pallet_referrals::migration::preregister_parachain_codes::() } #[cfg(feature = "try-runtime")] From 56f2e93c19631eb18f64700426d548ab09022e22 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 5 Jan 2024 16:45:15 +0100 Subject: [PATCH 2/6] remove unwrap --- pallets/referrals/src/migration.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/referrals/src/migration.rs b/pallets/referrals/src/migration.rs index 0dc7db4d1..4639a350b 100644 --- a/pallets/referrals/src/migration.rs +++ b/pallets/referrals/src/migration.rs @@ -26,7 +26,7 @@ where { let mut weight: Weight = Weight::zero(); for (code, account_id) in PARACHAIN_CODES.into_iter() { - let code: ReferralCode = code.as_bytes().to_vec().try_into().unwrap(); + let code: ReferralCode = ReferralCode::::truncate_from(code.as_bytes().to_vec()); let maybe_who: Option = <::Signer as IdentifyAccount>::AccountId::try_from( account_id.as_bytes(), From 1662981b62f07796b3c402b69ff7e36e4a4c4bc2 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 5 Jan 2024 16:48:21 +0100 Subject: [PATCH 3/6] reformat --- runtime/hydradx/src/migrations.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/runtime/hydradx/src/migrations.rs b/runtime/hydradx/src/migrations.rs index 32650df78..b0a734773 100644 --- a/runtime/hydradx/src/migrations.rs +++ b/runtime/hydradx/src/migrations.rs @@ -10,8 +10,7 @@ impl OnRuntimeUpgrade for OnRuntimeUpgradeMigration { Ok(vec![]) } - fn on_runtime_upgrade() -> Weight - { + fn on_runtime_upgrade() -> Weight { pallet_referrals::migration::preregister_parachain_codes::() } From 1949f8f9c11581b09bfe54ac115b34b0b1575620 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 5 Jan 2024 16:54:31 +0100 Subject: [PATCH 4/6] use acrrue --- pallets/referrals/src/migration.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/referrals/src/migration.rs b/pallets/referrals/src/migration.rs index 4639a350b..c0fd827a5 100644 --- a/pallets/referrals/src/migration.rs +++ b/pallets/referrals/src/migration.rs @@ -39,7 +39,7 @@ where ReferralCodes::::insert(&code, &who); ReferralAccounts::::insert(&who, code); Referrer::::insert(&who, (Level::default(), Balance::zero())); - weight = weight.saturating_add(T::DbWeight::get().writes(3)); + weight.saturating_accrue(T::DbWeight::get().writes(3)); } } } From 273a3298ed0184e081d4f18a98200afdc8fe4258 Mon Sep 17 00:00:00 2001 From: Martin Hloska Date: Fri, 5 Jan 2024 20:56:57 +0100 Subject: [PATCH 5/6] add codes and accounts --- pallets/referrals/src/migration.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pallets/referrals/src/migration.rs b/pallets/referrals/src/migration.rs index c0fd827a5..3ac36f7f3 100644 --- a/pallets/referrals/src/migration.rs +++ b/pallets/referrals/src/migration.rs @@ -18,7 +18,20 @@ use frame_support::{traits::Get, weights::Weight}; use sp_core::crypto::AccountId32; use sp_runtime::traits::{IdentifyAccount, Verify}; -const PARACHAIN_CODES: [(&str, &str); 1] = [("BALLS", "Account")]; +pub const PARACHAIN_CODES: [(&str, &str); 12] = [ + ("MOONBEAM", "7LCt6dFmtiRrwZv2YyEgQWW3GxsGX3Krmgzv9Xj7GQ9tG2j8"), + ("ASSETHUB", "7LCt6dFqtxzdKVB2648jWW9d85doiFfLSbZJDNAMVJNxh5rJ"), + ("INTERLAY", "7LCt6dFsW7xwUutdYad3oeQ1zfQvZ9THXbBupWLqpd72bmnM"), + ("CENTRIFUGE", "7LCt6dFsJVukxnxpix9KcTkwu2kWQnXARsy6BuBHEL54NcS6"), + ("ASTAR", "7LCt6dFnHxYDyomeCEC8nsnBUEC6omC6y7SZQk4ESzDpiDYo"), + ("BIFROST", "7LCt6dFs6sraSg31uKfbRH7soQ66GRb3LAkGZJ1ie3369crq"), + ("ZEITGEIST", "7LCt6dFCEKr7CctCKBb6CcQdV9iHDue3JcpxkkFCqJZbk3Xk"), + ("PHALA", "7LCt6dFt6z8V3Gg41U4EPCKEHZQAzEFepirNiKqXbWCwHECN"), + ("UNIQUE", "7LCt6dFtWEEr5WXfej1gmZbNUpj1Gx7u29J1yYAen6GsjQTj"), + ("NODLE", "7LCt6dFrJPdrNCKncokgeYZbQsSRgyrYwKrz2sMUGruDF9gJ"), + ("SUBSOCIAL", "7LCt6dFE2vLjshEThqtdwGAGMqg2XA39C1pMSCjG9wsKnR2Q"), + ("POLKADOT", "7KQx4f7yU3hqZHfvDVnSfe6mpgAT8Pxyr67LXHV6nsbZo3Tm"), +]; pub fn preregister_parachain_codes() -> Weight where From 3cba22f8946be33ca18a48d11594d94b43ba6339 Mon Sep 17 00:00:00 2001 From: Martin Hloska Date: Sat, 6 Jan 2024 00:09:23 +0100 Subject: [PATCH 6/6] register code --- Cargo.lock | 1 + integration-tests/src/referrals.rs | 34 +++++++++++++ pallets/referrals/Cargo.toml | 1 + pallets/referrals/src/migration.rs | 76 +++++++++++++++++++++--------- 4 files changed, 89 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 692f3988a..860e1e042 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7810,6 +7810,7 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "hex-literal 0.3.4", "hydra-dx-math", "hydradx-traits", "orml-tokens", diff --git a/integration-tests/src/referrals.rs b/integration-tests/src/referrals.rs index a9b991e54..60c258fe1 100644 --- a/integration-tests/src/referrals.rs +++ b/integration-tests/src/referrals.rs @@ -6,6 +6,7 @@ use hydradx_runtime::{Currencies, Omnipool, Referrals, Runtime, RuntimeOrigin, S use orml_traits::MultiCurrency; use pallet_referrals::{FeeDistribution, ReferralCode}; use primitives::AccountId; +use sp_core::crypto::Ss58AddressFormat; use sp_runtime::FixedU128; use sp_runtime::Permill; use xcm_emulator::TestExt; @@ -490,3 +491,36 @@ fn seed_pot_account() { (10 * UNITS) as i128, )); } + +use sp_core::crypto::Ss58Codec; +pub const PARACHAIN_CODES: [(&str, &str); 12] = [ + ("MOONBEAM", "7LCt6dFmtiRrwZv2YyEgQWW3GxsGX3Krmgzv9Xj7GQ9tG2j8"), + ("ASSETHUB", "7LCt6dFqtxzdKVB2648jWW9d85doiFfLSbZJDNAMVJNxh5rJ"), + ("INTERLAY", "7LCt6dFsW7xwUutdYad3oeQ1zfQvZ9THXbBupWLqpd72bmnM"), + ("CENTRIFUGE", "7LCt6dFsJVukxnxpix9KcTkwu2kWQnXARsy6BuBHEL54NcS6"), + ("ASTAR", "7LCt6dFnHxYDyomeCEC8nsnBUEC6omC6y7SZQk4ESzDpiDYo"), + ("BIFROST", "7LCt6dFs6sraSg31uKfbRH7soQ66GRb3LAkGZJ1ie3369crq"), + ("ZEITGEIST", "7LCt6dFCEKr7CctCKBb6CcQdV9iHDue3JcpxkkFCqJZbk3Xk"), + ("PHALA", "7LCt6dFt6z8V3Gg41U4EPCKEHZQAzEFepirNiKqXbWCwHECN"), + ("UNIQUE", "7LCt6dFtWEEr5WXfej1gmZbNUpj1Gx7u29J1yYAen6GsjQTj"), + ("NODLE", "7LCt6dFrJPdrNCKncokgeYZbQsSRgyrYwKrz2sMUGruDF9gJ"), + ("SUBSOCIAL", "7LCt6dFE2vLjshEThqtdwGAGMqg2XA39C1pMSCjG9wsKnR2Q"), + ("POLKADOT", "7KQx4f7yU3hqZHfvDVnSfe6mpgAT8Pxyr67LXHV6nsbZo3Tm"), +]; + +#[test] +fn verify_preregisters_codes() { + Hydra::execute_with(|| { + pallet_referrals::migration::preregister_parachain_codes::(); + for (code, account) in PARACHAIN_CODES.into_iter() { + let code = + ReferralCode::<::CodeLength>::try_from(code.as_bytes().to_vec()) + .unwrap(); + let a = Referrals::referral_account(code); + assert_eq!( + a.unwrap().to_ss58check_with_version(Ss58AddressFormat::custom(63)), + account + ); + } + }); +} diff --git a/pallets/referrals/Cargo.toml b/pallets/referrals/Cargo.toml index 144885508..a1105c7ff 100644 --- a/pallets/referrals/Cargo.toml +++ b/pallets/referrals/Cargo.toml @@ -13,6 +13,7 @@ readme = "README.md" targets = ["x86_64-unknown-linux-gnu"] [dependencies] +hex-literal = "0.3.4" # parity scale-info = { version = "2.3.1", default-features = false, features = ["derive"] } codec = { default-features = false, features = ["derive"], package = "parity-scale-codec", version = "3.4.0" } diff --git a/pallets/referrals/src/migration.rs b/pallets/referrals/src/migration.rs index 3ac36f7f3..8bc45fe50 100644 --- a/pallets/referrals/src/migration.rs +++ b/pallets/referrals/src/migration.rs @@ -15,37 +15,67 @@ use super::*; use frame_support::{traits::Get, weights::Weight}; +use hex_literal::hex; use sp_core::crypto::AccountId32; -use sp_runtime::traits::{IdentifyAccount, Verify}; - -pub const PARACHAIN_CODES: [(&str, &str); 12] = [ - ("MOONBEAM", "7LCt6dFmtiRrwZv2YyEgQWW3GxsGX3Krmgzv9Xj7GQ9tG2j8"), - ("ASSETHUB", "7LCt6dFqtxzdKVB2648jWW9d85doiFfLSbZJDNAMVJNxh5rJ"), - ("INTERLAY", "7LCt6dFsW7xwUutdYad3oeQ1zfQvZ9THXbBupWLqpd72bmnM"), - ("CENTRIFUGE", "7LCt6dFsJVukxnxpix9KcTkwu2kWQnXARsy6BuBHEL54NcS6"), - ("ASTAR", "7LCt6dFnHxYDyomeCEC8nsnBUEC6omC6y7SZQk4ESzDpiDYo"), - ("BIFROST", "7LCt6dFs6sraSg31uKfbRH7soQ66GRb3LAkGZJ1ie3369crq"), - ("ZEITGEIST", "7LCt6dFCEKr7CctCKBb6CcQdV9iHDue3JcpxkkFCqJZbk3Xk"), - ("PHALA", "7LCt6dFt6z8V3Gg41U4EPCKEHZQAzEFepirNiKqXbWCwHECN"), - ("UNIQUE", "7LCt6dFtWEEr5WXfej1gmZbNUpj1Gx7u29J1yYAen6GsjQTj"), - ("NODLE", "7LCt6dFrJPdrNCKncokgeYZbQsSRgyrYwKrz2sMUGruDF9gJ"), - ("SUBSOCIAL", "7LCt6dFE2vLjshEThqtdwGAGMqg2XA39C1pMSCjG9wsKnR2Q"), - ("POLKADOT", "7KQx4f7yU3hqZHfvDVnSfe6mpgAT8Pxyr67LXHV6nsbZo3Tm"), -]; pub fn preregister_parachain_codes() -> Weight where ::AccountId: From, { let mut weight: Weight = Weight::zero(); - for (code, account_id) in PARACHAIN_CODES.into_iter() { - let code: ReferralCode = ReferralCode::::truncate_from(code.as_bytes().to_vec()); - let maybe_who: Option = - <::Signer as IdentifyAccount>::AccountId::try_from( - account_id.as_bytes(), - ) - .ok(); + let accounts: [(&str, Option); 12] = [ + ( + "MOONBEAM", + AccountId32::try_from(hex!["7369626cd4070000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "ASSETHUB", + AccountId32::try_from(hex!["7369626ce8030000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "INTERLAY", + AccountId32::try_from(hex!["7369626cf0070000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "CENTRIFUGE", + AccountId32::try_from(hex!["7369626cef070000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "ASTAR", + AccountId32::try_from(hex!["7369626cd6070000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "BIFROST", + AccountId32::try_from(hex!["7369626cee070000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "ZEITGEIST", + AccountId32::try_from(hex!["7369626c2c080000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "PHALA", + AccountId32::try_from(hex!["7369626cf3070000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "UNIQUE", + AccountId32::try_from(hex!["7369626cf5070000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "NODLE", + AccountId32::try_from(hex!["7369626cea070000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "SUBSOCIAL", + AccountId32::try_from(hex!["7369626c35080000000000000000000000000000000000000000000000000000"]).ok(), + ), + ( + "POLKADOT", + AccountId32::try_from(hex!["506172656e740000000000000000000000000000000000000000000000000000"]).ok(), + ), + ]; + for (code, maybe_who) in accounts.into_iter() { + let code: ReferralCode = ReferralCode::::truncate_from(code.as_bytes().to_vec()); if let Some(who) = maybe_who { let who: T::AccountId = who.into(); if !ReferralCodes::::contains_key(code.clone()) {