Select Git revision
runtime-calls.md
-
* review tuxmain * fix rebase * rename force_add_cert to do_add_cert_checked * remove origin from force_add_cert * remove duplicate UD handling * claim membership - validating identity ensure claim membership does not prevent validating identity * clippy * add acquired membership handler and new integration test scenario * run benchmarks * refactor claim_membership and expire membership instead of revoking when too few certs * re-enable claim_membership * membership expiry no identity removal membership expiry no more triggers identity removal * control by test * at membership expiry : back to pending membership * reveal identity removal on membership expiry * refac test * refac membership renewal add expiry unscheduling do not verify expiration block expiring memberships add and refac tests add integration test * wip
* review tuxmain * fix rebase * rename force_add_cert to do_add_cert_checked * remove origin from force_add_cert * remove duplicate UD handling * claim membership - validating identity ensure claim membership does not prevent validating identity * clippy * add acquired membership handler and new integration test scenario * run benchmarks * refactor claim_membership and expire membership instead of revoking when too few certs * re-enable claim_membership * membership expiry no identity removal membership expiry no more triggers identity removal * control by test * at membership expiry : back to pending membership * reveal identity removal on membership expiry * refac test * refac membership renewal add expiry unscheduling do not verify expiration block expiring memberships add and refac tests add integration test * wip
utils.rs 3.98 KiB
use crate::*;
use sea_orm::DbErr;
/// track progress of transaction on the network
/// until it is in block with success or failure
pub async fn track_progress(
mut progress: TxProgress,
) -> Result<ExtrinsicEvents<Runtime>, subxt::Error> {
loop {
if let Some(status) = progress.next().await {
match status? {
TxStatus::Validated => {
println!("transaction submitted to the network, waiting 6 seconds...");
}
TxStatus::InBestBlock(in_block) => break in_block,
TxStatus::Invalid { message } => {
println!("Invalid {message}");
}
_ => continue,
}
}
}
.wait_for_success()
.await
}
/// generic extrinsic submitter
pub async fn submit_call_and_look_event<
E: std::fmt::Debug + StaticEvent + DisplayEvent,
TxPayload: Payload,
>(
data: &Data,
payload: &TxPayload,
) -> Result<(), subxt::Error> {
// submit call
let progress = submit_call(data, payload).await?;
// if no wait, return immediately
if data.args.no_wait {
return Ok(());
}
// collect events
let events = track_progress(progress).await?;
// print given event if there
look_event::<E>(data, &events)
}
/// submit call
pub async fn submit_call<TxPayload: Payload>(
data: &Data,
payload: &TxPayload,
) -> Result<TxProgress, subxt::Error> {
// get account nonce manually to be based on last block and not last finalized
let nonce = data
.legacy_rpc_methods() // see issue #32
.await
.system_account_next_index(&data.address())
.await?;
// sign and submit
match data.keypair().await {
// sr25519 key pair
KeyPair::Sr25519(keypair) => data.client().tx().create_signed_offline(
payload,
&PairSigner::<Runtime, sp_core::sr25519::Pair>::new(keypair),
DefaultExtrinsicParamsBuilder::new().nonce(nonce).build(),
),
KeyPair::Ed25519(keypair) => data.client().tx().create_signed_offline(
payload,
&PairSigner::<Runtime, sp_core::ed25519::Pair>::new(keypair),
DefaultExtrinsicParamsBuilder::new().nonce(nonce).build(),