fix: correct Ed25519/Sr25519 key scheme detection for Asset Hub
- Fix RuntimeResolver prefix matching order: check asset-hub-pezkuwichain BEFORE asset-hub-pezkuwi to avoid false matches - Fix zombienet SDK is_asset_hub_pezkuwi detection to exclude pezkuwichain - Add zombienet-local-21.toml and zombienet-mainnet-21.toml configs - Update .gitignore for sensitive mainnet files
This commit is contained in:
@@ -64,3 +64,12 @@ vendor/*/Cargo.lock
|
|||||||
|
|
||||||
# Generated chain specs
|
# Generated chain specs
|
||||||
chain-specs/
|
chain-specs/
|
||||||
|
|
||||||
|
# Sensitive wallet data - NEVER commit
|
||||||
|
/res/
|
||||||
|
tools/usdt-bridge/secrets/
|
||||||
|
*.seed
|
||||||
|
*wallet*.json
|
||||||
|
founder_validators.json
|
||||||
|
founder_governance.json
|
||||||
|
mainnet/
|
||||||
|
|||||||
@@ -247,16 +247,19 @@ impl LegacyRuntime {
|
|||||||
fn from_id(id: &str) -> LegacyRuntime {
|
fn from_id(id: &str) -> LegacyRuntime {
|
||||||
let id = id.replace('_', "-");
|
let id = id.replace('_', "-");
|
||||||
|
|
||||||
if id.starts_with("asset-hub-pezkuwi") | id.starts_with("statemint") {
|
// NOTE: Check longer prefixes FIRST to avoid false matches.
|
||||||
LegacyRuntime::AssetHubPezkuwi
|
// "asset-hub-pezkuwichain" starts with "asset-hub-pezkuwi", so we must check
|
||||||
} else if id.starts_with("asset-hub-dicle")
|
// pezkuwichain before pezkuwi.
|
||||||
|
if id.starts_with("asset-hub-pezkuwichain")
|
||||||
|
| id.starts_with("asset-hub-dicle")
|
||||||
| id.starts_with("statemine")
|
| id.starts_with("statemine")
|
||||||
| id.starts_with("asset-hub-pezkuwichain")
|
|
||||||
| id.starts_with("rockmine")
|
| id.starts_with("rockmine")
|
||||||
| id.starts_with("asset-hub-zagros")
|
| id.starts_with("asset-hub-zagros")
|
||||||
| id.starts_with("westmint")
|
| id.starts_with("westmint")
|
||||||
{
|
{
|
||||||
LegacyRuntime::AssetHub
|
LegacyRuntime::AssetHub
|
||||||
|
} else if id.starts_with("asset-hub-pezkuwi") | id.starts_with("statemint") {
|
||||||
|
LegacyRuntime::AssetHubPezkuwi
|
||||||
} else if id.starts_with("penpal") {
|
} else if id.starts_with("penpal") {
|
||||||
LegacyRuntime::Penpal
|
LegacyRuntime::Penpal
|
||||||
} else if id.starts_with("collectives-pezkuwi") || id.starts_with("collectives-zagros") {
|
} else if id.starts_with("collectives-pezkuwi") || id.starts_with("collectives-zagros") {
|
||||||
|
|||||||
+3
-1
@@ -1349,10 +1349,12 @@ fn add_authorities(
|
|||||||
nodes: &[&NodeSpec],
|
nodes: &[&NodeSpec],
|
||||||
session_key: SessionKeyType,
|
session_key: SessionKeyType,
|
||||||
) {
|
) {
|
||||||
|
// NOTE: Check that it's "asset-hub-pezkuwi" (mainnet) but NOT "asset-hub-pezkuwichain" (testnet).
|
||||||
|
// "asset-hub-pezkuwichain" starts with "asset-hub-pezkuwi", so we must exclude it.
|
||||||
let is_asset_hub_pezkuwi = chain_spec_json
|
let is_asset_hub_pezkuwi = chain_spec_json
|
||||||
.get("id")
|
.get("id")
|
||||||
.and_then(|v| v.as_str())
|
.and_then(|v| v.as_str())
|
||||||
.map(|id| id.starts_with("asset-hub-pezkuwi"))
|
.map(|id| id.starts_with("asset-hub-pezkuwi") && !id.starts_with("asset-hub-pezkuwichain"))
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
if let Some(val) = chain_spec_json.pointer_mut(runtime_config_ptr) {
|
if let Some(val) = chain_spec_json.pointer_mut(runtime_config_ptr) {
|
||||||
if let Some(session_keys) = val.pointer_mut("/session/keys") {
|
if let Some(session_keys) = val.pointer_mut("/session/keys") {
|
||||||
|
|||||||
@@ -65,8 +65,12 @@ where
|
|||||||
// Generate keystore for node
|
// Generate keystore for node
|
||||||
let node_files_path =
|
let node_files_path =
|
||||||
if let Some(para) = ctx.parachain { para.id.to_string() } else { node.name.clone() };
|
if let Some(para) = ctx.parachain { para.id.to_string() } else { node.name.clone() };
|
||||||
let is_asset_hub_pezkuwi =
|
// NOTE: Check that it's "asset-hub-pezkuwi" (mainnet) but NOT "asset-hub-pezkuwichain" (testnet).
|
||||||
ctx.parachain_id.map(|id| id.starts_with("asset-hub-pezkuwi")).unwrap_or_default();
|
// "asset-hub-pezkuwichain" starts with "asset-hub-pezkuwi", so we must exclude it.
|
||||||
|
let is_asset_hub_pezkuwi = ctx
|
||||||
|
.parachain_id
|
||||||
|
.map(|id| id.starts_with("asset-hub-pezkuwi") && !id.starts_with("asset-hub-pezkuwichain"))
|
||||||
|
.unwrap_or_default();
|
||||||
let keystore_key_types = node.keystore_key_types.iter().map(String::as_str).collect();
|
let keystore_key_types = node.keystore_key_types.iter().map(String::as_str).collect();
|
||||||
let key_filenames = generators::generate_node_keystore(
|
let key_filenames = generators::generate_node_keystore(
|
||||||
&node.accounts,
|
&node.accounts,
|
||||||
@@ -245,13 +249,13 @@ where
|
|||||||
let prometheus_uri = format!("http://{ip_to_use}:{prometheus_port_external}/metrics");
|
let prometheus_uri = format!("http://{ip_to_use}:{prometheus_port_external}/metrics");
|
||||||
info!("🚀 {}, should be running now", node.name);
|
info!("🚀 {}, should be running now", node.name);
|
||||||
info!(
|
info!(
|
||||||
"💻 {}: direct link (pjs) https://polkadot.js.org/apps/?rpc={ws_uri}#/explorer",
|
"💻 {}: direct link (apps) https://apps.pezkuwichain.io/?rpc={ws_uri}#/explorer",
|
||||||
node.name
|
node.name
|
||||||
);
|
);
|
||||||
info!(
|
info!(
|
||||||
"💻 {}: direct link (papi) https://dev.papi.how/explorer#networkId=custom&endpoint={ws_uri}",
|
"💻 {}: direct link (explorer) https://explorer.pezkuwichain.io/?rpc={ws_uri}#/explorer",
|
||||||
node.name
|
node.name
|
||||||
);
|
);
|
||||||
|
|
||||||
info!("📊 {}: metrics link {prometheus_uri}", node.name);
|
info!("📊 {}: metrics link {prometheus_uri}", node.name);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,175 @@
|
|||||||
|
# Pezkuwi Local Test Configuration - 21 Validators
|
||||||
|
# =================================================
|
||||||
|
# Uses well-known keyring for automatic key injection
|
||||||
|
# For testing network topology before mainnet
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
timeout = 600
|
||||||
|
provider = "native"
|
||||||
|
bootnode_spawn_timeout = 300
|
||||||
|
|
||||||
|
[relaychain]
|
||||||
|
default_command = "/home/mamostehp/pezkuwi-sdk/target/release/pezkuwi"
|
||||||
|
chain = "pezkuwichain-local"
|
||||||
|
default_args = [
|
||||||
|
"--unsafe-force-node-key-generation",
|
||||||
|
"-lteyrchain=debug,babe=debug,grandpa=debug",
|
||||||
|
]
|
||||||
|
|
||||||
|
# Using Substrate's well-known keyring names for automatic key injection
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "alice"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9944
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "bob"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9945
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "charlie"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9946
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "dave"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9947
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "eve"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9948
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "ferdie"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9949
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "one"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9950
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "two"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9951
|
||||||
|
|
||||||
|
# Additional validators (will use generated keys)
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-9"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9952
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-10"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9953
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-11"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9954
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-12"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9955
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-13"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9956
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-14"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9957
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-15"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9958
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-16"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9959
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-17"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9960
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-18"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9961
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-19"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9962
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-20"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9963
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-21"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9964
|
||||||
|
args = ["--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
# Asset Hub Teyrchain
|
||||||
|
[[teyrchains]]
|
||||||
|
id = 1000
|
||||||
|
chain = "asset-hub-pezkuwichain-local"
|
||||||
|
cumulus_based = true
|
||||||
|
add_to_genesis = true
|
||||||
|
|
||||||
|
[[teyrchains.collators]]
|
||||||
|
name = "azad-collator"
|
||||||
|
command = "/home/mamostehp/pezkuwi-sdk/target/release/pezkuwi-teyrchain"
|
||||||
|
rpc_port = 10944
|
||||||
|
args = ["--unsafe-force-node-key-generation", "-lteyrchain=debug"]
|
||||||
|
|
||||||
|
[[teyrchains.collators]]
|
||||||
|
name = "beritan-collator"
|
||||||
|
command = "/home/mamostehp/pezkuwi-sdk/target/release/pezkuwi-teyrchain"
|
||||||
|
rpc_port = 10945
|
||||||
|
args = ["--unsafe-force-node-key-generation", "-lteyrchain=debug"]
|
||||||
|
|
||||||
|
# People Chain Teyrchain
|
||||||
|
[[teyrchains]]
|
||||||
|
id = 1004
|
||||||
|
chain = "people-pezkuwichain-local"
|
||||||
|
cumulus_based = true
|
||||||
|
add_to_genesis = true
|
||||||
|
|
||||||
|
[[teyrchains.collators]]
|
||||||
|
name = "erin-collator"
|
||||||
|
command = "/home/mamostehp/pezkuwi-sdk/target/release/pezkuwi-teyrchain"
|
||||||
|
rpc_port = 10948
|
||||||
|
args = ["--unsafe-force-node-key-generation", "-lteyrchain=debug"]
|
||||||
|
|
||||||
|
[[teyrchains.collators]]
|
||||||
|
name = "firaz-collator"
|
||||||
|
command = "/home/mamostehp/pezkuwi-sdk/target/release/pezkuwi-teyrchain"
|
||||||
|
rpc_port = 10949
|
||||||
|
args = ["--unsafe-force-node-key-generation", "-lteyrchain=debug"]
|
||||||
@@ -0,0 +1,207 @@
|
|||||||
|
# MAINNET CONFIG - 21 Validators + 4 Collators (2 Asset Hub + 2 People Chain)
|
||||||
|
# Uses "genesis" preset with real validator/collator keys
|
||||||
|
# For local testing before VPS deployment
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
timeout = 600
|
||||||
|
provider = "native"
|
||||||
|
bootnode_spawn_timeout = 300
|
||||||
|
|
||||||
|
[relaychain]
|
||||||
|
default_command = "/home/mamostehp/pezkuwi-sdk/target/release/pezkuwi"
|
||||||
|
# Use "genesis" preset which has 21 real validators and real account addresses
|
||||||
|
chain = "pezkuwichain"
|
||||||
|
default_args = ["-lbabe=debug,grandpa=debug,teyrchain=debug", "--unsafe-force-node-key-generation"]
|
||||||
|
|
||||||
|
# Validator 1: Satoshi-Qazi-Mohammed
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-1"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9944
|
||||||
|
prometheus_port = 9615
|
||||||
|
|
||||||
|
# Validator 2
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-2"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9945
|
||||||
|
prometheus_port = 9616
|
||||||
|
|
||||||
|
# Validator 3
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-3"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9946
|
||||||
|
prometheus_port = 9617
|
||||||
|
|
||||||
|
# Validator 4
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-4"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9947
|
||||||
|
prometheus_port = 9618
|
||||||
|
|
||||||
|
# Validator 5
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-5"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9948
|
||||||
|
prometheus_port = 9619
|
||||||
|
|
||||||
|
# Validator 6
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-6"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9949
|
||||||
|
prometheus_port = 9620
|
||||||
|
|
||||||
|
# Validator 7
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-7"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9950
|
||||||
|
prometheus_port = 9621
|
||||||
|
|
||||||
|
# Validator 8
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-8"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9951
|
||||||
|
prometheus_port = 9622
|
||||||
|
|
||||||
|
# Validator 9
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-9"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9952
|
||||||
|
prometheus_port = 9623
|
||||||
|
|
||||||
|
# Validator 10
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-10"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9953
|
||||||
|
prometheus_port = 9624
|
||||||
|
|
||||||
|
# Validator 11
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-11"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9954
|
||||||
|
prometheus_port = 9625
|
||||||
|
|
||||||
|
# Validator 12
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-12"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9955
|
||||||
|
prometheus_port = 9626
|
||||||
|
|
||||||
|
# Validator 13
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-13"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9956
|
||||||
|
prometheus_port = 9627
|
||||||
|
|
||||||
|
# Validator 14
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-14"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9957
|
||||||
|
prometheus_port = 9628
|
||||||
|
|
||||||
|
# Validator 15
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-15"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9958
|
||||||
|
prometheus_port = 9629
|
||||||
|
|
||||||
|
# Validator 16
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-16"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9959
|
||||||
|
prometheus_port = 9630
|
||||||
|
|
||||||
|
# Validator 17
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-17"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9960
|
||||||
|
prometheus_port = 9631
|
||||||
|
|
||||||
|
# Validator 18
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-18"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9961
|
||||||
|
prometheus_port = 9632
|
||||||
|
|
||||||
|
# Validator 19
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-19"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9962
|
||||||
|
prometheus_port = 9633
|
||||||
|
|
||||||
|
# Validator 20
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-20"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9963
|
||||||
|
prometheus_port = 9634
|
||||||
|
|
||||||
|
# Validator 21
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "validator-21"
|
||||||
|
validator = true
|
||||||
|
rpc_port = 9964
|
||||||
|
prometheus_port = 9635
|
||||||
|
|
||||||
|
# Asset Hub Teyrchain (ID: 1000) - 2 Collators
|
||||||
|
[[teyrchains]]
|
||||||
|
id = 1000
|
||||||
|
chain = "asset-hub-pezkuwichain"
|
||||||
|
cumulus_based = true
|
||||||
|
add_to_genesis = true
|
||||||
|
|
||||||
|
# Azad - Asset Hub Collator 1
|
||||||
|
[[teyrchains.collators]]
|
||||||
|
name = "azad"
|
||||||
|
command = "/home/mamostehp/pezkuwi-sdk/target/release/pezkuwi-teyrchain"
|
||||||
|
rpc_port = 10944
|
||||||
|
prometheus_port = 10615
|
||||||
|
args = ["--force-authoring", "-lteyrchain=debug"]
|
||||||
|
|
||||||
|
# Beritan - Asset Hub Collator 2
|
||||||
|
[[teyrchains.collators]]
|
||||||
|
name = "beritan"
|
||||||
|
command = "/home/mamostehp/pezkuwi-sdk/target/release/pezkuwi-teyrchain"
|
||||||
|
rpc_port = 10945
|
||||||
|
prometheus_port = 10616
|
||||||
|
args = ["--force-authoring", "-lteyrchain=debug"]
|
||||||
|
|
||||||
|
# People Chain Teyrchain (ID: 1004) - 2 Collators
|
||||||
|
[[teyrchains]]
|
||||||
|
id = 1004
|
||||||
|
chain = "people-pezkuwichain"
|
||||||
|
cumulus_based = true
|
||||||
|
add_to_genesis = true
|
||||||
|
|
||||||
|
# Erin - People Chain Collator 1
|
||||||
|
[[teyrchains.collators]]
|
||||||
|
name = "erin"
|
||||||
|
command = "/home/mamostehp/pezkuwi-sdk/target/release/pezkuwi-teyrchain"
|
||||||
|
rpc_port = 10948
|
||||||
|
prometheus_port = 10619
|
||||||
|
args = ["--force-authoring", "-lteyrchain=debug"]
|
||||||
|
|
||||||
|
# Firaz - People Chain Collator 2
|
||||||
|
[[teyrchains.collators]]
|
||||||
|
name = "firaz"
|
||||||
|
command = "/home/mamostehp/pezkuwi-sdk/target/release/pezkuwi-teyrchain"
|
||||||
|
rpc_port = 10949
|
||||||
|
prometheus_port = 10620
|
||||||
|
args = ["--force-authoring", "-lteyrchain=debug"]
|
||||||
Reference in New Issue
Block a user