Skip to content

Commit

Permalink
Add network-jumpstart subcommand to entropy-test-cli
Browse files Browse the repository at this point in the history
This PR adds a way to trigger a network jumpstart from the test CLI. This is useful for ensuring the
network is in the correct state before registering using the new registration flow.
  • Loading branch information
HCastano committed Aug 13, 2024
1 parent 2fc472f commit 54da03b
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 2 deletions.
28 changes: 28 additions & 0 deletions crates/client/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -360,3 +360,31 @@ pub async fn change_threshold_accounts(
.ok_or(anyhow!("Error with transaction"))?;
Ok(result_event)
}

/// Trigger a network wide distributed key generation (DKG) event.
///
/// Fails if the network has already been jumpstarted.
pub async fn jumpstart_network(
api: &OnlineClient<EntropyConfig>,
rpc: &LegacyRpcMethods<EntropyConfig>,
signer: sr25519::Pair,
) -> Result<(), ClientError> {
// In this case we don't care too much about the result because we're more interested in the
// `FinishedNetworkJumpStart` event, which happens later on.
let jump_start_request = entropy::tx().registry().jump_start_network();
let _result =
submit_transaction_with_pair(api, rpc, &signer, &jump_start_request, None).await?;

let mut blocks_sub = api.blocks().subscribe_finalized().await?;

while let Some(block) = blocks_sub.next().await {
let block = block?;
let events = block.events().await?;

if events.has::<entropy::registry::events::FinishedNetworkJumpStart>()? {
break;
}
}

Ok(())
}
29 changes: 27 additions & 2 deletions crates/test-cli/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ use entropy_client::{
},
client::{
change_endpoint, change_threshold_accounts, get_accounts, get_api, get_programs, get_rpc,
register, sign, store_program, update_programs, VERIFYING_KEY_LENGTH,
jumpstart_network, register, sign, store_program, update_programs, VERIFYING_KEY_LENGTH,
},
};
use sp_core::{sr25519, Hasher, Pair};
Expand Down Expand Up @@ -76,7 +76,7 @@ enum CliCommand {
/// A name or mnemonic from which to derive a program modification keypair.
/// This is used to send the register extrinsic so it must be funded
/// If giving a name it must be preceded with "//", eg: "--mnemonic-option //Alice"
/// If giving a mnemonic it must be enclosed in quotes, eg: "--mnemonic-option "alarm mutual concert...""
/// If giving a mnemonic it must be enclosed in quotes, eg: "--mnemonic-option "alarm mutual concert...""
#[arg(short, long)]
mnemonic_option: Option<String>,
},
Expand Down Expand Up @@ -143,6 +143,17 @@ enum CliCommand {
},
/// Display a list of registered Entropy accounts
Status,
/// Triggers the network wide distributed key generation process.
///
/// A fully jumpstarted network is required for the on-chain registration flow to work
/// correctly.
///
/// Note: Any account may trigger the jumpstart process.
JumpstartNetwork {
/// The mnemonic for the signer which will trigger the jumpstart process.
#[arg(short, long)]
mnemonic_option: Option<String>,
},
}

pub async fn run_command(
Expand Down Expand Up @@ -392,6 +403,20 @@ pub async fn run_command(

Ok("Threshold accounts changed".to_string())
},
CliCommand::JumpstartNetwork { mnemonic_option } => {
let mnemonic = if let Some(mnemonic_option) = mnemonic_option {
mnemonic_option
} else {
passed_mnemonic.unwrap_or("//Alice".to_string())
};

let signer = <sr25519::Pair as Pair>::from_string(&mnemonic, None)?;
println!("Account being used for jumpstart: {}", signer.public());

jumpstart_network(&api, &rpc, signer).await?;

Ok("Succesfully jumpstarted network.".to_string())
},
}
}

Expand Down

0 comments on commit 54da03b

Please sign in to comment.