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 7733f074c7
commit 30c8f91b94
16 changed files with 302 additions and 1628 deletions
+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())
}