chore: bump spec versions for mainnet upgrade (RC 1_020_005, AH 1_020_005, People 1_020_008)

This commit is contained in:
2026-02-20 15:26:17 +03:00
parent 665e48f47f
commit 90a6917616
12 changed files with 68 additions and 134 deletions
+9 -34
View File
@@ -20,10 +20,8 @@ use std::str::FromStr;
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== ASSET HUB RUNTIME UPGRADE ===\n");
let rc_url =
std::env::var("RC_RPC").unwrap_or_else(|_| "ws://127.0.0.1:9944".to_string());
let ah_url =
std::env::var("AH_RPC").unwrap_or_else(|_| "ws://127.0.0.1:40944".to_string());
let rc_url = std::env::var("RC_RPC").unwrap_or_else(|_| "ws://127.0.0.1:9944".to_string());
let ah_url = std::env::var("AH_RPC").unwrap_or_else(|_| "ws://127.0.0.1:40944".to_string());
let wasm_path = std::env::var("WASM_FILE").expect("WASM_FILE environment variable required");
let mnemonic_str =
@@ -34,11 +32,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Load WASM
let wasm_data = std::fs::read(&wasm_path)?;
println!(
"WASM: {} ({:.2} MB)",
wasm_path,
wasm_data.len() as f64 / 1_048_576.0
);
println!("WASM: {} ({:.2} MB)", wasm_path, wasm_data.len() as f64 / 1_048_576.0);
// Blake2-256 hash of WASM
let code_hash = pezsp_crypto_hashing::blake2_256(&wasm_data);
@@ -50,11 +44,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Connect to AH
let ah_api = OnlineClient::<PezkuwiConfig>::from_url(&ah_url).await?;
println!(
"AH connected: {} (spec {})\n",
ah_url,
ah_api.runtime_version().spec_version
);
println!("AH connected: {} (spec {})\n", ah_url, ah_api.runtime_version().spec_version);
// ═══════════════════════════════════════════
// STEP 1: Authorize upgrade via XCM from RC
@@ -77,10 +67,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
"interior",
Value::unnamed_variant(
"X1",
vec![Value::unnamed_variant(
"Teyrchain",
vec![Value::u128(1000)],
)],
vec![Value::unnamed_variant("Teyrchain", vec![Value::u128(1000)])],
),
),
])],
@@ -113,8 +100,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
])],
);
let xcm_send =
pezkuwi_subxt::dynamic::tx("XcmPallet", "send", vec![dest, message]);
let xcm_send = pezkuwi_subxt::dynamic::tx("XcmPallet", "send", vec![dest, message]);
let sudo_tx = pezkuwi_subxt::dynamic::tx(
"Sudo",
"sudo_unchecked_weight",
@@ -127,10 +113,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
],
);
let progress = rc_api
.tx()
.sign_and_submit_then_watch_default(&sudo_tx, &sudo_keypair)
.await?;
let progress = rc_api.tx().sign_and_submit_then_watch_default(&sudo_tx, &sudo_keypair).await?;
let events = progress.wait_for_finalized_success().await?;
let mut sent = false;
@@ -168,12 +151,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.chain(pezsp_crypto_hashing::twox_128(b"AuthorizedUpgrade").iter())
.copied()
.collect::<Vec<u8>>();
let result = ah_check
.storage()
.at_latest()
.await?
.fetch_raw(auth_key)
.await?;
let result = ah_check.storage().at_latest().await?.fetch_raw(auth_key).await?;
if !result.is_empty() {
println!(
" AuthorizedUpgrade found on AH at block {} (attempt {})!",
@@ -233,10 +211,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
"interior",
Value::unnamed_variant(
"X1",
vec![Value::unnamed_variant(
"Teyrchain",
vec![Value::u128(1000)],
)],
vec![Value::unnamed_variant("Teyrchain", vec![Value::u128(1000)])],
),
),
])],
+15 -31
View File
@@ -19,8 +19,7 @@ use std::str::FromStr;
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== ASSIGN CORETIME ===\n");
let rc_url =
std::env::var("RC_RPC").unwrap_or_else(|_| "ws://127.0.0.1:9944".to_string());
let rc_url = std::env::var("RC_RPC").unwrap_or_else(|_| "ws://127.0.0.1:9944".to_string());
let api = OnlineClient::<PezkuwiConfig>::from_url(&rc_url).await?;
println!("Connected to RC: {}", rc_url);
@@ -38,18 +37,11 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Step 1: Set core count to 2
// Coretime.request_core_count(count: u16) - call_index 1, pallet 74
println!("Step 1: Setting core count to 2...");
let set_cores = pezkuwi_subxt::dynamic::tx(
"Coretime",
"request_core_count",
vec![Value::u128(2)],
);
let sudo_tx =
pezkuwi_subxt::dynamic::tx("Sudo", "sudo", vec![set_cores.into_value()]);
let set_cores =
pezkuwi_subxt::dynamic::tx("Coretime", "request_core_count", vec![Value::u128(2)]);
let sudo_tx = pezkuwi_subxt::dynamic::tx("Sudo", "sudo", vec![set_cores.into_value()]);
let progress = api
.tx()
.sign_and_submit_then_watch_default(&sudo_tx, &sudo_keypair)
.await?;
let progress = api.tx().sign_and_submit_then_watch_default(&sudo_tx, &sudo_keypair).await?;
let events = progress.wait_for_finalized_success().await?;
for event in events.iter() {
let event = event?;
@@ -76,19 +68,15 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
"Coretime",
"assign_core",
vec![
Value::u128(0), // core index
begin.clone(), // begin
assignment_ah, // assignment
Value::u128(0), // core index
begin.clone(), // begin
assignment_ah, // assignment
Value::unnamed_variant("None", vec![]), // end_hint
],
);
let sudo_ah =
pezkuwi_subxt::dynamic::tx("Sudo", "sudo", vec![assign_ah.into_value()]);
let sudo_ah = pezkuwi_subxt::dynamic::tx("Sudo", "sudo", vec![assign_ah.into_value()]);
let progress = api
.tx()
.sign_and_submit_then_watch_default(&sudo_ah, &sudo_keypair)
.await?;
let progress = api.tx().sign_and_submit_then_watch_default(&sudo_ah, &sudo_keypair).await?;
let events = progress.wait_for_finalized_success().await?;
for event in events.iter() {
let event = event?;
@@ -108,19 +96,15 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
"Coretime",
"assign_core",
vec![
Value::u128(1), // core index
begin, // begin
assignment_people, // assignment
Value::u128(1), // core index
begin, // begin
assignment_people, // assignment
Value::unnamed_variant("None", vec![]), // end_hint
],
);
let sudo_people =
pezkuwi_subxt::dynamic::tx("Sudo", "sudo", vec![assign_people.into_value()]);
let sudo_people = pezkuwi_subxt::dynamic::tx("Sudo", "sudo", vec![assign_people.into_value()]);
let progress = api
.tx()
.sign_and_submit_then_watch_default(&sudo_people, &sudo_keypair)
.await?;
let progress = api.tx().sign_and_submit_then_watch_default(&sudo_people, &sudo_keypair).await?;
let events = progress.wait_for_finalized_success().await?;
for event in events.iter() {
let event = event?;
+5 -18
View File
@@ -23,17 +23,12 @@ use std::str::FromStr;
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== RELAY CHAIN RUNTIME UPGRADE ===\n");
let rc_url =
std::env::var("RC_RPC").unwrap_or_else(|_| "ws://127.0.0.1:9944".to_string());
let rc_url = std::env::var("RC_RPC").unwrap_or_else(|_| "ws://127.0.0.1:9944".to_string());
let wasm_path = std::env::var("WASM_FILE").expect("WASM_FILE environment variable required");
// Load WASM
let wasm_data = std::fs::read(&wasm_path)?;
println!(
"WASM: {} ({:.2} MB)",
wasm_path,
wasm_data.len() as f64 / 1_048_576.0
);
println!("WASM: {} ({:.2} MB)", wasm_path, wasm_data.len() as f64 / 1_048_576.0);
let code_hash = pezsp_crypto_hashing::blake2_256(&wasm_data);
println!("Code hash: 0x{}", hex::encode(code_hash));
@@ -68,14 +63,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
],
);
let tx_progress = api
.tx()
.sign_and_submit_then_watch_default(&sudo_tx, &sudo_keypair)
.await?;
println!(
" TX: 0x{}",
hex::encode(tx_progress.extrinsic_hash().as_ref())
);
let tx_progress = api.tx().sign_and_submit_then_watch_default(&sudo_tx, &sudo_keypair).await?;
println!(" TX: 0x{}", hex::encode(tx_progress.extrinsic_hash().as_ref()));
let mut progress = tx_progress;
let mut upgrade_ok = false;
@@ -87,9 +76,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
Ok(events) => {
for ev in events.iter().flatten() {
println!(" {}::{}", ev.pallet_name(), ev.variant_name());
if ev.pallet_name() == "System"
&& ev.variant_name() == "CodeUpdated"
{
if ev.pallet_name() == "System" && ev.variant_name() == "CodeUpdated" {
upgrade_ok = true;
}
}
@@ -14,8 +14,7 @@ use std::str::FromStr;
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== SET StakingAhClient MODE → Active ===\n");
let rc_url =
std::env::var("RC_RPC").unwrap_or_else(|_| "ws://127.0.0.1:9944".to_string());
let rc_url = std::env::var("RC_RPC").unwrap_or_else(|_| "ws://127.0.0.1:9944".to_string());
let api = OnlineClient::<PezkuwiConfig>::from_url(&rc_url).await?;
println!("RC connected: spec {}", api.runtime_version().spec_version);
@@ -53,14 +52,10 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
"set_mode",
vec![Value::unnamed_variant("Active", vec![])],
);
let sudo_tx =
pezkuwi_subxt::dynamic::tx("Sudo", "sudo", vec![set_mode.into_value()]);
let sudo_tx = pezkuwi_subxt::dynamic::tx("Sudo", "sudo", vec![set_mode.into_value()]);
println!("Submitting sudo(StakingAhClient.set_mode(Active))...");
let progress = api
.tx()
.sign_and_submit_then_watch_default(&sudo_tx, &sudo_keypair)
.await?;
let progress = api.tx().sign_and_submit_then_watch_default(&sudo_tx, &sudo_keypair).await?;
let events = progress.wait_for_finalized_success().await?;
for event in events.iter() {
+1 -1
View File
@@ -69,7 +69,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
}
// Decode Vec length
let (count, mut offset) = decode_compact(&raw_data);
let (count, offset) = decode_compact(&raw_data);
println!("QueuedKeys entries: {}", count);
// Each entry: AccountId32 (32 bytes) + SessionKeys