refactor: zombienet-sdk rebrand and subxt compatibility fixes

Zombienet-SDK changes:
- orchestrator: sc-chain-spec → pezsc-chain-spec
- orchestrator: sp-core → pezsp-core imports
- orchestrator: k8s-openapi v1_27 → v1_28
- provider: k8s-openapi v1_27 → v1_28
- sdk: k8s-openapi v1_27 → v1_28

Subxt vendor fixes:
- Enable std features (remove default-features = false)
- Fix lifetime annotations for Rust 2024 compatibility
- Fix ecdsa/sr25519 password type conversions
- Fix RecoveryId API change (i32::from → to_i32)

Dependencies:
- wasmtime: 35.0.0 → 37.0.0 (security fix)
- tracing-subscriber: 0.3.18 → 0.3.20 (security fix)
- thiserror: 1.0.64 → 2.0.17

Note: ring 0.16.20 vulnerability remains - requires libp2p 0.56
upgrade which needs extensive pezsc-network API changes.
This commit is contained in:
2025-12-23 04:44:44 +03:00
parent 53d5522bd5
commit 2cc5880fd9
16 changed files with 302 additions and 1628 deletions
Generated
+273 -1596
View File
File diff suppressed because it is too large Load Diff
+8 -8
View File
@@ -1508,15 +1508,15 @@ static_assertions = { version = "1.1.0", default-features = false }
static_init = { version = "1.0.3" }
strum = { version = "0.26.3", default-features = false }
# Pezkuwi-subxt (vendored from subxt with pezsp_runtime support)
pezkuwi-subxt = { path = "vendor/pezkuwi-subxt/subxt", default-features = false }
pezkuwi-subxt = { path = "vendor/pezkuwi-subxt/subxt" }
pezkuwi-subxt-codegen = { path = "vendor/pezkuwi-subxt/codegen" }
pezkuwi-subxt-core = { path = "vendor/pezkuwi-subxt/core", default-features = false }
pezkuwi-subxt-lightclient = { path = "vendor/pezkuwi-subxt/lightclient", default-features = false }
pezkuwi-subxt-core = { path = "vendor/pezkuwi-subxt/core" }
pezkuwi-subxt-lightclient = { path = "vendor/pezkuwi-subxt/lightclient" }
pezkuwi-subxt-macro = { path = "vendor/pezkuwi-subxt/macro" }
pezkuwi-subxt-metadata = { path = "vendor/pezkuwi-subxt/metadata", default-features = false }
pezkuwi-subxt-rpcs = { path = "vendor/pezkuwi-subxt/rpcs", default-features = false }
pezkuwi-subxt-signer = { path = "vendor/pezkuwi-subxt/signer", default-features = false }
pezkuwi-subxt-utils-fetchmetadata = { path = "vendor/pezkuwi-subxt/utils/fetch-metadata", default-features = false }
pezkuwi-subxt-metadata = { path = "vendor/pezkuwi-subxt/metadata" }
pezkuwi-subxt-rpcs = { path = "vendor/pezkuwi-subxt/rpcs" }
pezkuwi-subxt-signer = { path = "vendor/pezkuwi-subxt/signer" }
pezkuwi-subxt-utils-fetchmetadata = { path = "vendor/pezkuwi-subxt/utils/fetch-metadata" }
pezkuwi-subxt-utils-stripmetadata = { path = "vendor/pezkuwi-subxt/utils/strip-metadata" }
support = { package = "zombienet-support", path = "vendor/pezkuwi-zombienet-sdk/crates/support" }
syn = { version = "2.0.87" }
@@ -1537,7 +1537,7 @@ test-teyrchain-adder = { path = "pezkuwi/teyrchain/test-teyrchains/adder" }
test-teyrchain-halt = { path = "pezkuwi/teyrchain/test-teyrchains/halt" }
test-teyrchain-undying = { path = "pezkuwi/teyrchain/test-teyrchains/undying" }
testnet-teyrchains-constants = { path = "pezcumulus/teyrchains/runtimes/constants", default-features = false }
thiserror = { version = "1.0.64" }
thiserror = { version = "2.0.17", default-features = true }
thousands = { version = "0.2.0" }
threadpool = { version = "1.7" }
tikv-jemalloc-ctl = { version = "0.6.0", features = ["stats"] }
+1 -1
View File
@@ -53,7 +53,7 @@ scale-info = { workspace = true, default-features = false, features = ["bit-vec"
scale-value = { workspace = true, default-features = false }
serde = { workspace = true, default-features = false, features = ["derive"] }
serde_json = { workspace = true, default-features = false, features = ["alloc", "raw_value"] }
thiserror = { workspace = true, default-features = false }
thiserror = { workspace = true }
tracing = { workspace = true, default-features = false }
# For ss58 encoding AccountId32 to serialize them properly:
+1 -1
View File
@@ -50,7 +50,7 @@ impl<'info, KeyParts: IntoDecodableValues> StorageKey<'info, KeyParts> {
/// Iterate over the parts of this storage key. Each part of a storage key corresponds to a
/// single value that has been hashed.
pub fn parts(&self) -> impl ExactSizeIterator<Item = StorageKeyPart<'info>> {
pub fn parts(&self) -> impl ExactSizeIterator<Item = StorageKeyPart<'info>> + '_ {
let parts_len = self.info.parts().len();
(0..parts_len).map(move |index| StorageKeyPart {
index,
+1 -1
View File
@@ -43,7 +43,7 @@ pezsp-crypto-hashing = { workspace = true }
scale-info = { workspace = true, default-features = false }
scale-info-legacy = { workspace = true, optional = true }
scale-type-resolver = { workspace = true, optional = true }
thiserror = { workspace = true, default-features = false }
thiserror = { workspace = true }
[dev-dependencies]
bitvec = { workspace = true, features = ["alloc"] }
+1 -1
View File
@@ -90,7 +90,7 @@ secp256k1 = { workspace = true, optional = true, features = [
] }
secrecy = { workspace = true }
sha2 = { workspace = true }
thiserror = { workspace = true, default-features = false }
thiserror = { workspace = true }
zeroize = { workspace = true }
# These are used if the pezkuwi-js-compat feature is enabled
+2 -2
View File
@@ -68,7 +68,7 @@ impl Keypair {
Self::from_secret_key(seed)?
} else {
let phrase = bip39::Mnemonic::from_str(phrase.expose_secret())?;
let pass_str = password.as_ref().map(|p| p.expose_secret());
let pass_str = password.as_ref().map(|p| p.expose_secret().as_str());
Self::from_phrase(&phrase, pass_str)?
};
@@ -197,7 +197,7 @@ pub(crate) mod internal {
let (recid, sig): (_, [u8; 64]) = recsig.serialize_compact();
let mut signature_bytes: [u8; 65] = [0; 65];
signature_bytes[..64].copy_from_slice(&sig);
signature_bytes[64] = (i32::from(recid) & 0xFF) as u8;
signature_bytes[64] = (recid.to_i32() & 0xFF) as u8;
signature_bytes
}
+1 -1
View File
@@ -78,7 +78,7 @@ impl Keypair {
Self::from_secret_key(seed)?
} else {
let phrase = bip39::Mnemonic::from_str(phrase.expose_secret())?;
let pass_str = password.as_ref().map(|p| p.expose_secret());
let pass_str = password.as_ref().map(|p| p.expose_secret().as_str());
Self::from_phrase(&phrase, pass_str)?
};
+5 -5
View File
@@ -74,9 +74,9 @@ where
/// Iterate through the extrinsics using metadata to dynamically decode and skip
/// them, and return only those which should decode to the provided `E` type.
/// If an error occurs, all subsequent iterations return `None`.
pub fn find<E: StaticExtrinsic>(
&self,
) -> impl Iterator<Item = Result<FoundExtrinsic<T, C, E>, ExtrinsicError>> {
pub fn find<'a, E: StaticExtrinsic + 'a>(
&'a self,
) -> impl Iterator<Item = Result<FoundExtrinsic<T, C, E>, ExtrinsicError>> + 'a {
self.inner.find::<E>().map(|res| {
match res {
Err(e) => Err(ExtrinsicError::from(e)),
@@ -290,7 +290,7 @@ impl<T: Config> ExtrinsicEvents<T> {
///
/// This works in the same way that [`events::Events::iter()`] does, with the
/// exception that it filters out events not related to the submitted extrinsic.
pub fn iter(&self) -> impl Iterator<Item = Result<events::EventDetails<T>, EventsError>> {
pub fn iter(&self) -> impl Iterator<Item = Result<events::EventDetails<T>, EventsError>> + '_ {
self.events.iter().filter(|ev| {
ev.as_ref()
.map(|ev| ev.phase() == events::Phase::ApplyExtrinsic(self.idx))
@@ -302,7 +302,7 @@ impl<T: Config> ExtrinsicEvents<T> {
///
/// This works in the same way that [`events::Events::find()`] does, with the
/// exception that it filters out events not related to the submitted extrinsic.
pub fn find<Ev: events::StaticEvent>(&self) -> impl Iterator<Item = Result<Ev, EventsError>> {
pub fn find<'a, Ev: events::StaticEvent + 'a>(&'a self) -> impl Iterator<Item = Result<Ev, EventsError>> + 'a {
self.iter().filter_map(|ev| ev.and_then(|ev| ev.as_event::<Ev>()).transpose())
}
@@ -30,16 +30,13 @@ reqwest = { workspace = true }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true, features = ["arbitrary_precision"] }
sha2 = { workspace = true, default-features = false }
sp-core = { workspace = true }
pezsp-core = { workspace = true }
thiserror = { workspace = true }
tokio = { workspace = true, features = ["time"] }
tracing = { workspace = true }
uuid = { workspace = true }
# staging-chain-spec-builder = { workspace = true }
# parity-scale-codec = { version = "3.7.5", features = ["derive"] }
# sc-chain-spec = {workspace = true, default-features = false}
erased-serde = { workspace = true }
sc-chain-spec = { workspace = true }
pezsc-chain-spec = { workspace = true }
# Zombienet deps
configuration = { workspace = true }
@@ -13,7 +13,7 @@ use provider::{
types::{GenerateFileCommand, GenerateFilesOptions, TransferedFile},
DynNamespace, ProviderError,
};
use sc_chain_spec::{GenericChainSpec, GenesisConfigBuilderRuntimeCaller};
use pezsc_chain_spec::{GenericChainSpec, GenesisConfigBuilderRuntimeCaller};
use serde::{Deserialize, Serialize};
use serde_json::json;
use support::{constants::THIS_IS_A_BUG, fs::FileSystem, replacer::apply_replacements};
@@ -1,4 +1,4 @@
use sp_core::{crypto::SecretStringError, ecdsa, ed25519, keccak_256, sr25519, Pair, H160, H256};
use pezsp_core::{crypto::SecretStringError, ecdsa, ed25519, keccak_256, sr25519, Pair, H160, H256};
use super::errors::GeneratorError;
use crate::shared::types::{Accounts, NodeAccount};
@@ -59,7 +59,7 @@ mod tests {
use super::*;
#[test]
fn generate_for_alice() {
use sp_core::crypto::Ss58Codec;
use pezsp_core::crypto::Ss58Codec;
let s = "Alice";
let seed = format!("//{s}");
@@ -84,7 +84,7 @@ mod tests {
#[test]
fn generate_for_zombie() {
use sp_core::crypto::Ss58Codec;
use pezsp_core::crypto::Ss58Codec;
let s = "Zombie";
let seed = format!("//{s}");
@@ -1053,7 +1053,7 @@ pub enum ZombieRole {
// re-exports
pub use network::{AddCollatorOptions, AddNodeOptions};
pub use network_helper::metrics;
pub use sc_chain_spec;
pub use pezsc_chain_spec;
#[cfg(test)]
mod tests {
+1 -1
View File
@@ -19,7 +19,7 @@ erased-serde = { workspace = true }
flate2 = { workspace = true }
futures = { workspace = true }
hex = { workspace = true }
k8s-openapi = { workspace = true, features = ["v1_27"] }
k8s-openapi = { workspace = true, features = ["v1_28"] }
kube = { workspace = true, features = ["runtime", "ws"] }
nix = { workspace = true, features = ["signal"] }
regex = { workspace = true }
+1 -1
View File
@@ -27,7 +27,7 @@ provider = { workspace = true }
support = { workspace = true }
[dev-dependencies]
k8s-openapi = { workspace = true, features = ["v1_27"] }
k8s-openapi = { workspace = true, features = ["v1_28"] }
kube = { workspace = true, features = ["runtime", "ws"] }
serde_json = { workspace = true }
tracing-subscriber = { workspace = true }