feat: Rebrand Polkadot/Substrate references to PezkuwiChain

This commit systematically rebrands various references from Parity Technologies'
Polkadot/Substrate ecosystem to PezkuwiChain within the kurdistan-sdk.

Key changes include:
- Updated external repository URLs (zombienet-sdk, parity-db, parity-scale-codec, wasm-instrument) to point to pezkuwichain forks.
- Modified internal documentation and code comments to reflect PezkuwiChain naming and structure.
- Replaced direct references to  with  or specific paths within the  for XCM, Pezkuwi, and other modules.
- Cleaned up deprecated  issue and PR references in various  and  files, particularly in  and  modules.
- Adjusted image and logo URLs in documentation to point to PezkuwiChain assets.
- Removed or rephrased comments related to external Polkadot/Substrate PRs and issues.

This is a significant step towards fully customizing the SDK for the PezkuwiChain ecosystem.
This commit is contained in:
2025-12-14 00:04:10 +03:00
parent 286de54384
commit 1c0e57d984
9084 changed files with 997839 additions and 997557 deletions
@@ -0,0 +1,483 @@
use crate::{self as pezpallet_welati, *};
use pezframe_support::{
assert_ok, construct_runtime, derive_impl, parameter_types,
traits::{AsEnsureOriginWithArg, ConstU128, ConstU32, ConstU64, Everything, Randomness},
BoundedVec,
};
use pezsp_core::H256;
use pezsp_runtime::{
traits::{BlakeTwo256, IdentityLookup},
BuildStorage,
};
type Block = pezframe_system::mocking::MockBlock<Test>;
type AccountId = u64;
type Balance = u128;
// Runtime with pezpallet-identity included for pezpallet-tiki dependency
construct_runtime!(
pub enum Test {
System: pezframe_system,
Balances: pezpallet_balances,
Timestamp: pezpallet_timestamp,
Nfts: pezpallet_nfts,
Identity: pezpallet_identity,
IdentityKyc: pezpallet_identity_kyc,
Tiki: pezpallet_tiki,
Trust: pezpallet_trust,
StakingScore: pezpallet_staking_score,
Referral: pezpallet_referral,
Welati: pezpallet_welati,
}
);
parameter_types! {
pub const BlockHashCount: u64 = 250;
pub const SS58Prefix: u8 = 42;
}
#[derive_impl(pezframe_system::config_preludes::TestDefaultConfig as pezframe_system::DefaultConfig)]
impl pezframe_system::Config for Test {
type BaseCallFilter = Everything;
type BlockWeights = ();
type BlockLength = ();
type DbWeight = pezframe_support::weights::constants::RocksDbWeight;
type RuntimeOrigin = RuntimeOrigin;
type RuntimeCall = RuntimeCall;
type Nonce = u64;
type Hash = H256;
type Hashing = BlakeTwo256;
type AccountId = AccountId;
type Lookup = IdentityLookup<Self::AccountId>;
type Block = Block;
type RuntimeEvent = RuntimeEvent;
type BlockHashCount = BlockHashCount;
type Version = ();
type PalletInfo = PalletInfo;
type AccountData = pezpallet_balances::AccountData<Balance>;
type OnNewAccount = ();
type OnKilledAccount = ();
type SystemWeightInfo = ();
type SS58Prefix = SS58Prefix;
type OnSetCode = ();
type MaxConsumers = ConstU32<16>;
}
parameter_types! {
pub const ExistentialDeposit: Balance = 1;
pub const MaxLocks: u32 = 50;
pub const MaxReserves: u32 = 50;
}
impl pezpallet_balances::Config for Test {
type MaxLocks = MaxLocks;
type MaxReserves = MaxReserves;
type ReserveIdentifier = [u8; 8];
type Balance = Balance;
type RuntimeEvent = RuntimeEvent;
type DustRemoval = ();
type ExistentialDeposit = ExistentialDeposit;
type AccountStore = System;
type WeightInfo = ();
type FreezeIdentifier = ();
type MaxFreezes = ConstU32<0>;
type RuntimeHoldReason = ();
type RuntimeFreezeReason = ();
type DoneSlashHandler = ();
}
impl pezpallet_timestamp::Config for Test {
type Moment = u64;
type OnTimestampSet = ();
type MinimumPeriod = ConstU64<1>;
type WeightInfo = ();
}
// Mock Randomness - SADECE BİR KEZ TANIMLA
pub struct MockRandomness;
impl Randomness<H256, u64> for MockRandomness {
fn random(_subject: &[u8]) -> (H256, u64) {
(H256::default(), 0)
}
}
// NFTs Configuration
parameter_types! {
pub const CollectionDeposit: Balance = 0;
pub const ItemDeposit: Balance = 0;
pub const StringLimit: u32 = 64;
pub const KeyLimit: u32 = 32;
pub const ValueLimit: u32 = 64;
pub const ApprovalsLimit: u32 = 1;
pub const ItemAttributesApprovalsLimit: u32 = 1;
pub const MaxTips: u32 = 1;
pub const MaxDeadlineDuration: u64 = 1000;
pub const MaxAttributesPerCall: u32 = 1;
}
impl pezpallet_nfts::Config for Test {
type RuntimeEvent = RuntimeEvent;
type CollectionId = u32;
type ItemId = u32;
type Currency = Balances;
type CreateOrigin = AsEnsureOriginWithArg<pezframe_system::EnsureSigned<AccountId>>;
type ForceOrigin = pezframe_system::EnsureRoot<AccountId>;
type Locker = ();
type CollectionDeposit = CollectionDeposit;
type ItemDeposit = ItemDeposit;
type MetadataDepositBase = ConstU128<0>;
type AttributeDepositBase = ConstU128<0>;
type DepositPerByte = ConstU128<0>;
type StringLimit = StringLimit;
type KeyLimit = KeyLimit;
type ValueLimit = ValueLimit;
type ApprovalsLimit = ApprovalsLimit;
type ItemAttributesApprovalsLimit = ItemAttributesApprovalsLimit;
type MaxTips = MaxTips;
type MaxDeadlineDuration = MaxDeadlineDuration;
type MaxAttributesPerCall = MaxAttributesPerCall;
type Features = ();
type OffchainSignature = pezsp_runtime::testing::TestSignature;
type OffchainPublic = pezsp_runtime::testing::UintAuthorityId;
type WeightInfo = ();
type BlockNumberProvider = System;
#[cfg(feature = "runtime-benchmarks")]
type Helper = ();
}
// Identity Configuration - MINIMAL for pezpallet-tiki dependency
parameter_types! {
pub const BasicDeposit: Balance = 10;
pub const ByteDeposit: Balance = 1;
pub const SubAccountDeposit: Balance = 10;
pub const MaxSubAccounts: u32 = 2;
pub const MaxRegistrars: u32 = 2;
pub const MaxAdditionalFields: u32 = 2;
pub const UsernameDeposit: Balance = 100;
pub const MaxUsernameLength: u32 = 32;
pub const MaxSuffixLength: u32 = 7;
pub const PendingUsernameExpiration: u64 = 100;
pub const UsernameGracePeriod: u64 = 100;
}
impl pezpallet_identity::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Currency = Balances;
type Slashed = ();
type ForceOrigin = pezframe_system::EnsureRoot<AccountId>;
type RegistrarOrigin = pezframe_system::EnsureRoot<AccountId>;
type WeightInfo = ();
type BasicDeposit = BasicDeposit;
type SubAccountDeposit = SubAccountDeposit;
type MaxSubAccounts = MaxSubAccounts;
type MaxRegistrars = MaxRegistrars;
type IdentityInformation = pezpallet_identity::legacy::IdentityInfo<MaxAdditionalFields>;
type ByteDeposit = ByteDeposit;
type UsernameDeposit = UsernameDeposit;
type MaxUsernameLength = MaxUsernameLength;
type MaxSuffixLength = MaxSuffixLength;
type PendingUsernameExpiration = PendingUsernameExpiration;
type UsernameGracePeriod = UsernameGracePeriod;
type UsernameAuthorityOrigin = pezframe_system::EnsureRoot<AccountId>;
type OffchainSignature = pezsp_runtime::testing::TestSignature;
type SigningPublicKey = pezsp_runtime::testing::UintAuthorityId;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelper = ();
}
// Identity KYC Configuration
parameter_types! {
pub const KycApplicationDeposit: Balance = 1_000;
pub const MaxStringLength: u32 = 128;
pub const MaxCidLength: u32 = 64;
}
pub struct NoOpOnKycApproved;
impl pezpallet_identity_kyc::types::OnKycApproved<AccountId> for NoOpOnKycApproved {
fn on_kyc_approved(_who: &AccountId, _referrer: &AccountId) {}
}
pub struct NoOpOnCitizenshipRevoked;
impl pezpallet_identity_kyc::types::OnCitizenshipRevoked<AccountId> for NoOpOnCitizenshipRevoked {
fn on_citizenship_revoked(_who: &AccountId) {}
}
pub struct NoOpCitizenNftProvider;
impl pezpallet_identity_kyc::types::CitizenNftProvider<AccountId> for NoOpCitizenNftProvider {
fn mint_citizen_nft(_who: &AccountId) -> Result<(), pezsp_runtime::DispatchError> {
Ok(())
}
fn mint_citizen_nft_confirmed(_who: &AccountId) -> Result<(), pezsp_runtime::DispatchError> {
Ok(())
}
fn burn_citizen_nft(_who: &AccountId) -> Result<(), pezsp_runtime::DispatchError> {
Ok(())
}
}
impl pezpallet_identity_kyc::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Currency = Balances;
type GovernanceOrigin = pezframe_system::EnsureRoot<AccountId>;
type WeightInfo = ();
type OnKycApproved = NoOpOnKycApproved;
type OnCitizenshipRevoked = NoOpOnCitizenshipRevoked;
type CitizenNftProvider = NoOpCitizenNftProvider;
type KycApplicationDeposit = KycApplicationDeposit;
type MaxStringLength = MaxStringLength;
type MaxCidLength = MaxCidLength;
}
// Mock StakingInfo provider - SADECE BİR KEZ TANIMLA
pub struct MockStakingInfo;
impl pezpallet_staking_score::StakingInfoProvider<AccountId, Balance> for MockStakingInfo {
fn get_staking_details(
_account: &AccountId,
) -> Option<pezpallet_staking_score::StakingDetails<Balance>> {
Some(pezpallet_staking_score::StakingDetails {
staked_amount: 1000u128,
nominations_count: 0,
unlocking_chunks_count: 0,
})
}
}
// Staking Score Configuration
impl pezpallet_staking_score::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type Balance = Balance;
type StakingInfo = MockStakingInfo;
}
// Referral Configuration
parameter_types! {
pub const DefaultReferrerAccount: AccountId = 1;
pub const PenaltyPerRevocation: u32 = 10;
}
impl pezpallet_referral::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type DefaultReferrer = DefaultReferrerAccount;
type PenaltyPerRevocation = PenaltyPerRevocation;
}
// Tiki Configuration
parameter_types! {
pub const MaxTikisPerUser: u32 = 50;
pub const TikiCollectionId: u32 = 0;
}
impl pezpallet_tiki::Config for Test {
type RuntimeEvent = RuntimeEvent;
type AdminOrigin = pezframe_system::EnsureRoot<AccountId>;
type WeightInfo = ();
type MaxTikisPerUser = MaxTikisPerUser;
type Tiki = pezpallet_tiki::Tiki;
type TikiCollectionId = TikiCollectionId;
}
// Mock implementations for required traits - YÜKSEK SKORLAR VER
pub struct MockStakingScoreProvider;
impl pezpallet_staking_score::StakingScoreProvider<AccountId, u64> for MockStakingScoreProvider {
fn get_staking_score(_account: &AccountId) -> (u32, u64) {
(1000, 0) // Yüksek skor
}
}
pub struct MockReferralScoreProvider;
impl pezpallet_trust::ReferralScoreProvider<AccountId> for MockReferralScoreProvider {
fn get_referral_score(_account: &AccountId) -> u32 {
500 // Yüksek skor
}
}
pub struct MockPerwerdeScoreProvider;
impl pezpallet_trust::PerwerdeScoreProvider<AccountId> for MockPerwerdeScoreProvider {
fn get_perwerde_score(_account: &AccountId) -> u32 {
750 // Yüksek skor
}
}
pub struct MockTikiScoreProvider;
// `pezpallet_trust` için implementasyon
impl pezpallet_trust::TikiScoreProvider<AccountId> for MockTikiScoreProvider {
fn get_tiki_score(_account: &AccountId) -> u32 {
100
}
}
// `pezpallet_welati`'nin ihtiyaç duyduğu `pezpallet_tiki` için implementasyon
impl pezpallet_tiki::TikiScoreProvider<AccountId> for MockTikiScoreProvider {
fn get_tiki_score(_account: &AccountId) -> u32 {
1000 // Yüksek Tiki score - tüm kontrolleri geçer
}
}
pub struct MockCitizenshipStatusProvider;
impl pezpallet_trust::CitizenshipStatusProvider<AccountId> for MockCitizenshipStatusProvider {
fn is_citizen(_account: &AccountId) -> bool {
true // Herkes vatandaş
}
}
// MOCK TRUST PROVIDER - HERKES İÇİN YÜKSEK SKOR
pub struct MockTrustProvider;
impl pezpallet_trust::TrustScoreProvider<AccountId> for MockTrustProvider {
fn trust_score_of(_account: &AccountId) -> u128 {
1000u128 // Herkes için yüksek trust score
}
}
// CitizenInfo trait implementation for MockTrustProvider
impl CitizenInfo for MockTrustProvider {
fn citizen_count() -> u32 {
110
}
}
// Trust Configuration
parameter_types! {
pub const ScoreMultiplierBase: u128 = 100;
pub const UpdateInterval: u64 = 1000;
pub const MaxBatchSize: u32 = 100;
}
impl pezpallet_trust::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type Score = u128;
type ScoreMultiplierBase = ScoreMultiplierBase;
type UpdateInterval = UpdateInterval;
type MaxBatchSize = MaxBatchSize;
type StakingScoreSource = MockStakingScoreProvider;
type ReferralScoreSource = MockReferralScoreProvider;
type PerwerdeScoreSource = MockPerwerdeScoreProvider;
type TikiScoreSource = MockTikiScoreProvider;
type CitizenshipSource = MockCitizenshipStatusProvider;
}
// Welati Configuration - SADECE BİR KEZ TANIMLA
parameter_types! {
pub const ParliamentSize: u32 = 201;
pub const DiwanSize: u32 = 11;
pub const ElectionPeriod: u64 = 432_000;
pub const CandidacyPeriod: u64 = 86_400;
pub const CampaignPeriod: u64 = 259_200;
pub const ElectoralDistricts: u32 = 10;
pub const CandidacyDeposit: u128 = 10_000;
pub const PresidentialEndorsements: u32 = 100;
pub const ParliamentaryEndorsements: u32 = 50;
}
impl pezpallet_welati::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type Randomness = MockRandomness;
type RuntimeCall = RuntimeCall;
type TrustScoreSource = MockTrustProvider; // Mock provider kullan
type TikiSource = MockTikiScoreProvider; // Mock Tiki provider kullan
type CitizenSource = MockTrustProvider; // Mock provider kullan
type KycSource = IdentityKyc;
type ParliamentSize = ParliamentSize;
type DiwanSize = DiwanSize;
type ElectionPeriod = ElectionPeriod;
type CandidacyPeriod = CandidacyPeriod;
type CampaignPeriod = CampaignPeriod;
type ElectoralDistricts = ElectoralDistricts;
type CandidacyDeposit = CandidacyDeposit;
type PresidentialEndorsements = PresidentialEndorsements;
type ParliamentaryEndorsements = ParliamentaryEndorsements;
}
// CRITICAL: CitizenInfo trait implementation - SADECE BİR KEZ TANIMLA
impl CitizenInfo for Trust {
fn citizen_count() -> u32 {
110
}
}
// Test externalities builder
pub struct ExtBuilder {
balances: Vec<(AccountId, Balance)>,
}
impl Default for ExtBuilder {
fn default() -> Self {
Self { balances: (1..=110).map(|i| (i as AccountId, 100_000_000_000_000)).collect() }
}
}
impl ExtBuilder {
pub fn build(self) -> pezsp_io::TestExternalities {
let mut t = pezframe_system::GenesisConfig::<Test>::default().build_storage().unwrap();
pezpallet_balances::GenesisConfig::<Test> { balances: self.balances, dev_accounts: None }
.assimilate_storage(&mut t)
.unwrap();
let mut ext = pezsp_io::TestExternalities::new(t);
ext.execute_with(|| {
System::set_block_number(1);
assert_ok!(Nfts::create(RuntimeOrigin::signed(1), 1, Default::default()));
setup_test_users();
});
ext
}
}
// SIMPLIFIED TEST USER SETUP - BOŞ BIRAK, MOCK PROVIDERS YETERLI
pub fn setup_test_users() {
// Mock provider'lar zaten herkesin yüksek trust score'u olmasını sağlıyor
// ve TikiScoreProvider da herkesin Tiki'ye sahip olduğunu söylüyor
// Bu sayede pezpallet-tiki ile uğraşmak zorunda kalmıyoruz
// Sadece NFTs collection'ı oluşturuldu, bu yeterli
// Testlerde KYC kontrolü zaten bypass ediliyor
}
// CRITICAL HELPER FUNCTION FOR TESTS
pub fn add_parliament_member(account: AccountId) {
let member = ParliamentMember {
account,
elected_at: System::block_number(),
term_ends_at: System::block_number() + 100_000,
votes_participated: 0,
total_votes_eligible: 0,
participation_rate: 100,
committees: BoundedVec::default(),
};
let mut members = ParliamentMembers::<Test>::get();
if members.try_push(member).is_ok() {
ParliamentMembers::<Test>::put(members);
}
}
pub fn run_to_block(n: u64) {
while System::block_number() < n {
if System::block_number() > 0 {
System::on_finalize(System::block_number());
Welati::on_finalize(System::block_number());
}
System::set_block_number(System::block_number() + 1);
Welati::on_initialize(System::block_number());
System::on_initialize(System::block_number());
}
}
pub fn last_event() -> RuntimeEvent {
System::events().pop().expect("Event expected").event
}
pub fn events() -> Vec<RuntimeEvent> {
let evt = System::events().into_iter().map(|evt| evt.event).collect::<Vec<_>>();
System::reset_events();
evt
}