diff --git a/pezcumulus/teyrchains/pezpallets/tiki/src/lib.rs b/pezcumulus/teyrchains/pezpallets/tiki/src/lib.rs index 305f8838..d710906d 100644 --- a/pezcumulus/teyrchains/pezpallets/tiki/src/lib.rs +++ b/pezcumulus/teyrchains/pezpallets/tiki/src/lib.rs @@ -325,14 +325,9 @@ pub mod pezpallet { } #[pezpallet::hooks] - impl Hooks> for Pezpallet { - fn on_initialize(_block_number: BlockNumberFor) -> Weight { - // Check newly KYC-approved users and mint citizenship NFT - Self::check_and_mint_citizen_nfts(); - - T::DbWeight::get().reads_writes(10, 5) - } - } + impl Hooks> for Pezpallet {} + // Citizenship NFT minting is handled by CitizenNftProvider hooks, + // no per-block scanning needed. #[pezpallet::call] impl Pezpallet { @@ -468,23 +463,6 @@ pub mod pezpallet { // Pezpallet's helper functions impl Pezpallet { - /// Checks newly KYC-completed users and mints citizenship NFT - fn check_and_mint_citizen_nfts() { - // Check all approved users in KYC pezpallet - for (account, kyc_status) in pezpallet_identity_kyc::KycStatuses::::iter() { - // Check if KYC is approved - if kyc_status == pezpallet_identity_kyc::types::KycLevel::Approved { - // Check if citizenship NFT exists - if Self::citizen_nft(&account).is_none() { - // Mint NFT (log error but continue on failure) - if Self::mint_citizen_nft_for_user(&account).is_err() { - log::warn!("Failed to mint citizen NFT for account: {account:?}"); - } - } - } - } - } - /// Mints citizenship NFT for specific user pub fn mint_citizen_nft_for_user(user: &T::AccountId) -> DispatchResult { // Check if NFT already exists @@ -493,17 +471,7 @@ pub mod pezpallet { let collection_id = T::TikiCollectionId::get(); let next_id_u32 = Self::next_item_id(); - // Mint the NFT - use force_mint in benchmarks to bypass balance/origin requirements - #[cfg(feature = "runtime-benchmarks")] - pezpallet_nfts::Pezpallet::::force_mint( - T::RuntimeOrigin::from(pezframe_system::RawOrigin::Root), - collection_id, - next_id_u32, - T::Lookup::unlookup(user.clone()), - Default::default(), - )?; - - #[cfg(not(feature = "runtime-benchmarks"))] + // Mint the NFT via force_mint (root origin, no deposit needed) pezpallet_nfts::Pezpallet::::force_mint( T::RuntimeOrigin::from(pezframe_system::RawOrigin::Root), collection_id, @@ -825,12 +793,11 @@ impl Pezpallet { Tiki::Qeydkar => 25, Tiki::ParêzvaneÇandî => 25, Tiki::Sêwirmend => 20, - Tiki::Bazargan => 60, // Yeni eklenen ekonomik rol + Tiki::Bazargan => 60, + Tiki::Pêseng => 80, - // Temel Vatandaşlık ve Diğerleri + // Temel Vatandaşlık Tiki::Welati => 10, - // Yukarıdaki listede olmayan diğer tüm roller 5 puan alır. - _ => 5, } } } @@ -858,7 +825,16 @@ impl pezpallet_identity_kyc::types::CitizenNftProvider item_id, )?; - // Remove from our storage + // Clear unique role mappings before removing roles + let user_tikis = UserTikis::::get(who); + for tiki in user_tikis.iter() { + if Self::is_unique_role(tiki) { + TikiHolder::::remove(tiki); + } + } + + // Remove all roles and citizen NFT mapping + UserTikis::::remove(who); CitizenNft::::remove(who); Ok(()) diff --git a/pezcumulus/teyrchains/pezpallets/tiki/src/mock.rs b/pezcumulus/teyrchains/pezpallets/tiki/src/mock.rs index cc12832f..a5b450da 100644 --- a/pezcumulus/teyrchains/pezpallets/tiki/src/mock.rs +++ b/pezcumulus/teyrchains/pezpallets/tiki/src/mock.rs @@ -204,6 +204,13 @@ impl pezpallet_identity_kyc::types::CitizenNftProvider for MockCitize } } +pub struct DefaultReferrerAccount; +impl pezframe_support::traits::Get for DefaultReferrerAccount { + fn get() -> AccountId { + 100 + } +} + impl pezpallet_identity_kyc::Config for Test { type Currency = Balances; type WeightInfo = (); @@ -214,6 +221,7 @@ impl pezpallet_identity_kyc::Config for Test { type OnKycApproved = MockOnKycApproved; type OnCitizenshipRevoked = MockOnCitizenshipRevoked; type CitizenNftProvider = MockCitizenNftProvider; + type DefaultReferrer = DefaultReferrerAccount; } parameter_types! { diff --git a/pezcumulus/teyrchains/pezpallets/tiki/src/tests.rs b/pezcumulus/teyrchains/pezpallets/tiki/src/tests.rs index 57b4dc18..ec99cf18 100644 --- a/pezcumulus/teyrchains/pezpallets/tiki/src/tests.rs +++ b/pezcumulus/teyrchains/pezpallets/tiki/src/tests.rs @@ -373,8 +373,7 @@ fn scoring_system_comprehensive() { assert_eq!(TikiPallet::get_bonus_for_tiki(&TikiEnum::Feqî), 50); assert_eq!(TikiPallet::get_bonus_for_tiki(&TikiEnum::Welati), 10); - // Test default score for unspecified roles - assert_eq!(TikiPallet::get_bonus_for_tiki(&TikiEnum::Pêseng), 5); + assert_eq!(TikiPallet::get_bonus_for_tiki(&TikiEnum::Pêseng), 80); }); }