fix: Resolve cargo clippy errors and add CI workflow plan

## Changes

### Clippy Fixes
- Fixed deprecated `cargo_bin` usage in 27 test files (added #![allow(deprecated)])
- Fixed uninlined_format_args in zombienet-sdk-tests
- Fixed subxt API changes in revive/rpc/tests.rs (fetch signature, StorageValue)
- Fixed dead_code warnings in validator-pool and identity-kyc mocks
- Fixed field name `i` -> `_i` in tasks example

### CI Infrastructure
- Added .claude/WORKFLOW_PLAN.md for tracking CI fix progress
- Updated lychee.toml and taplo.toml configs

### Files Modified
- 27 test files with deprecated cargo_bin fix
- bizinikiwi/pezframe/revive/rpc/src/tests.rs (subxt API)
- pezkuwi/pezpallets/validator-pool/src/{mock,tests}.rs
- pezcumulus/teyrchains/pezpallets/identity-kyc/src/mock.rs
- bizinikiwi/pezframe/examples/tasks/src/tests.rs

## Status
- cargo clippy: PASSING
- Next: cargo fmt, zepter, workspace checks
This commit is contained in:
2025-12-22 16:36:14 +03:00
parent 8acf59c6aa
commit 65b7f5e640
1393 changed files with 17834 additions and 179151 deletions
+58 -58
View File
@@ -35,9 +35,9 @@ pezsp-io = { workspace = true }
pezsp-runtime = { workspace = true }
# Pezkuwi
pezpallet-xcm = { workspace = true }
pezkuwi-primitives = { workspace = true }
pezkuwi-runtime-common = { workspace = true }
pezpallet-xcm = { workspace = true }
xcm = { workspace = true }
xcm-executor = { workspace = true }
@@ -50,66 +50,66 @@ teyrchain-info = { workspace = true }
[features]
default = ["std"]
std = [
"codec/std",
"pezcumulus-primitives-core/std",
"pezcumulus-primitives-utility/std",
"pezframe-support/std",
"pezframe-system/std",
"pezpallet-asset-tx-payment/std",
"pezpallet-assets/std",
"pezpallet-authorship/std",
"pezpallet-balances/std",
"pezpallet-collator-selection/std",
"pezpallet-message-queue/std",
"pezpallet-treasury/std",
"pezpallet-xcm/std",
"pezkuwi-primitives/std",
"pezkuwi-runtime-common/std",
"scale-info/std",
"pezsp-consensus-aura/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"teyrchain-info/std",
"tracing/std",
"xcm-executor/std",
"xcm/std",
"codec/std",
"pezcumulus-primitives-core/std",
"pezcumulus-primitives-utility/std",
"pezframe-support/std",
"pezframe-system/std",
"pezkuwi-primitives/std",
"pezkuwi-runtime-common/std",
"pezpallet-asset-tx-payment/std",
"pezpallet-assets/std",
"pezpallet-authorship/std",
"pezpallet-balances/std",
"pezpallet-collator-selection/std",
"pezpallet-message-queue/std",
"pezpallet-treasury/std",
"pezpallet-xcm/std",
"pezsp-consensus-aura/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"scale-info/std",
"teyrchain-info/std",
"tracing/std",
"xcm-executor/std",
"xcm/std",
]
runtime-benchmarks = [
"pezcumulus-primitives-core/runtime-benchmarks",
"pezcumulus-primitives-utility/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-asset-tx-payment/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-authorship/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-collator-selection/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-treasury/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezkuwi-runtime-common/runtime-benchmarks",
"pezsp-consensus-aura/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchain-info/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezcumulus-primitives-utility/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezkuwi-runtime-common/runtime-benchmarks",
"pezpallet-asset-tx-payment/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-authorship/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-collator-selection/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-treasury/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsp-consensus-aura/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchain-info/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-asset-tx-payment/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-authorship/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-collator-selection/try-runtime",
"pezpallet-message-queue/try-runtime",
"pezpallet-treasury/try-runtime",
"pezpallet-xcm/try-runtime",
"pezkuwi-runtime-common/try-runtime",
"pezsp-runtime/try-runtime",
"teyrchain-info/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezkuwi-runtime-common/try-runtime",
"pezpallet-asset-tx-payment/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-authorship/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-collator-selection/try-runtime",
"pezpallet-message-queue/try-runtime",
"pezpallet-treasury/try-runtime",
"pezpallet-xcm/try-runtime",
"pezsp-runtime/try-runtime",
"teyrchain-info/try-runtime",
]
@@ -33,14 +33,14 @@ teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"emulated-integration-tests-common/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezkuwichain-runtime-constants/runtime-benchmarks",
"pezkuwichain-runtime/runtime-benchmarks",
"pezsc-consensus-grandpa/runtime-benchmarks",
"pezsp-authority-discovery/runtime-benchmarks",
"pezsp-consensus-babe/runtime-benchmarks",
"pezsp-consensus-beefy/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezkuwichain-runtime-constants/runtime-benchmarks",
"pezkuwichain-runtime/runtime-benchmarks",
"pezsc-consensus-grandpa/runtime-benchmarks",
"pezsp-authority-discovery/runtime-benchmarks",
"pezsp-consensus-babe/runtime-benchmarks",
"pezsp-consensus-beefy/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
]
@@ -38,6 +38,7 @@ decl_test_relay_chains! {
Sudo: pezkuwichain_runtime::Sudo,
Balances: pezkuwichain_runtime::Balances,
Hrmp: pezkuwichain_runtime::Hrmp,
Treasury: pezkuwichain_runtime::Treasury,
}
},
}
@@ -34,15 +34,15 @@ teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"emulated-integration-tests-common/runtime-benchmarks",
"pezpallet-staking/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezsc-consensus-grandpa/runtime-benchmarks",
"pezsp-authority-discovery/runtime-benchmarks",
"pezsp-consensus-babe/runtime-benchmarks",
"pezsp-consensus-beefy/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"zagros-runtime-constants/runtime-benchmarks",
"zagros-runtime/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezpallet-staking/runtime-benchmarks",
"pezsc-consensus-grandpa/runtime-benchmarks",
"pezsp-authority-discovery/runtime-benchmarks",
"pezsp-consensus-babe/runtime-benchmarks",
"pezsp-consensus-beefy/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"zagros-runtime-constants/runtime-benchmarks",
"zagros-runtime/runtime-benchmarks",
]
@@ -21,11 +21,11 @@ pezsp-keyring = { workspace = true }
# Pezcumulus
asset-hub-pezkuwichain-runtime = { workspace = true, default-features = true }
pezcumulus-primitives-core = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pezcumulus-primitives-core = { workspace = true }
pezkuwichain-emulated-chain = { workspace = true }
testnet-teyrchains-constants = { features = [
"pezkuwichain",
"pezkuwichain",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
@@ -38,15 +38,15 @@ bp-bridge-hub-pezkuwichain = { workspace = true }
[features]
runtime-benchmarks = [
"asset-hub-pezkuwichain-runtime/runtime-benchmarks",
"bp-bridge-hub-pezkuwichain/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezkuwichain-emulated-chain/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm/runtime-benchmarks",
"asset-hub-pezkuwichain-runtime/runtime-benchmarks",
"bp-bridge-hub-pezkuwichain/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezkuwichain-emulated-chain/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -71,7 +71,7 @@ impl_foreign_assets_helpers_for_teyrchain!(
impl_xcm_helpers_for_teyrchain!(AssetHubPezkuwichain);
impl_bridge_helpers_for_chain!(
AssetHubPezkuwichain,
ParaPallet,
ParaPezpallet,
PezkuwiXcm,
bp_bridge_hub_pezkuwichain::RuntimeCall::XcmOverBridgeHubZagros
);
@@ -21,10 +21,10 @@ pezsp-keyring = { workspace = true }
# Pezcumulus
asset-hub-zagros-runtime = { workspace = true, default-features = true }
pezcumulus-primitives-core = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pezcumulus-primitives-core = { workspace = true }
testnet-teyrchains-constants = { features = [
"zagros",
"zagros",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
zagros-emulated-chain = { workspace = true, default-features = true }
@@ -38,15 +38,15 @@ bp-bridge-hub-zagros = { workspace = true }
[features]
runtime-benchmarks = [
"asset-hub-zagros-runtime/runtime-benchmarks",
"bp-bridge-hub-zagros/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-emulated-chain/runtime-benchmarks",
"asset-hub-zagros-runtime/runtime-benchmarks",
"bp-bridge-hub-zagros/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-emulated-chain/runtime-benchmarks",
]
@@ -73,7 +73,7 @@ impl_foreign_assets_helpers_for_teyrchain!(
impl_xcm_helpers_for_teyrchain!(AssetHubZagros);
impl_bridge_helpers_for_chain!(
AssetHubZagros,
ParaPallet,
ParaPezpallet,
PezkuwiXcm,
bp_bridge_hub_zagros::RuntimeCall::XcmOverBridgeHubPezkuwichain
);
@@ -20,19 +20,19 @@ pezsp-core = { workspace = true }
# Pezcumulus
collectives-zagros-runtime = { workspace = true }
pezcumulus-primitives-core = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pezcumulus-primitives-core = { workspace = true }
testnet-teyrchains-constants = { features = [
"zagros",
"zagros",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"collectives-zagros-runtime/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"collectives-zagros-runtime/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
]
@@ -20,19 +20,19 @@ pezsp-core = { workspace = true }
# Pezcumulus
coretime-pezkuwichain-runtime = { workspace = true, default-features = true }
pezcumulus-primitives-core = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pezcumulus-primitives-core = { workspace = true }
testnet-teyrchains-constants = { features = [
"pezkuwichain",
"pezkuwichain",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"coretime-pezkuwichain-runtime/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"coretime-pezkuwichain-runtime/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
]
@@ -20,19 +20,19 @@ pezsp-core = { workspace = true }
# Pezcumulus
coretime-zagros-runtime = { workspace = true, default-features = true }
pezcumulus-primitives-core = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pezcumulus-primitives-core = { workspace = true }
testnet-teyrchains-constants = { features = [
"zagros",
"zagros",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"coretime-zagros-runtime/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"coretime-zagros-runtime/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
]
@@ -19,20 +19,20 @@ pezframe-support = { workspace = true }
pezsp-core = { workspace = true }
# Pezcumulus
pezcumulus-primitives-core = { workspace = true }
emulated-integration-tests-common = { workspace = true }
people-pezkuwichain-runtime = { workspace = true }
pezcumulus-primitives-core = { workspace = true }
testnet-teyrchains-constants = { features = [
"pezkuwichain",
"pezkuwichain",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"pezcumulus-primitives-core/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"people-pezkuwichain-runtime/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"people-pezkuwichain-runtime/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
]
@@ -19,20 +19,20 @@ pezframe-support = { workspace = true }
pezsp-core = { workspace = true }
# Pezcumulus
pezcumulus-primitives-core = { workspace = true }
emulated-integration-tests-common = { workspace = true }
people-zagros-runtime = { workspace = true }
pezcumulus-primitives-core = { workspace = true }
testnet-teyrchains-constants = { features = [
"zagros",
"zagros",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"pezcumulus-primitives-core/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"people-zagros-runtime/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"people-zagros-runtime/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
]
@@ -27,22 +27,22 @@ bp-messages = { workspace = true }
# Pezcumulus
bridge-hub-common = { workspace = true }
pezbridge-hub-pezkuwichain-runtime = { workspace = true, default-features = true }
emulated-integration-tests-common = { workspace = true }
pezbridge-hub-pezkuwichain-runtime = { workspace = true, default-features = true }
testnet-teyrchains-constants = { features = [
"pezkuwichain",
"pezkuwichain",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"bp-messages/runtime-benchmarks",
"bridge-hub-common/runtime-benchmarks",
"pezbridge-hub-pezkuwichain-runtime/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm/runtime-benchmarks",
"bp-messages/runtime-benchmarks",
"bridge-hub-common/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezbridge-hub-pezkuwichain-runtime/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -27,22 +27,22 @@ bp-messages = { workspace = true }
# Pezcumulus
bridge-hub-common = { workspace = true }
pezbridge-hub-zagros-runtime = { workspace = true, default-features = true }
emulated-integration-tests-common = { workspace = true }
pezbridge-hub-zagros-runtime = { workspace = true, default-features = true }
testnet-teyrchains-constants = { features = [
"zagros",
"zagros",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"bp-messages/runtime-benchmarks",
"bridge-hub-common/runtime-benchmarks",
"pezbridge-hub-zagros-runtime/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm/runtime-benchmarks",
"bp-messages/runtime-benchmarks",
"bridge-hub-common/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezbridge-hub-zagros-runtime/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -23,18 +23,18 @@ pezsp-keyring = { workspace = true }
xcm = { workspace = true }
# Pezcumulus
pezcumulus-primitives-core = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pez-penpal-runtime = { workspace = true }
pezcumulus-primitives-core = { workspace = true }
teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"pezcumulus-primitives-core/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pez-penpal-runtime/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pez-penpal-runtime/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -35,17 +35,17 @@ pezsp-keyring = { workspace = true, default-features = true }
pezsp-runtime = { workspace = true, default-features = true }
# Pezkuwi
pezpallet-xcm = { features = [
"test-utils",
], workspace = true, default-features = true }
pezkuwi-primitives = { workspace = true, default-features = true }
pezkuwi-runtime-teyrchains = { workspace = true, default-features = true }
pezkuwi-teyrchain-primitives = { workspace = true, default-features = true }
pezpallet-xcm = { features = [
"test-utils",
], workspace = true, default-features = true }
xcm = { workspace = true, default-features = true }
xcm-builder = { workspace = true, default-features = true }
xcm-executor = { workspace = true, default-features = true }
xcm-runtime-pezapis = { workspace = true, default-features = true }
xcm-pez-simulator = { workspace = true, default-features = true }
xcm-runtime-pezapis = { workspace = true, default-features = true }
# Pezcumulus
asset-test-pezutils = { workspace = true, default-features = true }
@@ -63,36 +63,36 @@ pezpallet-xcm-bridge-hub = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"asset-test-pezutils/runtime-benchmarks",
"bp-messages/runtime-benchmarks",
"bp-xcm-bridge-hub/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-asset-conversion/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-bridge-messages/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-whitelist/runtime-benchmarks",
"pezpallet-xcm-bridge-hub/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezkuwi-runtime-teyrchains/runtime-benchmarks",
"pezkuwi-teyrchain-primitives/runtime-benchmarks",
"pezsc-consensus-grandpa/runtime-benchmarks",
"pezsp-authority-discovery/runtime-benchmarks",
"pezsp-consensus-babe/runtime-benchmarks",
"pezsp-consensus-beefy/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-pez-emulator/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm-runtime-pezapis/runtime-benchmarks",
"xcm-pez-simulator/runtime-benchmarks",
"xcm/runtime-benchmarks",
"asset-test-pezutils/runtime-benchmarks",
"bp-messages/runtime-benchmarks",
"bp-xcm-bridge-hub/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezkuwi-runtime-teyrchains/runtime-benchmarks",
"pezkuwi-teyrchain-primitives/runtime-benchmarks",
"pezpallet-asset-conversion/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-bridge-messages/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-whitelist/runtime-benchmarks",
"pezpallet-xcm-bridge-hub/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsc-consensus-grandpa/runtime-benchmarks",
"pezsp-authority-discovery/runtime-benchmarks",
"pezsp-consensus-babe/runtime-benchmarks",
"pezsp-consensus-beefy/runtime-benchmarks",
"pezsp-keyring/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm-pez-emulator/runtime-benchmarks",
"xcm-pez-simulator/runtime-benchmarks",
"xcm-runtime-pezapis/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -180,10 +180,10 @@ macro_rules! impl_accounts_helpers_for_relay_chain {
<Self as $crate::impls::TestExt>::execute_with(|| {
for account in accounts {
let who = account.0;
let actual = <Self as [<$chain RelayPallet>]>::Balances::free_balance(&who);
let actual = actual.saturating_add(<Self as [<$chain RelayPallet>]>::Balances::reserved_balance(&who));
let actual = <Self as [<$chain RelayPezpallet>]>::Balances::free_balance(&who);
let actual = actual.saturating_add(<Self as [<$chain RelayPezpallet>]>::Balances::reserved_balance(&who));
$crate::impls::assert_ok!(<Self as [<$chain RelayPallet>]>::Balances::force_set_balance(
$crate::impls::assert_ok!(<Self as [<$chain RelayPezpallet>]>::Balances::force_set_balance(
<Self as $crate::impls::Chain>::RuntimeOrigin::root(),
who.into(),
actual.saturating_add(account.1),
@@ -337,7 +337,7 @@ macro_rules! impl_hrmp_channels_helpers_for_relay_chain {
let relay_root_origin = <Self as Chain>::RuntimeOrigin::root();
// Force process HRMP open channel requests without waiting for the next session
$crate::impls::assert_ok!(<Self as [<$chain RelayPallet>]>::Hrmp::force_process_hrmp_open(
$crate::impls::assert_ok!(<Self as [<$chain RelayPezpallet>]>::Hrmp::force_process_hrmp_open(
relay_root_origin,
0
));
@@ -377,7 +377,7 @@ macro_rules! impl_send_transact_helpers_for_relay_chain {
$crate::impls::dmp::Pezpallet::<<Self as $crate::impls::Chain>::Runtime>::make_teyrchain_reachable(recipient);
// Send XCM `Transact`
$crate::impls::assert_ok!(<Self as [<$chain RelayPallet>]>::XcmPallet::send(
$crate::impls::assert_ok!(<Self as [<$chain RelayPezpallet>]>::XcmPallet::send(
root_origin,
bx!(destination.into()),
bx!(xcm),
@@ -400,10 +400,10 @@ macro_rules! impl_accounts_helpers_for_teyrchain {
<Self as $crate::impls::TestExt>::execute_with(|| {
for account in accounts {
let who = account.0;
let actual = <Self as [<$chain ParaPallet>]>::Balances::free_balance(&who);
let actual = actual.saturating_add(<Self as [<$chain ParaPallet>]>::Balances::reserved_balance(&who));
let actual = <Self as [<$chain ParaPezpallet>]>::Balances::free_balance(&who);
let actual = actual.saturating_add(<Self as [<$chain ParaPezpallet>]>::Balances::reserved_balance(&who));
$crate::impls::assert_ok!(<Self as [<$chain ParaPallet>]>::Balances::force_set_balance(
$crate::impls::assert_ok!(<Self as [<$chain ParaPezpallet>]>::Balances::force_set_balance(
<Self as $crate::impls::Chain>::RuntimeOrigin::root(),
who.into(),
actual.saturating_add(account.1),
@@ -693,7 +693,7 @@ macro_rules! impl_assets_helpers_for_system_teyrchain {
]
);
assert!(<Self as [<$chain ParaPallet>]>::Assets::asset_exists(id.clone().into()));
assert!(<Self as [<$chain ParaPezpallet>]>::Assets::asset_exists(id.clone().into()));
});
}
}
@@ -718,7 +718,7 @@ macro_rules! impl_assets_helpers_for_teyrchain {
let sudo_origin = <$chain<N> as $crate::impls::Chain>::RuntimeOrigin::root();
<Self as $crate::impls::TestExt>::execute_with(|| {
$crate::impls::assert_ok!(
<Self as [<$chain ParaPallet>]>::Assets::force_create(
<Self as [<$chain ParaPezpallet>]>::Assets::force_create(
sudo_origin,
id.clone().into(),
owner.clone().into(),
@@ -726,7 +726,7 @@ macro_rules! impl_assets_helpers_for_teyrchain {
min_balance,
)
);
assert!(<Self as [<$chain ParaPallet>]>::Assets::asset_exists(id.clone()));
assert!(<Self as [<$chain ParaPezpallet>]>::Assets::asset_exists(id.clone()));
type RuntimeEvent<N> = <$chain<N> as $crate::impls::Chain>::RuntimeEvent;
$crate::impls::assert_expected_events!(
Self,
@@ -755,7 +755,7 @@ macro_rules! impl_assets_helpers_for_teyrchain {
amount_to_mint: u128,
) {
<Self as $crate::impls::TestExt>::execute_with(|| {
$crate::impls::assert_ok!(<Self as [<$chain ParaPallet>]>::Assets::mint(
$crate::impls::assert_ok!(<Self as [<$chain ParaPezpallet>]>::Assets::mint(
signed_origin,
id.clone().into(),
beneficiary.clone().into(),
@@ -820,7 +820,7 @@ macro_rules! impl_foreign_assets_helpers_for_teyrchain {
let sudo_origin = <$chain<N> as $crate::impls::Chain>::RuntimeOrigin::root();
<Self as $crate::impls::TestExt>::execute_with(|| {
$crate::impls::assert_ok!(
<Self as [<$chain ParaPallet>]>::ForeignAssets::force_create(
<Self as [<$chain ParaPezpallet>]>::ForeignAssets::force_create(
sudo_origin,
id.clone(),
owner.clone().into(),
@@ -828,7 +828,7 @@ macro_rules! impl_foreign_assets_helpers_for_teyrchain {
min_balance,
)
);
assert!(<Self as [<$chain ParaPallet>]>::ForeignAssets::asset_exists(id.clone()));
assert!(<Self as [<$chain ParaPezpallet>]>::ForeignAssets::asset_exists(id.clone()));
type RuntimeEvent<N> = <$chain<N> as $crate::impls::Chain>::RuntimeEvent;
$crate::impls::assert_expected_events!(
Self,
@@ -860,7 +860,7 @@ macro_rules! impl_foreign_assets_helpers_for_teyrchain {
<$chain<N> as $crate::impls::Chain>::RuntimeOrigin::signed(owner.clone());
<Self as $crate::impls::TestExt>::execute_with(|| {
$crate::impls::assert_ok!(
<Self as [<$chain ParaPallet>]>::ForeignAssets::set_reserves(
<Self as [<$chain ParaPezpallet>]>::ForeignAssets::set_reserves(
owner_origin,
id.clone(),
reserves,
@@ -877,7 +877,7 @@ macro_rules! impl_foreign_assets_helpers_for_teyrchain {
amount_to_mint: u128,
) {
<Self as $crate::impls::TestExt>::execute_with(|| {
$crate::impls::assert_ok!(<Self as [<$chain ParaPallet>]>::ForeignAssets::mint(
$crate::impls::assert_ok!(<Self as [<$chain ParaPezpallet>]>::ForeignAssets::mint(
signed_origin,
id.clone().into(),
beneficiary.clone().into(),
@@ -933,7 +933,7 @@ macro_rules! impl_xcm_helpers_for_teyrchain {
/// Set XCM version for destination.
pub fn force_xcm_version(dest: $crate::impls::Location, version: $crate::impls::XcmVersion) {
<Self as $crate::impls::TestExt>::execute_with(|| {
$crate::impls::assert_ok!(<Self as [<$chain ParaPallet>]>::PezkuwiXcm::force_xcm_version(
$crate::impls::assert_ok!(<Self as [<$chain ParaPezpallet>]>::PezkuwiXcm::force_xcm_version(
<Self as $crate::impls::Chain>::RuntimeOrigin::root(),
$crate::impls::bx!(dest),
version,
@@ -944,7 +944,7 @@ macro_rules! impl_xcm_helpers_for_teyrchain {
/// Set default/safe XCM version for runtime.
pub fn force_default_xcm_version(version: Option<$crate::impls::XcmVersion>) {
<Self as $crate::impls::TestExt>::execute_with(|| {
$crate::impls::assert_ok!(<Self as [<$chain ParaPallet>]>::PezkuwiXcm::force_default_xcm_version(
$crate::impls::assert_ok!(<Self as [<$chain ParaPezpallet>]>::PezkuwiXcm::force_default_xcm_version(
<Self as $crate::impls::Chain>::RuntimeOrigin::root(),
version,
));
@@ -354,7 +354,7 @@ macro_rules! test_teyrchain_is_trusted_teleporter_for_relay {
let sender = [<$sender_para Sender>]::get();
// Mint assets to `$sender_para` to succeed with teleport.
<$sender_para as $crate::macros::TestExt>::execute_with(|| {
$crate::macros::assert_ok!(<<$sender_para as [<$sender_para Pezpallet>]>::Balances
$crate::macros::assert_ok!(<<$sender_para as [<$sender_para ParaPezpallet>]>::Balances
as $crate::macros::Mutate<_>>::mint_into(&sender, $amount + 10_000_000_000));
});
@@ -370,8 +370,8 @@ macro_rules! test_teyrchain_is_trusted_teleporter_for_relay {
// Else we'd get a `NotWithdrawable` error since it tries to reduce the check account balance, which
// would be 0.
<$receiver_relay as $crate::macros::TestExt>::execute_with(|| {
let check_account = <$receiver_relay as [<$receiver_relay Pezpallet>]>::XcmPallet::check_account();
$crate::macros::assert_ok!(<<$receiver_relay as [<$receiver_relay Pezpallet>]>::Balances
let check_account = <$receiver_relay as [<$receiver_relay RelayPezpallet>]>::XcmPallet::check_account();
$crate::macros::assert_ok!(<<$receiver_relay as [<$receiver_relay RelayPezpallet>]>::Balances
as $crate::macros::Mutate<_>>::mint_into(&check_account, $amount));
});
@@ -443,14 +443,14 @@ macro_rules! test_teyrchain_is_trusted_teleporter_for_relay {
<$receiver_relay as $crate::macros::TestExt>::reset_ext();
// Mint assets to `$sender_para` to succeed with teleport.
<$sender_para as $crate::macros::TestExt>::execute_with(|| {
$crate::macros::assert_ok!(<<$sender_para as [<$sender_para Pezpallet>]>::Balances
$crate::macros::assert_ok!(<<$sender_para as [<$sender_para ParaPezpallet>]>::Balances
as $crate::macros::Mutate<_>>::mint_into(&sender, $amount + 10_000_000_000));
});
// Since we reset everything, we need to mint funds into the checking account again.
<$receiver_relay as $crate::macros::TestExt>::execute_with(|| {
let check_account = <$receiver_relay as [<$receiver_relay Pezpallet>]>::XcmPallet::check_account();
$crate::macros::assert_ok!(<<$receiver_relay as [<$receiver_relay Pezpallet>]>::Balances
let check_account = <$receiver_relay as [<$receiver_relay RelayPezpallet>]>::XcmPallet::check_account();
$crate::macros::assert_ok!(<<$receiver_relay as [<$receiver_relay RelayPezpallet>]>::Balances
as $crate::macros::Mutate<_>>::mint_into(&check_account, $amount));
});
@@ -523,7 +523,7 @@ macro_rules! test_chain_can_claim_assets {
<$sender_para as $crate::macros::TestExt>::execute_with(|| {
// Assets are trapped for whatever reason.
// The possible reasons for this might differ from runtime to runtime, so here we just drop them directly.
<<$sender_para as [<$sender_para Pezpallet>]>::PezkuwiXcm as $crate::macros::DropAssets>::drop_assets(
<<$sender_para as [<$sender_para ParaPezpallet>]>::PezkuwiXcm as $crate::macros::DropAssets>::drop_assets(
&beneficiary,
$assets.clone().into(),
&$crate::macros::XcmContext { origin: None, message_id: [0u8; 32], topic: None },
@@ -539,25 +539,25 @@ macro_rules! test_chain_can_claim_assets {
]
);
let balance_before = <<$sender_para as [<$sender_para Pezpallet>]>::Balances
let balance_before = <<$sender_para as [<$sender_para ParaPezpallet>]>::Balances
as $crate::macros::Currency<_>>::free_balance(&sender);
// Different origin or different assets won't work.
let other_origin = <$sender_para as $crate::macros::Chain>::RuntimeOrigin::signed([<$sender_para Receiver>]::get());
assert!(<$sender_para as [<$sender_para Pezpallet>]>::PezkuwiXcm::claim_assets(
assert!(<$sender_para as [<$sender_para ParaPezpallet>]>::PezkuwiXcm::claim_assets(
other_origin,
Box::new(versioned_assets.clone().into()),
Box::new(beneficiary.clone().into()),
).is_err());
let other_versioned_assets: $crate::macros::VersionedAssets = $crate::macros::Assets::new().into();
assert!(<$sender_para as [<$sender_para Pezpallet>]>::PezkuwiXcm::claim_assets(
assert!(<$sender_para as [<$sender_para ParaPezpallet>]>::PezkuwiXcm::claim_assets(
origin.clone(),
Box::new(other_versioned_assets.into()),
Box::new(beneficiary.clone().into()),
).is_err());
// Assets will be claimed to `beneficiary`, which is the same as `sender`.
$crate::macros::assert_ok!(<$sender_para as [<$sender_para Pezpallet>]>::PezkuwiXcm::claim_assets(
$crate::macros::assert_ok!(<$sender_para as [<$sender_para ParaPezpallet>]>::PezkuwiXcm::claim_assets(
origin.clone(),
Box::new(versioned_assets.clone().into()),
Box::new(beneficiary.clone().into()),
@@ -573,23 +573,23 @@ macro_rules! test_chain_can_claim_assets {
);
// After claiming the assets, the balance has increased.
let balance_after = <<$sender_para as [<$sender_para Pezpallet>]>::Balances
let balance_after = <<$sender_para as [<$sender_para ParaPezpallet>]>::Balances
as $crate::macros::Currency<_>>::free_balance(&sender);
assert_eq!(balance_after, balance_before + $amount);
// Claiming the assets again doesn't work.
assert!(<$sender_para as [<$sender_para Pezpallet>]>::PezkuwiXcm::claim_assets(
assert!(<$sender_para as [<$sender_para ParaPezpallet>]>::PezkuwiXcm::claim_assets(
origin.clone(),
Box::new(versioned_assets.clone().into()),
Box::new(beneficiary.clone().into()),
).is_err());
let balance = <<$sender_para as [<$sender_para Pezpallet>]>::Balances
let balance = <<$sender_para as [<$sender_para ParaPezpallet>]>::Balances
as $crate::macros::Currency<_>>::free_balance(&sender);
assert_eq!(balance, balance_after);
// You can also claim assets and send them to a different account.
<<$sender_para as [<$sender_para Pezpallet>]>::PezkuwiXcm as $crate::macros::DropAssets>::drop_assets(
<<$sender_para as [<$sender_para ParaPezpallet>]>::PezkuwiXcm as $crate::macros::DropAssets>::drop_assets(
&beneficiary,
$assets.clone().into(),
&$crate::macros::XcmContext { origin: None, message_id: [0u8; 32], topic: None },
@@ -597,14 +597,14 @@ macro_rules! test_chain_can_claim_assets {
let receiver = [<$sender_para Receiver>]::get();
let other_beneficiary: $crate::macros::Location =
$crate::macros::Junction::AccountId32 { network: Some($network_id), id: receiver.clone().into() }.into();
let balance_before = <<$sender_para as [<$sender_para Pezpallet>]>::Balances
let balance_before = <<$sender_para as [<$sender_para ParaPezpallet>]>::Balances
as $crate::macros::Currency<_>>::free_balance(&receiver);
$crate::macros::assert_ok!(<$sender_para as [<$sender_para Pezpallet>]>::PezkuwiXcm::claim_assets(
$crate::macros::assert_ok!(<$sender_para as [<$sender_para ParaPezpallet>]>::PezkuwiXcm::claim_assets(
origin.clone(),
Box::new(versioned_assets.clone().into()),
Box::new(other_beneficiary.clone().into()),
));
let balance_after = <<$sender_para as [<$sender_para Pezpallet>]>::Balances
let balance_after = <<$sender_para as [<$sender_para ParaPezpallet>]>::Balances
as $crate::macros::Currency<_>>::free_balance(&receiver);
assert_eq!(balance_after, balance_before + $amount);
});
@@ -811,11 +811,11 @@ macro_rules! test_can_estimate_and_pay_exact_fees {
// Actually run the extrinsic.
let sender_assets_before = <$sender_para as $crate::macros::TestExt>::execute_with(|| {
type ForeignAssets = <$sender_para as [<$sender_para Pezpallet>]>::ForeignAssets;
type ForeignAssets = <$sender_para as [<$sender_para ParaPezpallet>]>::ForeignAssets;
<ForeignAssets as $crate::macros::Inspect<_>>::balance($asset_id.clone().into(), &sender)
});
let receiver_assets_before = <$receiver_para as $crate::macros::TestExt>::execute_with(|| {
type ForeignAssets = <$receiver_para as [<$receiver_para Pezpallet>]>::ForeignAssets;
type ForeignAssets = <$receiver_para as [<$receiver_para ParaPezpallet>]>::ForeignAssets;
<ForeignAssets as $crate::macros::Inspect<_>>::balance($asset_id.clone().into(), &beneficiary_id)
});
@@ -831,11 +831,11 @@ macro_rules! test_can_estimate_and_pay_exact_fees {
test.assert();
let sender_assets_after = <$sender_para as $crate::macros::TestExt>::execute_with(|| {
type ForeignAssets = <$sender_para as [<$sender_para Pezpallet>]>::ForeignAssets;
type ForeignAssets = <$sender_para as [<$sender_para ParaPezpallet>]>::ForeignAssets;
<ForeignAssets as $crate::macros::Inspect<_>>::balance($asset_id.clone().into(), &sender)
});
let receiver_assets_after = <$receiver_para as $crate::macros::TestExt>::execute_with(|| {
type ForeignAssets = <$receiver_para as [<$receiver_para Pezpallet>]>::ForeignAssets;
type ForeignAssets = <$receiver_para as [<$receiver_para ParaPezpallet>]>::ForeignAssets;
<ForeignAssets as $crate::macros::Inspect<_>>::balance($asset_id.into(), &beneficiary_id)
});
@@ -870,7 +870,7 @@ macro_rules! test_dry_run_transfer_across_pk_bridge {
type Runtime = <$sender_asset_hub as $crate::macros::Chain>::Runtime;
type RuntimeCall = <$sender_asset_hub as $crate::macros::Chain>::RuntimeCall;
type OriginCaller = <$sender_asset_hub as $crate::macros::Chain>::OriginCaller;
type Balances = <$sender_asset_hub as [<$sender_asset_hub Pezpallet>]>::Balances;
type Balances = <$sender_asset_hub as [<$sender_asset_hub ParaPezpallet>]>::Balances;
// Give some initial funds.
<Balances as $crate::macros::Mutate<_>>::set_balance(&who, initial_balance);
@@ -914,8 +914,8 @@ macro_rules! test_xcm_fee_querying_apis_work_for_asset_hub {
<$asset_hub as $crate::macros::TestExt>::execute_with(|| {
// Setup a pool between USDT and ZGR.
type RuntimeOrigin = <$asset_hub as $crate::macros::Chain>::RuntimeOrigin;
type Assets = <$asset_hub as [<$asset_hub Pezpallet>]>::Assets;
type AssetConversion = <$asset_hub as [<$asset_hub Pezpallet>]>::AssetConversion;
type Assets = <$asset_hub as [<$asset_hub ParaPezpallet>]>::Assets;
type AssetConversion = <$asset_hub as [<$asset_hub ParaPezpallet>]>::AssetConversion;
let wnd = $crate::macros::Location::new(1, []);
let usdt = $crate::macros::Location::new(0, [$crate::macros::PalletInstance($crate::macros::ASSETS_PALLET_ID),
$crate::macros::GeneralIndex($crate::macros::USDT_ID.into())]);
@@ -1036,7 +1036,7 @@ macro_rules! test_cross_chain_alias {
]);
let signed_origin = <$sender_para as $crate::macros::Chain>::RuntimeOrigin::signed(account.into());
$crate::macros::assert_ok!(<$sender_para as [<$sender_para Pezpallet>]>::PezkuwiXcm::execute(
$crate::macros::assert_ok!(<$sender_para as [<$sender_para ParaPezpallet>]>::PezkuwiXcm::execute(
signed_origin,
Box::new($crate::macros::VersionedXcm::from(xcm_message.into())),
$crate::macros::Weight::MAX
@@ -1089,7 +1089,7 @@ macro_rules! create_pool_with_native_on {
let native_asset: $crate::macros::Location = $crate::macros::Parent.into();
if $is_foreign {
$crate::macros::assert_ok!(<$chain as [<$chain Pezpallet>]>::ForeignAssets::mint(
$crate::macros::assert_ok!(<$chain as [<$chain ParaPezpallet>]>::ForeignAssets::mint(
signed_owner.clone(),
$asset.clone().into(),
owner.clone().into(),
@@ -1100,7 +1100,7 @@ macro_rules! create_pool_with_native_on {
Some($crate::macros::GeneralIndex(id)) => *id as u32,
_ => unreachable!(),
};
$crate::macros::assert_ok!(<$chain as [<$chain Pezpallet>]>::Assets::mint(
$crate::macros::assert_ok!(<$chain as [<$chain ParaPezpallet>]>::Assets::mint(
signed_owner.clone(),
asset_id.into(),
owner.clone().into(),
@@ -1108,7 +1108,7 @@ macro_rules! create_pool_with_native_on {
));
}
$crate::macros::assert_ok!(<$chain as [<$chain Pezpallet>]>::AssetConversion::create_pool(
$crate::macros::assert_ok!(<$chain as [<$chain ParaPezpallet>]>::AssetConversion::create_pool(
signed_owner.clone(),
Box::new(native_asset.clone()),
Box::new($asset.clone()),
@@ -1121,7 +1121,7 @@ macro_rules! create_pool_with_native_on {
]
);
$crate::macros::assert_ok!(<$chain as [<$chain Pezpallet>]>::AssetConversion::add_liquidity(
$crate::macros::assert_ok!(<$chain as [<$chain ParaPezpallet>]>::AssetConversion::add_liquidity(
signed_owner,
Box::new(native_asset),
Box::new($asset),
@@ -16,20 +16,20 @@ workspace = true
[dependencies]
# Pezcumulus
asset-hub-pezkuwichain-emulated-chain = { workspace = true }
pezbridge-hub-pezkuwichain-emulated-chain = { workspace = true }
coretime-pezkuwichain-emulated-chain = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pez-penpal-emulated-chain = { workspace = true }
people-pezkuwichain-emulated-chain = { workspace = true }
pez-penpal-emulated-chain = { workspace = true }
pezbridge-hub-pezkuwichain-emulated-chain = { workspace = true }
pezkuwichain-emulated-chain = { workspace = true }
[features]
runtime-benchmarks = [
"asset-hub-pezkuwichain-emulated-chain/runtime-benchmarks",
"pezbridge-hub-pezkuwichain-emulated-chain/runtime-benchmarks",
"coretime-pezkuwichain-emulated-chain/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pez-penpal-emulated-chain/runtime-benchmarks",
"people-pezkuwichain-emulated-chain/runtime-benchmarks",
"pezkuwichain-emulated-chain/runtime-benchmarks",
"asset-hub-pezkuwichain-emulated-chain/runtime-benchmarks",
"coretime-pezkuwichain-emulated-chain/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"people-pezkuwichain-emulated-chain/runtime-benchmarks",
"pez-penpal-emulated-chain/runtime-benchmarks",
"pezbridge-hub-pezkuwichain-emulated-chain/runtime-benchmarks",
"pezkuwichain-emulated-chain/runtime-benchmarks",
]
@@ -17,21 +17,21 @@ workspace = true
# Pezcumulus
asset-hub-pezkuwichain-emulated-chain = { workspace = true }
asset-hub-zagros-emulated-chain = { workspace = true }
pezbridge-hub-pezkuwichain-emulated-chain = { workspace = true }
pezbridge-hub-zagros-emulated-chain = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pez-penpal-emulated-chain = { workspace = true }
pezbridge-hub-pezkuwichain-emulated-chain = { workspace = true }
pezbridge-hub-zagros-emulated-chain = { workspace = true }
pezkuwichain-emulated-chain = { workspace = true }
zagros-emulated-chain = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"asset-hub-pezkuwichain-emulated-chain/runtime-benchmarks",
"asset-hub-zagros-emulated-chain/runtime-benchmarks",
"pezbridge-hub-pezkuwichain-emulated-chain/runtime-benchmarks",
"pezbridge-hub-zagros-emulated-chain/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pez-penpal-emulated-chain/runtime-benchmarks",
"pezkuwichain-emulated-chain/runtime-benchmarks",
"zagros-emulated-chain/runtime-benchmarks",
"asset-hub-pezkuwichain-emulated-chain/runtime-benchmarks",
"asset-hub-zagros-emulated-chain/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pez-penpal-emulated-chain/runtime-benchmarks",
"pezbridge-hub-pezkuwichain-emulated-chain/runtime-benchmarks",
"pezbridge-hub-zagros-emulated-chain/runtime-benchmarks",
"pezkuwichain-emulated-chain/runtime-benchmarks",
"zagros-emulated-chain/runtime-benchmarks",
]
@@ -16,22 +16,22 @@ workspace = true
[dependencies]
# Pezcumulus
asset-hub-zagros-emulated-chain = { workspace = true }
pezbridge-hub-zagros-emulated-chain = { workspace = true }
collectives-zagros-emulated-chain = { workspace = true }
coretime-zagros-emulated-chain = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pez-penpal-emulated-chain = { workspace = true }
people-zagros-emulated-chain = { workspace = true }
pez-penpal-emulated-chain = { workspace = true }
pezbridge-hub-zagros-emulated-chain = { workspace = true }
zagros-emulated-chain = { workspace = true }
[features]
runtime-benchmarks = [
"asset-hub-zagros-emulated-chain/runtime-benchmarks",
"pezbridge-hub-zagros-emulated-chain/runtime-benchmarks",
"collectives-zagros-emulated-chain/runtime-benchmarks",
"coretime-zagros-emulated-chain/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pez-penpal-emulated-chain/runtime-benchmarks",
"people-zagros-emulated-chain/runtime-benchmarks",
"zagros-emulated-chain/runtime-benchmarks",
"asset-hub-zagros-emulated-chain/runtime-benchmarks",
"collectives-zagros-emulated-chain/runtime-benchmarks",
"coretime-zagros-emulated-chain/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"people-zagros-emulated-chain/runtime-benchmarks",
"pez-penpal-emulated-chain/runtime-benchmarks",
"pezbridge-hub-zagros-emulated-chain/runtime-benchmarks",
"zagros-emulated-chain/runtime-benchmarks",
]
@@ -31,41 +31,41 @@ pezsp-core = { workspace = true }
pezsp-runtime = { workspace = true }
# Pezkuwi
pezpallet-xcm = { workspace = true }
pezkuwi-runtime-common = { workspace = true, default-features = true }
pezkuwichain-runtime-constants = { workspace = true, default-features = true }
pezpallet-xcm = { workspace = true }
xcm = { workspace = true }
xcm-executor = { workspace = true }
xcm-runtime-pezapis = { workspace = true, default-features = true }
# Pezcumulus
asset-test-pezutils = { workspace = true, default-features = true }
pezcumulus-pezpallet-teyrchain-system = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pezcumulus-pezpallet-teyrchain-system = { workspace = true }
pezkuwichain-system-emulated-network = { workspace = true }
teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"asset-test-pezutils/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-asset-conversion/runtime-benchmarks",
"pezpallet-asset-rewards/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-treasury/runtime-benchmarks",
"pezpallet-utility/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezkuwi-runtime-common/runtime-benchmarks",
"pezkuwichain-runtime-constants/runtime-benchmarks",
"pezkuwichain-system-emulated-network/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm-runtime-pezapis/runtime-benchmarks",
"xcm/runtime-benchmarks",
"asset-test-pezutils/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezkuwi-runtime-common/runtime-benchmarks",
"pezkuwichain-runtime-constants/runtime-benchmarks",
"pezkuwichain-system-emulated-network/runtime-benchmarks",
"pezpallet-asset-conversion/runtime-benchmarks",
"pezpallet-asset-rewards/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-treasury/runtime-benchmarks",
"pezpallet-utility/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm-runtime-pezapis/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -60,7 +60,8 @@ mod imports {
ExistentialDeposit as AssetHubPezkuwichainExistentialDeposit,
},
genesis::{AssetHubPezkuwichainAssetOwner, ED as ASSET_HUB_PEZKUWICHAIN_ED},
AssetHubPezkuwichainParaPallet as AssetHubPezkuwichainPallet,
AssetHubPezkuwichainParaPezpallet,
AssetHubPezkuwichainParaPezpallet as AssetHubPezkuwichainPallet,
},
pez_penpal_emulated_chain::{
pez_penpal_runtime::xcm_config::{
@@ -69,8 +70,12 @@ mod imports {
LocalTeleportableToAssetHub as PenpalLocalTeleportableToAssetHub,
UsdtFromAssetHub as PenpalUsdtFromAssetHub,
},
PenpalAParaPallet as PenpalAPallet, PenpalAssetOwner,
PenpalBParaPallet as PenpalBPallet, ED as PENPAL_ED,
PenpalAParaPezpallet,
PenpalAParaPezpallet as PenpalAPallet,
PenpalAssetOwner,
PenpalBParaPezpallet,
PenpalBParaPezpallet as PenpalBPallet,
ED as PENPAL_ED,
},
pezkuwichain_emulated_chain::{
genesis::ED as PEZKUWICHAIN_ED,
@@ -80,7 +85,8 @@ mod imports {
xcm_config::UniversalLocation as PezkuwichainUniversalLocation, Dmp,
OriginCaller as PezkuwichainOriginCaller,
},
PezkuwichainRelayPallet as PezkuwichainPallet,
PezkuwichainRelayPezpallet,
PezkuwichainRelayPezpallet as PezkuwichainPallet,
},
AssetHubPezkuwichainPara as AssetHubPezkuwichain,
AssetHubPezkuwichainParaReceiver as AssetHubPezkuwichainReceiver,
@@ -47,7 +47,7 @@ macro_rules! create_pool_with_roc_on {
let signed_owner = <$chain as Chain>::RuntimeOrigin::signed(owner.clone());
let roc_location: Location = Parent.into();
if $is_foreign {
assert_ok!(<$chain as [<$chain Pezpallet>]>::ForeignAssets::mint(
assert_ok!(<$chain as [<$chain ParaPezpallet>]>::ForeignAssets::mint(
signed_owner.clone(),
$asset_id.clone().into(),
owner.clone().into(),
@@ -58,7 +58,7 @@ macro_rules! create_pool_with_roc_on {
Some(GeneralIndex(id)) => *id as u32,
_ => unreachable!(),
};
assert_ok!(<$chain as [<$chain Pezpallet>]>::Assets::mint(
assert_ok!(<$chain as [<$chain ParaPezpallet>]>::Assets::mint(
signed_owner.clone(),
asset_id.into(),
owner.clone().into(),
@@ -66,7 +66,7 @@ macro_rules! create_pool_with_roc_on {
));
}
assert_ok!(<$chain as [<$chain Pezpallet>]>::AssetConversion::create_pool(
assert_ok!(<$chain as [<$chain ParaPezpallet>]>::AssetConversion::create_pool(
signed_owner.clone(),
Box::new(roc_location.clone()),
Box::new($asset_id.clone()),
@@ -79,7 +79,7 @@ macro_rules! create_pool_with_roc_on {
]
);
assert_ok!(<$chain as [<$chain Pezpallet>]>::AssetConversion::add_liquidity(
assert_ok!(<$chain as [<$chain ParaPezpallet>]>::AssetConversion::add_liquidity(
signed_owner,
Box::new(roc_location),
Box::new($asset_id),
@@ -14,22 +14,14 @@
// limitations under the License.
use crate::imports::*;
use emulated_integration_tests_common::{
accounts::{ALICE, BOB},
USDT_ID,
};
use emulated_integration_tests_common::accounts::{ALICE, BOB};
use pezframe_support::{
dispatch::RawOrigin,
pezsp_runtime::traits::Dispatchable,
traits::{
fungible::Inspect,
fungibles::{Inspect as FungiblesInspect, Mutate},
},
traits::fungible::Inspect,
};
use pezkuwi_runtime_common::impls::VersionedLocatableAsset;
use pezkuwichain_runtime_constants::currency::GRAND;
use teyrchains_common::AccountId;
use xcm_executor::traits::ConvertLocation;
// Fund Treasury account on Asset Hub from Treasury account on Relay Chain with TYRs.
#[test]
@@ -167,8 +159,18 @@ fn spend_roc_on_asset_hub() {
});
}
#[test]
fn create_and_claim_treasury_spend_in_usdt() {
// NOTE: This test is disabled because `AssetRate` pallet is not available in pezkuwichain runtime.
// The test depends on `<Pezkuwichain as PezkuwichainPallet>::AssetRate` which doesn't exist.
#[cfg(any())]
mod disabled_usdt_treasury_test {
use super::*;
use emulated_integration_tests_common::USDT_ID;
use pezframe_support::traits::fungibles::{Inspect as FungiblesInspect, Mutate};
use teyrchains_common::AccountId;
use xcm_executor::traits::ConvertLocation;
#[test]
fn create_and_claim_treasury_spend_in_usdt() {
const SPEND_AMOUNT: u128 = 10_000_000;
// treasury location from a sibling teyrchain.
let treasury_location: Location = Location::new(1, PalletInstance(18));
@@ -262,4 +264,5 @@ fn create_and_claim_treasury_spend_in_usdt() {
]
);
});
}
}
@@ -30,8 +30,8 @@ pezsp-core = { workspace = true }
pezsp-runtime = { workspace = true }
# Pezkuwi
pezpallet-xcm = { workspace = true }
pezkuwi-runtime-common = { workspace = true, default-features = true }
pezpallet-xcm = { workspace = true }
xcm = { workspace = true }
xcm-builder = { workspace = true }
xcm-executor = { workspace = true }
@@ -39,9 +39,9 @@ xcm-runtime-pezapis = { workspace = true }
# Pezcumulus
asset-test-pezutils = { workspace = true, default-features = true }
emulated-integration-tests-common = { workspace = true }
pezcumulus-pezpallet-teyrchain-system = { workspace = true }
pezcumulus-pezpallet-xcmp-queue = { workspace = true }
emulated-integration-tests-common = { workspace = true }
teyrchains-common = { workspace = true, default-features = true }
zagros-system-emulated-network = { workspace = true }
@@ -50,25 +50,25 @@ pezsp-tracing = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"asset-test-pezutils/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-asset-conversion/runtime-benchmarks",
"pezpallet-asset-rewards/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-treasury/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezkuwi-runtime-common/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm-runtime-pezapis/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-system-emulated-network/runtime-benchmarks",
"asset-test-pezutils/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezkuwi-runtime-common/runtime-benchmarks",
"pezpallet-asset-conversion/runtime-benchmarks",
"pezpallet-asset-rewards/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-treasury/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm-runtime-pezapis/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-system-emulated-network/runtime-benchmarks",
]
@@ -65,11 +65,15 @@ mod imports {
ExistentialDeposit as AssetHubZagrosExistentialDeposit, ForeignAssetReserveData,
},
genesis::{AssetHubZagrosAssetOwner, ED as ASSET_HUB_ZAGROS_ED},
AssetHubZagrosParaPallet as AssetHubZagrosPallet,
AssetHubZagrosParaPezpallet,
AssetHubZagrosParaPezpallet as AssetHubZagrosPallet,
},
collectives_zagros_emulated_chain::CollectivesZagrosParaPallet as CollectivesZagrosPallet,
coretime_zagros_emulated_chain::CoretimeZagrosParaPallet as CoretimeZagrosPallet,
people_zagros_emulated_chain::PeopleZagrosParaPallet as PeopleZagrosPallet,
collectives_zagros_emulated_chain::{
CollectivesZagrosParaPezpallet,
CollectivesZagrosParaPezpallet as CollectivesZagrosPallet,
},
coretime_zagros_emulated_chain::CoretimeZagrosParaPezpallet,
people_zagros_emulated_chain::PeopleZagrosParaPezpallet,
pez_penpal_emulated_chain::{
pez_penpal_runtime::xcm_config::{
CustomizableAssetFromSystemAssetHub as PenpalCustomizableAssetFromSystemAssetHub,
@@ -78,12 +82,15 @@ mod imports {
UniversalLocation as PenpalUniversalLocation,
UsdtFromAssetHub as PenpalUsdtFromAssetHub,
},
PenpalAParaPallet as PenpalAPallet, PenpalAssetOwner,
PenpalBParaPallet as PenpalBPallet,
PenpalAParaPezpallet,
PenpalAParaPezpallet as PenpalAPallet,
PenpalAssetOwner,
PenpalBParaPezpallet,
PenpalBParaPezpallet as PenpalBPallet,
},
pezbridge_hub_zagros_emulated_chain::{
pezbridge_hub_zagros_runtime::xcm_config::{self as bhw_xcm_config},
BridgeHubZagrosParaPallet as BridgeHubZagrosPallet,
BridgeHubZagrosParaPezpallet,
},
zagros_emulated_chain::{
genesis::ED as ZAGROS_ED,
@@ -94,7 +101,8 @@ mod imports {
},
Dmp,
},
ZagrosRelayPallet as ZagrosPallet,
ZagrosRelayPezpallet,
ZagrosRelayPezpallet as ZagrosPallet,
},
AssetHubZagrosPara as AssetHubZagros, AssetHubZagrosParaReceiver as AssetHubZagrosReceiver,
AssetHubZagrosParaSender as AssetHubZagrosSender, BridgeHubZagrosPara as BridgeHubZagros,
@@ -36,7 +36,7 @@ macro_rules! foreign_balance_on {
( $chain:ident, $id:expr, $who:expr ) => {
emulated_integration_tests_common::impls::paste::paste! {
<$chain>::execute_with(|| {
type ForeignAssets = <$chain as [<$chain Pezpallet>]>::ForeignAssets;
type ForeignAssets = <$chain as [<$chain ParaPezpallet>]>::ForeignAssets;
<ForeignAssets as pezframe_support::traits::fungibles::Inspect<_>>::balance($id, $who)
})
}
@@ -48,7 +48,7 @@ macro_rules! assets_balance_on {
( $chain:ident, $id:expr, $who:expr ) => {
emulated_integration_tests_common::impls::paste::paste! {
<$chain>::execute_with(|| {
type Assets = <$chain as [<$chain Pezpallet>]>::Assets;
type Assets = <$chain as [<$chain ParaPezpallet>]>::Assets;
<Assets as pezframe_support::traits::fungibles::Inspect<_>>::balance($id, $who)
})
}
@@ -78,7 +78,7 @@ macro_rules! create_pool_with_wnd_on {
let signed_owner = <$chain as Chain>::RuntimeOrigin::signed(owner.clone());
let wnd_location: Location = Parent.into();
if $is_foreign {
assert_ok!(<$chain as [<$chain Pezpallet>]>::ForeignAssets::mint(
assert_ok!(<$chain as [<$chain ParaPezpallet>]>::ForeignAssets::mint(
signed_owner.clone(),
$asset_id.clone().into(),
owner.clone().into(),
@@ -89,7 +89,7 @@ macro_rules! create_pool_with_wnd_on {
Some(GeneralIndex(id)) => *id as u32,
_ => unreachable!(),
};
assert_ok!(<$chain as [<$chain Pezpallet>]>::Assets::mint(
assert_ok!(<$chain as [<$chain ParaPezpallet>]>::Assets::mint(
signed_owner.clone(),
asset_id.into(),
owner.clone().into(),
@@ -97,7 +97,7 @@ macro_rules! create_pool_with_wnd_on {
));
}
assert_ok!(<$chain as [<$chain Pezpallet>]>::AssetConversion::create_pool(
assert_ok!(<$chain as [<$chain ParaPezpallet>]>::AssetConversion::create_pool(
signed_owner.clone(),
Box::new(wnd_location.clone()),
Box::new($asset_id.clone()),
@@ -110,7 +110,7 @@ macro_rules! create_pool_with_wnd_on {
]
);
assert_ok!(<$chain as [<$chain Pezpallet>]>::AssetConversion::add_liquidity(
assert_ok!(<$chain as [<$chain ParaPezpallet>]>::AssetConversion::add_liquidity(
signed_owner,
Box::new(wnd_location),
Box::new($asset_id),
@@ -28,36 +28,36 @@ pezsp-runtime = { workspace = true }
# Pezkuwi
collectives-zagros-runtime = { workspace = true }
pezpallet-xcm = { workspace = true }
pezkuwi-runtime-common = { workspace = true, default-features = true }
pezpallet-xcm = { workspace = true }
xcm = { workspace = true }
xcm-executor = { workspace = true }
zagros-runtime-constants = { workspace = true, default-features = true }
# Pezcumulus
emulated-integration-tests-common = { workspace = true }
pezcumulus-pezpallet-teyrchain-system = { workspace = true }
pezcumulus-pezpallet-xcmp-queue = { workspace = true }
emulated-integration-tests-common = { workspace = true }
zagros-system-emulated-network = { workspace = true }
[features]
runtime-benchmarks = [
"collectives-zagros-runtime/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-treasury/runtime-benchmarks",
"pezpallet-utility/runtime-benchmarks",
"pezpallet-whitelist/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezkuwi-runtime-common/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-runtime-constants/runtime-benchmarks",
"zagros-system-emulated-network/runtime-benchmarks",
"collectives-zagros-runtime/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezkuwi-runtime-common/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-treasury/runtime-benchmarks",
"pezpallet-utility/runtime-benchmarks",
"pezpallet-whitelist/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-runtime-constants/runtime-benchmarks",
"zagros-system-emulated-network/runtime-benchmarks",
]
@@ -27,7 +27,9 @@ mod imports {
pub(crate) use zagros_system_emulated_network::{
asset_hub_zagros_emulated_chain::{
asset_hub_zagros_runtime::xcm_config::LocationToAccountId as AssetHubLocationToAccountId,
genesis::ED as ASSET_HUB_ZAGROS_ED, AssetHubZagrosParaPallet as AssetHubZagrosPallet,
genesis::ED as ASSET_HUB_ZAGROS_ED,
AssetHubZagrosParaPezpallet,
AssetHubZagrosParaPezpallet as AssetHubZagrosPallet,
},
collectives_zagros_emulated_chain::{
collectives_zagros_runtime::{
@@ -35,16 +37,21 @@ mod imports {
xcm_config::XcmConfig as CollectivesZagrosXcmConfig,
},
genesis::ED as COLLECTIVES_ZAGROS_ED,
CollectivesZagrosParaPallet as CollectivesZagrosPallet,
CollectivesZagrosParaPezpallet,
CollectivesZagrosParaPezpallet as CollectivesZagrosPallet,
},
coretime_zagros_emulated_chain::CoretimeZagrosParaPallet as CoretimeZagrosPallet,
people_zagros_emulated_chain::PeopleZagrosParaPallet as PeopleZagrosPallet,
pez_penpal_emulated_chain::{PenpalAssetOwner, PenpalBParaPallet as PenpalBPallet},
pezbridge_hub_zagros_emulated_chain::BridgeHubZagrosParaPallet as BridgeHubZagrosPallet,
coretime_zagros_emulated_chain::CoretimeZagrosParaPezpallet,
people_zagros_emulated_chain::PeopleZagrosParaPezpallet,
pez_penpal_emulated_chain::{
PenpalAssetOwner,
PenpalBParaPezpallet,
},
pezbridge_hub_zagros_emulated_chain::BridgeHubZagrosParaPezpallet,
zagros_emulated_chain::{
genesis::ED as ZAGROS_ED,
zagros_runtime::{governance as zagros_governance, OriginCaller as ZagrosOriginCaller},
ZagrosRelayPallet as ZagrosPallet,
ZagrosRelayPezpallet,
ZagrosRelayPezpallet as ZagrosPallet,
},
AssetHubZagrosPara as AssetHubZagros, AssetHubZagrosParaReceiver as AssetHubZagrosReceiver,
AssetHubZagrosParaSender as AssetHubZagrosSender, BridgeHubZagrosPara as BridgeHubZagros,
@@ -26,20 +26,20 @@ pezkuwichain-runtime-constants = { workspace = true, default-features = true }
xcm = { workspace = true }
# Pezcumulus
pezcumulus-pezpallet-teyrchain-system = { workspace = true, default-features = true }
emulated-integration-tests-common = { workspace = true }
pezcumulus-pezpallet-teyrchain-system = { workspace = true, default-features = true }
pezkuwichain-system-emulated-network = { workspace = true }
[features]
runtime-benchmarks = [
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezpallet-broker/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezkuwi-runtime-teyrchains/runtime-benchmarks",
"pezkuwichain-runtime-constants/runtime-benchmarks",
"pezkuwichain-system-emulated-network/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"xcm/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezkuwi-runtime-teyrchains/runtime-benchmarks",
"pezkuwichain-runtime-constants/runtime-benchmarks",
"pezkuwichain-system-emulated-network/runtime-benchmarks",
"pezpallet-broker/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -31,10 +31,12 @@ mod imports {
coretime_pezkuwichain_emulated_chain::{
coretime_pezkuwichain_runtime::ExistentialDeposit as CoretimePezkuwichainExistentialDeposit,
genesis::ED as CORETIME_PEZKUWICHAIN_ED,
CoretimePezkuwichainParaPallet as CoretimePezkuwichainPallet,
CoretimePezkuwichainParaPezpallet,
CoretimePezkuwichainParaPezpallet as CoretimePezkuwichainPallet,
},
pezkuwichain_emulated_chain::{
genesis::ED as PEZKUWICHAIN_ED, PezkuwichainRelayPallet as PezkuwichainPallet,
genesis::ED as PEZKUWICHAIN_ED,
PezkuwichainRelayPezpallet,
},
AssetHubPezkuwichainPara as AssetHubPezkuwichain,
AssetHubPezkuwichainParaReceiver as AssetHubPezkuwichainReceiver,
@@ -27,21 +27,21 @@ xcm-executor = { workspace = true }
zagros-runtime-constants = { workspace = true, default-features = true }
# Pezcumulus
pezcumulus-pezpallet-teyrchain-system = { workspace = true, default-features = true }
emulated-integration-tests-common = { workspace = true }
pezcumulus-pezpallet-teyrchain-system = { workspace = true, default-features = true }
zagros-system-emulated-network = { workspace = true }
[features]
runtime-benchmarks = [
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezpallet-broker/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezkuwi-runtime-teyrchains/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-runtime-constants/runtime-benchmarks",
"zagros-system-emulated-network/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezkuwi-runtime-teyrchains/runtime-benchmarks",
"pezpallet-broker/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-runtime-constants/runtime-benchmarks",
"zagros-system-emulated-network/runtime-benchmarks",
]
@@ -28,17 +28,26 @@ mod imports {
};
pub(crate) use zagros_system_emulated_network::{
asset_hub_zagros_emulated_chain::{
genesis::ED as ASSET_HUB_ZAGROS_ED, AssetHubZagrosParaPallet as AssetHubZagrosPallet,
genesis::ED as ASSET_HUB_ZAGROS_ED,
AssetHubZagrosParaPezpallet,
},
collectives_zagros_emulated_chain::CollectivesZagrosParaPallet as CollectivesZagrosPallet,
collectives_zagros_emulated_chain::CollectivesZagrosParaPezpallet,
coretime_zagros_emulated_chain::{
self, coretime_zagros_runtime::ExistentialDeposit as CoretimeZagrosExistentialDeposit,
genesis::ED as CORETIME_ZAGROS_ED, CoretimeZagrosParaPallet as CoretimeZagrosPallet,
genesis::ED as CORETIME_ZAGROS_ED,
CoretimeZagrosParaPezpallet,
CoretimeZagrosParaPezpallet as CoretimeZagrosPallet,
},
people_zagros_emulated_chain::PeopleZagrosParaPezpallet,
pez_penpal_emulated_chain::{
PenpalAssetOwner,
PenpalBParaPezpallet,
},
pezbridge_hub_zagros_emulated_chain::BridgeHubZagrosParaPezpallet,
zagros_emulated_chain::{
genesis::ED as ZAGROS_ED,
ZagrosRelayPezpallet,
},
people_zagros_emulated_chain::PeopleZagrosParaPallet as PeopleZagrosPallet,
pez_penpal_emulated_chain::{PenpalAssetOwner, PenpalBParaPallet as PenpalBPallet},
pezbridge_hub_zagros_emulated_chain::BridgeHubZagrosParaPallet as BridgeHubZagrosPallet,
zagros_emulated_chain::{genesis::ED as ZAGROS_ED, ZagrosRelayPallet as ZagrosPallet},
AssetHubZagrosPara as AssetHubZagros, AssetHubZagrosParaReceiver as AssetHubZagrosReceiver,
AssetHubZagrosParaSender as AssetHubZagrosSender, BridgeHubZagrosPara as BridgeHubZagros,
CollectivesZagrosPara as CollectivesZagros, CoretimeZagrosPara as CoretimeZagros,
@@ -37,16 +37,16 @@ zagros-system-emulated-network = { workspace = true }
[features]
runtime-benchmarks = [
"asset-hub-zagros-runtime/runtime-benchmarks",
"collectives-zagros-runtime/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-utility/runtime-benchmarks",
"pezpallet-whitelist/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-runtime/runtime-benchmarks",
"zagros-system-emulated-network/runtime-benchmarks",
"asset-hub-zagros-runtime/runtime-benchmarks",
"collectives-zagros-runtime/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-utility/runtime-benchmarks",
"pezpallet-whitelist/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-runtime/runtime-benchmarks",
"zagros-system-emulated-network/runtime-benchmarks",
]
@@ -31,13 +31,13 @@ teyrchains-common = { workspace = true, default-features = true }
[features]
runtime-benchmarks = [
"asset-test-pezutils/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezkuwichain-system-emulated-network/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
"asset-test-pezutils/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezkuwichain-system-emulated-network/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -32,10 +32,12 @@ mod imports {
xcm_config::XcmConfig as PeoplePezkuwichainXcmConfig,
ExistentialDeposit as PeoplePezkuwichainExistentialDeposit,
},
PeoplePezkuwichainParaPallet as PeoplePezkuwichainPallet,
PeoplePezkuwichainParaPezpallet,
PeoplePezkuwichainParaPezpallet as PeoplePezkuwichainPallet,
},
pezkuwichain_emulated_chain::{
genesis::ED as PEZKUWICHAIN_ED, PezkuwichainRelayPallet as PezkuwichainPallet,
genesis::ED as PEZKUWICHAIN_ED,
PezkuwichainRelayPezpallet,
},
AssetHubPezkuwichainPara as AssetHubPezkuwichain,
AssetHubPezkuwichainParaReceiver as AssetHubPezkuwichainReceiver,
@@ -36,16 +36,16 @@ zagros-system-emulated-network = { workspace = true }
[features]
runtime-benchmarks = [
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-identity/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-runtime/runtime-benchmarks",
"zagros-system-emulated-network/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-identity/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
"zagros-runtime/runtime-benchmarks",
"zagros-system-emulated-network/runtime-benchmarks",
]
@@ -27,19 +27,29 @@ mod imports {
};
pub(crate) use zagros_system_emulated_network::{
self,
asset_hub_zagros_emulated_chain::AssetHubZagrosParaPallet as AssetHubZagrosPallet,
collectives_zagros_emulated_chain::CollectivesZagrosParaPallet as CollectivesZagrosPallet,
coretime_zagros_emulated_chain::CoretimeZagrosParaPallet as CoretimeZagrosPallet,
asset_hub_zagros_emulated_chain::{
AssetHubZagrosParaPezpallet,
AssetHubZagrosParaPezpallet as AssetHubZagrosPallet,
},
collectives_zagros_emulated_chain::CollectivesZagrosParaPezpallet,
coretime_zagros_emulated_chain::CoretimeZagrosParaPezpallet,
people_zagros_emulated_chain::{
people_zagros_runtime::{
self, xcm_config::XcmConfig as PeopleZagrosXcmConfig,
ExistentialDeposit as PeopleZagrosExistentialDeposit,
},
PeopleZagrosParaPallet as PeopleZagrosPallet,
PeopleZagrosParaPezpallet,
PeopleZagrosParaPezpallet as PeopleZagrosPallet,
},
pez_penpal_emulated_chain::{
PenpalAssetOwner,
PenpalBParaPezpallet,
},
pezbridge_hub_zagros_emulated_chain::BridgeHubZagrosParaPezpallet,
zagros_emulated_chain::{
genesis::ED as ZAGROS_ED,
ZagrosRelayPezpallet,
},
pez_penpal_emulated_chain::{PenpalAssetOwner, PenpalBParaPallet as PenpalBPallet},
pezbridge_hub_zagros_emulated_chain::BridgeHubZagrosParaPallet as BridgeHubZagrosPallet,
zagros_emulated_chain::{genesis::ED as ZAGROS_ED, ZagrosRelayPallet as ZagrosPallet},
AssetHubZagrosPara as AssetHubZagros, AssetHubZagrosParaReceiver as AssetHubZagrosReceiver,
BridgeHubZagrosPara as BridgeHubZagros, CollectivesZagrosPara as CollectivesZagros,
CoretimeZagrosPara as CoretimeZagros, PenpalBPara as PenpalB,
@@ -39,13 +39,13 @@ pezpallet-bridge-messages = { workspace = true }
# Pezcumulus
asset-hub-pezkuwichain-runtime = { workspace = true }
pezcumulus-pezpallet-xcmp-queue = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pezcumulus-pezpallet-xcmp-queue = { workspace = true }
pezkuwichain-system-emulated-network = { workspace = true }
pezkuwichain-zagros-system-emulated-network = { workspace = true }
testnet-teyrchains-constants = { features = [
"pezkuwichain",
"zagros",
"pezkuwichain",
"zagros",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
@@ -58,28 +58,28 @@ pezsnowbridge-pezpallet-system = { workspace = true }
[features]
runtime-benchmarks = [
"asset-hub-pezkuwichain-runtime/runtime-benchmarks",
"bp-asset-hub-pezkuwichain/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezpallet-asset-conversion/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-bridge-messages/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezkuwichain-system-emulated-network/runtime-benchmarks",
"pezkuwichain-zagros-system-emulated-network/runtime-benchmarks",
"pezsnowbridge-inbound-queue-primitives/runtime-benchmarks",
"pezsnowbridge-outbound-queue-primitives/runtime-benchmarks",
"pezsnowbridge-pezpallet-inbound-queue-fixtures/runtime-benchmarks",
"pezsnowbridge-pezpallet-outbound-queue/runtime-benchmarks",
"pezsnowbridge-pezpallet-system/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
"asset-hub-pezkuwichain-runtime/runtime-benchmarks",
"bp-asset-hub-pezkuwichain/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezkuwichain-system-emulated-network/runtime-benchmarks",
"pezkuwichain-zagros-system-emulated-network/runtime-benchmarks",
"pezpallet-asset-conversion/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-bridge-messages/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsnowbridge-inbound-queue-primitives/runtime-benchmarks",
"pezsnowbridge-outbound-queue-primitives/runtime-benchmarks",
"pezsnowbridge-pezpallet-inbound-queue-fixtures/runtime-benchmarks",
"pezsnowbridge-pezpallet-outbound-queue/runtime-benchmarks",
"pezsnowbridge-pezpallet-system/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -46,25 +46,29 @@ mod imports {
xcm_config::TreasuryAccount, ForeignAssetReserveData,
},
genesis::ED as ASSET_HUB_PEZKUWICHAIN_ED,
AssetHubPezkuwichainParaPallet as AssetHubPezkuwichainPallet,
AssetHubPezkuwichainParaPezpallet,
AssetHubPezkuwichainParaPezpallet as AssetHubPezkuwichainPallet,
},
asset_hub_zagros_emulated_chain::{
genesis::{AssetHubZagrosAssetOwner, ED as ASSET_HUB_ZAGROS_ED},
AssetHubZagrosParaPallet as AssetHubZagrosPallet,
AssetHubZagrosParaPezpallet as AssetHubZagrosPallet,
},
pez_penpal_emulated_chain::{
pez_penpal_runtime::xcm_config::{
CustomizableAssetFromSystemAssetHub as PenpalCustomizableAssetFromSystemAssetHub,
UniversalLocation as PenpalUniversalLocation,
},
PenpalAParaPallet as PenpalAPallet, PenpalAssetOwner,
PenpalAParaPezpallet as PenpalAPallet,
PenpalAssetOwner,
},
pezbridge_hub_pezkuwichain_emulated_chain::{
genesis::ED as BRIDGE_HUB_PEZKUWICHAIN_ED, BridgeHubPezkuwichainExistentialDeposit,
BridgeHubPezkuwichainParaPallet as BridgeHubPezkuwichainPallet,
BridgeHubPezkuwichainParaPezpallet,
},
pezkuwichain_emulated_chain::{
genesis::ED as PEZKUWICHAIN_ED, PezkuwichainRelayPallet as PezkuwichainPallet,
genesis::ED as PEZKUWICHAIN_ED,
PezkuwichainRelayPezpallet,
PezkuwichainRelayPezpallet as PezkuwichainPallet,
},
AssetHubPezkuwichainPara as AssetHubPezkuwichain,
AssetHubPezkuwichainParaReceiver as AssetHubPezkuwichainReceiver,
@@ -42,14 +42,14 @@ pezpallet-bridge-relayers = { workspace = true }
asset-hub-zagros-runtime = { workspace = true }
bp-asset-hub-zagros = { workspace = true }
bridge-hub-common = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pezbridge-hub-zagros-runtime = { workspace = true }
pezcumulus-pezpallet-teyrchain-system = { workspace = true }
pezcumulus-pezpallet-xcmp-queue = { workspace = true }
emulated-integration-tests-common = { workspace = true }
pezkuwichain-zagros-system-emulated-network = { workspace = true }
testnet-teyrchains-constants = { features = [
"pezkuwichain",
"zagros",
"pezkuwichain",
"zagros",
], workspace = true, default-features = true }
teyrchains-common = { workspace = true, default-features = true }
@@ -67,37 +67,37 @@ pezsnowbridge-pezpallet-system-v2 = { workspace = true }
[features]
runtime-benchmarks = [
"asset-hub-zagros-runtime/runtime-benchmarks",
"bp-asset-hub-zagros/runtime-benchmarks",
"bridge-hub-common/runtime-benchmarks",
"pezbridge-hub-zagros-runtime/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezpallet-asset-conversion/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-bridge-messages/runtime-benchmarks",
"pezpallet-bridge-relayers/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezkuwichain-zagros-system-emulated-network/runtime-benchmarks",
"pezsnowbridge-core/runtime-benchmarks",
"pezsnowbridge-inbound-queue-primitives/runtime-benchmarks",
"pezsnowbridge-outbound-queue-primitives/runtime-benchmarks",
"pezsnowbridge-pezpallet-inbound-queue-fixtures/runtime-benchmarks",
"pezsnowbridge-pezpallet-inbound-queue-v2/runtime-benchmarks",
"pezsnowbridge-pezpallet-inbound-queue/runtime-benchmarks",
"pezsnowbridge-pezpallet-outbound-queue-v2/runtime-benchmarks",
"pezsnowbridge-pezpallet-outbound-queue/runtime-benchmarks",
"pezsnowbridge-pezpallet-system-v2/runtime-benchmarks",
"pezsnowbridge-pezpallet-system/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
"asset-hub-zagros-runtime/runtime-benchmarks",
"bp-asset-hub-zagros/runtime-benchmarks",
"bridge-hub-common/runtime-benchmarks",
"emulated-integration-tests-common/runtime-benchmarks",
"pezbridge-hub-zagros-runtime/runtime-benchmarks",
"pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks",
"pezcumulus-pezpallet-xcmp-queue/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezkuwichain-zagros-system-emulated-network/runtime-benchmarks",
"pezpallet-asset-conversion/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-bridge-messages/runtime-benchmarks",
"pezpallet-bridge-relayers/runtime-benchmarks",
"pezpallet-message-queue/runtime-benchmarks",
"pezpallet-xcm/runtime-benchmarks",
"pezsnowbridge-core/runtime-benchmarks",
"pezsnowbridge-inbound-queue-primitives/runtime-benchmarks",
"pezsnowbridge-outbound-queue-primitives/runtime-benchmarks",
"pezsnowbridge-pezpallet-inbound-queue-fixtures/runtime-benchmarks",
"pezsnowbridge-pezpallet-inbound-queue-v2/runtime-benchmarks",
"pezsnowbridge-pezpallet-inbound-queue/runtime-benchmarks",
"pezsnowbridge-pezpallet-outbound-queue-v2/runtime-benchmarks",
"pezsnowbridge-pezpallet-outbound-queue/runtime-benchmarks",
"pezsnowbridge-pezpallet-system-v2/runtime-benchmarks",
"pezsnowbridge-pezpallet-system/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"testnet-teyrchains-constants/runtime-benchmarks",
"teyrchains-common/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -49,11 +49,13 @@ mod imports {
xcm_config::TreasuryAccount, ForeignAssetReserveData,
},
genesis::ED as ASSET_HUB_PEZKUWICHAIN_ED,
AssetHubPezkuwichainParaPallet as AssetHubPezkuwichainPallet,
AssetHubPezkuwichainParaPezpallet,
AssetHubPezkuwichainParaPezpallet as AssetHubPezkuwichainPallet,
},
asset_hub_zagros_emulated_chain::{
genesis::{AssetHubZagrosAssetOwner, ED as ASSET_HUB_ZAGROS_ED},
AssetHubZagrosParaPallet as AssetHubZagrosPallet,
AssetHubZagrosParaPezpallet,
AssetHubZagrosParaPezpallet as AssetHubZagrosPallet,
},
pez_penpal_emulated_chain::{
self,
@@ -62,16 +64,25 @@ mod imports {
LocalTeleportableToAssetHub as PenpalLocalTeleportableToAssetHub,
UniversalLocation as PenpalUniversalLocation,
},
PenpalAParaPallet as PenpalAPallet, PenpalAssetOwner,
PenpalBParaPallet as PenpalBPallet,
PenpalAParaPezpallet,
PenpalAParaPezpallet as PenpalAPallet,
PenpalAssetOwner,
PenpalBParaPezpallet,
PenpalBParaPezpallet as PenpalBPallet,
},
pezbridge_hub_zagros_emulated_chain::{
genesis::ED as BRIDGE_HUB_ZAGROS_ED, pezbridge_hub_zagros_runtime,
BridgeHubZagrosExistentialDeposit, BridgeHubZagrosParaPallet as BridgeHubZagrosPallet,
BridgeHubZagrosExistentialDeposit,
BridgeHubZagrosParaPezpallet,
BridgeHubZagrosParaPezpallet as BridgeHubZagrosPallet,
BridgeHubZagrosRuntimeOrigin,
},
pezkuwichain_emulated_chain::PezkuwichainRelayPallet as PezkuwichainPallet,
zagros_emulated_chain::{genesis::ED as ZAGROS_ED, ZagrosRelayPallet as ZagrosPallet},
pezkuwichain_emulated_chain::PezkuwichainRelayPezpallet as PezkuwichainPallet,
zagros_emulated_chain::{
genesis::ED as ZAGROS_ED,
ZagrosRelayPezpallet,
ZagrosRelayPezpallet as ZagrosPallet,
},
AssetHubPezkuwichainPara as AssetHubPezkuwichain,
AssetHubPezkuwichainParaReceiver as AssetHubPezkuwichainReceiver,
AssetHubPezkuwichainParaSender as AssetHubPezkuwichainSender,
@@ -2,8 +2,8 @@
name = "pezpallet-collective-content"
version = "0.6.0"
authors = [
"Kurdistan Tech Institute <info@pezkuwichain.io>",
"Parity Technologies <admin@parity.io>",
"Kurdistan Tech Institute <info@pezkuwichain.io>",
"Parity Technologies <admin@parity.io>",
]
edition.workspace = true
description = "Managed content"
@@ -32,24 +32,24 @@ pezsp-io = { workspace = true }
[features]
default = ["std"]
runtime-benchmarks = [
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezsp-runtime/try-runtime",
]
std = [
"codec/std",
"pezframe-benchmarking/std",
"pezframe-support/std",
"pezframe-system/std",
"scale-info/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"codec/std",
"pezframe-benchmarking/std",
"pezframe-support/std",
"pezframe-system/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"scale-info/std",
]
@@ -15,16 +15,16 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { workspace = true, default-features = false, features = ["derive"] }
log = { default-features = false, workspace = true }
pezframe-benchmarking = { optional = true, workspace = true }
pezframe-support = { default-features = false, workspace = true }
pezframe-system = { default-features = false, workspace = true }
log = { default-features = false, workspace = true }
scale-info = { default-features = false, features = [
"derive",
], workspace = true }
pezsp-core = { 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",
], workspace = true }
# Projemizin özel tiplerini ve trait'lerini içeren kütüphane
pezkuwi-primitives = { workspace = true, default-features = false }
@@ -36,32 +36,32 @@ pezsp-io = { workspace = true }
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"log/std",
"pezpallet-balances/std",
"pezkuwi-primitives/std",
"scale-info/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"codec/std",
"log/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezkuwi-primitives/std",
"pezpallet-balances/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
]
runtime-benchmarks = [
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-balances/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-balances/try-runtime",
"pezsp-runtime/try-runtime",
]
@@ -1,9 +1,6 @@
//! Benchmarking setup for pezpallet-identity-kyc
#![cfg(feature = "runtime-benchmarks")]
use super::*;
use crate::Pezpallet as IdentityKyc;
use pezframe_benchmarking::v2::*;
use pezframe_support::traits::Currency;
use pezframe_system::RawOrigin;
@@ -132,5 +129,5 @@ mod benchmarks {
assert_eq!(KycStatuses::<T>::get(&applicant), KycLevel::NotStarted);
}
impl_benchmark_test_suite!(IdentityKyc, crate::mock::new_test_ext(), crate::mock::Test);
impl_benchmark_test_suite!(Pezpallet, crate::mock::new_test_ext(), crate::mock::Test);
}
@@ -123,9 +123,7 @@ pub mod pezpallet {
pub struct Pezpallet<T>(_);
#[pezpallet::config]
pub trait Config: pezframe_system::Config {
type RuntimeEvent: From<Event<Self>>
+ IsType<<Self as pezframe_system::Config>::RuntimeEvent>;
pub trait Config: pezframe_system::Config<RuntimeEvent: From<Event<Self>>> {
type Currency: ReservableCurrency<Self::AccountId>;
/// Origin that can revoke citizenship (governance/root)
@@ -410,7 +408,7 @@ pub mod pezpallet {
// Mint citizen NFT with self-confirmation (Welati tiki)
if let Err(e) = T::CitizenNftProvider::mint_citizen_nft_confirmed(&applicant) {
log::warn!("Failed to mint citizen NFT for {:?}: {:?}", applicant, e);
log::warn!("Failed to mint citizen NFT for {applicant:?}: {e:?}");
// Don't fail - user is still a citizen
}
@@ -441,7 +439,7 @@ pub mod pezpallet {
// Burn citizen NFT
if let Err(e) = T::CitizenNftProvider::burn_citizen_nft(&who) {
log::warn!("Failed to burn citizen NFT for {:?}: {:?}", who, e);
log::warn!("Failed to burn citizen NFT for {who:?}: {e:?}");
}
// Trigger direct responsibility penalty for the referrer
@@ -1,7 +1,7 @@
use crate as pezpallet_identity_kyc;
use pezframe_support::{
construct_runtime, derive_impl, parameter_types,
traits::{ConstU128, ConstU32},
traits::ConstU128,
};
use pezframe_system::EnsureRoot;
use pezsp_core::H256;
@@ -79,7 +79,6 @@ impl crate::types::CitizenNftProvider<AccountId> for MockCitizenNftProvider {
}
impl crate::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Currency = Balances;
type GovernanceOrigin = EnsureRoot<Self::AccountId>;
type WeightInfo = ();
@@ -124,6 +123,7 @@ pub fn new_test_ext() -> pezsp_io::TestExternalities {
}
/// Build test externalities without founding citizens (for edge case tests)
#[allow(dead_code)]
pub fn new_test_ext_empty() -> pezsp_io::TestExternalities {
let mut t = pezframe_system::GenesisConfig::<Test>::default().build_storage().unwrap();
@@ -16,16 +16,16 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { workspace = true, default-features = false, features = ["derive"] }
scale-info = { default-features = false, features = [
"derive",
"derive",
], workspace = true }
serde = { version = "1.0", default-features = false, features = [
"derive",
"derive",
], optional = true }
log = { default-features = false, workspace = true }
pezframe-benchmarking = { optional = true, workspace = true }
pezframe-support = { default-features = false, workspace = true }
pezframe-system = { default-features = false, workspace = true }
log = { default-features = false, workspace = true }
pezsp-runtime = { default-features = false, workspace = true }
pezsp-std = { default-features = false, workspace = true }
@@ -44,40 +44,40 @@ pezsp-io = { workspace = true, default-features = false, optional = true }
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"log/std",
"pezpallet-balances/std",
"pezpallet-collective/std",
"pezkuwi-primitives/std",
"scale-info/std",
"serde",
"serde?/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"codec/std",
"log/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezkuwi-primitives/std",
"pezpallet-balances/std",
"pezpallet-collective/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
"serde",
"serde?/std",
]
runtime-benchmarks = [
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-balances",
"pezpallet-balances?/runtime-benchmarks",
"pezpallet-collective",
"pezpallet-collective?/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezpallet-balances",
"pezpallet-balances?/runtime-benchmarks",
"pezpallet-collective",
"pezpallet-collective?/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-balances?/try-runtime",
"pezpallet-collective?/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-balances?/try-runtime",
"pezpallet-collective?/try-runtime",
"pezsp-runtime/try-runtime",
]
@@ -1,14 +1,10 @@
//! Benchmarking setup for pezpallet-perwerde
#![cfg(feature = "runtime-benchmarks")]
use super::{Pezpallet as Perwerde, *};
use pezframe_benchmarking::v2::*;
use pezframe_support::{pezpallet_prelude::Get, BoundedVec};
use pezframe_system::RawOrigin;
extern crate alloc;
use alloc::vec;
const SEED: u32 = 0;
// Helper function to create BoundedVec in benchmarks
fn create_bounded_vec<L: Get<u32>>(s: &[u8]) -> BoundedVec<u8, L> {
@@ -113,9 +113,7 @@ pub mod pezpallet {
pub struct Pezpallet<T>(_);
#[pezpallet::config]
pub trait Config: pezframe_system::Config {
type RuntimeEvent: From<Event<Self>>
+ IsType<<Self as pezframe_system::Config>::RuntimeEvent>;
pub trait Config: pezframe_system::Config<RuntimeEvent: From<Event<Self>>> {
type AdminOrigin: EnsureOrigin<Self::RuntimeOrigin, Success = Self::AccountId>;
type WeightInfo: WeightInfo;
@@ -103,7 +103,6 @@ impl SortedMembers<AccountId> for TestAdminProvider {
}
impl pezpallet_perwerde::Config for Test {
type RuntimeEvent = RuntimeEvent;
// AdminOrigin'i, kendi yazdığımız ve sadece 0'ı admin kabul eden sağlayıcıya bağlıyoruz.
type AdminOrigin = EnsureSignedBy<TestAdminProvider, AccountId>;
type WeightInfo = ();
@@ -183,7 +183,7 @@ fn student_can_enroll_multiple_courses() {
for i in 0..3 {
assert_ok!(PerwerdePallet::create_course(
RuntimeOrigin::signed(admin),
create_bounded_vec(format!("Course {}", i).as_bytes()),
create_bounded_vec(format!("Course {i}").as_bytes()),
create_bounded_vec(b"Description"),
create_bounded_vec(b"http://example.com")
));
@@ -213,7 +213,7 @@ fn enroll_fails_when_too_many_courses() {
for i in 0..50 {
assert_ok!(PerwerdePallet::create_course(
RuntimeOrigin::signed(admin),
create_bounded_vec(format!("Course {}", i).as_bytes()),
create_bounded_vec(format!("Course {i}").as_bytes()),
create_bounded_vec(b"Desc"),
create_bounded_vec(b"http://example.com")
));
@@ -431,7 +431,7 @@ fn student_completes_multiple_courses() {
for i in 0..3 {
assert_ok!(PerwerdePallet::create_course(
RuntimeOrigin::signed(admin),
create_bounded_vec(format!("Course {}", i).as_bytes()),
create_bounded_vec(format!("Course {i}").as_bytes()),
create_bounded_vec(b"Desc"),
create_bounded_vec(b"http://example.com")
));
@@ -605,7 +605,7 @@ fn next_course_id_increments_correctly() {
for i in 0..5 {
assert_ok!(PerwerdePallet::create_course(
RuntimeOrigin::signed(admin),
create_bounded_vec(format!("Course {}", i).as_bytes()),
create_bounded_vec(format!("Course {i}").as_bytes()),
create_bounded_vec(b"Desc"),
create_bounded_vec(b"http://example.com")
));
@@ -16,15 +16,15 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { workspace = true, default-features = false, features = ["derive"] }
scale-info = { default-features = false, features = [
"derive",
"derive",
], workspace = true }
serde = { version = "1.0", default-features = false, features = [
"derive",
"derive",
], optional = true }
log = { default-features = false, workspace = true }
pezframe-support = { default-features = false, workspace = true }
pezframe-system = { default-features = false, workspace = true }
log = { default-features = false, workspace = true }
pezsp-runtime = { default-features = false, workspace = true }
pezsp-std = { default-features = false, workspace = true }
@@ -48,19 +48,19 @@ pezsp-io = { workspace = true, default-features = false, optional = true }
[dev-dependencies]
# Test için gerekli olan bağımlılıklar
pezframe-system = { workspace = true, default-features = false, features = [
"std",
"std",
] }
pezpallet-assets = { workspace = true, default-features = false, features = [
"std",
"std",
] }
pezpallet-balances = { workspace = true, default-features = false, features = [
"std",
"std",
] }
pezpallet-identity-kyc = { workspace = true, default-features = false, features = [
"std",
"std",
] }
pezpallet-trust = { workspace = true, default-features = false, features = [
"std",
"std",
] }
pezsp-core = { workspace = true, default-features = false, features = ["std"] }
pezsp-io = { workspace = true, default-features = false, features = ["std"] }
@@ -68,53 +68,53 @@ pezsp-io = { workspace = true, default-features = false, features = ["std"] }
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"log/std",
"pezpallet-assets/std",
"pezpallet-balances/std",
"pezpallet-identity-kyc/std",
"pezpallet-nfts/std",
"pezpallet-pez-treasury/std",
"pezpallet-scheduler/std",
"pezpallet-trust/std",
"pezkuwi-primitives/std",
"scale-info/std",
"serde",
"serde?/std",
"pezsp-core?/std",
"pezsp-io?/std",
"pezsp-runtime/std",
"pezsp-std/std",
"codec/std",
"log/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezkuwi-primitives/std",
"pezpallet-assets/std",
"pezpallet-balances/std",
"pezpallet-identity-kyc/std",
"pezpallet-nfts/std",
"pezpallet-pez-treasury/std",
"pezpallet-scheduler/std",
"pezpallet-trust/std",
"pezsp-core?/std",
"pezsp-io?/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
"serde",
"serde?/std",
]
runtime-benchmarks = [
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-identity-kyc/runtime-benchmarks",
"pezpallet-nfts/runtime-benchmarks",
"pezpallet-pez-treasury/runtime-benchmarks",
"pezpallet-scheduler/runtime-benchmarks",
"pezpallet-trust/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-identity-kyc/runtime-benchmarks",
"pezpallet-nfts/runtime-benchmarks",
"pezpallet-pez-treasury/runtime-benchmarks",
"pezpallet-scheduler/runtime-benchmarks",
"pezpallet-trust/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-identity-kyc/try-runtime",
"pezpallet-nfts/try-runtime",
"pezpallet-pez-treasury/try-runtime",
"pezpallet-scheduler/try-runtime",
"pezpallet-trust/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-identity-kyc/try-runtime",
"pezpallet-nfts/try-runtime",
"pezpallet-pez-treasury/try-runtime",
"pezpallet-scheduler/try-runtime",
"pezpallet-trust/try-runtime",
"pezsp-runtime/try-runtime",
]
@@ -1,7 +1,5 @@
// pezkuwi/pallets/pez-rewards/src/benchmarking.rs
#![cfg(feature = "runtime-benchmarks")]
use super::{BalanceOf, Call, Config};
use crate::{Pezpallet as PezRewards, Pezpallet};
use pezframe_benchmarking::v2::*;
@@ -10,7 +8,7 @@ use pezframe_support::traits::{
Currency, Get,
};
use pezframe_system::{Pezpallet as System, RawOrigin};
use pezsp_runtime::traits::{Bounded, Saturating, StaticLookup, Zero}; // AccountIdConversion removed
use pezsp_runtime::traits::{Bounded, Saturating, Zero};
const SEED: u32 = 0;
@@ -58,7 +56,7 @@ mod benchmarks {
#[benchmark]
fn initialize_rewards_system() {
crate::EpochInfo::<T>::kill();
crate::EpochStatus::<T>::clear(u32::MAX, None);
let _ = crate::EpochStatus::<T>::clear(u32::MAX, None);
#[extrinsic_call]
initialize_rewards_system(RawOrigin::Root);
@@ -194,7 +194,6 @@ parameter_types! {
}
impl pezpallet_identity_kyc::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Currency = Balances;
type GovernanceOrigin = EnsureRoot<H256>;
type WeightInfo = ();
@@ -226,7 +225,6 @@ parameter_types! {
}
impl pezpallet_trust::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type Score = u128;
type ScoreMultiplierBase = ConstU128<1>;
@@ -267,7 +265,6 @@ impl crate::weights::WeightInfo for MockWeightInfo {
}
}
impl pezpallet_pez_rewards::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Assets = Assets;
type TrustScoreSource = MockTrustScore;
type IncentivePotId = IncentivePotId;
@@ -439,14 +439,14 @@ fn close_epoch_works_after_claim_period() {
assert_ok!(PezRewards::record_trust_score(RuntimeOrigin::signed(bob()))); // Claim edecek
let incentive_pot = PezRewards::incentive_pot_account_id();
let pot_balance_before_finalize = pez_balance(&incentive_pot);
let _pot_balance_before_finalize = pez_balance(&incentive_pot);
advance_blocks(crate::BLOCKS_PER_EPOCH as u64);
assert_ok!(PezRewards::finalize_epoch(RuntimeOrigin::root()));
let reward_pool = PezRewards::get_epoch_reward_pool(0).unwrap();
let alice_reward = reward_pool.reward_per_trust_point * 100;
let bob_reward = reward_pool.reward_per_trust_point * 50;
let _alice_reward = reward_pool.reward_per_trust_point * 100;
let _bob_reward = reward_pool.reward_per_trust_point * 50;
assert_ok!(PezRewards::claim_reward(RuntimeOrigin::signed(bob()), 0)); // Bob claim etti
@@ -16,15 +16,15 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { workspace = true, default-features = false, features = ["derive"] }
scale-info = { default-features = false, features = [
"derive",
"derive",
], workspace = true }
serde = { version = "1.0", default-features = false, features = [
"derive",
"derive",
], optional = true }
log = { default-features = false, workspace = true }
pezframe-support = { default-features = false, workspace = true }
pezframe-system = { default-features = false, workspace = true }
log = { default-features = false, workspace = true }
pezsp-runtime = { default-features = false, workspace = true }
pezsp-std = { default-features = false, workspace = true }
@@ -45,48 +45,48 @@ pezsp-io = { workspace = true, default-features = false, optional = true }
pezsp-core = { workspace = true, default-features = false }
pezsp-io = { workspace = true, default-features = false }
pezpallet-assets = { workspace = true, default-features = false, features = [
"std",
"std",
] } # <-- BU SATIRI EKLEYİN
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"log/std",
"pezpallet-assets/std",
"pezpallet-balances/std",
"pezpallet-scheduler/std",
"pezkuwi-primitives/std",
"scale-info/std",
"serde",
"serde?/std",
"pezsp-core?/std",
"pezsp-io?/std",
"pezsp-runtime/std",
"pezsp-std/std",
"codec/std",
"log/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezkuwi-primitives/std",
"pezpallet-assets/std",
"pezpallet-balances/std",
"pezpallet-scheduler/std",
"pezsp-core?/std",
"pezsp-io?/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
"serde",
"serde?/std",
]
runtime-benchmarks = [
"pezframe-benchmarking",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-scheduler/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezframe-benchmarking",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-scheduler/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-scheduler/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-scheduler/try-runtime",
"pezsp-runtime/try-runtime",
]
@@ -1,7 +1,5 @@
// pezkuwi/pallets/pez-treasury/src/benchmarking.rs
#![cfg(feature = "runtime-benchmarks")]
use super::*;
use crate::Pezpallet as PezTreasury;
use pezframe_benchmarking::v2::*;
@@ -58,7 +56,7 @@ mod benchmarks {
crate::NextReleaseMonth::<T>::kill();
crate::GenesisDistributionDone::<T>::kill();
// Deprecated `remove_all` yerine `clear` kullanılıyor.
crate::MonthlyReleases::<T>::clear(u32::MAX, None);
let _ = crate::MonthlyReleases::<T>::clear(u32::MAX, None);
// First do genesis distribution to properly fund the treasury
PezTreasury::<T>::do_genesis_distribution().unwrap();
@@ -22,9 +22,7 @@ pub mod v1 {
let current = Pezpallet::<T>::on_chain_storage_version();
log::info!(
"🔄 Running migration for pezpallet-pez-treasury from {:?} to {:?}",
current,
STORAGE_VERSION
"🔄 Running migration for pezpallet-pez-treasury from {current:?} to {STORAGE_VERSION:?}"
);
if current == StorageVersion::new(0) {
@@ -49,9 +47,8 @@ pub mod v1 {
// Update storage version
STORAGE_VERSION.put::<Pezpallet<T>>();
log::info!("✅ Migrated {} entries in pezpallet-pez-treasury", migrated);
log::info!(" MonthlyReleases: {}, HalvingInfo: {}, TreasuryStartBlock: {}, GenesisDistributionDone: {}",
monthly_releases_count, has_halving_info, has_treasury_start, has_genesis_done);
log::info!("✅ Migrated {migrated} entries in pezpallet-pez-treasury");
log::info!(" MonthlyReleases: {monthly_releases_count}, HalvingInfo: {has_halving_info}, TreasuryStartBlock: {has_treasury_start}, GenesisDistributionDone: {has_genesis_done}");
// Return weight used
// Reads: all storage items + version read
@@ -61,8 +58,7 @@ pub mod v1 {
weight
} else {
log::info!(
"👌 pezpallet-pez-treasury migration not needed, current version is {:?}",
current
"👌 pezpallet-pez-treasury migration not needed, current version is {current:?}"
);
T::DbWeight::get().reads(1)
}
@@ -70,10 +66,11 @@ pub mod v1 {
#[cfg(feature = "try-runtime")]
fn pre_upgrade() -> Result<pezsp_std::vec::Vec<u8>, pezsp_runtime::TryRuntimeError> {
use codec::Encode;
let current = Pezpallet::<T>::on_chain_storage_version();
log::info!("🔍 Pre-upgrade check for pezpallet-pez-treasury");
log::info!(" Current version: {:?}", current);
log::info!(" Current version: {current:?}");
// Encode current storage counts for verification
let monthly_releases_count = MonthlyReleases::<T>::iter().count() as u32;
@@ -81,10 +78,10 @@ pub mod v1 {
let has_treasury_start = TreasuryStartBlock::<T>::get().is_some();
let genesis_done = GenesisDistributionDone::<T>::get();
log::info!(" MonthlyReleases entries: {}", monthly_releases_count);
log::info!(" NextReleaseMonth: {}", next_release_month);
log::info!(" TreasuryStartBlock exists: {}", has_treasury_start);
log::info!(" GenesisDistributionDone: {}", genesis_done);
log::info!(" MonthlyReleases entries: {monthly_releases_count}");
log::info!(" NextReleaseMonth: {next_release_month}");
log::info!(" TreasuryStartBlock exists: {has_treasury_start}");
log::info!(" GenesisDistributionDone: {genesis_done}");
Ok((monthly_releases_count, next_release_month, has_treasury_start, genesis_done)
.encode())
@@ -109,7 +106,7 @@ pub mod v1 {
// Verify storage version was updated
let current_version = Pezpallet::<T>::on_chain_storage_version();
assert_eq!(current_version, STORAGE_VERSION, "Storage version not updated correctly");
log::info!("✅ Storage version updated to {:?}", current_version);
log::info!("✅ Storage version updated to {current_version:?}");
// Verify storage counts (should be same or more, never less)
let post_monthly_releases_count = MonthlyReleases::<T>::iter().count() as u32;
@@ -118,21 +115,15 @@ pub mod v1 {
let post_genesis_done = GenesisDistributionDone::<T>::get();
log::info!(
" MonthlyReleases entries: {} -> {}",
pre_monthly_releases_count,
post_monthly_releases_count
" MonthlyReleases entries: {pre_monthly_releases_count} -> {post_monthly_releases_count}"
);
log::info!(
" NextReleaseMonth: {} -> {}",
pre_next_release_month,
post_next_release_month
" NextReleaseMonth: {pre_next_release_month} -> {post_next_release_month}"
);
log::info!(
" TreasuryStartBlock exists: {} -> {}",
pre_has_treasury_start,
post_has_treasury_start
" TreasuryStartBlock exists: {pre_has_treasury_start} -> {post_has_treasury_start}"
);
log::info!(" GenesisDistributionDone: {} -> {}", pre_genesis_done, post_genesis_done);
log::info!(" GenesisDistributionDone: {pre_genesis_done} -> {post_genesis_done}");
// Verify no data was lost
assert!(
@@ -1,7 +1,7 @@
// pezkuwi/pallets/pez-treasury/src/mock.rs
// VERSION 3: AccountId tipi H256 yapıldı (u64 yerine)
use crate as pezpallet_pez_treasury;
use crate::{self as pezpallet_pez_treasury, weights};
use pezframe_support::{
assert_ok, construct_runtime, parameter_types,
traits::{ConstU128, ConstU32, OnFinalize, OnInitialize},
@@ -155,9 +155,8 @@ parameter_types! {
}
impl pezpallet_pez_treasury::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Assets = Assets;
type WeightInfo = ();
type WeightInfo = weights::BizinikiwiWeight<Test>;
type PezAssetId = PezAssetId;
type TreasuryPalletId = PezTreasuryPalletId;
type IncentivePotId = PezIncentivePotId;
@@ -545,9 +545,9 @@ fn pot_accounts_are_different() {
let government = PezTreasury::government_pot_account_id();
println!("\n=== Account IDs from Pezpallet ===");
println!("Treasury: {:?}", treasury);
println!("Incentive: {:?}", incentive);
println!("Government: {:?}", government);
println!("Treasury: {treasury:?}");
println!("Incentive: {incentive:?}");
println!("Government: {government:?}");
println!("================================\n");
// Tüm üçü farklı olmalı
@@ -832,8 +832,6 @@ fn treasury_never_goes_negative() {
let after_balance = Assets::balance(PezAssetId::get(), treasury_account());
// Balance should decrease or stay the same, never increase
assert!(after_balance <= before_balance);
// Balance should never go below zero
assert!(after_balance >= 0);
} else {
// If release fails, balance should be unchanged
assert_eq!(before_balance, Assets::balance(PezAssetId::get(), treasury_account()));
@@ -942,7 +940,7 @@ fn first_period_total_is_half_of_treasury() {
let diff = expected_first_period.saturating_sub(first_period_total);
// Kalanların toplamı 48'den az olmalı (her ay en fazla 1 birim kalan)
assert!(diff < 48, "Rounding error too large: {}", diff);
assert!(diff < 48, "Rounding error too large: {diff}");
});
}
@@ -964,6 +962,6 @@ fn geometric_series_sum_validates() {
// first_period_total * 2 = treasury_allocation
let diff = treasury_allocation.saturating_sub(first_period_total * 2);
// Kalanların toplamı (2 ile çarpılmış) 96'dan az olmalı
assert!(diff < 96, "Rounding error too large: {}", diff);
assert!(diff < 96, "Rounding error too large: {diff}");
});
}
@@ -28,26 +28,26 @@ pezcumulus-primitives-core = { workspace = true }
[features]
default = ["std"]
std = [
"codec/std",
"pezcumulus-pezpallet-xcm/std",
"pezcumulus-primitives-core/std",
"pezframe-support/std",
"pezframe-system/std",
"scale-info/std",
"pezsp-runtime/std",
"xcm/std",
"codec/std",
"pezcumulus-pezpallet-xcm/std",
"pezcumulus-primitives-core/std",
"pezframe-support/std",
"pezframe-system/std",
"pezsp-runtime/std",
"scale-info/std",
"xcm/std",
]
try-runtime = [
"pezcumulus-pezpallet-xcm/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezsp-runtime/try-runtime",
"pezcumulus-pezpallet-xcm/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezsp-runtime/try-runtime",
]
runtime-benchmarks = [
"pezcumulus-pezpallet-xcm/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"xcm/runtime-benchmarks",
"pezcumulus-pezpallet-xcm/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"xcm/runtime-benchmarks",
]
@@ -15,12 +15,12 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "3.6.12", default-features = false, features = [
"derive",
"max-encoded-len",
"derive",
"max-encoded-len",
] }
log = { default-features = false, workspace = true }
scale-info = { default-features = false, features = [
"derive",
"derive",
], workspace = true }
serde = { features = ["alloc", "derive"], workspace = true }
@@ -41,34 +41,34 @@ pezsp-io = { workspace = true }
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"log/std",
"pezpallet-assets/std",
"pezpallet-balances?/std",
"scale-info/std",
"serde/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"codec/std",
"log/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezpallet-assets/std",
"pezpallet-balances?/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
"serde/std",
]
runtime-benchmarks = [
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances",
"pezpallet-balances?/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances",
"pezpallet-balances?/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-balances?/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-balances?/try-runtime",
"pezsp-runtime/try-runtime",
]
@@ -6,47 +6,13 @@
//! - finalize_presale (with O(N) contributor loop)
//! - refund_cancelled_presale, batch_refund_failed_presale
#![cfg(feature = "runtime-benchmarks")]
use super::*;
#[allow(unused)]
use crate::Pezpallet as Presale;
use pezframe_benchmarking::v2::*;
use pezframe_support::traits::fungibles::{Create, Mutate};
use pezframe_support::traits::fungibles::Mutate;
use pezframe_system::RawOrigin;
/// Helper trait for benchmark asset setup
pub trait BenchmarkHelper<AssetId, AccountId> {
/// Create an asset ID from seed
fn create_asset_id(seed: u32) -> AssetId;
/// Setup assets for benchmarking (create and mint)
fn setup_assets(
payment_asset: AssetId,
reward_asset: AssetId,
admin: &AccountId,
accounts: &[AccountId],
payment_amount: u128,
reward_amount: u128,
);
}
impl<AssetId: From<u32>, AccountId> BenchmarkHelper<AssetId, AccountId> for () {
fn create_asset_id(seed: u32) -> AssetId {
seed.into()
}
fn setup_assets(
_payment_asset: AssetId,
_reward_asset: AssetId,
_admin: &AccountId,
_accounts: &[AccountId],
_payment_amount: u128,
_reward_amount: u128,
) {
// Default implementation does nothing
// Runtime should provide actual implementation
}
}
#[benchmarks(
where
T::AssetId: From<u32>,
@@ -78,28 +44,28 @@ mod benchmarks {
// Create assets if they don't exist (ignore errors if already created)
let min_balance: T::Balance = 1u128.into();
let _ = T::Assets::create(payment_asset.clone(), caller.clone(), true, min_balance);
let _ = T::Assets::create(reward_asset.clone(), caller.clone(), true, min_balance);
let _ = T::Assets::create(payment_asset, caller.clone(), true, min_balance);
let _ = T::Assets::create(reward_asset, caller.clone(), true, min_balance);
// Mint payment tokens to caller for contributions
let payment_amount: T::Balance = 100_000_000u128.into();
let _ = T::Assets::mint_into(payment_asset.clone(), caller, payment_amount);
let _ = T::Assets::mint_into(payment_asset, caller, payment_amount);
// Mint payment tokens to platform accounts for fee distribution
let _ = T::Assets::mint_into(
payment_asset.clone(),
payment_asset,
&T::PlatformTreasury::get(),
payment_amount,
);
let _ = T::Assets::mint_into(
payment_asset.clone(),
payment_asset,
&T::StakingRewardPool::get(),
payment_amount,
);
// Mint reward tokens to presale treasury for distribution
let reward_amount: T::Balance = 10_000_000_000u128.into();
let _ = T::Assets::mint_into(reward_asset.clone(), presale_treasury, reward_amount);
let _ = T::Assets::mint_into(reward_asset, presale_treasury, reward_amount);
(payment_asset, reward_asset)
}
@@ -117,24 +83,39 @@ mod benchmarks {
{
let presale_id = NextPresaleId::<T>::get();
let vesting = if enable_vesting {
Some(crate::VestingSchedule {
immediate_release_percent: 20u8,
vesting_duration_blocks: 100u32.into(),
cliff_blocks: 10u32.into(),
})
} else {
None
};
let params = crate::PresaleCreationParams {
tokens_for_sale: 10_000_000_000u128,
duration: 1000u32.into(),
is_whitelist,
limits: crate::ContributionLimits {
min_contribution: 100u128,
max_contribution: 10_000_000u128,
soft_cap: 1_000_000u128,
hard_cap: 100_000_000u128,
},
vesting,
refund_config: crate::RefundConfig {
grace_period_blocks: 10u32.into(),
refund_fee_percent: 5u8,
grace_refund_fee_percent: 2u8,
},
};
let _ = Presale::<T>::create_presale(
RawOrigin::Signed(caller.clone()).into(),
payment_asset,
reward_asset,
10_000_000_000u128, // tokens_for_sale (10M)
1000u32.into(), // duration (long enough for tests)
is_whitelist,
100u128, // min_contribution
10_000_000u128, // max_contribution
1_000_000u128, // soft_cap
100_000_000u128, // hard_cap
enable_vesting,
if enable_vesting { 20u8 } else { 0u8 }, // 20% immediate if vesting
if enable_vesting { 100u32.into() } else { 0u32.into() }, // vesting_duration
if enable_vesting { 10u32.into() } else { 0u32.into() }, // cliff
10u32.into(), // grace_period_blocks
5u8, // refund_fee_percent
2u8, // grace_refund_fee_percent
params,
);
presale_id
@@ -146,26 +127,26 @@ mod benchmarks {
let payment_asset = get_asset_id::<T>(1);
let reward_asset = get_asset_id::<T>(2);
let params = crate::PresaleCreationParams {
tokens_for_sale: 1_000_000u128,
duration: 100u32.into(),
is_whitelist: false,
limits: crate::ContributionLimits {
min_contribution: 100u128,
max_contribution: 10_000u128,
soft_cap: 500_000u128,
hard_cap: 1_000_000u128,
},
vesting: None,
refund_config: crate::RefundConfig {
grace_period_blocks: 10u32.into(),
refund_fee_percent: 5u8,
grace_refund_fee_percent: 10u8,
},
};
#[extrinsic_call]
create_presale(
RawOrigin::Signed(caller),
payment_asset,
reward_asset,
1_000_000u128, // tokens_for_sale
100u32.into(), // duration
false, // is_whitelist
100u128, // min_contribution
10_000u128, // max_contribution
500_000u128, // soft_cap
1_000_000u128, // hard_cap
false, // enable_vesting
0u8, // vesting_immediate_percent
0u32.into(), // vesting_duration_blocks
0u32.into(), // vesting_cliff_blocks
10u32.into(), // grace_period_blocks
5u8, // refund_fee_percent
10u8, // grace_refund_fee_percent
);
create_presale(RawOrigin::Signed(caller), payment_asset, reward_asset, params);
// Verify presale was created
assert!(crate::Presales::<T>::contains_key(0));
@@ -270,7 +251,7 @@ mod benchmarks {
// Mint EXTRA reward tokens to presale treasury to prevent account death
let extra_reward: T::Balance = 100_000_000_000u128.into();
let _ = T::Assets::mint_into(reward_asset.clone(), &presale_treasury, extra_reward);
let _ = T::Assets::mint_into(reward_asset, &presale_treasury, extra_reward);
// Create presale WITH vesting (will get the presale_id we calculated)
let _ = create_test_presale::<T>(&caller, payment_asset, reward_asset, false, true);
@@ -309,7 +290,7 @@ mod benchmarks {
// Create presale (will get the presale_id we calculated)
let _ =
create_test_presale::<T>(&caller, payment_asset.clone(), reward_asset, false, false);
create_test_presale::<T>(&caller, payment_asset, reward_asset, false, false);
// Make a contribution
let amount: u128 = 10_000u128;
@@ -346,8 +327,8 @@ mod benchmarks {
// Create presale (will get the presale_id we calculated)
let _ = create_test_presale::<T>(
&caller,
payment_asset.clone(),
reward_asset.clone(),
payment_asset,
reward_asset,
false,
false,
);
@@ -358,7 +339,7 @@ mod benchmarks {
// Mint payment tokens to contributor
let contribution_amount: T::Balance = 50_000u128.into();
let _ = T::Assets::mint_into(payment_asset.clone(), &contributor, contribution_amount);
let _ = T::Assets::mint_into(payment_asset, &contributor, contribution_amount);
// Make contribution
let _ = Presale::<T>::contribute(
@@ -394,24 +375,28 @@ mod benchmarks {
let (payment_asset, reward_asset) = setup_benchmark_assets::<T>(&caller, &presale_treasury);
// Create presale with HIGH soft cap (will fail)
let params = crate::PresaleCreationParams {
tokens_for_sale: 10_000_000_000u128,
duration: 1000u32.into(),
is_whitelist: false,
limits: crate::ContributionLimits {
min_contribution: 100u128,
max_contribution: 10_000_000u128,
soft_cap: 1_000_000_000_000u128, // very high - will fail
hard_cap: 2_000_000_000_000u128,
},
vesting: None,
refund_config: crate::RefundConfig {
grace_period_blocks: 10u32.into(),
refund_fee_percent: 5u8,
grace_refund_fee_percent: 2u8,
},
};
let _ = Presale::<T>::create_presale(
RawOrigin::Signed(caller.clone()).into(),
payment_asset.clone(),
payment_asset,
reward_asset,
10_000_000_000u128, // tokens_for_sale
1000u32.into(), // duration
false,
100u128, // min_contribution
10_000_000u128, // max_contribution
1_000_000_000_000u128, // soft_cap (very high - will fail)
2_000_000_000_000u128, // hard_cap
false,
0u8,
0u32.into(),
0u32.into(),
10u32.into(),
5u8,
2u8,
params,
);
// Add n contributors (small amounts that won't reach soft cap)
@@ -420,7 +405,7 @@ mod benchmarks {
// Mint payment tokens to contributor
let contribution_amount: T::Balance = 50_000u128.into();
let _ = T::Assets::mint_into(payment_asset.clone(), &contributor, contribution_amount);
let _ = T::Assets::mint_into(payment_asset, &contributor, contribution_amount);
// Make small contribution
let _ = Presale::<T>::contribute(
@@ -432,7 +417,7 @@ mod benchmarks {
// Mint payment tokens to presale treasury for refunds
let refund_pool: T::Balance = (n as u128 * 10_000u128).into();
let _ = T::Assets::mint_into(payment_asset.clone(), &presale_treasury, refund_pool);
let _ = T::Assets::mint_into(payment_asset, &presale_treasury, refund_pool);
// Advance blocks past presale end
pezframe_system::Pezpallet::<T>::set_block_number(2000u32.into());
@@ -45,6 +45,7 @@ extern crate alloc;
#[pezframe_support::pezpallet]
pub mod pezpallet {
use super::*;
use codec::DecodeWithMemTracking;
use pezframe_support::{
dispatch::DispatchResult,
pezpallet_prelude::*,
@@ -59,7 +60,7 @@ pub mod pezpallet {
pub type PresaleId = u32;
#[derive(Clone, Copy, Encode, Decode, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[derive(Clone, Copy, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
pub enum PresaleStatus {
Pending, // Not started yet
@@ -71,7 +72,7 @@ pub mod pezpallet {
Finalized, // Tokens distributed (after Successful)
}
#[derive(Clone, Copy, Encode, Decode, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[derive(Clone, Copy, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[codec(dumb_trait_bound)]
pub enum AccessControl {
@@ -79,7 +80,7 @@ pub mod pezpallet {
Whitelist, // Only whitelisted accounts
}
#[derive(Clone, Copy, Encode, Decode, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[derive(Clone, Copy, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[codec(dumb_trait_bound)]
pub struct BonusTier {
@@ -89,7 +90,7 @@ pub mod pezpallet {
pub bonus_percentage: u8,
}
#[derive(Clone, Copy, Encode, Decode, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[derive(Clone, Copy, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[codec(dumb_trait_bound)]
pub struct VestingSchedule<BlockNumber> {
@@ -101,7 +102,7 @@ pub mod pezpallet {
pub cliff_blocks: BlockNumber,
}
#[derive(Clone, Copy, Encode, Decode, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[derive(Clone, Copy, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[codec(dumb_trait_bound)]
pub struct ContributionLimits {
@@ -115,7 +116,37 @@ pub mod pezpallet {
pub hard_cap: u128,
}
#[derive(Clone, Copy, Encode, Decode, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[derive(Clone, Copy, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[codec(dumb_trait_bound)]
pub struct RefundConfig<BlockNumber> {
/// Grace period for refunds (blocks) - low fee
pub grace_period_blocks: BlockNumber,
/// Normal refund fee percentage (0-100)
pub refund_fee_percent: u8,
/// Grace period refund fee percentage (0-100)
pub grace_refund_fee_percent: u8,
}
#[derive(Clone, Copy, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[codec(dumb_trait_bound)]
pub struct PresaleCreationParams<BlockNumber> {
/// Total tokens for sale (with decimals)
pub tokens_for_sale: u128,
/// Presale duration in blocks
pub duration: BlockNumber,
/// Whether presale requires whitelist
pub is_whitelist: bool,
/// Contribution limits (min, max, soft cap, hard cap)
pub limits: ContributionLimits,
/// Optional vesting schedule
pub vesting: Option<VestingSchedule<BlockNumber>>,
/// Refund configuration
pub refund_config: RefundConfig<BlockNumber>,
}
#[derive(Clone, Copy, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
#[codec(dumb_trait_bound)]
pub struct ContributionInfo<BlockNumber> {
@@ -131,7 +162,7 @@ pub mod pezpallet {
pub refund_fee_paid: u128,
}
#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)]
#[derive(Clone, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)]
#[scale_info(skip_type_params(T, MaxBonusTiers))]
#[codec(mel_bound(T: Config, MaxBonusTiers: Get<u32>))]
pub struct PresaleConfig<T: Config, MaxBonusTiers: Get<u32>> {
@@ -380,34 +411,26 @@ pub mod pezpallet {
#[pezpallet::call]
impl<T: Config> Pezpallet<T> {
/// Create a new presale
///
/// Parameters are grouped into structs for cleaner API:
/// - `payment_asset`: The asset used for contributions (e.g., wUSDT)
/// - `reward_asset`: The token being sold
/// - `params`: Creation parameters including limits, vesting, and refund config
#[pezpallet::call_index(0)]
#[pezpallet::weight(T::PresaleWeightInfo::create_presale())]
pub fn create_presale(
origin: OriginFor<T>,
payment_asset: T::AssetId,
reward_asset: T::AssetId,
tokens_for_sale: u128,
duration: BlockNumberFor<T>,
is_whitelist: bool,
min_contribution: u128,
max_contribution: u128,
soft_cap: u128,
hard_cap: u128,
enable_vesting: bool,
vesting_immediate_percent: u8,
vesting_duration_blocks: BlockNumberFor<T>,
vesting_cliff_blocks: BlockNumberFor<T>,
grace_period_blocks: BlockNumberFor<T>,
refund_fee_percent: u8,
grace_refund_fee_percent: u8,
params: PresaleCreationParams<BlockNumberFor<T>>,
) -> DispatchResult {
let owner = ensure_signed(origin)?;
ensure!(tokens_for_sale > 0, Error::<T>::InvalidTokensForSale);
ensure!(soft_cap > 0, Error::<T>::InvalidTokensForSale);
ensure!(soft_cap <= hard_cap, Error::<T>::InvalidTokensForSale);
ensure!(refund_fee_percent <= 100, Error::<T>::InvalidFeePercent);
ensure!(grace_refund_fee_percent <= 100, Error::<T>::InvalidFeePercent);
ensure!(params.tokens_for_sale > 0, Error::<T>::InvalidTokensForSale);
ensure!(params.limits.soft_cap > 0, Error::<T>::InvalidTokensForSale);
ensure!(params.limits.soft_cap <= params.limits.hard_cap, Error::<T>::InvalidTokensForSale);
ensure!(params.refund_config.refund_fee_percent <= 100, Error::<T>::InvalidFeePercent);
ensure!(params.refund_config.grace_refund_fee_percent <= 100, Error::<T>::InvalidFeePercent);
let presale_id = NextPresaleId::<T>::get();
let start_block = <pezframe_system::Pezpallet<T>>::block_number();
@@ -416,36 +439,23 @@ pub mod pezpallet {
let bounded_bonus_tiers = BoundedVec::<BonusTier, T::MaxBonusTiers>::default();
let access_control =
if is_whitelist { AccessControl::Whitelist } else { AccessControl::Public };
let limits =
ContributionLimits { min_contribution, max_contribution, soft_cap, hard_cap };
let vesting = if enable_vesting {
Some(VestingSchedule {
immediate_release_percent: vesting_immediate_percent,
vesting_duration_blocks,
cliff_blocks: vesting_cliff_blocks,
})
} else {
None
};
if params.is_whitelist { AccessControl::Whitelist } else { AccessControl::Public };
let config = PresaleConfig {
owner: owner.clone(),
payment_asset: payment_asset.clone(),
reward_asset: reward_asset.clone(),
tokens_for_sale,
payment_asset,
reward_asset,
tokens_for_sale: params.tokens_for_sale,
start_block,
duration,
duration: params.duration,
status: PresaleStatus::Active,
access_control,
limits,
limits: params.limits,
bonus_tiers: bounded_bonus_tiers,
vesting,
grace_period_blocks,
refund_fee_percent,
grace_refund_fee_percent,
vesting: params.vesting,
grace_period_blocks: params.refund_config.grace_period_blocks,
refund_fee_percent: params.refund_config.refund_fee_percent,
grace_refund_fee_percent: params.refund_config.grace_refund_fee_percent,
};
Presales::<T>::insert(presale_id, config);
@@ -517,10 +527,9 @@ pub mod pezpallet {
// Transfer payment asset from user to presale treasury
let treasury = Self::presale_account_id(presale_id);
let net_amount_balance: T::Balance =
net_amount.try_into().map_err(|_| Error::<T>::ArithmeticOverflow)?;
let net_amount_balance: T::Balance = net_amount.into();
T::Assets::transfer(
presale.payment_asset.clone(),
presale.payment_asset,
&who,
&treasury,
net_amount_balance,
@@ -528,7 +537,7 @@ pub mod pezpallet {
)?;
// Distribute platform fee
Self::distribute_platform_fee(presale.payment_asset.clone(), &who, platform_fee)?;
Self::distribute_platform_fee(presale.payment_asset, &who, platform_fee)?;
// Track contribution with timestamp preservation
let contribution = if let Some(existing) = existing_contribution {
@@ -634,10 +643,9 @@ pub mod pezpallet {
100;
if immediate > 0 {
let immediate_balance: T::Balance =
immediate.try_into().map_err(|_| Error::<T>::ArithmeticOverflow)?;
let immediate_balance: T::Balance = immediate.into();
T::Assets::transfer(
presale.reward_asset.clone(),
presale.reward_asset,
&treasury,
contributor,
immediate_balance,
@@ -649,10 +657,9 @@ pub mod pezpallet {
VestingClaimed::<T>::insert(presale_id, contributor, immediate);
} else {
// No vesting - transfer all
let total_reward_balance: T::Balance =
total_reward.try_into().map_err(|_| Error::<T>::ArithmeticOverflow)?;
let total_reward_balance: T::Balance = total_reward.into();
T::Assets::transfer(
presale.reward_asset.clone(),
presale.reward_asset,
&treasury,
contributor,
total_reward_balance,
@@ -731,9 +738,9 @@ pub mod pezpallet {
// Step 1: Transfer refund amount to user
let refund_amount_balance: T::Balance =
refund_amount.try_into().map_err(|_| Error::<T>::ArithmeticOverflow)?;
refund_amount.into();
T::Assets::transfer(
presale.payment_asset.clone(),
presale.payment_asset,
&treasury,
&who,
refund_amount_balance,
@@ -743,7 +750,7 @@ pub mod pezpallet {
// Step 2: Distribute fee from remaining treasury balance
// Treasury now has exactly 'fee' amount left from this contribution
if fee > 0 {
Self::distribute_platform_fee(presale.payment_asset.clone(), &treasury, fee)?;
Self::distribute_platform_fee(presale.payment_asset, &treasury, fee)?;
}
// Update contribution info (mark as refunded instead of removing)
@@ -825,7 +832,7 @@ pub mod pezpallet {
// Transfer tokens
let treasury = Self::presale_account_id(presale_id);
let claimable_balance: T::Balance =
claimable.try_into().map_err(|_| Error::<T>::ArithmeticOverflow)?;
claimable.into();
T::Assets::transfer(
presale.reward_asset,
&treasury,
@@ -921,11 +928,10 @@ pub mod pezpallet {
let refund_amount: T::Balance = contribution_info
.amount
.saturating_sub(non_refundable)
.try_into()
.map_err(|_| Error::<T>::ArithmeticOverflow)?;
.into();
T::Assets::transfer(
presale.payment_asset.clone(),
presale.payment_asset,
&treasury,
contributor,
refund_amount,
@@ -1000,11 +1006,10 @@ pub mod pezpallet {
let refund_amount: T::Balance = contribution_info
.amount
.saturating_sub(non_refundable)
.try_into()
.map_err(|_| Error::<T>::ArithmeticOverflow)?;
.into();
T::Assets::transfer(
presale.payment_asset.clone(),
presale.payment_asset,
&treasury,
contributor,
refund_amount,
@@ -1078,11 +1083,11 @@ pub mod pezpallet {
let to_stakers = total_fee.saturating_mul(25) / 100; // 25%
let to_treasury_balance: T::Balance =
to_treasury.try_into().map_err(|_| Error::<T>::ArithmeticOverflow)?;
to_treasury.into();
let to_burn_balance: T::Balance =
to_burn.try_into().map_err(|_| Error::<T>::ArithmeticOverflow)?;
to_burn.into();
let to_stakers_balance: T::Balance =
to_stakers.try_into().map_err(|_| Error::<T>::ArithmeticOverflow)?;
to_stakers.into();
// Note: Balance check removed - rely on Preservation::Expendable to handle insufficient
// balance gracefully The operations below will transfer/burn as much as possible
@@ -1090,7 +1095,7 @@ pub mod pezpallet {
// 1. Treasury (50%)
T::Assets::transfer(
asset_id.clone(),
asset_id,
from,
&T::PlatformTreasury::get(),
to_treasury_balance,
@@ -1099,7 +1104,7 @@ pub mod pezpallet {
// 2. Burn (25%)
T::Assets::burn_from(
asset_id.clone(),
asset_id,
from,
to_burn_balance,
Preservation::Expendable,
@@ -94,6 +94,7 @@ impl pezpallet_assets::Config for Test {
type RemoveItemsLimit = ConstU32<1000>;
type CallbackHandle = ();
type Holder = ();
type ReserveData = ();
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelper = ();
}
@@ -109,7 +110,6 @@ parameter_types! {
}
impl pezpallet_presale::Config for Test {
type RuntimeEvent = RuntimeEvent;
type AssetId = u32;
type Balance = u128;
type Assets = Assets;
@@ -174,7 +174,7 @@ pub fn create_assets() {
pub fn mint_assets(asset_id: u32, account: u64, amount: u128) {
use pezframe_support::assert_ok;
assert_ok!(Assets::mint(RuntimeOrigin::signed(1), asset_id.into(), account, amount));
assert_ok!(Assets::mint(RuntimeOrigin::signed(1), asset_id, account, amount));
}
// Helper to get presale sub-account treasury for a specific presale ID
@@ -1,6 +1,53 @@
use crate::{mock::*, Error, Event, PresaleStatus};
use crate::{mock::*, Error, Event, PresaleStatus, ContributionLimits, VestingSchedule, RefundConfig, PresaleCreationParams};
use pezframe_support::{assert_noop, assert_ok};
/// Helper function to create presale params with common defaults
#[allow(clippy::too_many_arguments)]
fn make_presale_params(
tokens_for_sale: u128,
duration: u64,
is_whitelist: bool,
min_contribution: u128,
max_contribution: u128,
soft_cap: u128,
hard_cap: u128,
enable_vesting: bool,
vesting_immediate_percent: u8,
vesting_duration_blocks: u64,
vesting_cliff_blocks: u64,
grace_period_blocks: u64,
refund_fee_percent: u8,
grace_refund_fee_percent: u8,
) -> PresaleCreationParams<u64> {
let vesting = if enable_vesting {
Some(VestingSchedule {
immediate_release_percent: vesting_immediate_percent,
vesting_duration_blocks,
cliff_blocks: vesting_cliff_blocks,
})
} else {
None
};
PresaleCreationParams {
tokens_for_sale,
duration,
is_whitelist,
limits: ContributionLimits {
min_contribution,
max_contribution,
soft_cap,
hard_cap,
},
vesting,
refund_config: RefundConfig {
grace_period_blocks,
refund_fee_percent,
grace_refund_fee_percent,
},
}
}
#[test]
fn create_presale_works() {
new_test_ext().execute_with(|| {
@@ -12,22 +59,24 @@ fn create_presale_works() {
// Alice creates a presale
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2, // wUSDT payment asset
1, // PEZ reward asset
10_000_000_000_000_000_000, // 10,000 PEZ tokens for sale (10^12 decimals)
100, // 100 blocks duration
false, // public presale
10_000_000, // min 10 USDT (10^6 decimals)
1_000_000_000, // max 1000 USDT
5_000_000_000, // soft cap 5,000 USDT
10_000_000_000, // hard cap 10,000 USDT
false, // no vesting
0,
0,
0,
24, // 24 blocks grace period
5, // 5% refund fee
2, // 2% grace refund fee
2, // wUSDT payment asset
1, // PEZ reward asset
make_presale_params(
10_000_000_000_000_000_000, // 10,000 PEZ tokens for sale (10^12 decimals)
100, // 100 blocks duration
false, // public presale
10_000_000, // min 10 USDT (10^6 decimals)
1_000_000_000, // max 1000 USDT
5_000_000_000, // soft cap 5,000 USDT
10_000_000_000, // hard cap 10,000 USDT
false, // no vesting
0,
0,
0,
24, // 24 blocks grace period
5, // 5% refund fee
2, // 2% grace refund fee
),
));
// Check presale created
@@ -59,44 +108,12 @@ fn create_multiple_presales_works() {
// Alice creates first presale
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Bob creates second presale
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(2),
2,
1,
20_000_000_000_000_000_000,
200,
false,
20_000_000,
2_000_000_000,
10_000_000_000,
20_000_000_000,
false,
0,
0,
0,
48,
10,
5,
));
2, 1, make_presale_params(20_000_000_000_000_000_000, 200, false, 20_000_000, 2_000_000_000, 10_000_000_000, 20_000_000_000, false, 0, 0, 0, 48, 10, 5)));
// Check both presales exist
assert!(Presale::presales(0).is_some());
@@ -120,23 +137,7 @@ fn contribute_works() {
mint_assets(1, 1, 100_000_000_000_000_000_000);
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Mint wUSDT to Bob
mint_assets(2, 2, 1_000_000_000); // 1000 USDT
@@ -169,7 +170,7 @@ fn contribute_works() {
// Verify platform fee distribution (50% treasury, 25% staking, 25% burned)
let expected_to_treasury = platform_fee * 50 / 100; // 1_000_000
let expected_to_staking = platform_fee * 25 / 100; // 500_000
let expected_burned = platform_fee * 25 / 100; // 500_000
let _expected_burned = platform_fee * 25 / 100; // 500_000
// Check platform treasury received 50%
assert_eq!(Assets::balance(2, 999), expected_to_treasury);
@@ -203,23 +204,7 @@ fn contribute_multiple_times_works() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// First contribution
assert_ok!(Presale::contribute(RuntimeOrigin::signed(2), 0, 50_000_000));
@@ -249,46 +234,14 @@ fn contribute_to_different_presales_works() {
// Create two presales
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Fund presale 0 treasury with reward tokens
mint_assets(1, presale_treasury(0), 10_000_000_000_000_000_000);
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
15_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(15_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Fund presale 1 treasury with reward tokens
mint_assets(1, presale_treasury(1), 15_000_000_000_000_000_000);
@@ -326,23 +279,7 @@ fn contribute_below_min_fails() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Try to contribute less than minimum (10 USDT)
assert_noop!(
@@ -361,23 +298,7 @@ fn contribute_above_max_fails() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Try to contribute more than maximum (1000 USDT)
assert_noop!(
@@ -398,20 +319,22 @@ fn contribute_exceeding_hard_cap_fails() {
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000, // Soft cap: 5,000 USDT, Hard cap: 10,000 USDT
false,
0,
0,
0,
24,
5,
2,
make_presale_params(
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000, // Soft cap: 5,000 USDT, Hard cap: 10,000 USDT
false,
0,
0,
0,
24,
5,
2,
)
));
// Multiple contributors reach near hard cap (9,000 USDT total)
@@ -446,23 +369,7 @@ fn contribute_after_presale_ended_fails() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Move past presale end (block 1 + 100 = 101)
System::set_block_number(102);
@@ -483,23 +390,7 @@ fn finalize_presale_works() {
mint_assets(1, 1, 100_000_000_000_000_000_000); // 100,000 PEZ
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Mint PEZ to presale treasury for distribution
let treasury = presale_treasury(0);
@@ -539,10 +430,7 @@ fn finalize_presale_works() {
assert!(
contributor_pez >= expected_pez - 10_000_000_000_000_000 &&
contributor_pez <= expected_pez + 10_000_000_000_000_000,
"Contributor {} PEZ: {} (expected ~{})",
i,
contributor_pez,
expected_pez
"Contributor {i} PEZ: {contributor_pez} (expected ~{expected_pez})"
);
}
@@ -561,23 +449,7 @@ fn finalize_presale_before_end_fails() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Try to finalize immediately (use root to test the actual business logic error)
assert_noop!(
@@ -595,23 +467,7 @@ fn finalize_presale_non_root_fails() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
System::set_block_number(101);
@@ -632,23 +488,7 @@ fn refund_works() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Bob contributes
let contribution = 100_000_000; // 100 USDT
@@ -703,20 +543,22 @@ fn refund_in_grace_period_lower_fee() {
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24, // 24 blocks grace period (block 1 + 24 = 25)
5, // 5% regular refund fee
2, // 2% grace refund fee
make_presale_params(
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24, // 24 blocks grace period (block 1 + 24 = 25)
5, // 5% regular refund fee
2, // 2% grace refund fee
)
));
let contribution = 100_000_000; // 100 USDT
@@ -754,23 +596,7 @@ fn refund_with_no_contribution_fails() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Bob tries to refund without contributing
assert_noop!(Presale::refund(RuntimeOrigin::signed(2), 0), Error::<Test>::NoContribution);
@@ -786,23 +612,7 @@ fn cancel_presale_works() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Bob contributes
assert_ok!(Presale::contribute(RuntimeOrigin::signed(2), 0, 100_000_000));
@@ -827,23 +637,7 @@ fn cancel_presale_non_authorized_fails() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Non-authorized user tries to cancel (needs EmergencyOrigin or Root)
assert_noop!(
@@ -861,23 +655,7 @@ fn emergency_cancel_by_root_works() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Root can cancel any presale (emergency)
assert_ok!(Presale::cancel_presale(RuntimeOrigin::root(), 0));
@@ -897,23 +675,8 @@ fn whitelist_presale_works() {
// Create whitelist presale
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
true, // whitelist enabled
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, true, // whitelist enabled
10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Bob tries to contribute (not whitelisted)
assert_noop!(
@@ -937,23 +700,7 @@ fn add_to_whitelist_non_owner_fails() {
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
true,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, true, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Charlie tries to add Bob to Alice's presale whitelist
assert_noop!(
@@ -975,23 +722,7 @@ fn finalize_presale_soft_cap_reached_success() {
mint_assets(1, 1, 100_000_000_000_000_000_000); // 100,000 PEZ
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Mint PEZ to presale treasury
let treasury = presale_treasury(0);
@@ -1023,7 +754,7 @@ fn finalize_presale_soft_cap_reached_success() {
// Tokens for sale: 10,000 PEZ (10^12 decimals)
// Each contributor's share: (1,000 / 6,000) * 10,000 = 1,666.67 PEZ
for i in 2..8 {
assert!(Assets::balance(1, i) > 0, "Contributor {} should receive PEZ", i);
assert!(Assets::balance(1, i) > 0, "Contributor {i} should receive PEZ");
}
});
}
@@ -1038,23 +769,7 @@ fn finalize_presale_soft_cap_not_reached_fails() {
mint_assets(1, 1, 100_000_000_000_000_000_000);
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Contributors below soft cap (max is 1000 USDT each)
// Need to contribute less than soft cap of 5000 USDT
@@ -1096,23 +811,7 @@ fn batch_refund_failed_presale_works() {
mint_assets(1, 1, 100_000_000_000_000_000_000);
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Fund presale treasury with wUSDT for refunds
let treasury = presale_treasury(0);
@@ -1165,23 +864,7 @@ fn batch_refund_successful_presale_fails() {
mint_assets(1, 1, 100_000_000_000_000_000_000);
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000,
10_000_000_000,
false,
0,
0,
0,
24,
5,
2,
));
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
let treasury = presale_treasury(0);
mint_assets(1, treasury, 100_000_000_000_000_000_000);
@@ -1223,23 +906,7 @@ fn create_presale_with_soft_cap_greater_than_hard_cap_fails() {
assert_noop!(
Presale::create_presale(
RuntimeOrigin::signed(1),
2,
1,
10_000_000_000_000_000_000,
100,
false,
10_000_000,
1_000_000_000,
15_000_000_000, // soft_cap: 15,000 USDT
10_000_000_000, // hard_cap: 10,000 USDT (INVALID!)
false,
0,
0,
0,
24,
5,
2,
),
2, 1, make_presale_params(10_000_000_000_000_000_000, 100, false, 10_000_000, 1_000_000_000, 15_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)),
Error::<Test>::InvalidTokensForSale
);
});
@@ -1247,7 +914,7 @@ fn create_presale_with_soft_cap_greater_than_hard_cap_fails() {
#[test]
fn debug_finalize_presale() {
use crate::mock::*;
use pezframe_support::{assert_ok, traits::fungibles::Mutate};
use pezframe_support::assert_ok;
new_test_ext().execute_with(|| {
create_assets();
@@ -1258,23 +925,7 @@ fn debug_finalize_presale() {
// Create presale
assert_ok!(Presale::create_presale(
RuntimeOrigin::signed(1),
2, // payment asset (wUSDT)
1, // reward asset (PEZ)
10_000_000_000, // tokens_for_sale
100,
false,
10_000_000,
1_000_000_000,
5_000_000_000, // soft_cap
10_000_000_000,
false,
0,
0,
0,
24,
5,
2
));
2, 1, make_presale_params(10_000_000_000, 100, false, 10_000_000, 1_000_000_000, 5_000_000_000, 10_000_000_000, false, 0, 0, 0, 24, 5, 2)));
// Fund presale treasury with reward tokens
let treasury = presale_treasury(0);
@@ -1296,7 +947,7 @@ fn debug_finalize_presale() {
// Try to finalize
let result = Presale::finalize_presale(RuntimeOrigin::root(), 0);
println!("Finalize result: {:?}", result);
println!("Finalize result: {result:?}");
assert_ok!(result);
});
}
@@ -15,16 +15,16 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { default-features = false, features = ["derive"], workspace = true }
log = { default-features = false, workspace = true }
pezframe-benchmarking = { optional = true, workspace = true }
pezframe-support = { default-features = false, workspace = true }
pezframe-system = { default-features = false, workspace = true }
log = { default-features = false, workspace = true }
pezpallet-identity-kyc = { workspace = true, default-features = false }
scale-info = { default-features = false, features = [
"derive",
], workspace = true }
pezsp-runtime = { default-features = false, workspace = true }
pezsp-std = { default-features = false, workspace = true }
scale-info = { default-features = false, features = [
"derive",
], workspace = true }
# Projemizin özel tiplerini ve trait'lerini içeren kütüphane
pezkuwi-primitives = { workspace = true, default-features = false }
@@ -38,38 +38,38 @@ pezsp-io = { workspace = true }
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"log/std",
"pezpallet-balances/std",
"pezpallet-identity-kyc/std",
"pezpallet-nfts/std",
"pezkuwi-primitives/std",
"scale-info/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"codec/std",
"log/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezkuwi-primitives/std",
"pezpallet-balances/std",
"pezpallet-identity-kyc/std",
"pezpallet-nfts/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
]
runtime-benchmarks = [
"pezframe-benchmarking",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-identity-kyc/runtime-benchmarks",
"pezpallet-nfts/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezframe-benchmarking",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-identity-kyc/runtime-benchmarks",
"pezpallet-nfts/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-identity-kyc/try-runtime",
"pezpallet-nfts/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-balances/try-runtime",
"pezpallet-identity-kyc/try-runtime",
"pezpallet-nfts/try-runtime",
"pezsp-runtime/try-runtime",
]
@@ -1,9 +1,6 @@
//! Benchmarking setup for pezpallet-referral
#![cfg(feature = "runtime-benchmarks")]
use super::*;
use crate::Pezpallet as Referral;
use pezframe_benchmarking::v2::*;
use pezframe_system::RawOrigin;
@@ -43,5 +40,5 @@ mod benchmarks {
assert_eq!(ReferralCount::<T>::get(&referrer), 1);
}
impl_benchmark_test_suite!(Referral, crate::mock::new_test_ext(), crate::mock::Test);
impl_benchmark_test_suite!(Pezpallet, crate::mock::new_test_ext(), crate::mock::Test);
}
@@ -120,9 +120,11 @@ pub mod pezpallet {
pub struct Pezpallet<T>(_);
#[pezpallet::config]
pub trait Config: pezframe_system::Config + pezpallet_identity_kyc::Config + TypeInfo {
type RuntimeEvent: From<Event<Self>>
+ IsType<<Self as pezframe_system::Config>::RuntimeEvent>;
pub trait Config:
pezframe_system::Config<RuntimeEvent: From<Event<Self>>>
+ pezpallet_identity_kyc::Config
+ TypeInfo
{
type WeightInfo: weights::WeightInfo;
/// Default referrer account - used when no referrer is specified
@@ -3,7 +3,7 @@
use crate as pezpallet_referral;
use pezframe_support::{
construct_runtime, derive_impl, parameter_types,
traits::{ConstU128, ConstU32},
traits::ConstU128,
};
use pezframe_system::EnsureRoot;
use pezsp_core::H256;
@@ -66,7 +66,6 @@ impl pezpallet_identity_kyc::types::CitizenNftProvider<AccountId> for MockCitize
}
impl pezpallet_identity_kyc::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Currency = Balances;
type GovernanceOrigin = EnsureRoot<AccountId>;
type WeightInfo = ();
@@ -87,7 +86,6 @@ impl pezframe_support::traits::Get<AccountId> for DefaultReferrerAccount {
}
impl pezpallet_referral::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type DefaultReferrer = DefaultReferrerAccount;
type PenaltyPerRevocation = PenaltyPerRevocationAmount;
@@ -124,8 +122,3 @@ pub fn new_test_ext() -> pezsp_io::TestExternalities {
ext.execute_with(|| System::set_block_number(1));
ext
}
/// Build test externalities for penalty tests (needs revoked citizens)
pub fn new_test_ext_with_citizens() -> pezsp_io::TestExternalities {
new_test_ext()
}
@@ -1,5 +1,5 @@
use crate::{
mock::*, pezpallet::ReferralInfo, Error, Event, PendingReferrals, ReferralCount, Referrals,
mock::*, Error, Event, PendingReferrals, ReferralCount, Referrals,
ReferrerStatsStorage,
};
use pezframe_support::{assert_noop, assert_ok};
@@ -215,25 +215,25 @@ fn referral_score_tier_0_to_10() {
new_test_ext().execute_with(|| {
// Update stats directly for testing
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 0;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 0);
// 1 referral = 10 points
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 1;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 10);
// 5 referrals = 50 points
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 5;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 50);
// 10 referrals = 100 points
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 10;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 100);
@@ -246,19 +246,19 @@ fn referral_score_tier_11_to_50() {
new_test_ext().execute_with(|| {
// 11 referrals: 100 + (1 * 5) = 105
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 11;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 105);
// 20 referrals: 100 + (10 * 5) = 150
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 20;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 150);
// 50 referrals: 100 + (40 * 5) = 300
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 50;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 300);
@@ -271,19 +271,19 @@ fn referral_score_tier_51_to_100() {
new_test_ext().execute_with(|| {
// 51 referrals: 300 + (1 * 4) = 304
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 51;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 304);
// 75 referrals: 300 + (25 * 4) = 400
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 75;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 400);
// 100 referrals: 300 + (50 * 4) = 500
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 100;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 500);
@@ -296,13 +296,13 @@ fn referral_score_capped_at_500() {
new_test_ext().execute_with(|| {
// 101+ referrals capped at 500
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 101;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 500);
// Even 1000 referrals = 500
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 1000;
});
assert_eq!(ReferralPallet::get_referral_score(&REFERRER), 500);
@@ -315,7 +315,7 @@ fn referral_score_with_balanced_penalty() {
new_test_ext().execute_with(|| {
// 10 good referrals = 100 points
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 10;
stats.revoked_referrals = 0;
});
@@ -325,7 +325,7 @@ fn referral_score_with_balanced_penalty() {
// Penalty: (4 * 10) / 4 = 10 points deducted
// Base score: 6 * 10 = 60
// Final: 60 - 10 = 50
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 10;
stats.revoked_referrals = 4;
});
@@ -335,7 +335,7 @@ fn referral_score_with_balanced_penalty() {
// Penalty: (8 * 10) / 4 = 20 points deducted
// Base score: 100 + (2 * 5) = 110
// Final: 110 - 20 = 90
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 20;
stats.revoked_referrals = 8;
});
@@ -353,7 +353,7 @@ fn referral_score_cannot_go_negative() {
// Penalty: (5 * 10) / 4 = 12 points
// Base score: 0
// Final: 0 - 12 = 0 (saturating_sub)
ReferrerStatsStorage::<Test>::mutate(&REFERRER, |stats| {
ReferrerStatsStorage::<Test>::mutate(REFERRER, |stats| {
stats.total_referrals = 5;
stats.revoked_referrals = 5;
});
@@ -398,7 +398,7 @@ fn get_inviter_returns_none_for_non_referred() {
#[test]
fn force_confirm_referral_works() {
use crate::types::{InviterProvider, ReferralScoreProvider};
use crate::types::InviterProvider;
new_test_ext().execute_with(|| {
// Force confirm referral (sudo-only)
@@ -17,14 +17,14 @@ pezframe-support = { default-features = false, workspace = true }
pezframe-system = { default-features = false, workspace = true }
pezpallet-balances = { workspace = true, default-features = false, optional = true }
pezpallet-staking = { workspace = true, default-features = false, optional = true }
scale-info = { default-features = false, features = [
"derive",
], workspace = true }
serde = { version = "1.0.197", default-features = false, features = [
"derive",
], optional = true }
pezsp-runtime = { default-features = false, workspace = true }
pezsp-std = { default-features = false, workspace = true }
scale-info = { default-features = false, features = [
"derive",
], workspace = true }
serde = { version = "1.0.197", default-features = false, features = [
"derive",
], optional = true }
# PezkuwiChain'in özel tiplerini ve trait'lerini içeren kütüphane
pezkuwi-primitives = { workspace = true, default-features = false }
@@ -37,8 +37,8 @@ pezpallet-bags-list = { workspace = true, features = ["std"] }
pezpallet-balances = { workspace = true, features = ["std"] }
pezpallet-session = { workspace = true, features = ["std"] }
pezpallet-staking = { workspace = true, features = [
"runtime-benchmarks",
"std",
"runtime-benchmarks",
"std",
] }
pezpallet-timestamp = { workspace = true, features = ["std"] }
pezsp-core = { workspace = true, features = ["std"] }
@@ -50,50 +50,50 @@ pezsp-staking = { workspace = true, features = ["std"] }
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-election-provider-support/std",
"pezframe-support/std",
"pezframe-system/std",
"pezpallet-bags-list/std",
"pezpallet-balances?/std",
"pezpallet-session/std",
"pezpallet-staking?/std",
"pezpallet-timestamp/std",
"pezkuwi-primitives/std",
"scale-info/std",
"serde?/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-npos-elections/std",
"pezsp-runtime/std",
"pezsp-staking/std",
"pezsp-std/std",
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-election-provider-support/std",
"pezframe-support/std",
"pezframe-system/std",
"pezkuwi-primitives/std",
"pezpallet-bags-list/std",
"pezpallet-balances?/std",
"pezpallet-session/std",
"pezpallet-staking?/std",
"pezpallet-timestamp/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-npos-elections/std",
"pezsp-runtime/std",
"pezsp-staking/std",
"pezsp-std/std",
"scale-info/std",
"serde?/std",
]
runtime-benchmarks = [
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-election-provider-support/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-bags-list/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-session/runtime-benchmarks",
"pezpallet-staking/runtime-benchmarks",
"pezpallet-timestamp/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-npos-elections/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezsp-staking/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-election-provider-support/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezpallet-bags-list/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-session/runtime-benchmarks",
"pezpallet-staking/runtime-benchmarks",
"pezpallet-timestamp/runtime-benchmarks",
"pezsp-io/runtime-benchmarks",
"pezsp-npos-elections/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezsp-staking/runtime-benchmarks",
]
try-runtime = [
"pezframe-election-provider-support/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-bags-list/try-runtime",
"pezpallet-balances?/try-runtime",
"pezpallet-session/try-runtime",
"pezpallet-staking?/try-runtime",
"pezpallet-timestamp/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-election-provider-support/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-bags-list/try-runtime",
"pezpallet-balances?/try-runtime",
"pezpallet-session/try-runtime",
"pezpallet-staking?/try-runtime",
"pezpallet-timestamp/try-runtime",
"pezsp-runtime/try-runtime",
]
@@ -1,7 +1,6 @@
//! Benchmarking setup for pezpallet-staking-score
use super::*;
use crate::{Config, Pezpallet, StakingStartBlock};
use crate::{Call, Config, Pezpallet, StakingStartBlock};
use pezframe_benchmarking::v2::*;
use pezframe_system::RawOrigin;
@@ -27,9 +26,5 @@ mod benchmarks {
assert!(StakingStartBlock::<T>::get(&caller).is_some());
}
impl_benchmark_test_suite!(
StakingScore,
crate::mock::ExtBuilder::default().build(),
crate::mock::Test,
);
// Benchmark test suite is in tests.rs with mock runtime
}
@@ -144,13 +144,11 @@ pub mod pezpallet {
pub struct Pezpallet<T>(_);
#[pezpallet::config]
pub trait Config: pezframe_system::Config
pub trait Config: pezframe_system::Config<RuntimeEvent: From<Event<Self>>>
where
// Ensuring BlockNumber is convertible from u32.
BlockNumberFor<Self>: From<u32>,
{
type RuntimeEvent: From<Event<Self>>
+ IsType<<Self as pezframe_system::Config>::RuntimeEvent>;
/// Balance type to be used for staking.
/// Adding all required mathematical and comparison properties.
type Balance: Member
@@ -3,27 +3,21 @@
use crate as pezpallet_staking_score;
use pezframe_support::{
construct_runtime, derive_impl, parameter_types,
traits::{ConstU128, ConstU32, ConstU64, Everything, Hooks},
traits::{ConstU128, ConstU32, ConstU64},
weights::constants::RocksDbWeight,
};
use pezframe_system::EnsureRoot;
use pezsp_core::H256;
use pezsp_runtime::{
traits::{BlakeTwo256, IdentityLookup},
BuildStorage,
};
use pezsp_runtime::BuildStorage;
use pezsp_staking::{StakerStatus, StakingAccount};
use std::collections::BTreeMap;
// Paletimizdeki sabitleri import ediyoruz.
use crate::{MONTH_IN_BLOCKS, UNITS};
use crate::UNITS;
// --- Tip Takma Adları ---
type Block = pezframe_system::mocking::MockBlock<Test>;
pub type AccountId = u64;
pub type Balance = u128;
pub type BlockNumber = u64;
pub type Nonce = u64;
pub type SessionIndex = u32;
pub type EraIndex = u32;
@@ -43,8 +37,8 @@ parameter_types! {
pub static MaxWinners: u32 = 100;
pub static MaxBackersPerWinner: u32 = 64;
// Yeni eklenenler: pezpallet_staking::Config için gerekli minimum bond miktarları.
pub const MinNominatorBond: Balance = 1 * UNITS; // Testler için yeterince küçük bir değer.
pub const MinValidatorBond: Balance = 1 * UNITS; // Testler için yeterince küçük bir değer.
pub const MinNominatorBond: Balance = UNITS; // Testler için yeterince küçük bir değer.
pub const MinValidatorBond: Balance = UNITS; // Testler için yeterince küçük bir değer.
}
// --- construct_runtime! Makrosu ---
@@ -122,7 +116,7 @@ impl pezpallet_session::Config for Test {
impl pezpallet_session::historical::Config for Test {
type RuntimeEvent = RuntimeEvent;
type FullIdentification = pezpallet_staking::Exposure<AccountId, Balance>;
type FullIdentificationOf = pezpallet_staking::ExposureOf<Test>;
type FullIdentificationOf = pezpallet_staking::DefaultExposureOf<Test>;
}
impl pezpallet_timestamp::Config for Test {
@@ -183,7 +177,7 @@ impl pezpallet_staking::Config for Test {
pub struct StakingDataProvider;
impl crate::StakingInfoProvider<AccountId, Balance> for StakingDataProvider {
fn get_staking_details(who: &AccountId) -> Option<crate::StakingDetails<Balance>> {
if let Ok(ledger) = Staking::ledger(StakingAccount::Stash(who.clone())) {
if let Ok(ledger) = Staking::ledger(StakingAccount::Stash(*who)) {
let nominations_count = Staking::nominators(who).map_or(0, |n| n.targets.len() as u32);
let unlocking_chunks_count = ledger.unlocking.len() as u32;
@@ -199,7 +193,6 @@ impl crate::StakingInfoProvider<AccountId, Balance> for StakingDataProvider {
}
impl crate::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Balance = Balance;
type WeightInfo = ();
type StakingInfo = StakingDataProvider;
@@ -235,17 +228,6 @@ impl Default for ExtBuilder {
}
impl ExtBuilder {
pub fn add_staker(
mut self,
stash: AccountId,
ctrl: AccountId,
stake: Balance,
status: StakerStatus<AccountId>,
) -> Self {
self.stakers.push((stash, ctrl, stake, status));
self
}
pub fn build(self) -> pezsp_io::TestExternalities {
let mut storage =
pezframe_system::GenesisConfig::<Test>::default().build_storage().unwrap();
@@ -281,7 +263,7 @@ impl ExtBuilder {
.iter()
.filter_map(|(stash, _, _, status)| {
if let StakerStatus::Validator = status {
Some(stash.clone())
Some(*stash)
} else {
None
}
@@ -312,28 +294,10 @@ impl ExtBuilder {
.assimilate_storage(&mut storage)
.unwrap();
let mut ext = pezsp_io::TestExternalities::new(storage);
// run_to_block çağrısını ExtBuilder::build_and_execute içinde veya
// benchmarking setup'ında yapmak daha doğru. Burada sadece temel storage'ı kuruyoruz.
ext
pezsp_io::TestExternalities::new(storage)
}
pub fn build_and_execute(self, test: impl FnOnce() -> ()) {
pub fn build_and_execute(self, test: impl FnOnce()) {
self.build().execute_with(test);
}
}
/// Bloğu `n`'e kadar ilerletir.
pub fn run_to_block(n: BlockNumber) {
while System::block_number() < n {
if System::block_number() > 1 {
System::on_finalize(System::block_number());
Session::on_finalize(System::block_number());
Staking::on_finalize(System::block_number());
}
System::set_block_number(System::block_number() + 1);
System::on_initialize(System::block_number());
Session::on_initialize(System::block_number());
Staking::on_initialize(System::block_number());
}
}
@@ -6,7 +6,6 @@ use pezpallet_staking::RewardDestination;
// Testlerde kullanacağımız sabitler
const USER_STASH: AccountId = 10;
const USER_CONTROLLER: AccountId = 10;
#[test]
fn zero_stake_should_return_zero_score() {
@@ -181,7 +180,7 @@ fn duration_multiplier_1_month() {
assert_ok!(StakingScore::start_score_tracking(RuntimeOrigin::signed(USER_STASH)));
// Advance 1 month
System::set_block_number((1 * MONTH_IN_BLOCKS + 1) as u64);
System::set_block_number((MONTH_IN_BLOCKS + 1) as u64);
// 40 * 1.2 = 48
let (score, _) = StakingScore::get_staking_score(&USER_STASH);
@@ -26,21 +26,21 @@ pezcumulus-primitives-core = { workspace = true }
[features]
default = ["std"]
std = [
"codec/std",
"pezcumulus-primitives-core/std",
"pezframe-support/std",
"pezframe-system/std",
"scale-info/std",
"pezsp-runtime/std",
"codec/std",
"pezcumulus-primitives-core/std",
"pezframe-support/std",
"pezframe-system/std",
"pezsp-runtime/std",
"scale-info/std",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezsp-runtime/try-runtime",
]
runtime-benchmarks = [
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezcumulus-primitives-core/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
@@ -15,20 +15,20 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { workspace = true, default-features = false, features = ["derive"] }
log = { default-features = false, workspace = true }
pezframe-benchmarking = { optional = true, workspace = true }
pezframe-support = { default-features = false, workspace = true }
pezframe-system = { default-features = false, workspace = true }
log = { default-features = false, workspace = true }
pezpallet-balances = { default-features = false, optional = true, workspace = true }
pezpallet-identity = { default-features = false, workspace = true }
pezpallet-identity-kyc = { workspace = true, default-features = false }
pezpallet-nfts = { default-features = false, workspace = true }
scale-info = { default-features = false, features = [
"derive",
], workspace = true }
serde = { version = "1.0", default-features = false, features = ["derive"] }
pezsp-runtime = { default-features = false, workspace = true }
pezsp-std = { default-features = false, workspace = true }
scale-info = { default-features = false, features = [
"derive",
], workspace = true }
serde = { version = "1.0", default-features = false, features = ["derive"] }
[dev-dependencies]
pezsp-core = { workspace = true }
@@ -37,41 +37,41 @@ pezsp-io = { workspace = true }
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"log/std",
"pezpallet-balances/std",
"pezpallet-identity-kyc/std",
"pezpallet-identity/std",
"pezpallet-nfts/std",
"scale-info/std",
"serde/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-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",
]
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-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-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",
]
@@ -10,7 +10,6 @@ use pezframe_support::traits::{Currency, Get};
use pezpallet_balances::Pezpallet as Balances;
use pezsp_runtime::traits::StaticLookup;
extern crate alloc;
use alloc::vec;
// Gerekli trait kısıtlamalarını ana benchmarks bloğuna ekliyoruz.
#[benchmarks(
@@ -22,10 +21,9 @@ mod benchmarks {
use super::*;
// Bu yardımcı fonksiyon, runtime'da tanımlanan Tiki koleksiyonunu oluşturur.
fn ensure_collection_exists<T: Config>()
fn ensure_collection_exists<T: Config + pezpallet_balances::Config>()
where
T::CollectionId: Copy + Default + PartialOrd,
T: pezpallet_balances::Config,
T::CollectionId: Default + PartialOrd,
{
let collection_id = T::TikiCollectionId::get();
// Koleksiyon sahibi olarak fonlanmış `whitelisted_caller`'ı kullanıyoruz.
@@ -51,10 +49,9 @@ mod benchmarks {
}
// Helper to ensure user has a citizen NFT
fn ensure_citizen_nft<T: Config>(who: T::AccountId) -> Result<(), DispatchError>
fn ensure_citizen_nft<T: Config + pezpallet_balances::Config>(who: T::AccountId) -> Result<(), DispatchError>
where
T::CollectionId: Copy + Default + PartialOrd,
T: pezpallet_balances::Config,
T::CollectionId: Default + PartialOrd,
{
ensure_collection_exists::<T>();
@@ -80,7 +77,7 @@ mod benchmarks {
ensure_citizen_nft::<T>(dest.clone())?;
#[extrinsic_call]
_(RawOrigin::Root, T::Lookup::unlookup(dest.clone()), tiki.clone());
_(RawOrigin::Root, T::Lookup::unlookup(dest.clone()), tiki);
// For non-unique roles, check user has the role
assert!(Tiki::<T>::user_tikis(&dest).contains(&tiki));
@@ -95,13 +92,13 @@ mod benchmarks {
// Ensure the dest account has a citizen NFT and the tiki before revoking
ensure_citizen_nft::<T>(dest.clone())?;
Tiki::<T>::internal_grant_role(&dest, tiki.clone())?; // Use internal function to grant without origin check
Tiki::<T>::internal_grant_role(&dest, tiki)?; // Use internal function to grant without origin check
// Verify the role was granted
assert!(Tiki::<T>::user_tikis(&dest).contains(&tiki));
#[extrinsic_call]
_(RawOrigin::Root, T::Lookup::unlookup(dest.clone()), tiki.clone());
_(RawOrigin::Root, T::Lookup::unlookup(dest.clone()), tiki);
// User should no longer have this role
assert!(!Tiki::<T>::user_tikis(&dest).contains(&tiki));
@@ -137,7 +134,7 @@ mod benchmarks {
ensure_citizen_nft::<T>(dest.clone())?;
#[extrinsic_call]
_(RawOrigin::Root, T::Lookup::unlookup(dest.clone()), tiki.clone());
_(RawOrigin::Root, T::Lookup::unlookup(dest.clone()), tiki);
// Rolün verildiğini doğrula
assert!(Tiki::<T>::has_tiki(&dest, &tiki));
@@ -154,7 +151,7 @@ mod benchmarks {
ensure_citizen_nft::<T>(dest.clone())?;
#[extrinsic_call]
_(RawOrigin::Root, T::Lookup::unlookup(dest.clone()), tiki.clone());
_(RawOrigin::Root, T::Lookup::unlookup(dest.clone()), tiki);
// Rolün verildiğini doğrula
assert!(Tiki::<T>::has_tiki(&dest, &tiki));
@@ -133,12 +133,10 @@ pub mod pezpallet {
#[pezpallet::config]
pub trait Config:
pezframe_system::Config
pezframe_system::Config<RuntimeEvent: From<Event<Self>>>
+ pezpallet_nfts::Config<ItemId = u32>
+ pezpallet_identity_kyc::Config
{
type RuntimeEvent: From<Event<Self>>
+ IsType<<Self as pezframe_system::Config>::RuntimeEvent>;
type AdminOrigin: EnsureOrigin<Self::RuntimeOrigin>;
type WeightInfo: weights::WeightInfo;
@@ -480,7 +478,7 @@ pub mod pezpallet {
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);
log::warn!("Failed to mint citizen NFT for account: {account:?}");
}
}
}
@@ -661,7 +659,7 @@ pub mod pezpallet {
)
.is_err()
{
log::warn!("Failed to set metadata for NFT: {:?}", nft_id_u32);
log::warn!("Failed to set metadata for NFT: {nft_id_u32:?}");
}
Ok(())
@@ -22,9 +22,7 @@ pub mod v1 {
let current = Pezpallet::<T>::on_chain_storage_version();
log::info!(
"🔄 Running migration for pezpallet-tiki from {:?} to {:?}",
current,
STORAGE_VERSION
"🔄 Running migration for pezpallet-tiki from {current:?} to {STORAGE_VERSION:?}"
);
if current == StorageVersion::new(0) {
@@ -43,7 +41,7 @@ pub mod v1 {
// Update storage version
STORAGE_VERSION.put::<Pezpallet<T>>();
log::info!("✅ Migrated {} entries in pezpallet-tiki", migrated);
log::info!("✅ Migrated {migrated} entries in pezpallet-tiki");
// Return weight used
// Reads: migrated items + version read
@@ -54,8 +52,7 @@ pub mod v1 {
weight
} else {
log::info!(
"👌 pezpallet-tiki migration not needed, current version is {:?}",
current
"👌 pezpallet-tiki migration not needed, current version is {current:?}"
);
T::DbWeight::get().reads(1)
}
@@ -68,16 +65,16 @@ pub mod v1 {
let current = Pezpallet::<T>::on_chain_storage_version();
log::info!("🔍 Pre-upgrade check for pezpallet-tiki");
log::info!(" Current version: {:?}", current);
log::info!(" Current version: {current:?}");
// Encode current storage counts for verification
let citizen_count = CitizenNft::<T>::iter().count() as u32;
let user_tikis_count = UserTikis::<T>::iter().count() as u32;
let tiki_holder_count = TikiHolder::<T>::iter().count() as u32;
log::info!(" CitizenNft entries: {}", citizen_count);
log::info!(" UserTikis entries: {}", user_tikis_count);
log::info!(" TikiHolder entries: {}", tiki_holder_count);
log::info!(" CitizenNft entries: {citizen_count}");
log::info!(" UserTikis entries: {user_tikis_count}");
log::info!(" TikiHolder entries: {tiki_holder_count}");
Ok((citizen_count, user_tikis_count, tiki_holder_count).encode())
}
@@ -96,23 +93,19 @@ pub mod v1 {
// Verify storage version was updated
let current_version = Pezpallet::<T>::on_chain_storage_version();
assert_eq!(current_version, STORAGE_VERSION, "Storage version not updated correctly");
log::info!("✅ Storage version updated to {:?}", current_version);
log::info!("✅ Storage version updated to {current_version:?}");
// Verify storage counts (should be same or more, never less)
let post_citizen_count = CitizenNft::<T>::iter().count() as u32;
let post_user_tikis_count = UserTikis::<T>::iter().count() as u32;
let post_tiki_holder_count = TikiHolder::<T>::iter().count() as u32;
log::info!(" CitizenNft entries: {} -> {}", pre_citizen_count, post_citizen_count);
log::info!(" CitizenNft entries: {pre_citizen_count} -> {post_citizen_count}");
log::info!(
" UserTikis entries: {} -> {}",
pre_user_tikis_count,
post_user_tikis_count
" UserTikis entries: {pre_user_tikis_count} -> {post_user_tikis_count}"
);
log::info!(
" TikiHolder entries: {} -> {}",
pre_tiki_holder_count,
post_tiki_holder_count
" TikiHolder entries: {pre_tiki_holder_count} -> {post_tiki_holder_count}"
);
assert!(
@@ -10,6 +10,46 @@ use pezsp_runtime::{
BuildStorage,
};
#[cfg(feature = "runtime-benchmarks")]
use pezsp_runtime::testing::{TestSignature, UintAuthorityId};
#[cfg(feature = "runtime-benchmarks")]
use pezsp_runtime::RuntimeAppPublic;
// Custom BenchmarkHelper for pezpallet_identity (uses TestSignature in mock)
#[cfg(feature = "runtime-benchmarks")]
pub struct IdentityBenchmarkHelper;
#[cfg(feature = "runtime-benchmarks")]
impl pezpallet_identity::BenchmarkHelper<UintAuthorityId, TestSignature> for IdentityBenchmarkHelper {
fn sign_message(message: &[u8]) -> (UintAuthorityId, TestSignature) {
let signer = UintAuthorityId(0);
let signature = <UintAuthorityId as RuntimeAppPublic>::sign(&signer, &message.to_vec()).unwrap();
(signer, signature)
}
}
// Custom BenchmarkHelper for pezpallet_nfts (uses u64 AccountId in mock)
#[cfg(feature = "runtime-benchmarks")]
pub struct NftsBenchmarkHelper;
#[cfg(feature = "runtime-benchmarks")]
impl pezpallet_nfts::BenchmarkHelper<u32, u32, UintAuthorityId, AccountId, TestSignature> for NftsBenchmarkHelper {
fn collection(i: u16) -> u32 {
i.into()
}
fn item(i: u16) -> u32 {
i.into()
}
fn signer() -> (UintAuthorityId, AccountId) {
let signer = UintAuthorityId(0);
let account: AccountId = 1u64;
(signer, account)
}
fn sign(signer: &UintAuthorityId, data: &[u8]) -> TestSignature {
<UintAuthorityId as RuntimeAppPublic>::sign(signer, &data).unwrap()
}
}
type Block = pezframe_system::mocking::MockBlock<Test>;
pub type AccountId = u64;
pub type Balance = u128;
@@ -113,6 +153,8 @@ impl pezpallet_identity::Config for Test {
type UsernameGracePeriod = UsernameGracePeriod;
type MaxSuffixLength = MaxSuffixLength;
type MaxUsernameLength = MaxUsernameLength;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelper = IdentityBenchmarkHelper;
}
parameter_types! {
@@ -158,7 +200,6 @@ impl pezpallet_identity_kyc::types::CitizenNftProvider<AccountId> for MockCitize
}
impl pezpallet_identity_kyc::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Currency = Balances;
type WeightInfo = ();
type GovernanceOrigin = pezframe_system::EnsureRoot<AccountId>;
@@ -197,11 +238,11 @@ impl pezpallet_nfts::Config for Test {
type MaxAttributesPerCall = ConstU32<10>;
type Features = Features;
type OffchainSignature = pezsp_runtime::testing::TestSignature;
type OffchainPublic = <Self::OffchainSignature as pezsp_runtime::traits::Verify>::Signer;
type OffchainPublic = pezsp_runtime::testing::UintAuthorityId;
type WeightInfo = ();
type BlockNumberProvider = System;
#[cfg(feature = "runtime-benchmarks")]
type Helper = ();
type Helper = NftsBenchmarkHelper;
}
parameter_types! {
@@ -210,7 +251,6 @@ parameter_types! {
}
impl crate::Config for Test {
type RuntimeEvent = RuntimeEvent;
type AdminOrigin = pezframe_system::EnsureRoot<AccountId>;
type WeightInfo = ();
type TikiCollectionId = TikiCollectionId;
@@ -218,43 +258,6 @@ impl crate::Config for Test {
type Tiki = TikiEnum;
}
// Helper functions for tests
// Updated for trustless model - directly sets KYC status and hash
pub fn setup_kyc_for_user(account: AccountId) {
// Give balance to user
let _ = Balances::force_set_balance(RuntimeOrigin::root(), account, 10000);
// Directly set KYC status to Approved (for test purposes)
// In real runtime this would go through apply_for_citizenship -> approve_referral ->
// confirm_citizenship
pezpallet_identity_kyc::KycStatuses::<Test>::insert(
account,
pezpallet_identity_kyc::types::KycLevel::Approved,
);
// Set identity hash
pezpallet_identity_kyc::IdentityHashes::<Test>::insert(
account,
pezsp_core::H256::from_low_u64_be(account),
);
}
// Legacy function - kept for backwards compatibility
pub fn setup_identity_for_user(account: AccountId) {
setup_kyc_for_user(account);
}
pub fn advance_blocks(blocks: u64) {
for _i in 0..blocks {
let current_block = System::block_number();
System::set_block_number(current_block + 1);
// Trigger hooks for the new block
<pezpallet_tiki::Pezpallet<Test> as pezframe_support::traits::Hooks<u64>>::on_initialize(
current_block + 1,
);
}
}
pub fn new_test_ext() -> pezsp_io::TestExternalities {
let mut t = pezframe_system::GenesisConfig::<Test>::default().build_storage().unwrap();
@@ -14,17 +14,17 @@ fn force_mint_citizen_nft_works() {
let user_account = 2;
// Başlangıçta vatandaşlık NFT'si olmamalı
assert_eq!(TikiPallet::citizen_nft(&user_account), None);
assert!(TikiPallet::user_tikis(&user_account).is_empty());
assert_eq!(TikiPallet::citizen_nft(user_account), None);
assert!(TikiPallet::user_tikis(user_account).is_empty());
assert!(!TikiPallet::is_citizen(&user_account));
// Vatandaşlık NFT'si bas
assert_ok!(TikiPallet::force_mint_citizen_nft(RuntimeOrigin::root(), user_account));
// NFT'nin basıldığını ve Welati rolünün eklendiğini kontrol et
assert!(TikiPallet::citizen_nft(&user_account).is_some());
assert!(TikiPallet::citizen_nft(user_account).is_some());
assert!(TikiPallet::is_citizen(&user_account));
let user_tikis = TikiPallet::user_tikis(&user_account);
let user_tikis = TikiPallet::user_tikis(user_account);
assert!(user_tikis.contains(&TikiEnum::Welati));
assert!(TikiPallet::has_tiki(&user_account, &TikiEnum::Welati));
@@ -32,7 +32,7 @@ fn force_mint_citizen_nft_works() {
System::assert_has_event(
Event::CitizenNftMinted {
who: user_account,
nft_id: TikiPallet::citizen_nft(&user_account).unwrap(),
nft_id: TikiPallet::citizen_nft(user_account).unwrap(),
}
.into(),
);
@@ -52,11 +52,11 @@ fn grant_appointed_role_works() {
assert_ok!(TikiPallet::grant_tiki(
RuntimeOrigin::root(),
user_account,
tiki_to_grant.clone()
tiki_to_grant
));
// Kullanıcının rollerini kontrol et
let user_tikis = TikiPallet::user_tikis(&user_account);
let user_tikis = TikiPallet::user_tikis(user_account);
assert!(user_tikis.contains(&TikiEnum::Welati)); // Otomatik eklenen
assert!(user_tikis.contains(&tiki_to_grant)); // Manuel eklenen
assert!(TikiPallet::has_tiki(&user_account, &tiki_to_grant));
@@ -97,8 +97,8 @@ fn apply_for_citizenship_works_with_kyc() {
assert_ok!(TikiPallet::force_mint_citizen_nft(RuntimeOrigin::root(), user_account));
// NFT'nin basıldığını kontrol et
assert!(TikiPallet::citizen_nft(&user_account).is_some());
assert!(TikiPallet::user_tikis(&user_account).contains(&TikiEnum::Welati));
assert!(TikiPallet::citizen_nft(user_account).is_some());
assert!(TikiPallet::user_tikis(user_account).contains(&TikiEnum::Welati));
assert!(TikiPallet::is_citizen(&user_account));
});
}
@@ -126,7 +126,7 @@ fn auto_grant_citizenship_simplified() {
assert_ok!(TikiPallet::auto_grant_citizenship(&user));
// KYC olmadığı için NFT basılmamalı
assert!(TikiPallet::citizen_nft(&user).is_none());
assert!(TikiPallet::citizen_nft(user).is_none());
});
}
@@ -192,11 +192,11 @@ fn grant_earned_role_works() {
assert_ok!(TikiPallet::grant_earned_role(
RuntimeOrigin::root(),
user_account,
earned_role.clone()
earned_role
));
// Rolün eklendiğini kontrol et
assert!(TikiPallet::user_tikis(&user_account).contains(&earned_role));
assert!(TikiPallet::user_tikis(user_account).contains(&earned_role));
assert!(TikiPallet::has_tiki(&user_account, &earned_role));
});
}
@@ -214,11 +214,11 @@ fn grant_elected_role_works() {
assert_ok!(TikiPallet::grant_elected_role(
RuntimeOrigin::root(),
user_account,
elected_role.clone()
elected_role
));
// Rolün eklendiğini kontrol et
assert!(TikiPallet::user_tikis(&user_account).contains(&elected_role));
assert!(TikiPallet::user_tikis(user_account).contains(&elected_role));
assert!(TikiPallet::has_tiki(&user_account, &elected_role));
});
}
@@ -240,17 +240,17 @@ fn unique_roles_work_correctly() {
assert_ok!(TikiPallet::grant_elected_role(
RuntimeOrigin::root(),
user1,
unique_role.clone()
unique_role
));
// İkinci kullanıcıya aynı rolü vermeye çalış
assert_noop!(
TikiPallet::grant_elected_role(RuntimeOrigin::root(), user2, unique_role.clone()),
TikiPallet::grant_elected_role(RuntimeOrigin::root(), user2, unique_role),
Error::<Test>::RoleAlreadyTaken
);
// TikiHolder'da doğru şekilde kaydedildiğini kontrol et
assert_eq!(TikiPallet::tiki_holder(&unique_role), Some(user1));
assert_eq!(TikiPallet::tiki_holder(unique_role), Some(user1));
});
}
@@ -282,24 +282,24 @@ fn revoke_tiki_works() {
assert_ok!(TikiPallet::grant_tiki(
RuntimeOrigin::root(),
user_account,
tiki_to_revoke.clone()
tiki_to_revoke
));
// Rolün eklendiğini kontrol et
assert!(TikiPallet::user_tikis(&user_account).contains(&tiki_to_revoke));
assert!(TikiPallet::user_tikis(user_account).contains(&tiki_to_revoke));
// Rolü kaldır
assert_ok!(TikiPallet::revoke_tiki(
RuntimeOrigin::root(),
user_account,
tiki_to_revoke.clone()
tiki_to_revoke
));
// Rolün kaldırıldığını kontrol et
assert!(!TikiPallet::user_tikis(&user_account).contains(&tiki_to_revoke));
assert!(!TikiPallet::user_tikis(user_account).contains(&tiki_to_revoke));
assert!(!TikiPallet::has_tiki(&user_account, &tiki_to_revoke));
// Welati rolünün hala durduğunu kontrol et
assert!(TikiPallet::user_tikis(&user_account).contains(&TikiEnum::Welati));
assert!(TikiPallet::user_tikis(user_account).contains(&TikiEnum::Welati));
// Event kontrol et
System::assert_has_event(
@@ -335,18 +335,18 @@ fn revoke_unique_role_clears_holder() {
assert_ok!(TikiPallet::grant_elected_role(
RuntimeOrigin::root(),
user,
unique_role.clone()
unique_role
));
// TikiHolder'da kayıtlı olduğunu kontrol et
assert_eq!(TikiPallet::tiki_holder(&unique_role), Some(user));
assert_eq!(TikiPallet::tiki_holder(unique_role), Some(user));
// Rolü kaldır
assert_ok!(TikiPallet::revoke_tiki(RuntimeOrigin::root(), user, unique_role.clone()));
assert_ok!(TikiPallet::revoke_tiki(RuntimeOrigin::root(), user, unique_role));
// TikiHolder'dan temizlendiğini kontrol et
assert_eq!(TikiPallet::tiki_holder(&unique_role), None);
assert!(!TikiPallet::user_tikis(&user).contains(&unique_role));
assert_eq!(TikiPallet::tiki_holder(unique_role), None);
assert!(!TikiPallet::user_tikis(user).contains(&unique_role));
});
}
@@ -446,11 +446,11 @@ fn multiple_users_work_independently() {
assert_eq!(TikiPallet::get_tiki_score(&user2), 110); // 10 + 100
// Rollerin doğru dağıldığını kontrol et
assert!(TikiPallet::user_tikis(&user1).contains(&TikiEnum::Axa));
assert!(!TikiPallet::user_tikis(&user1).contains(&TikiEnum::Wezir));
assert!(TikiPallet::user_tikis(user1).contains(&TikiEnum::Axa));
assert!(!TikiPallet::user_tikis(user1).contains(&TikiEnum::Wezir));
assert!(TikiPallet::user_tikis(&user2).contains(&TikiEnum::Wezir));
assert!(!TikiPallet::user_tikis(&user2).contains(&TikiEnum::Axa));
assert!(TikiPallet::user_tikis(user2).contains(&TikiEnum::Wezir));
assert!(!TikiPallet::user_tikis(user2).contains(&TikiEnum::Axa));
// TikiProvider trait testleri
assert!(TikiPallet::has_tiki(&user1, &TikiEnum::Axa));
@@ -477,11 +477,11 @@ fn cannot_grant_role_without_citizen_nft() {
#[test]
fn nft_id_increments_correctly() {
new_test_ext().execute_with(|| {
let users = vec![2, 3, 4];
let users = [2, 3, 4];
for (i, user) in users.iter().enumerate() {
assert_ok!(TikiPallet::force_mint_citizen_nft(RuntimeOrigin::root(), *user));
assert_eq!(TikiPallet::citizen_nft(user), Some(i as u32));
assert_eq!(TikiPallet::citizen_nft(*user), Some(i as u32));
}
// Next ID'nin doğru arttığını kontrol et
@@ -497,7 +497,7 @@ fn duplicate_roles_not_allowed() {
// NFT bas ve rol ver
assert_ok!(TikiPallet::force_mint_citizen_nft(RuntimeOrigin::root(), user));
assert_ok!(TikiPallet::grant_earned_role(RuntimeOrigin::root(), user, role.clone()));
assert_ok!(TikiPallet::grant_earned_role(RuntimeOrigin::root(), user, role));
// Aynı rolü tekrar vermeye çalış
assert_noop!(
@@ -628,7 +628,7 @@ fn complex_multi_role_scenario() {
)); // Elected
// Tüm rollerin eklendiğini kontrol et
let user_tikis = TikiPallet::user_tikis(&user);
let user_tikis = TikiPallet::user_tikis(user);
assert!(user_tikis.contains(&TikiEnum::Welati)); // 10 puan
assert!(user_tikis.contains(&TikiEnum::Wezir)); // 100 puan
assert!(user_tikis.contains(&TikiEnum::Mamoste)); // 70 puan
@@ -753,8 +753,8 @@ fn stress_test_multiple_users_roles() {
assert_eq!(TikiPallet::get_tiki_score(&5), 410); // 10 + 250 + 150
// Unique rollerin doğru atandığını kontrol et
assert_eq!(TikiPallet::tiki_holder(&TikiEnum::Serok), Some(2));
assert_eq!(TikiPallet::tiki_holder(&TikiEnum::SerokiMeclise), Some(4));
assert_eq!(TikiPallet::tiki_holder(TikiEnum::Serok), Some(2));
assert_eq!(TikiPallet::tiki_holder(TikiEnum::SerokiMeclise), Some(4));
// Toplam vatandaş sayısını kontrol et
let mut citizen_count = 0;
@@ -793,7 +793,7 @@ fn maximum_roles_per_user_limit() {
}
// Kullanıcının pek çok role sahip olduğunu kontrol et
let final_tikis = TikiPallet::user_tikis(&user);
let final_tikis = TikiPallet::user_tikis(user);
assert!(final_tikis.len() >= 5); // En az 5 rol olmalı (Welati + 4+ diğer)
assert!(final_tikis.len() <= 100); // Max limit'i aşmamalı
@@ -836,7 +836,7 @@ fn apply_for_citizenship_adds_hemwelati() {
assert_ok!(TikiPallet::force_mint_citizen_nft(RuntimeOrigin::root(), user));
// Welati rolü var
let tikis = TikiPallet::user_tikis(&user);
let tikis = TikiPallet::user_tikis(user);
assert!(tikis.contains(&TikiEnum::Welati));
});
}
@@ -894,7 +894,7 @@ fn revoke_tiki_reduces_score() {
assert!(final_score < initial_score);
// Rol listesinde yok
let tikis = TikiPallet::user_tikis(&user);
let tikis = TikiPallet::user_tikis(user);
assert!(!tikis.contains(&TikiEnum::Dadger));
});
}
@@ -998,14 +998,14 @@ fn user_tikis_updated_after_grant() {
assert_ok!(TikiPallet::force_mint_citizen_nft(RuntimeOrigin::root(), user));
let tikis_before = TikiPallet::user_tikis(&user);
let tikis_before = TikiPallet::user_tikis(user);
assert_eq!(tikis_before.len(), 1); // Only Welati
// Rol ekle
assert_ok!(TikiPallet::grant_tiki(RuntimeOrigin::root(), user, TikiEnum::Dadger));
// UserTikis güncellendi
let tikis_after = TikiPallet::user_tikis(&user);
let tikis_after = TikiPallet::user_tikis(user);
assert_eq!(tikis_after.len(), 2);
assert!(tikis_after.contains(&TikiEnum::Dadger));
});
@@ -1021,7 +1021,7 @@ fn user_tikis_consistent_with_score() {
assert_ok!(TikiPallet::grant_tiki(RuntimeOrigin::root(), user, TikiEnum::Wezir));
// UserTikis sayısı ile score tutarlı olmalı
let user_tikis = TikiPallet::user_tikis(&user);
let user_tikis = TikiPallet::user_tikis(user);
let score = TikiPallet::get_tiki_score(&user);
assert_eq!(user_tikis.len(), 3); // Welati + Dadger + Wezir
@@ -1042,8 +1042,8 @@ fn multiple_users_independent_roles() {
assert_ok!(TikiPallet::grant_tiki(RuntimeOrigin::root(), user2, TikiEnum::Wezir));
// Roller bağımsız
let tikis1 = TikiPallet::user_tikis(&user1);
let tikis2 = TikiPallet::user_tikis(&user2);
let tikis1 = TikiPallet::user_tikis(user1);
let tikis2 = TikiPallet::user_tikis(user2);
assert!(tikis1.contains(&TikiEnum::Dadger));
assert!(!tikis1.contains(&TikiEnum::Wezir));
@@ -15,14 +15,14 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "3.6.12", default-features = false, features = [
"derive",
"max-encoded-len",
"derive",
"max-encoded-len",
] }
scale-info = { default-features = false, features = [
"derive",
"derive",
], workspace = true }
serde = { version = "1.0", default-features = false, features = [
"derive",
"derive",
], optional = true }
pezframe-benchmarking = { optional = true, workspace = true }
@@ -36,41 +36,41 @@ pezsp-std = { default-features = false, workspace = true }
[dev-dependencies]
pezpallet-assets = { workspace = true }
pezpallet-balances = { workspace = true }
serde = { version = "1.0" }
pezsp-core = { workspace = true }
pezsp-io = { workspace = true }
serde = { version = "1.0" }
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezpallet-assets/std",
"pezpallet-balances/std",
"scale-info/std",
"serde",
"pezsp-core?/std",
"pezsp-io?/std",
"pezsp-runtime/std",
"pezsp-std/std",
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezpallet-assets/std",
"pezpallet-balances/std",
"pezsp-core?/std",
"pezsp-io?/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
"serde",
]
runtime-benchmarks = [
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-assets/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-balances/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-assets/try-runtime",
"pezpallet-balances/try-runtime",
"pezsp-runtime/try-runtime",
]
@@ -1,7 +1,5 @@
//! Benchmarking setup for pezpallet-token-wrapper
#![cfg(feature = "runtime-benchmarks")]
use super::*;
#[allow(unused)]
use crate::Pezpallet as TokenWrapper;
@@ -112,6 +112,9 @@ impl pezpallet_assets::Config for Test {
type WeightInfo = ();
type RemoveItemsLimit = ConstU32<1000>;
type Holder = ();
type ReserveData = ();
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelper = ();
}
parameter_types! {
@@ -120,9 +123,9 @@ parameter_types! {
}
impl pezpallet_token_wrapper::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = crate::weights::BizinikiwiWeight<Test>;
type Currency = Balances;
type AssetId = AssetId;
type Assets = Assets;
type PalletId = TokenWrapperPalletId;
type WrapperAssetId = WrapperAssetId;
@@ -8,13 +8,13 @@ fn wrap_works() {
let user = 1;
let amount = 1000;
assert_eq!(Balances::free_balance(&user), 10000);
assert_eq!(Assets::balance(0, &user), 0);
assert_eq!(Balances::free_balance(user), 10000);
assert_eq!(Assets::balance(0, user), 0);
assert_ok!(TokenWrapper::wrap(RuntimeOrigin::signed(user), amount));
assert_eq!(Balances::free_balance(&user), 10000 - amount);
assert_eq!(Assets::balance(0, &user), amount);
assert_eq!(Balances::free_balance(user), 10000 - amount);
assert_eq!(Assets::balance(0, user), amount);
assert_eq!(TokenWrapper::total_locked(), amount);
});
}
@@ -26,12 +26,12 @@ fn unwrap_works() {
let amount = 1000;
assert_ok!(TokenWrapper::wrap(RuntimeOrigin::signed(user), amount));
let native_balance = Balances::free_balance(&user);
let native_balance = Balances::free_balance(user);
assert_ok!(TokenWrapper::unwrap(RuntimeOrigin::signed(user), amount));
assert_eq!(Balances::free_balance(&user), native_balance + amount);
assert_eq!(Assets::balance(0, &user), 0);
assert_eq!(Balances::free_balance(user), native_balance + amount);
assert_eq!(Assets::balance(0, user), 0);
assert_eq!(TokenWrapper::total_locked(), 0);
});
}
@@ -109,21 +109,21 @@ fn multi_user_concurrent_wrap_unwrap() {
assert_ok!(TokenWrapper::wrap(RuntimeOrigin::signed(user3), amount3));
// Verify balances
assert_eq!(Assets::balance(0, &user1), amount1);
assert_eq!(Assets::balance(0, &user2), amount2);
assert_eq!(Assets::balance(0, &user3), amount3);
assert_eq!(Assets::balance(0, user1), amount1);
assert_eq!(Assets::balance(0, user2), amount2);
assert_eq!(Assets::balance(0, user3), amount3);
// Verify total locked
assert_eq!(TokenWrapper::total_locked(), amount1 + amount2 + amount3);
// User 2 unwraps
assert_ok!(TokenWrapper::unwrap(RuntimeOrigin::signed(user2), amount2));
assert_eq!(Assets::balance(0, &user2), 0);
assert_eq!(Assets::balance(0, user2), 0);
assert_eq!(TokenWrapper::total_locked(), amount1 + amount3);
// User 1 and 3 still have their wrapped tokens
assert_eq!(Assets::balance(0, &user1), amount1);
assert_eq!(Assets::balance(0, &user3), amount3);
assert_eq!(Assets::balance(0, user1), amount1);
assert_eq!(Assets::balance(0, user3), amount3);
});
}
@@ -138,12 +138,12 @@ fn multiple_wrap_operations_same_user() {
assert_ok!(TokenWrapper::wrap(RuntimeOrigin::signed(user), 300));
// Verify accumulated balance
assert_eq!(Assets::balance(0, &user), 600);
assert_eq!(Assets::balance(0, user), 600);
assert_eq!(TokenWrapper::total_locked(), 600);
// Partial unwrap
assert_ok!(TokenWrapper::unwrap(RuntimeOrigin::signed(user), 250));
assert_eq!(Assets::balance(0, &user), 350);
assert_eq!(Assets::balance(0, user), 350);
assert_eq!(TokenWrapper::total_locked(), 350);
});
}
@@ -202,11 +202,11 @@ fn large_amount_wrap_unwrap() {
let large_amount = 9000; // Leave some for existential deposit
assert_ok!(TokenWrapper::wrap(RuntimeOrigin::signed(user), large_amount));
assert_eq!(Assets::balance(0, &user), large_amount);
assert_eq!(Assets::balance(0, user), large_amount);
assert_eq!(TokenWrapper::total_locked(), large_amount);
assert_ok!(TokenWrapper::unwrap(RuntimeOrigin::signed(user), large_amount));
assert_eq!(Assets::balance(0, &user), 0);
assert_eq!(Assets::balance(0, user), 0);
assert_eq!(TokenWrapper::total_locked(), 0);
});
}
@@ -218,23 +218,23 @@ fn pezpallet_account_balance_consistency() {
let amount = 1000;
let pezpallet_account = TokenWrapper::account_id();
let initial_pallet_balance = Balances::free_balance(&pezpallet_account);
let initial_pallet_balance = Balances::free_balance(pezpallet_account);
// Wrap - pezpallet account should receive native tokens
assert_ok!(TokenWrapper::wrap(RuntimeOrigin::signed(user), amount));
assert_eq!(Balances::free_balance(&pezpallet_account), initial_pallet_balance + amount);
assert_eq!(Balances::free_balance(pezpallet_account), initial_pallet_balance + amount);
// Unwrap - pezpallet account should release native tokens
assert_ok!(TokenWrapper::unwrap(RuntimeOrigin::signed(user), amount));
assert_eq!(Balances::free_balance(&pezpallet_account), initial_pallet_balance);
assert_eq!(Balances::free_balance(pezpallet_account), initial_pallet_balance);
});
}
#[test]
fn wrap_unwrap_maintains_1_to_1_backing() {
new_test_ext().execute_with(|| {
let users = vec![1, 2, 3];
let amounts = vec![1000, 2000, 1500];
let users = [1, 2, 3];
let amounts = [1000, 2000, 1500];
// All users wrap
for (user, amount) in users.iter().zip(amounts.iter()) {
@@ -243,7 +243,7 @@ fn wrap_unwrap_maintains_1_to_1_backing() {
let total_wrapped = amounts.iter().sum::<u128>();
let pezpallet_account = TokenWrapper::account_id();
let pezpallet_balance = Balances::free_balance(&pezpallet_account);
let pezpallet_balance = Balances::free_balance(pezpallet_account);
// Pezpallet should hold exactly the amount of wrapped tokens
// (Note: may include existential deposit, so check >= total_wrapped)
@@ -16,15 +16,15 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { workspace = true, default-features = false, features = ["derive"] }
scale-info = { default-features = false, features = [
"derive",
"derive",
], workspace = true }
serde = { version = "1.0", default-features = false, features = [
"derive",
"derive",
], optional = true }
log = { default-features = false, workspace = true }
pezframe-support = { default-features = false, workspace = true }
pezframe-system = { default-features = false, workspace = true }
log = { default-features = false, workspace = true }
pezsp-runtime = { default-features = false, workspace = true }
pezsp-std = { default-features = false, workspace = true }
@@ -55,53 +55,53 @@ pezsp-io = { workspace = true, default-features = false }
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"log/std",
# Diğer paletlerin std özellikleri
"pezpallet-balances/std",
"pezpallet-identity-kyc/std",
"pezpallet-perwerde/std",
"pezpallet-referral/std",
"pezpallet-staking-score/std",
"pezpallet-tiki/std",
"pezkuwi-primitives/std",
"scale-info/std",
"serde", # serde'yi doğrudan feature olarak ekliyoruz
"serde?/std",
"pezsp-core?/std",
"pezsp-io?/std",
"pezsp-runtime/std",
"pezsp-std/std",
"codec/std",
"log/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
# Diğer paletlerin std özellikleri
"pezkuwi-primitives/std",
"pezpallet-balances/std",
"pezpallet-identity-kyc/std",
"pezpallet-perwerde/std",
"pezpallet-referral/std",
"pezpallet-staking-score/std",
"pezpallet-tiki/std",
"pezsp-core?/std",
"pezsp-io?/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
"serde", # serde'yi doğrudan feature olarak ekliyoruz
"serde?/std",
]
runtime-benchmarks = [
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
# Diğer paletlerin runtime-benchmarks özellikleri
"pezpallet-balances/runtime-benchmarks",
"pezpallet-identity-kyc/runtime-benchmarks",
"pezpallet-perwerde/runtime-benchmarks",
"pezpallet-referral/runtime-benchmarks",
"pezpallet-staking-score/runtime-benchmarks",
"pezpallet-tiki/runtime-benchmarks",
"pezkuwi-primitives/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
# Diğer paletlerin runtime-benchmarks özellikleri
"pezkuwi-primitives/runtime-benchmarks",
"pezpallet-balances/runtime-benchmarks",
"pezpallet-identity-kyc/runtime-benchmarks",
"pezpallet-perwerde/runtime-benchmarks",
"pezpallet-referral/runtime-benchmarks",
"pezpallet-staking-score/runtime-benchmarks",
"pezpallet-tiki/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
# Diğer paletlerin try-runtime özellikleri
"pezpallet-balances/try-runtime",
"pezpallet-identity-kyc/try-runtime",
"pezpallet-perwerde/try-runtime",
"pezpallet-referral/try-runtime",
"pezpallet-staking-score/try-runtime",
"pezpallet-tiki/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
# Diğer paletlerin try-runtime özellikleri
"pezpallet-balances/try-runtime",
"pezpallet-identity-kyc/try-runtime",
"pezpallet-perwerde/try-runtime",
"pezpallet-referral/try-runtime",
"pezpallet-staking-score/try-runtime",
"pezpallet-tiki/try-runtime",
"pezsp-runtime/try-runtime",
]
@@ -2,13 +2,9 @@
//!
//! These benchmarks measure the performance of trust score operations.
#![cfg(feature = "runtime-benchmarks")]
use super::*;
use crate::Pezpallet as TrustPallet;
use pezframe_benchmarking::{v2::*, whitelisted_caller};
use pezframe_support::pezpallet_prelude::*;
use pezframe_system::RawOrigin;
use pezsp_runtime::traits::Zero;
@@ -68,5 +64,5 @@ mod benchmarks {
// Verify - The function completed successfully
}
impl_benchmark_test_suite!(TrustPallet, crate::mock::new_test_ext(), crate::mock::Test);
impl_benchmark_test_suite!(Pezpallet, crate::mock::new_test_ext(), crate::mock::Test);
}
@@ -115,7 +115,7 @@ use core::convert::TryFrom;
use pezframe_system::pezpallet_prelude::BlockNumberFor;
use pezframe_support::pezpallet_prelude::{
Get, IsType, MaxEncodedLen, Member, OptionQuery, Parameter, ValueQuery,
Get, MaxEncodedLen, Member, OptionQuery, Parameter, ValueQuery,
};
pub trait ReferralScoreProvider<AccountId> {
@@ -152,9 +152,7 @@ pub mod pezpallet {
pub struct Pezpallet<T>(_);
#[pezpallet::config]
pub trait Config: pezframe_system::Config + pezpallet_identity_kyc::Config {
type RuntimeEvent: From<Event<Self>>
+ IsType<<Self as pezframe_system::Config>::RuntimeEvent>;
pub trait Config: pezframe_system::Config<RuntimeEvent: From<Event<Self>>> + pezpallet_identity_kyc::Config {
type WeightInfo: WeightInfo;
type Score: Member
@@ -417,7 +415,7 @@ pub mod pezpallet {
impl<T: Config> TrustScoreUpdater<T::AccountId> for Pezpallet<T> {
fn on_score_component_changed(who: &T::AccountId) {
if let Err(e) = Self::update_score_for_account(who) {
log::error!("Failed to update trust score for {:?}: {:?}", who, e);
log::error!("Failed to update trust score for {who:?}: {e:?}");
}
}
}
@@ -92,7 +92,6 @@ impl pezpallet_identity_kyc::types::CitizenNftProvider<u64> for NoOpCitizenNftPr
}
impl pezpallet_identity_kyc::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Currency = Balances;
type GovernanceOrigin = pezframe_system::EnsureRoot<u64>;
type WeightInfo = ();
@@ -147,7 +146,6 @@ impl pezpallet_trust::CitizenshipStatusProvider<u64> for MockCitizenshipStatusPr
}
impl pezpallet_trust::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type Score = u128;
type ScoreMultiplierBase = ScoreMultiplierBase;
@@ -45,13 +45,13 @@ fn update_score_for_account_works() {
new_test_ext().execute_with(|| {
let account = 1u64;
let initial_score = TrustPallet::trust_score_of(&account);
let initial_score = TrustPallet::trust_score_of(account);
assert_eq!(initial_score, 0);
let new_score = TrustPallet::update_score_for_account(&account).unwrap();
assert!(new_score > 0);
let stored_score = TrustPallet::trust_score_of(&account);
let stored_score = TrustPallet::trust_score_of(account);
assert_eq!(stored_score, new_score);
let total_score = TrustPallet::total_active_trust_score();
@@ -82,7 +82,7 @@ fn force_recalculate_trust_score_works() {
assert_ok!(TrustPallet::force_recalculate_trust_score(RuntimeOrigin::root(), account));
let score = TrustPallet::trust_score_of(&account);
let score = TrustPallet::trust_score_of(account);
assert!(score > 0);
});
}
@@ -193,12 +193,12 @@ fn trust_score_updater_trait_works() {
let account = 1u64;
let initial_score = TrustPallet::trust_score_of(&account);
let initial_score = TrustPallet::trust_score_of(account);
assert_eq!(initial_score, 0);
TrustPallet::on_score_component_changed(&account);
let updated_score = TrustPallet::trust_score_of(&account);
let updated_score = TrustPallet::trust_score_of(account);
assert!(updated_score > 0);
});
}
@@ -266,7 +266,7 @@ fn update_all_trust_scores_multiple_users() {
// Verify at least one user has score (depends on mock KYC setup)
let total = TrustPallet::total_active_trust_score();
assert!(total >= 0); // May be 0 if no users have KYC approved in mock
assert!(total < u128::MAX); // May be 0 if no users have KYC approved in mock
});
}
@@ -290,7 +290,7 @@ fn update_all_trust_scores_updates_total() {
let final_total = TrustPallet::total_active_trust_score();
// Total should remain valid (may stay 0 if no approved KYC users)
assert!(final_total >= 0);
assert!(final_total < u128::MAX);
});
}
@@ -351,7 +351,7 @@ fn calculate_trust_score_all_zero_components() {
let score = TrustPallet::calculate_trust_score(&account).unwrap();
// Should be greater than 0 (mock provides some values)
assert!(score >= 0);
assert!(score < u128::MAX);
});
}
@@ -400,8 +400,8 @@ fn multiple_users_independent_scores() {
assert_ne!(score2, 0);
// Verify stored separately
assert_eq!(TrustPallet::trust_score_of(&user1), score1);
assert_eq!(TrustPallet::trust_score_of(&user2), score2);
assert_eq!(TrustPallet::trust_score_of(user1), score1);
assert_eq!(TrustPallet::trust_score_of(user2), score2);
});
}
@@ -412,10 +412,9 @@ fn multiple_users_independent_scores() {
#[test]
fn trust_score_provider_trait_returns_zero_initially() {
new_test_ext().execute_with(|| {
use crate::TrustScoreProvider;
let account = 1u64;
let score = TrustPallet::trust_score_of(&account);
let score = TrustPallet::trust_score_of(account);
assert_eq!(score, 0);
});
}
@@ -423,12 +422,11 @@ fn trust_score_provider_trait_returns_zero_initially() {
#[test]
fn trust_score_provider_trait_returns_updated_score() {
new_test_ext().execute_with(|| {
use crate::TrustScoreProvider;
let account = 1u64;
TrustPallet::update_score_for_account(&account).unwrap();
let score = TrustPallet::trust_score_of(&account);
let score = TrustPallet::trust_score_of(account);
assert!(score > 0);
});
}
@@ -436,13 +434,12 @@ fn trust_score_provider_trait_returns_updated_score() {
#[test]
fn trust_score_provider_trait_multiple_users() {
new_test_ext().execute_with(|| {
use crate::TrustScoreProvider;
TrustPallet::update_score_for_account(&1u64).unwrap();
TrustPallet::update_score_for_account(&2u64).unwrap();
let score1 = TrustPallet::trust_score_of(&1u64);
let score2 = TrustPallet::trust_score_of(&2u64);
let score1 = TrustPallet::trust_score_of(1u64);
let score2 = TrustPallet::trust_score_of(2u64);
assert!(score1 > 0);
assert!(score2 > 0);
@@ -464,7 +461,7 @@ fn storage_consistency_after_multiple_updates() {
}
// Score should still be consistent
let stored = TrustPallet::trust_score_of(&account);
let stored = TrustPallet::trust_score_of(account);
let calculated = TrustPallet::calculate_trust_score(&account).unwrap();
assert_eq!(stored, calculated);
@@ -15,20 +15,20 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { workspace = true, default-features = false, features = [
"derive",
"max-encoded-len",
"derive",
"max-encoded-len",
] }
scale-info = { default-features = false, features = [
"derive",
"derive",
], workspace = true }
serde = { version = "1.0", default-features = false, features = [
"derive",
"derive",
], optional = true }
log = { default-features = false, workspace = true }
pezframe-benchmarking = { optional = true, workspace = true }
pezframe-support = { default-features = false, workspace = true }
pezframe-system = { default-features = false, workspace = true }
log = { default-features = false, workspace = true }
pezsp-core = { workspace = true, default-features = false, optional = true }
pezsp-io = { workspace = true, default-features = false, optional = true }
pezsp-runtime = { default-features = false, workspace = true }
@@ -58,69 +58,69 @@ pezsp-io = { workspace = true, default-features = false }
[features]
default = ["std"]
std = [
"codec/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"log/std",
"pezpallet-balances/std",
"pezpallet-collective/std",
"pezpallet-democracy/std",
"pezpallet-elections-phragmen/std",
"pezpallet-identity-kyc/std",
"pezpallet-identity/std",
"pezpallet-nfts/std",
"pezpallet-referral/std",
"pezpallet-scheduler/std",
"pezpallet-staking-score/std",
"pezpallet-tiki/std",
"pezpallet-timestamp/std",
"pezpallet-trust/std",
"scale-info/std",
"serde",
"serde?/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"codec/std",
"log/std",
"pezframe-benchmarking?/std",
"pezframe-support/std",
"pezframe-system/std",
"pezpallet-balances/std",
"pezpallet-collective/std",
"pezpallet-democracy/std",
"pezpallet-elections-phragmen/std",
"pezpallet-identity-kyc/std",
"pezpallet-identity/std",
"pezpallet-nfts/std",
"pezpallet-referral/std",
"pezpallet-scheduler/std",
"pezpallet-staking-score/std",
"pezpallet-tiki/std",
"pezpallet-timestamp/std",
"pezpallet-trust/std",
"pezsp-core/std",
"pezsp-io/std",
"pezsp-runtime/std",
"pezsp-std/std",
"scale-info/std",
"serde",
"serde?/std",
]
runtime-benchmarks = [
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-balances/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-nfts/runtime-benchmarks",
"pezpallet-referral/runtime-benchmarks",
"pezpallet-scheduler/runtime-benchmarks",
"pezpallet-staking-score/runtime-benchmarks",
"pezpallet-tiki/runtime-benchmarks",
"pezpallet-timestamp/runtime-benchmarks",
"pezpallet-trust/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
"pezframe-benchmarking/runtime-benchmarks",
"pezframe-support/runtime-benchmarks",
"pezframe-system/runtime-benchmarks",
"pezpallet-balances/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-nfts/runtime-benchmarks",
"pezpallet-referral/runtime-benchmarks",
"pezpallet-scheduler/runtime-benchmarks",
"pezpallet-staking-score/runtime-benchmarks",
"pezpallet-tiki/runtime-benchmarks",
"pezpallet-timestamp/runtime-benchmarks",
"pezpallet-trust/runtime-benchmarks",
"pezsp-core",
"pezsp-io",
"pezsp-io?/runtime-benchmarks",
"pezsp-runtime/runtime-benchmarks",
]
try-runtime = [
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-balances/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-nfts/try-runtime",
"pezpallet-referral/try-runtime",
"pezpallet-scheduler/try-runtime",
"pezpallet-staking-score/try-runtime",
"pezpallet-tiki/try-runtime",
"pezpallet-timestamp/try-runtime",
"pezpallet-trust/try-runtime",
"pezsp-runtime/try-runtime",
"pezframe-support/try-runtime",
"pezframe-system/try-runtime",
"pezpallet-balances/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-nfts/try-runtime",
"pezpallet-referral/try-runtime",
"pezpallet-scheduler/try-runtime",
"pezpallet-staking-score/try-runtime",
"pezpallet-tiki/try-runtime",
"pezpallet-timestamp/try-runtime",
"pezpallet-trust/try-runtime",
"pezsp-runtime/try-runtime",
]
@@ -1,5 +1,3 @@
#![cfg(feature = "runtime-benchmarks")]
use super::*;
use crate::types::*;
use pezframe_benchmarking::v2::*;
@@ -165,7 +163,7 @@ mod benchmarks {
assert_eq!(NextAppointmentId::<T>::get(), 1);
// Verify that the role is still not filled (nomination doesn't fill it, approval does)
assert!(!AppointedOfficials::<T>::contains_key(&OfficialRole::Dadger));
assert!(!AppointedOfficials::<T>::contains_key(OfficialRole::Dadger));
}
#[benchmark]
@@ -198,7 +196,7 @@ mod benchmarks {
assert_eq!(NextAppointmentId::<T>::get(), 1);
// CRITICAL: Verify that the role was assigned in AppointedOfficials storage
// This tests the new storage write we added in lib.rs approve_appointment()
assert_eq!(AppointedOfficials::<T>::get(&OfficialRole::Dozger), Some(nominee));
assert_eq!(AppointedOfficials::<T>::get(OfficialRole::Dozger), Some(nominee));
}
// ----------------------------------------------------------------
@@ -196,7 +196,9 @@ use pezframe_support::{
weights::Weight,
};
use pezframe_system::pezpallet_prelude::*;
use pezpallet_identity_kyc::types::{KycLevel, KycStatus};
#[cfg(not(any(test, feature = "runtime-benchmarks")))]
use pezpallet_identity_kyc::types::KycLevel;
use pezpallet_identity_kyc::types::KycStatus;
use pezpallet_tiki::{Tiki, TikiScoreProvider};
use pezpallet_trust::TrustScoreProvider;
use pezsp_runtime::traits::Dispatchable;
@@ -218,14 +220,12 @@ pub mod pezpallet {
#[pezpallet::config]
pub trait Config:
pezframe_system::Config
pezframe_system::Config<RuntimeEvent: From<Event<Self>>>
+ pezpallet_tiki::Config
+ pezpallet_trust::Config
+ pezpallet_identity_kyc::Config
+ core::fmt::Debug
{
type RuntimeEvent: From<Event<Self>>
+ IsType<<Self as pezframe_system::Config>::RuntimeEvent>;
type WeightInfo: crate::WeightInfo;
type Randomness: Randomness<Self::Hash, BlockNumberFor<Self>>;
type RuntimeCall: Parameter
@@ -603,7 +603,7 @@ pub mod pezpallet {
let election_info = ElectionInfo {
election_id,
election_type: election_type.clone(),
election_type,
start_block: current_block,
candidacy_deadline,
campaign_start,
@@ -897,11 +897,11 @@ pub mod pezpallet {
ensure!(is_serok || is_minister, Error::<T>::NotAuthorizedToNominate);
// Check if role is already filled
ensure!(!AppointedOfficials::<T>::contains_key(&role), Error::<T>::RoleAlreadyFilled);
ensure!(!AppointedOfficials::<T>::contains_key(role), Error::<T>::RoleAlreadyFilled);
// Check if this specific nominee already has a pending nomination for this role
ensure!(
!PendingNominations::<T>::contains_key(&role, &nominee),
!PendingNominations::<T>::contains_key(role, &nominee),
Error::<T>::RoleAlreadyFilled
);
@@ -924,17 +924,17 @@ pub mod pezpallet {
};
// Store nomination
PendingNominations::<T>::insert(&role, &nominee, nomination);
PendingNominations::<T>::insert(role, &nominee, nomination);
// Create appointment process
let documents: BoundedVec<BoundedVec<u8, ConstU32<1000>>, ConstU32<10>> =
vec![justification.try_into().map_err(|_| Error::<T>::CalculationOverflow)?]
vec![justification]
.try_into()
.map_err(|_| Error::<T>::CalculationOverflow)?;
let appointment_process = AppointmentProcess {
process_id,
position: role.clone(),
position: role,
nominating_minister: nominator.clone(),
nominee: nominee.clone(),
initiated_at: current_block,
@@ -978,7 +978,7 @@ pub mod pezpallet {
);
// Get nomination
let mut nomination = PendingNominations::<T>::get(&process.position, &process.nominee)
let mut nomination = PendingNominations::<T>::get(process.position, &process.nominee)
.ok_or(Error::<T>::NominationNotFound)?;
// Update nomination
@@ -992,11 +992,11 @@ pub mod pezpallet {
process.status = AppointmentStatus::Approved;
// Store updates
PendingNominations::<T>::insert(&process.position, &process.nominee, nomination);
PendingNominations::<T>::insert(process.position, &process.nominee, nomination);
AppointmentProcesses::<T>::insert(process_id, process.clone());
// Assign the official to the role
AppointedOfficials::<T>::insert(&process.position, &process.nominee);
AppointedOfficials::<T>::insert(process.position, &process.nominee);
Self::deposit_event(Event::AppointmentApproved {
process_id,
@@ -1259,7 +1259,7 @@ pub mod pezpallet {
_ => {
let trust_score = T::TrustScoreSource::trust_score_of(voter);
let weight = (trust_score / 100) as u32;
weight.max(1).min(10)
weight.clamp(1, 10)
},
}
}
@@ -15,6 +15,10 @@ pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1);
pub mod v1 {
use super::*;
/// Type alias for the pre-upgrade state tuple to reduce type complexity
#[cfg(feature = "try-runtime")]
type PreUpgradeState = (u32, u32, u32, u32, u32, u32, u32, u32, u32, u32, u32, u32, u32, u32);
pub struct MigrateToV1<T>(PhantomData<T>);
impl<T: Config> OnRuntimeUpgrade for MigrateToV1<T> {
@@ -22,13 +26,10 @@ pub mod v1 {
let current = Pezpallet::<T>::on_chain_storage_version();
log::info!(
"🔄 Running migration for pezpallet-welati from {:?} to {:?}",
current,
STORAGE_VERSION
"🔄 Running migration for pezpallet-welati from {current:?} to {STORAGE_VERSION:?}"
);
if current == StorageVersion::new(0) {
let migrated;
let mut weight = Weight::zero();
// Example migration logic for governance storage
@@ -40,18 +41,14 @@ pub mod v1 {
let elections_count = ActiveElections::<T>::iter().count() as u64;
let proposals_count = ActiveProposals::<T>::iter().count() as u64;
migrated = officials_count + ministers_count + elections_count + proposals_count;
let migrated = officials_count + ministers_count + elections_count + proposals_count;
// Update storage version
STORAGE_VERSION.put::<Pezpallet<T>>();
log::info!("✅ Migrated {} entries in pezpallet-welati", migrated);
log::info!("✅ Migrated {migrated} entries in pezpallet-welati");
log::info!(
" Officials: {}, Ministers: {}, Elections: {}, Proposals: {}",
officials_count,
ministers_count,
elections_count,
proposals_count
" Officials: {officials_count}, Ministers: {ministers_count}, Elections: {elections_count}, Proposals: {proposals_count}"
);
// Return weight used
@@ -62,8 +59,7 @@ pub mod v1 {
weight
} else {
log::info!(
"👌 pezpallet-welati migration not needed, current version is {:?}",
current
"👌 pezpallet-welati migration not needed, current version is {current:?}"
);
T::DbWeight::get().reads(1)
}
@@ -74,7 +70,7 @@ pub mod v1 {
let current = Pezpallet::<T>::on_chain_storage_version();
log::info!("🔍 Pre-upgrade check for pezpallet-welati");
log::info!(" Current version: {:?}", current);
log::info!(" Current version: {current:?}");
// Encode current storage counts for verification
let officials_count = CurrentOfficials::<T>::iter().count() as u32;
@@ -92,20 +88,20 @@ pub mod v1 {
let proposals_count = ActiveProposals::<T>::iter().count() as u32;
let collective_votes_count = CollectiveVotes::<T>::iter().count() as u32;
log::info!(" CurrentOfficials entries: {}", officials_count);
log::info!(" CurrentMinisters entries: {}", ministers_count);
log::info!(" ParliamentMembers entries: {}", parliament_count);
log::info!(" DiwanMembers entries: {}", diwan_count);
log::info!(" AppointedOfficials entries: {}", appointed_count);
log::info!(" ActiveElections entries: {}", elections_count);
log::info!(" ElectionCandidates entries: {}", candidates_count);
log::info!(" ElectionVotes entries: {}", votes_count);
log::info!(" ElectionResults entries: {}", results_count);
log::info!(" ElectoralDistrictConfig entries: {}", districts_count);
log::info!(" PendingNominations entries: {}", nominations_count);
log::info!(" AppointmentProcesses entries: {}", appointments_count);
log::info!(" ActiveProposals entries: {}", proposals_count);
log::info!(" CollectiveVotes entries: {}", collective_votes_count);
log::info!(" CurrentOfficials entries: {officials_count}");
log::info!(" CurrentMinisters entries: {ministers_count}");
log::info!(" ParliamentMembers entries: {parliament_count}");
log::info!(" DiwanMembers entries: {diwan_count}");
log::info!(" AppointedOfficials entries: {appointed_count}");
log::info!(" ActiveElections entries: {elections_count}");
log::info!(" ElectionCandidates entries: {candidates_count}");
log::info!(" ElectionVotes entries: {votes_count}");
log::info!(" ElectionResults entries: {results_count}");
log::info!(" ElectoralDistrictConfig entries: {districts_count}");
log::info!(" PendingNominations entries: {nominations_count}");
log::info!(" AppointmentProcesses entries: {appointments_count}");
log::info!(" ActiveProposals entries: {proposals_count}");
log::info!(" CollectiveVotes entries: {collective_votes_count}");
Ok((
officials_count,
@@ -147,7 +143,7 @@ pub mod v1 {
pre_appointments_count,
pre_proposals_count,
pre_collective_votes_count,
): (u32, u32, u32, u32, u32, u32, u32, u32, u32, u32, u32, u32, u32, u32) =
): PreUpgradeState =
Decode::decode(&mut &state[..])
.map_err(|_| "Failed to decode pre-upgrade state")?;
@@ -156,7 +152,7 @@ pub mod v1 {
// Verify storage version was updated
let current_version = Pezpallet::<T>::on_chain_storage_version();
assert_eq!(current_version, STORAGE_VERSION, "Storage version not updated correctly");
log::info!("✅ Storage version updated to {:?}", current_version);
log::info!("✅ Storage version updated to {current_version:?}");
// Verify storage counts (should be same or more, never less)
let post_officials_count = CurrentOfficials::<T>::iter().count() as u32;
@@ -174,68 +170,20 @@ pub mod v1 {
let post_proposals_count = ActiveProposals::<T>::iter().count() as u32;
let post_collective_votes_count = CollectiveVotes::<T>::iter().count() as u32;
log::info!(
" CurrentOfficials entries: {} -> {}",
pre_officials_count,
post_officials_count
);
log::info!(
" CurrentMinisters entries: {} -> {}",
pre_ministers_count,
post_ministers_count
);
log::info!(
" ParliamentMembers entries: {} -> {}",
pre_parliament_count,
post_parliament_count
);
log::info!(" DiwanMembers entries: {} -> {}", pre_diwan_count, post_diwan_count);
log::info!(
" AppointedOfficials entries: {} -> {}",
pre_appointed_count,
post_appointed_count
);
log::info!(
" ActiveElections entries: {} -> {}",
pre_elections_count,
post_elections_count
);
log::info!(
" ElectionCandidates entries: {} -> {}",
pre_candidates_count,
post_candidates_count
);
log::info!(" ElectionVotes entries: {} -> {}", pre_votes_count, post_votes_count);
log::info!(
" ElectionResults entries: {} -> {}",
pre_results_count,
post_results_count
);
log::info!(
" ElectoralDistrictConfig entries: {} -> {}",
pre_districts_count,
post_districts_count
);
log::info!(
" PendingNominations entries: {} -> {}",
pre_nominations_count,
post_nominations_count
);
log::info!(
" AppointmentProcesses entries: {} -> {}",
pre_appointments_count,
post_appointments_count
);
log::info!(
" ActiveProposals entries: {} -> {}",
pre_proposals_count,
post_proposals_count
);
log::info!(
" CollectiveVotes entries: {} -> {}",
pre_collective_votes_count,
post_collective_votes_count
);
log::info!(" CurrentOfficials entries: {pre_officials_count} -> {post_officials_count}");
log::info!(" CurrentMinisters entries: {pre_ministers_count} -> {post_ministers_count}");
log::info!(" ParliamentMembers entries: {pre_parliament_count} -> {post_parliament_count}");
log::info!(" DiwanMembers entries: {pre_diwan_count} -> {post_diwan_count}");
log::info!(" AppointedOfficials entries: {pre_appointed_count} -> {post_appointed_count}");
log::info!(" ActiveElections entries: {pre_elections_count} -> {post_elections_count}");
log::info!(" ElectionCandidates entries: {pre_candidates_count} -> {post_candidates_count}");
log::info!(" ElectionVotes entries: {pre_votes_count} -> {post_votes_count}");
log::info!(" ElectionResults entries: {pre_results_count} -> {post_results_count}");
log::info!(" ElectoralDistrictConfig entries: {pre_districts_count} -> {post_districts_count}");
log::info!(" PendingNominations entries: {pre_nominations_count} -> {post_nominations_count}");
log::info!(" AppointmentProcesses entries: {pre_appointments_count} -> {post_appointments_count}");
log::info!(" ActiveProposals entries: {pre_proposals_count} -> {post_proposals_count}");
log::info!(" CollectiveVotes entries: {pre_collective_votes_count} -> {post_collective_votes_count}");
// Verify no data was lost
assert!(
@@ -10,6 +10,11 @@ use pezsp_runtime::{
BuildStorage,
};
#[cfg(feature = "runtime-benchmarks")]
use pezsp_runtime::testing::{TestSignature, UintAuthorityId};
#[cfg(feature = "runtime-benchmarks")]
use pezsp_runtime::RuntimeAppPublic;
type Block = pezframe_system::mocking::MockBlock<Test>;
type AccountId = u64;
type Balance = u128;
@@ -115,6 +120,28 @@ parameter_types! {
pub const MaxAttributesPerCall: u32 = 1;
}
// Custom BenchmarkHelper for pezpallet_nfts (uses u64 AccountId in mock)
#[cfg(feature = "runtime-benchmarks")]
pub struct NftsBenchmarkHelper;
#[cfg(feature = "runtime-benchmarks")]
impl pezpallet_nfts::BenchmarkHelper<u32, u32, UintAuthorityId, AccountId, TestSignature> for NftsBenchmarkHelper {
fn collection(i: u16) -> u32 {
i.into()
}
fn item(i: u16) -> u32 {
i.into()
}
fn signer() -> (UintAuthorityId, AccountId) {
let signer = UintAuthorityId(0);
let account: AccountId = 1u64;
(signer, account)
}
fn sign(signer: &UintAuthorityId, data: &[u8]) -> TestSignature {
<UintAuthorityId as RuntimeAppPublic>::sign(signer, &data.to_vec()).unwrap()
}
}
impl pezpallet_nfts::Config for Test {
type RuntimeEvent = RuntimeEvent;
type CollectionId = u32;
@@ -142,7 +169,7 @@ impl pezpallet_nfts::Config for Test {
type WeightInfo = ();
type BlockNumberProvider = System;
#[cfg(feature = "runtime-benchmarks")]
type Helper = ();
type Helper = NftsBenchmarkHelper;
}
// Identity Configuration - MINIMAL for pezpallet-tiki dependency
@@ -160,6 +187,19 @@ parameter_types! {
pub const UsernameGracePeriod: u64 = 100;
}
// Custom BenchmarkHelper for pezpallet_identity (uses TestSignature in mock)
#[cfg(feature = "runtime-benchmarks")]
pub struct IdentityBenchmarkHelper;
#[cfg(feature = "runtime-benchmarks")]
impl pezpallet_identity::BenchmarkHelper<UintAuthorityId, TestSignature> for IdentityBenchmarkHelper {
fn sign_message(message: &[u8]) -> (UintAuthorityId, TestSignature) {
let signer = UintAuthorityId(0);
let signature = <UintAuthorityId as RuntimeAppPublic>::sign(&signer, &message.to_vec()).unwrap();
(signer, signature)
}
}
impl pezpallet_identity::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Currency = Balances;
@@ -182,7 +222,7 @@ impl pezpallet_identity::Config for Test {
type OffchainSignature = pezsp_runtime::testing::TestSignature;
type SigningPublicKey = pezsp_runtime::testing::UintAuthorityId;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelper = ();
type BenchmarkHelper = IdentityBenchmarkHelper;
}
// Identity KYC Configuration
@@ -218,7 +258,6 @@ impl pezpallet_identity_kyc::types::CitizenNftProvider<AccountId> for NoOpCitize
}
impl pezpallet_identity_kyc::Config for Test {
type RuntimeEvent = RuntimeEvent;
type Currency = Balances;
type GovernanceOrigin = pezframe_system::EnsureRoot<AccountId>;
type WeightInfo = ();
@@ -246,7 +285,6 @@ impl pezpallet_staking_score::StakingInfoProvider<AccountId, Balance> for MockSt
// Staking Score Configuration
impl pezpallet_staking_score::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type Balance = Balance;
type StakingInfo = MockStakingInfo;
@@ -259,7 +297,6 @@ parameter_types! {
}
impl pezpallet_referral::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type DefaultReferrer = DefaultReferrerAccount;
type PenaltyPerRevocation = PenaltyPerRevocation;
@@ -272,7 +309,6 @@ parameter_types! {
}
impl pezpallet_tiki::Config for Test {
type RuntimeEvent = RuntimeEvent;
type AdminOrigin = pezframe_system::EnsureRoot<AccountId>;
type WeightInfo = ();
type MaxTikisPerUser = MaxTikisPerUser;
@@ -348,7 +384,6 @@ parameter_types! {
}
impl pezpallet_trust::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type Score = u128;
type ScoreMultiplierBase = ScoreMultiplierBase;
@@ -375,7 +410,6 @@ parameter_types! {
}
impl pezpallet_welati::Config for Test {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type Randomness = MockRandomness;
type RuntimeCall = RuntimeCall;
@@ -475,9 +509,3 @@ pub fn run_to_block(n: u64) {
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
}

Some files were not shown because too many files have changed in this diff Show More