Skip to content

Commit eb33290

Browse files
pepoviolabkchr
authored andcommitted
bump zombienet-sdk and subxt versions (#9587)
Replace #9506 --------- Co-authored-by: Bastian Köcher <[email protected]> Co-authored-by: Bastian Köcher <[email protected]>
1 parent f14fda7 commit eb33290

File tree

10 files changed

+322
-39
lines changed

10 files changed

+322
-39
lines changed

Cargo.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1404,9 +1404,9 @@ substrate-test-runtime-client = { path = "substrate/test-utils/runtime/client" }
14041404
substrate-test-runtime-transaction-pool = { path = "substrate/test-utils/runtime/transaction-pool" }
14051405
substrate-test-utils = { path = "substrate/test-utils" }
14061406
substrate-wasm-builder = { path = "substrate/utils/wasm-builder", default-features = false }
1407-
subxt = { version = "0.41", default-features = false }
1408-
subxt-metadata = { version = "0.41", default-features = false }
1409-
subxt-signer = { version = "0.41" }
1407+
subxt = { version = "0.43", default-features = false }
1408+
subxt-metadata = { version = "0.43", default-features = false }
1409+
subxt-signer = { version = "0.43" }
14101410
syn = { version = "2.0.87" }
14111411
sysinfo = { version = "0.30" }
14121412
tar = { version = "0.4" }
@@ -1480,9 +1480,9 @@ xcm-runtime-apis = { path = "polkadot/xcm/xcm-runtime-apis", default-features =
14801480
xcm-simulator = { path = "polkadot/xcm/xcm-simulator", default-features = false }
14811481
yet-another-parachain-runtime = { path = "cumulus/parachains/runtimes/testing/yet-another-parachain" }
14821482
zeroize = { version = "1.7.0", default-features = false }
1483-
zombienet-configuration = { version = "0.3.6" }
1484-
zombienet-orchestrator = { version = "0.3.6" }
1485-
zombienet-sdk = { version = "0.3.6" }
1483+
zombienet-configuration = { version = "0.3.12" }
1484+
zombienet-orchestrator = { version = "0.3.12" }
1485+
zombienet-sdk = { version = "0.3.12" }
14861486
zstd = { version = "0.12.4", default-features = false }
14871487

14881488
[profile.release]

cumulus/zombienet/zombienet-sdk-helpers/src/lib.rs

Lines changed: 115 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,15 @@ use tokio::{
1616
time::{sleep, Duration},
1717
};
1818
use zombienet_sdk::subxt::{
19-
blocks::Block, config::substrate::DigestItem, events::Events, ext::scale_value::value,
20-
tx::DynamicPayload, utils::H256, OnlineClient, PolkadotConfig,
19+
self,
20+
blocks::Block,
21+
config::{polkadot::PolkadotExtrinsicParamsBuilder, substrate::DigestItem},
22+
dynamic::Value,
23+
events::Events,
24+
ext::scale_value::value,
25+
tx::{signer::Signer, DynamicPayload, TxStatus},
26+
utils::H256,
27+
OnlineClient, PolkadotConfig,
2128
};
2229

2330
// Maximum number of blocks to wait for a session change.
@@ -394,3 +401,109 @@ fn extract_relay_parent_storage_root(
394401
_ => None,
395402
}
396403
}
404+
405+
/// Submits the given `call` as transaction and waits for it successful finalization.
406+
///
407+
/// The transaction is send as immortal transaction.
408+
pub async fn submit_extrinsic_and_wait_for_finalization_success<S: Signer<PolkadotConfig>>(
409+
client: &OnlineClient<PolkadotConfig>,
410+
call: &DynamicPayload,
411+
signer: &S,
412+
) -> Result<(), anyhow::Error> {
413+
let extensions = PolkadotExtrinsicParamsBuilder::new().immortal().build();
414+
415+
let mut tx = client
416+
.tx()
417+
.create_signed(call, signer, extensions)
418+
.await?
419+
.submit_and_watch()
420+
.await?;
421+
422+
// Below we use the low level API to replicate the `wait_for_in_block` behaviour
423+
// which was removed in subxt 0.33.0. See https://github.com/paritytech/subxt/pull/1237.
424+
while let Some(status) = tx.next().await {
425+
let status = status?;
426+
match &status {
427+
TxStatus::InBestBlock(tx_in_block) | TxStatus::InFinalizedBlock(tx_in_block) => {
428+
let _result = tx_in_block.wait_for_success().await?;
429+
let block_status =
430+
if status.as_finalized().is_some() { "Finalized" } else { "Best" };
431+
log::info!("[{}] In block: {:#?}", block_status, tx_in_block.block_hash());
432+
},
433+
TxStatus::Error { message } |
434+
TxStatus::Invalid { message } |
435+
TxStatus::Dropped { message } => {
436+
return Err(anyhow::format_err!("Error submitting tx: {message}"));
437+
},
438+
_ => continue,
439+
}
440+
}
441+
Ok(())
442+
}
443+
444+
/// Submits the given `call` as transaction and waits `timeout_secs` for it successful finalization.
445+
///
446+
/// If the transaction does not reach the finalized state in `timeout_secs` an error is returned.
447+
/// The transaction is send as immortal transaction.
448+
pub async fn submit_extrinsic_and_wait_for_finalization_success_with_timeout<
449+
S: Signer<PolkadotConfig>,
450+
>(
451+
client: &OnlineClient<PolkadotConfig>,
452+
call: &DynamicPayload,
453+
signer: &S,
454+
timeout_secs: impl Into<u64>,
455+
) -> Result<(), anyhow::Error> {
456+
let secs = timeout_secs.into();
457+
let res = tokio::time::timeout(
458+
Duration::from_secs(secs),
459+
submit_extrinsic_and_wait_for_finalization_success(client, call, signer),
460+
)
461+
.await;
462+
463+
match res {
464+
Ok(Ok(_)) => Ok(()),
465+
Ok(Err(e)) => Err(anyhow!("Error waiting for metric: {}", e)),
466+
// timeout
467+
Err(_) => Err(anyhow!("Timeout ({secs}), waiting for extrinsic finalization")),
468+
}
469+
}
470+
471+
/// Asserts that the given `para_id` is registered at the relay chain.
472+
pub async fn assert_para_is_registered(
473+
relay_client: &OnlineClient<PolkadotConfig>,
474+
para_id: ParaId,
475+
blocks_to_wait: u32,
476+
) -> Result<(), anyhow::Error> {
477+
let mut blocks_sub = relay_client.blocks().subscribe_all().await?;
478+
let para_id: u32 = para_id.into();
479+
480+
let keys: Vec<Value> = vec![];
481+
let query = subxt::dynamic::storage("Paras", "Parachains", keys);
482+
483+
let mut blocks_cnt = 0;
484+
while let Some(block) = blocks_sub.next().await {
485+
let block = block?;
486+
log::debug!("Relay block #{}, checking if para_id {para_id} is registered", block.number(),);
487+
let parachains = block.storage().fetch(&query).await?;
488+
489+
let parachains: Vec<u32> = match parachains {
490+
Some(parachains) => parachains.as_type()?,
491+
None => vec![],
492+
};
493+
494+
log::debug!("Registered para_ids: {:?}", parachains);
495+
496+
if parachains.iter().any(|p| para_id.eq(p)) {
497+
log::debug!("para_id {para_id} registered");
498+
return Ok(());
499+
}
500+
if blocks_cnt >= blocks_to_wait {
501+
return Err(anyhow!(
502+
"Parachain {para_id} not registered within {blocks_to_wait} blocks"
503+
));
504+
}
505+
blocks_cnt += 1;
506+
}
507+
508+
Err(anyhow!("No more blocks to check"))
509+
}

cumulus/zombienet/zombienet-sdk/tests/statement_store/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ use anyhow::anyhow;
88
use sp_core::{Bytes, Encode};
99
use zombienet_sdk::{
1010
subxt::{
11-
backend::rpc::RpcClient, rpc_params, utils::url_is_secure, OnlineClient, PolkadotConfig,
11+
backend::rpc::RpcClient, ext::subxt_rpcs::rpc_params, utils::url_is_secure, OnlineClient,
12+
PolkadotConfig,
1213
},
1314
NetworkConfigBuilder,
1415
};

polkadot/zombienet-sdk-tests/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ polkadot-primitives.default-features = true
1717
polkadot-primitives.workspace = true
1818
serde = { workspace = true }
1919
serde_json = { workspace = true }
20-
subxt = { version = "0.38.1", default-features = false }
20+
subxt = { workspace = true, default-features = false }
2121
tokio = { workspace = true, features = ["rt-multi-thread"] }
2222
tokio-util = { workspace = true, features = ["time"] }
2323
zombienet-orchestrator = { workspace = true }

polkadot/zombienet-sdk-tests/tests/disabling/slashing.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//! making some of the honest nodes go offline.
77
88
use anyhow::anyhow;
9+
use codec::Decode;
910
use cumulus_zombienet_sdk_helpers::{
1011
assert_blocks_are_being_finalized, assert_finalized_para_throughput,
1112
wait_for_first_session_change,
@@ -111,14 +112,13 @@ async fn dispute_past_session_slashing() -> Result<(), anyhow::Error> {
111112
while let Some(block) = best_blocks.next().await {
112113
// NOTE: we can't use `at_latest` here, because it will utilize latest *finalized* block
113114
// and finality is stalled...
114-
let disputes = relay_client
115-
.runtime_api()
116-
.at(block?.hash())
117-
.call_raw::<Vec<(SessionIndex, CandidateHash, DisputeState<BlockNumber>)>>(
118-
"ParachainHost_disputes",
119-
None,
120-
)
121-
.await?;
115+
let disputes = Vec::<(SessionIndex, CandidateHash, DisputeState<BlockNumber>)>::decode(
116+
&mut &relay_client
117+
.runtime_api()
118+
.at(block?.hash())
119+
.call_raw("ParachainHost_disputes", None)
120+
.await?[..],
121+
)?;
122122
if let Some((session, _, _)) = disputes.first() {
123123
dispute_session = *session;
124124
break;

polkadot/zombienet-sdk-tests/tests/elastic_scaling/doesnt_break_parachains.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// itself if ElasticScalingMVP feature is enabled in genesis.
66

77
use anyhow::anyhow;
8+
use codec::Decode;
89
use cumulus_zombienet_sdk_helpers::{
910
assert_finality_lag, assert_finalized_para_throughput, create_assign_core_call,
1011
};
@@ -94,12 +95,14 @@ async fn doesnt_break_parachains_test() -> Result<(), anyhow::Error> {
9495
assert_finality_lag(&para_client, 6).await?;
9596

9697
// Sanity check that indeed the parachain has two assigned cores.
97-
let cq = relay_client
98-
.runtime_api()
99-
.at_latest()
100-
.await?
101-
.call_raw::<BTreeMap<CoreIndex, VecDeque<ParaId>>>("ParachainHost_claim_queue", None)
102-
.await?;
98+
let cq = BTreeMap::<CoreIndex, VecDeque<ParaId>>::decode(
99+
&mut &relay_client
100+
.runtime_api()
101+
.at_latest()
102+
.await?
103+
.call_raw("ParachainHost_claim_queue", None)
104+
.await?[..],
105+
)?;
103106

104107
assert_eq!(
105108
cq,

0 commit comments

Comments
 (0)