feat: add Tiki GenesisConfig for Collection 0 bootstrap and XCM creation tools

- Add GenesisConfig to pezpallet-tiki that creates NFT Collection 0 and mints
  NFT #0 for the founding citizen at genesis, solving the chicken-egg problem
  where Collection 0 must exist before any citizenship NFTs can be minted
- Wire founding_citizen parameter through all People Chain genesis presets
  (genesis, local_testnet, dev)
- Add create_nft_collection.rs XCM script for creating Collection 0 on live
  chain via sudo XCM Transact from Relay Chain
- Add comprehensive_test.rs for post-upgrade chain testing
- Fix clippy warnings (map().flatten() -> and_then()) and apply taplo formatting
This commit is contained in:
2026-02-14 04:41:21 +03:00
parent c6b854209e
commit e41c280c8f
8 changed files with 1429 additions and 289 deletions
@@ -26,7 +26,7 @@ pezpallet-nfts = { default-features = false, workspace = true }
pezsp-runtime = { default-features = false, workspace = true }
pezsp-std = { default-features = false, workspace = true }
scale-info = { default-features = false, features = [
"derive",
"derive",
], workspace = true }
serde = { version = "1.0", default-features = false, features = ["derive"] }
@@ -37,44 +37,44 @@ pezsp-io = { workspace = true }
[features]
default = ["std"]
std = [
"codec/std",
"log/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezpallet-balances/std",
"pezpallet-identity-kyc/std",
"pezpallet-identity/std",
"pezpallet-nfts/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
"serde/std",
"codec/std",
"log/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezpallet-balances/std",
"pezpallet-identity-kyc/std",
"pezpallet-identity/std",
"pezpallet-nfts/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
"serde/std",
]
runtime-benchmarks = [
"dep:pezframe-benchmarking",
"dep:pezpallet-balances",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-identity-kyc/runtime-benchmarks",
"pezpallet-identity/runtime-benchmarks",
"pezpallet-nfts/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"dep:pezframe-benchmarking",
"dep:pezpallet-balances",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-identity-kyc/runtime-benchmarks",
"pezpallet-identity/runtime-benchmarks",
"pezpallet-nfts/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-benchmarking?/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-identity-kyc/try-runtime",
"pezpallet-identity/try-runtime",
"pezpallet-nfts/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-benchmarking?/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-identity-kyc/try-runtime",
"pezpallet-identity/try-runtime",
"pezpallet-nfts/try-runtime",
"pezsp-runtime/try-runtime",
]
serde = []
experimental = []
@@ -343,6 +343,78 @@ pub mod pezpallet {
// Citizenship NFT minting is handled by CitizenNftProvider hooks,
// no per-block scanning needed.
// ============= GENESIS CONFIG =============
/// Genesis configuration for bootstrapping Collection 0 and founding citizen NFT.
///
/// When `founding_citizen` is `Some(account)`, genesis will:
/// 1. Create NFT Collection 0 in pezpallet_nfts (with DepositRequired disabled)
/// 2. Mint NFT Item #0 for the founding citizen
/// 3. Populate CitizenNft, NextItemId, and UserTikis storage
#[pezpallet::genesis_config]
#[derive(pezframe_support::DefaultNoBound)]
pub struct GenesisConfig<T: Config> {
/// Optional founding citizen who receives NFT #0 at genesis.
/// If None, Collection 0 is NOT created (must be created via sudo later).
pub founding_citizen: Option<T::AccountId>,
}
#[pezpallet::genesis_build]
impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
fn build(&self) {
use pezsp_runtime::traits::Zero;
let collection_id = T::TikiCollectionId::get();
if let Some(ref founder) = self.founding_citizen {
// Step 1: Create Collection 0 in pezpallet_nfts
// Disable DepositRequired so genesis minting doesn't need balance
let collection_config = pezpallet_nfts::CollectionConfig {
settings: pezpallet_nfts::CollectionSettings(
pezpallet_nfts::CollectionSetting::DepositRequired.into(),
),
max_supply: None,
mint_settings: Default::default(),
};
pezpallet_nfts::Pezpallet::<T>::do_create_collection(
collection_id,
founder.clone(),
founder.clone(),
collection_config,
Zero::zero(),
pezpallet_nfts::Event::ForceCreated {
collection: collection_id,
owner: founder.clone(),
},
)
.expect("Tiki genesis: failed to create Collection 0");
// Step 2: Mint NFT #0 for the founding citizen
let item_config = pezpallet_nfts::ItemConfig {
settings: pezpallet_nfts::ItemSettings::all_enabled(),
};
pezpallet_nfts::Pezpallet::<T>::do_mint(
collection_id,
0u32,
None,
founder.clone(),
item_config,
|_, _| Ok(()),
)
.expect("Tiki genesis: failed to mint NFT #0");
// Step 3: Update Tiki storage
CitizenNft::<T>::insert(founder, 0u32);
NextItemId::<T>::put(1u32);
UserTikis::<T>::mutate(founder, |tikis| {
let _ = tikis.try_push(Tiki::Welati);
});
}
}
}
#[pezpallet::call]
impl<T: Config> Pezpallet<T> {
/// Admin tarafından belirli bir kullanıcıya Tiki (rol) verme
@@ -68,7 +68,7 @@ construct_runtime!(
Identity: pezpallet_identity::{Pezpallet, Call, Storage, Event<T>},
IdentityKyc: pezpallet_identity_kyc::{Pezpallet, Call, Storage, Event<T>},
Nfts: pezpallet_nfts::{Pezpallet, Call, Storage, Event<T>},
Tiki: pezpallet_tiki::{Pezpallet, Call, Storage, Event<T>},
Tiki: pezpallet_tiki::{Pezpallet, Call, Config<T>, Storage, Event<T>},
}
);
@@ -19,7 +19,7 @@ enumflags2 = { workspace = true }
hex-literal = { workspace = true }
scale-info = { features = ["derive"], workspace = true }
serde = { optional = true, features = [
"derive",
"derive",
], workspace = true, default-features = true }
serde_json = { features = ["alloc"], workspace = true }
tracing = { workspace = true }
@@ -114,240 +114,240 @@ bizinikiwi-wasm-builder = { optional = true, workspace = true, default-features
[features]
default = ["std"]
std = [
"bizinikiwi-wasm-builder",
"bizinikiwi-wasm-builder?/std",
"codec/std",
"enumflags2/std",
"pezcumulus-pezpallet-aura-ext/std",
"pezcumulus-pezpallet-session-benchmarking/std",
"pezcumulus-pezpallet-teyrchain-system/std",
"pezcumulus-pezpallet-weight-reclaim/std",
"pezcumulus-pezpallet-xcm/std",
"pezcumulus-pezpallet-xcmp-queue/std",
"pezcumulus-primitives-aura/std",
"pezcumulus-primitives-core/std",
"pezcumulus-primitives-utility/std",
"pezframe-benchmarking?/std",
"pezframe-executive/std",
"pezframe-support/std",
"pezframe-system-benchmarking?/std",
"pezframe-system-rpc-runtime-api/std",
"pezframe-system/std",
"pezframe-try-runtime?/std",
"pezkuwi-primitives/std",
"pezkuwi-runtime-common/std",
"pezkuwi-teyrchain-primitives/std",
"pezkuwichain-runtime-constants/std",
"pezpallet-assets/std",
"pezpallet-aura/std",
"pezpallet-authorship/std",
"pezpallet-balances/std",
"pezpallet-collator-selection/std",
"pezpallet-collective/std",
"pezpallet-democracy/std",
"pezpallet-elections-phragmen/std",
"pezpallet-identity-kyc/std",
"pezpallet-identity/std",
"pezpallet-message-queue/std",
"pezpallet-migrations/std",
"pezpallet-multisig/std",
"pezpallet-nfts/std",
"pezpallet-perwerde/std",
"pezpallet-pez-rewards/std",
"pezpallet-proxy/std",
"pezpallet-recovery/std",
"pezpallet-referral/std",
"pezpallet-scheduler/std",
"pezpallet-session/std",
"pezpallet-skip-feeless-payment/std",
"pezpallet-society/std",
"pezpallet-staking-score/std",
"pezpallet-tiki/std",
"pezpallet-timestamp/std",
"pezpallet-transaction-payment-rpc-runtime-api/std",
"pezpallet-transaction-payment/std",
"pezpallet-trust/std",
"pezpallet-utility/std",
"pezpallet-vesting/std",
"pezpallet-welati/std",
"pezpallet-xcm-benchmarks?/std",
"pezpallet-xcm/std",
"pezsp-api/std",
"pezsp-block-builder/std",
"pezsp-consensus-aura/std",
"pezsp-core/std",
"pezsp-genesis-builder/std",
"pezsp-inherents/std",
"pezsp-keyring/std",
"pezsp-offchain/std",
"pezsp-runtime/std",
"pezsp-session/std",
"pezsp-staking/std",
"pezsp-storage/std",
"pezsp-transaction-pool/std",
"pezsp-version/std",
"scale-info/std",
"serde",
"serde_json/std",
"testnet-teyrchains-constants/std",
"teyrchain-info/std",
"teyrchains-common/std",
"tracing/std",
"xcm-builder/std",
"xcm-executor/std",
"xcm-runtime-pezapis/std",
"xcm/std",
"bizinikiwi-wasm-builder",
"bizinikiwi-wasm-builder?/std",
"codec/std",
"enumflags2/std",
"pezcumulus-pezpallet-aura-ext/std",
"pezcumulus-pezpallet-session-benchmarking/std",
"pezcumulus-pezpallet-teyrchain-system/std",
"pezcumulus-pezpallet-weight-reclaim/std",
"pezcumulus-pezpallet-xcm/std",
"pezcumulus-pezpallet-xcmp-queue/std",
"pezcumulus-primitives-aura/std",
"pezcumulus-primitives-core/std",
"pezcumulus-primitives-utility/std",
"pezframe-benchmarking?/std",
"pezframe-executive/std",
"pezframe-support/std",
"pezframe-system-benchmarking?/std",
"pezframe-system-rpc-runtime-api/std",
"pezframe-system/std",
"pezframe-try-runtime?/std",
"pezkuwi-primitives/std",
"pezkuwi-runtime-common/std",
"pezkuwi-teyrchain-primitives/std",
"pezkuwichain-runtime-constants/std",
"pezpallet-assets/std",
"pezpallet-aura/std",
"pezpallet-authorship/std",
"pezpallet-balances/std",
"pezpallet-collator-selection/std",
"pezpallet-collective/std",
"pezpallet-democracy/std",
"pezpallet-elections-phragmen/std",
"pezpallet-identity-kyc/std",
"pezpallet-identity/std",
"pezpallet-message-queue/std",
"pezpallet-migrations/std",
"pezpallet-multisig/std",
"pezpallet-nfts/std",
"pezpallet-perwerde/std",
"pezpallet-pez-rewards/std",
"pezpallet-proxy/std",
"pezpallet-recovery/std",
"pezpallet-referral/std",
"pezpallet-scheduler/std",
"pezpallet-session/std",
"pezpallet-skip-feeless-payment/std",
"pezpallet-society/std",
"pezpallet-staking-score/std",
"pezpallet-tiki/std",
"pezpallet-timestamp/std",
"pezpallet-transaction-payment-rpc-runtime-api/std",
"pezpallet-transaction-payment/std",
"pezpallet-trust/std",
"pezpallet-utility/std",
"pezpallet-vesting/std",
"pezpallet-welati/std",
"pezpallet-xcm-benchmarks?/std",
"pezpallet-xcm/std",
"pezsp-api/std",
"pezsp-block-builder/std",
"pezsp-consensus-aura/std",
"pezsp-core/std",
"pezsp-genesis-builder/std",
"pezsp-inherents/std",
"pezsp-keyring/std",
"pezsp-offchain/std",
"pezsp-runtime/std",
"pezsp-session/std",
"pezsp-staking/std",
"pezsp-storage/std",
"pezsp-transaction-pool/std",
"pezsp-version/std",
"scale-info/std",
"serde",
"serde_json/std",
"testnet-teyrchains-constants/std",
"teyrchain-info/std",
"teyrchains-common/std",
"tracing/std",
"xcm-builder/std",
"xcm-executor/std",
"xcm-runtime-pezapis/std",
"xcm/std",
]
runtime-benchmarks = [
"bizinikiwi-wasm-builder?/runtime-benchmarks",
"pezcumulus-pezpallet-aura-ext/runtime-benchmarks",
"pezcumulus-pezpallet-session-benchmarking/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezcumulus-pezpallet-weight-reclaim/runtime-benchmarks",
"pezcumulus-pezpallet-xcm/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"pezcumulus-primitives-aura/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezcumulus-primitives-utility/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-executive/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system-benchmarking/runtime-benchmarks",
"pezframe-system-rpc-runtime-api/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezframe-try-runtime?/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezkuwi-runtime-common/runtime-benchmarks",
"pezkuwi-teyrchain-primitives/runtime-benchmarks",
"pezkuwichain-runtime-constants/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-aura/runtime-benchmarks",
"pezpallet-authorship/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-collator-selection/runtime-benchmarks",
"pezpallet-collective/runtime-benchmarks",
"pezpallet-democracy/runtime-benchmarks",
"pezpallet-elections-phragmen/runtime-benchmarks",
"pezpallet-identity-kyc/runtime-benchmarks",
"pezpallet-identity/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-migrations/runtime-benchmarks",
"pezpallet-multisig/runtime-benchmarks",
"pezpallet-nfts/runtime-benchmarks",
"pezpallet-perwerde/runtime-benchmarks",
"pezpallet-pez-rewards/runtime-benchmarks",
"pezpallet-proxy/runtime-benchmarks",
"pezpallet-recovery/runtime-benchmarks",
"pezpallet-referral/runtime-benchmarks",
"pezpallet-scheduler/runtime-benchmarks",
"pezpallet-session/runtime-benchmarks",
"pezpallet-skip-feeless-payment/runtime-benchmarks",
"pezpallet-society/runtime-benchmarks",
"pezpallet-staking-score/runtime-benchmarks",
"pezpallet-tiki/runtime-benchmarks",
"pezpallet-timestamp/runtime-benchmarks",
"pezpallet-transaction-payment-rpc-runtime-api/runtime-benchmarks",
"pezpallet-transaction-payment/runtime-benchmarks",
"pezpallet-trust/runtime-benchmarks",
"pezpallet-utility/runtime-benchmarks",
"pezpallet-vesting/runtime-benchmarks",
"pezpallet-welati/runtime-benchmarks",
"pezpallet-xcm-benchmarks/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsp-api/runtime-benchmarks",
"pezsp-block-builder/runtime-benchmarks",
"pezsp-consensus-aura/runtime-benchmarks",
"pezsp-genesis-builder/runtime-benchmarks",
"pezsp-inherents/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"pezsp-offchain/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezsp-session/runtime-benchmarks",
"pezsp-staking/runtime-benchmarks",
"pezsp-transaction-pool/runtime-benchmarks",
"pezsp-version/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchain-info/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"teyrchains-runtimes-test-utils/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm-runtime-pezapis/runtime-benchmarks",
"xcm/runtime-benchmarks",
"bizinikiwi-wasm-builder?/runtime-benchmarks",
"pezcumulus-pezpallet-aura-ext/runtime-benchmarks",
"pezcumulus-pezpallet-session-benchmarking/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezcumulus-pezpallet-weight-reclaim/runtime-benchmarks",
"pezcumulus-pezpallet-xcm/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"pezcumulus-primitives-aura/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezcumulus-primitives-utility/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-executive/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system-benchmarking/runtime-benchmarks",
"pezframe-system-rpc-runtime-api/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezframe-try-runtime?/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezkuwi-runtime-common/runtime-benchmarks",
"pezkuwi-teyrchain-primitives/runtime-benchmarks",
"pezkuwichain-runtime-constants/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-aura/runtime-benchmarks",
"pezpallet-authorship/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-collator-selection/runtime-benchmarks",
"pezpallet-collective/runtime-benchmarks",
"pezpallet-democracy/runtime-benchmarks",
"pezpallet-elections-phragmen/runtime-benchmarks",
"pezpallet-identity-kyc/runtime-benchmarks",
"pezpallet-identity/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-migrations/runtime-benchmarks",
"pezpallet-multisig/runtime-benchmarks",
"pezpallet-nfts/runtime-benchmarks",
"pezpallet-perwerde/runtime-benchmarks",
"pezpallet-pez-rewards/runtime-benchmarks",
"pezpallet-proxy/runtime-benchmarks",
"pezpallet-recovery/runtime-benchmarks",
"pezpallet-referral/runtime-benchmarks",
"pezpallet-scheduler/runtime-benchmarks",
"pezpallet-session/runtime-benchmarks",
"pezpallet-skip-feeless-payment/runtime-benchmarks",
"pezpallet-society/runtime-benchmarks",
"pezpallet-staking-score/runtime-benchmarks",
"pezpallet-tiki/runtime-benchmarks",
"pezpallet-timestamp/runtime-benchmarks",
"pezpallet-transaction-payment-rpc-runtime-api/runtime-benchmarks",
"pezpallet-transaction-payment/runtime-benchmarks",
"pezpallet-trust/runtime-benchmarks",
"pezpallet-utility/runtime-benchmarks",
"pezpallet-vesting/runtime-benchmarks",
"pezpallet-welati/runtime-benchmarks",
"pezpallet-xcm-benchmarks/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsp-api/runtime-benchmarks",
"pezsp-block-builder/runtime-benchmarks",
"pezsp-consensus-aura/runtime-benchmarks",
"pezsp-genesis-builder/runtime-benchmarks",
"pezsp-inherents/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"pezsp-offchain/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezsp-session/runtime-benchmarks",
"pezsp-staking/runtime-benchmarks",
"pezsp-transaction-pool/runtime-benchmarks",
"pezsp-version/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchain-info/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"teyrchains-runtimes-test-utils/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm-runtime-pezapis/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
try-runtime = [
"pezcumulus-pezpallet-aura-ext/try-runtime",
"pezcumulus-pezpallet-session-benchmarking/try-runtime",
"pezcumulus-pezpallet-teyrchain-system/try-runtime",
"pezcumulus-pezpallet-weight-reclaim/try-runtime",
"pezcumulus-pezpallet-xcm/try-runtime",
"pezcumulus-pezpallet-xcmp-queue/try-runtime",
"pezcumulus-primitives-core/try-runtime",
"pezcumulus-primitives-utility/try-runtime",
"pezframe-benchmarking?/try-runtime",
"pezframe-executive/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system-benchmarking?/try-runtime",
"pezframe-system/try-runtime",
"pezframe-try-runtime/try-runtime",
"pezkuwi-primitives/try-runtime",
"pezkuwi-runtime-common/try-runtime",
"pezkuwi-teyrchain-primitives/try-runtime",
"pezkuwichain-runtime-constants/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-aura/try-runtime",
"pezpallet-authorship/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-collator-selection/try-runtime",
"pezpallet-collective/try-runtime",
"pezpallet-democracy/try-runtime",
"pezpallet-elections-phragmen/try-runtime",
"pezpallet-identity-kyc/try-runtime",
"pezpallet-identity/try-runtime",
"pezpallet-message-queue/try-runtime",
"pezpallet-migrations/try-runtime",
"pezpallet-multisig/try-runtime",
"pezpallet-nfts/try-runtime",
"pezpallet-perwerde/try-runtime",
"pezpallet-pez-rewards/try-runtime",
"pezpallet-proxy/try-runtime",
"pezpallet-recovery/try-runtime",
"pezpallet-referral/try-runtime",
"pezpallet-scheduler/try-runtime",
"pezpallet-session/try-runtime",
"pezpallet-skip-feeless-payment/try-runtime",
"pezpallet-society/try-runtime",
"pezpallet-staking-score/try-runtime",
"pezpallet-tiki/try-runtime",
"pezpallet-timestamp/try-runtime",
"pezpallet-transaction-payment-rpc-runtime-api/try-runtime",
"pezpallet-transaction-payment/try-runtime",
"pezpallet-trust/try-runtime",
"pezpallet-utility/try-runtime",
"pezpallet-vesting/try-runtime",
"pezpallet-welati/try-runtime",
"pezpallet-xcm-benchmarks?/try-runtime",
"pezpallet-xcm/try-runtime",
"pezsp-api/try-runtime",
"pezsp-block-builder/try-runtime",
"pezsp-consensus-aura/try-runtime",
"pezsp-genesis-builder/try-runtime",
"pezsp-inherents/try-runtime",
"pezsp-keyring/try-runtime",
"pezsp-offchain/try-runtime",
"pezsp-runtime/try-runtime",
"pezsp-session/try-runtime",
"pezsp-staking/try-runtime",
"pezsp-transaction-pool/try-runtime",
"pezsp-version/try-runtime",
"testnet-teyrchains-constants/try-runtime",
"teyrchain-info/try-runtime",
"teyrchains-common/try-runtime",
"teyrchains-runtimes-test-utils/try-runtime",
"xcm-builder/try-runtime",
"xcm-executor/try-runtime",
"xcm-runtime-pezapis/try-runtime",
"xcm/try-runtime",
"pezcumulus-pezpallet-aura-ext/try-runtime",
"pezcumulus-pezpallet-session-benchmarking/try-runtime",
"pezcumulus-pezpallet-teyrchain-system/try-runtime",
"pezcumulus-pezpallet-weight-reclaim/try-runtime",
"pezcumulus-pezpallet-xcm/try-runtime",
"pezcumulus-pezpallet-xcmp-queue/try-runtime",
"pezcumulus-primitives-core/try-runtime",
"pezcumulus-primitives-utility/try-runtime",
"pezframe-benchmarking?/try-runtime",
"pezframe-executive/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system-benchmarking?/try-runtime",
"pezframe-system/try-runtime",
"pezframe-try-runtime/try-runtime",
"pezkuwi-primitives/try-runtime",
"pezkuwi-runtime-common/try-runtime",
"pezkuwi-teyrchain-primitives/try-runtime",
"pezkuwichain-runtime-constants/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-aura/try-runtime",
"pezpallet-authorship/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-collator-selection/try-runtime",
"pezpallet-collective/try-runtime",
"pezpallet-democracy/try-runtime",
"pezpallet-elections-phragmen/try-runtime",
"pezpallet-identity-kyc/try-runtime",
"pezpallet-identity/try-runtime",
"pezpallet-message-queue/try-runtime",
"pezpallet-migrations/try-runtime",
"pezpallet-multisig/try-runtime",
"pezpallet-nfts/try-runtime",
"pezpallet-perwerde/try-runtime",
"pezpallet-pez-rewards/try-runtime",
"pezpallet-proxy/try-runtime",
"pezpallet-recovery/try-runtime",
"pezpallet-referral/try-runtime",
"pezpallet-scheduler/try-runtime",
"pezpallet-session/try-runtime",
"pezpallet-skip-feeless-payment/try-runtime",
"pezpallet-society/try-runtime",
"pezpallet-staking-score/try-runtime",
"pezpallet-tiki/try-runtime",
"pezpallet-timestamp/try-runtime",
"pezpallet-transaction-payment-rpc-runtime-api/try-runtime",
"pezpallet-transaction-payment/try-runtime",
"pezpallet-trust/try-runtime",
"pezpallet-utility/try-runtime",
"pezpallet-vesting/try-runtime",
"pezpallet-welati/try-runtime",
"pezpallet-xcm-benchmarks?/try-runtime",
"pezpallet-xcm/try-runtime",
"pezsp-api/try-runtime",
"pezsp-block-builder/try-runtime",
"pezsp-consensus-aura/try-runtime",
"pezsp-genesis-builder/try-runtime",
"pezsp-inherents/try-runtime",
"pezsp-keyring/try-runtime",
"pezsp-offchain/try-runtime",
"pezsp-runtime/try-runtime",
"pezsp-session/try-runtime",
"pezsp-staking/try-runtime",
"pezsp-transaction-pool/try-runtime",
"pezsp-version/try-runtime",
"testnet-teyrchains-constants/try-runtime",
"teyrchain-info/try-runtime",
"teyrchains-common/try-runtime",
"teyrchains-runtimes-test-utils/try-runtime",
"xcm-builder/try-runtime",
"xcm-executor/try-runtime",
"xcm-runtime-pezapis/try-runtime",
"xcm/try-runtime",
]
# A feature that should be enabled when the runtime should be built for on-chain
@@ -355,26 +355,26 @@ try-runtime = [
# to make it smaller, like logging for example.
on-chain-release-build = []
serde = [
"codec/serde",
"dep:serde",
"enumflags2/serde",
"pezframe-benchmarking?/serde",
"pezpallet-democracy/serde",
"pezpallet-message-queue/serde",
"pezpallet-perwerde/serde",
"pezpallet-pez-rewards/serde",
"pezpallet-staking-score/serde",
"pezpallet-transaction-payment/serde",
"pezpallet-trust/serde",
"pezpallet-welati/serde",
"pezpallet-xcm/serde",
"pezsp-consensus-aura/serde",
"pezsp-core/serde",
"pezsp-runtime/serde",
"pezsp-staking/serde",
"pezsp-storage/serde",
"pezsp-version/serde",
"scale-info/serde",
"codec/serde",
"dep:serde",
"enumflags2/serde",
"pezframe-benchmarking?/serde",
"pezpallet-democracy/serde",
"pezpallet-message-queue/serde",
"pezpallet-perwerde/serde",
"pezpallet-pez-rewards/serde",
"pezpallet-staking-score/serde",
"pezpallet-transaction-payment/serde",
"pezpallet-trust/serde",
"pezpallet-welati/serde",
"pezpallet-xcm/serde",
"pezsp-consensus-aura/serde",
"pezsp-core/serde",
"pezsp-runtime/serde",
"pezsp-staking/serde",
"pezsp-storage/serde",
"pezsp-version/serde",
"scale-info/serde",
]
experimental = []
with-tracing = []
@@ -56,12 +56,14 @@ fn default_founding_citizen_identity_hash() -> H256 {
/// - `endowment`: HEZ amount for each endowed account
/// - `id`: Parachain ID
/// - `founding_citizens`: Accounts that start as Approved citizens (can accept referrals)
/// - `founding_citizen`: The account that receives NFT #0 and Collection 0 ownership
fn people_pezkuwichain_genesis(
invulnerables: Vec<(AccountId, AuraId)>,
endowed_accounts: Vec<AccountId>,
endowment: Balance,
id: ParaId,
founding_citizens: Vec<(AccountId, H256)>,
founding_citizen: Option<AccountId>,
) -> serde_json::Value {
build_struct_json_patch!(RuntimeGenesisConfig {
balances: BalancesConfig {
@@ -92,6 +94,13 @@ fn people_pezkuwichain_genesis(
// These accounts start with Approved status and can accept referrals immediately
// This solves the chicken-egg problem: first citizens need to exist for others to join
identity_kyc: IdentityKycConfig { founding_citizens, _phantom: Default::default() },
// ====================================================================
// Tiki - NFT Collection 0 + Founding Citizen NFT #0
// ====================================================================
// Creates Collection 0 in pezpallet_nfts and mints NFT #0 for the founder
// This is required before any citizenship NFTs can be minted
tiki: TikiConfig { founding_citizen },
})
}
@@ -137,7 +146,9 @@ pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
PEOPLE_PEZKUWICHAIN_ED * 524_288,
PEOPLE_PARA_ID,
// Founding citizens: Founder starts as Approved citizen
vec![(founder_account, default_founding_citizen_identity_hash())],
vec![(founder_account.clone(), default_founding_citizen_identity_hash())],
// Founding citizen gets NFT #0 and Collection 0 ownership
Some(founder_account),
)
},
@@ -158,6 +169,8 @@ pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
(Sr25519Keyring::Alice.to_account_id(), default_founding_citizen_identity_hash()),
(Sr25519Keyring::Bob.to_account_id(), default_founding_citizen_identity_hash()),
],
// Alice gets NFT #0 for testing
Some(Sr25519Keyring::Alice.to_account_id()),
),
// ====================================================================
@@ -176,6 +189,8 @@ pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
PEOPLE_PARA_ID,
// Founding citizen: Alice is the founding citizen for dev
vec![(Sr25519Keyring::Alice.to_account_id(), default_founding_citizen_identity_hash())],
// Alice gets NFT #0 for dev
Some(Sr25519Keyring::Alice.to_account_id()),
),
_ => return None,