Skip to content
Snippets Groups Projects
Commit 91f70433 authored by Hugo Trentesaux's avatar Hugo Trentesaux Committed by Hugo Trentesaux
Browse files

move smith commands to subcommand

parent 2f1fd210
Branches
Tags
1 merge request!7Big refacto
This commit is part of merge request !7. Comments created here will be created in the context of that merge request.
......@@ -33,6 +33,8 @@ pub enum Subcommand {
Confirm { name: String },
/// Revoke an identity immediately
Revoke,
/// Generate a revocation document for the provided account
GenRevocDoc,
}
/// handle identity commands
......@@ -65,6 +67,13 @@ pub async fn handle_command(data: Data, command: Subcommand) -> anyhow::Result<(
data = data.build_keypair().fetch_idty_index().await?;
commands::identity::revoke_identity(data).await?;
}
Subcommand::GenRevocDoc => {
data = data
.build_keypair()
.fetch_idty_index()
.await?;
commands::revocation::print_revoc_sig(&data)
}
};
Ok(())
......
use crate::*;
use sp_core::{crypto::AccountId32, sr25519::Pair, Pair as _};
use std::ops::Deref;
use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner};
type SessionKeys = [u8; 128];
/// define smith subcommands
#[derive(Clone, Default, Debug, clap::Parser)]
pub enum Subcommand {
/// Emit a smith certification
Cert { to: u32 },
/// go online
GoOnline,
#[default]
/// go offline
GoOffline,
/// Rotate and set session keys
UpdateKeys,
/// set sudo keys
SudoSetKey {
new_key: AccountId,
},
/// List upcoming expirations that require an action
ShowExpire {
/// Show certs that expire within less than this number of blocks
#[clap(short, long, default_value_t = 100800)]
blocks: u32,
/// Show authorities that should rotate keys within less than this number of sessions
#[clap(short, long, default_value_t = 100)]
sessions: u32,
},
/// List online authorities
ShowOnline,
}
/// handle smith commands
pub async fn handle_command(data: Data, command: Subcommand) -> anyhow::Result<()> {
let mut data = data.build_client().await?.build_indexer().await?;
match command {
Subcommand::GoOnline => {
commands::smith::go_online(&data).await?;
}
Subcommand::GoOffline => {
commands::smith::go_offline(&data).await?;
}
Subcommand::Cert { to } => {
data = data.build_keypair().fetch_idty_index().await?;
commands::smith::cert(&data, to).await?
}
Subcommand::UpdateKeys => {
commands::smith::update_session_keys(&data).await?;
}
Subcommand::SudoSetKey { new_key } => {
data = data.build_keypair().build_client().await?;
commands::sudo::set_key(data.keypair(), data.client(), new_key).await?;
}
Subcommand::ShowExpire { blocks, sessions } => {
data = data.build_client().await?;
commands::expire::monitor_expirations(&data, blocks, sessions).await?
}
Subcommand::ShowOnline => {
data = data.build_client().await?;
commands::smith::online(&data).await?
}
};
Ok(())
}
/// rotate session keys
pub async fn rotate_keys(client: &Client) -> Result<SessionKeys, anyhow::Error> {
client
......@@ -19,39 +81,37 @@ pub async fn rotate_keys(client: &Client) -> Result<SessionKeys, anyhow::Error>
/// set session keys
pub async fn set_session_keys(
pair: Pair,
client: &Client,
data: &Data,
session_keys: SessionKeys,
) -> Result<TxProgress, subxt::Error> {
client
data.client()
.tx()
.sign_and_submit_then_watch(
&runtime::tx()
.authority_members()
.set_session_keys(session_keys),
&PairSigner::new(pair),
&PairSigner::new(data.keypair()),
BaseExtrinsicParamsBuilder::new(),
)
.await
}
/// update session keys
pub async fn update_session_keys(pair: Pair, client: &Client) -> Result<(), GcliError> {
let session_keys = rotate_keys(client).await?;
let progress = set_session_keys(pair, client, session_keys).await?;
pub async fn update_session_keys(data: &Data) -> Result<(), GcliError> {
let session_keys = rotate_keys(data.client()).await?;
let progress = set_session_keys(data, session_keys).await?;
let _ = track_progress(progress).await?; // TODO
Ok(())
}
/// submit go_online
pub async fn go_online(pair: Pair, client: &Client) -> Result<(), GcliError> {
if client
pub async fn go_online(data: &Data) -> Result<(), GcliError> {
if data
.client()
.storage()
.fetch(
&runtime::storage()
.session()
.next_keys(AccountId32::from(pair.public())),
&runtime::storage().session().next_keys(data.address()),
None,
)
.await?
......@@ -62,11 +122,11 @@ pub async fn go_online(pair: Pair, client: &Client) -> Result<(), GcliError> {
));
}
let progress = client
let progress = data.client()
.tx()
.sign_and_submit_then_watch(
&runtime::tx().authority_members().go_online(),
&PairSigner::new(pair),
&PairSigner::new(data.keypair()),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
......@@ -79,12 +139,13 @@ pub async fn go_online(pair: Pair, client: &Client) -> Result<(), GcliError> {
}
/// submit go_offline
pub async fn go_offline(pair: Pair, client: &Client) -> Result<(), subxt::Error> {
let progress = client
pub async fn go_offline(data: &Data) -> Result<(), subxt::Error> {
let progress = data
.client()
.tx()
.sign_and_submit_then_watch(
&runtime::tx().authority_members().go_offline(),
&PairSigner::new(pair),
&PairSigner::new(data.keypair()),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
......@@ -178,17 +239,13 @@ pub async fn online(data: &Data) -> Result<(), anyhow::Error> {
}
/// submit a certification and track progress
pub async fn cert(
client: &Client,
pair: Pair,
issuer: u32,
receiver: u32,
) -> Result<(), anyhow::Error> {
let progress = client
pub async fn cert(data: &Data, receiver: u32) -> Result<(), anyhow::Error> {
let progress = data
.client()
.tx()
.sign_and_submit_then_watch(
&runtime::tx().smith_cert().add_cert(issuer, receiver),
&PairSigner::new(pair),
&runtime::tx().smith_cert().add_cert(data.idty_index(), receiver),
&PairSigner::new(data.keypair()),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
......
......@@ -162,21 +162,6 @@ pub enum Subcommand {
Balance,
/// Show address corresponding to given arguments
ShowAddress,
/// Generate a revocation document for the provided account
GenRevocDoc,
/// List upcoming expirations that require an action
Expire {
/// Show certs that expire within less than this number of blocks
#[clap(short, long, default_value_t = 100800)]
blocks: u32,
/// Show authorities that should rotate keys within less than this number of sessions
#[clap(short, long, default_value_t = 100)]
sessions: u32,
},
GoOffline,
GoOnline,
/// List online authorities
Online,
#[clap(hide = true)]
Repart {
// Number of transactions per block to target
......@@ -189,13 +174,6 @@ pub enum Subcommand {
SpamRoll {
actual_repart: usize,
},
SudoSetKey {
new_key: AccountId,
},
/// Emit a smith certification
SmithCert {
to: u32,
},
/// List members of the technical committee
TechMembers,
/// List proposals to the technical committee
......@@ -226,21 +204,22 @@ pub enum Subcommand {
/// List of target addresses
dests: Vec<AccountId>,
},
/// Rotate and set session keys
UpdateKeys,
/// Get information about runtime
RuntimeInfo,
/// Check current block
CurrentBlock,
/// Indentity subcommands
/// Identity subcommands
#[clap(subcommand)]
Identity(commands::identity::Subcommand),
/// Oneshot account subcommands
/// Smith subcommands
#[clap(subcommand)]
Oneshot(commands::oneshot::Subcommand),
Smith(commands::smith::Subcommand),
/// Universal Dividend subcommands
#[clap(subcommand)]
Ud(commands::ud::Subcommand),
/// Oneshot account subcommands
#[clap(subcommand)]
Oneshot(commands::oneshot::Subcommand),
/// Indexer subcommands
#[clap(subcommand)]
Indexer(indexer::Subcommand),
......@@ -272,53 +251,6 @@ async fn main() -> Result<(), GcliError> {
data = data.build_address();
println!("address is: {}", data.address());
}
Subcommand::Expire { blocks, sessions } => {
data = data.build_client().await?;
commands::expire::monitor_expirations(&data, blocks, sessions).await?
}
Subcommand::GenRevocDoc => {
data = data
.build_client()
.await?
.build_keypair()
.fetch_idty_index()
.await?;
commands::revocation::print_revoc_sig(&data)
}
Subcommand::GoOffline => {
data = data.build_client().await?;
commands::smith::go_offline(
get_keys(
args.secret_format,
&args.address,
&args.secret,
NeededKeys::Secret,
)?
.1
.unwrap(),
data.client(),
)
.await?;
}
Subcommand::GoOnline => {
data = data.build_client().await?;
commands::smith::go_online(
get_keys(
args.secret_format,
&args.address,
&args.secret,
NeededKeys::Secret,
)?
.1
.unwrap(),
data.client(),
)
.await?;
}
Subcommand::Online => {
data = data.build_client().await?;
commands::smith::online(&data).await?
}
Subcommand::Repart {
target,
actual_repart,
......@@ -355,19 +287,6 @@ async fn main() -> Result<(), GcliError> {
)
.await?
}
Subcommand::SudoSetKey { new_key } => {
data = data.build_keypair().build_client().await?;
commands::sudo::set_key(data.keypair(), data.client(), new_key).await?;
}
Subcommand::SmithCert { to } => {
data = data
.build_client()
.await?
.build_keypair()
.fetch_idty_index()
.await?;
commands::smith::cert(data.client(), data.keypair(), data.idty_index(), to).await?
}
Subcommand::TechMembers => {
data = data.build_client().await?;
commands::collective::technical_committee_members(&data).await?
......@@ -438,21 +357,6 @@ async fn main() -> Result<(), GcliError> {
)
.await?;
}
Subcommand::UpdateKeys => {
data = data.build_client().await?;
commands::smith::update_session_keys(
get_keys(
args.secret_format,
&args.address,
&args.secret,
NeededKeys::Secret,
)?
.1
.unwrap(),
data.client(),
)
.await?;
}
Subcommand::RuntimeInfo => {
data = data.build_client().await?.fetch_system_properties().await?;
commands::runtime::runtime_info(data).await;
......@@ -470,10 +374,11 @@ async fn main() -> Result<(), GcliError> {
);
}
Subcommand::Identity(subcommand) => commands::identity::handle_command(data, subcommand).await?,
Subcommand::Smith(subcommand) => commands::smith::handle_command(data, subcommand).await?,
Subcommand::Ud(subcommand) => commands::ud::handle_command(data, subcommand).await?,
Subcommand::Oneshot(subcommand) => {
commands::oneshot::handle_command(data, subcommand).await?
}
Subcommand::Ud(subcommand) => commands::ud::handle_command(data, subcommand).await?,
Subcommand::Indexer(subcommand) => indexer::handle_command(data, subcommand).await?,
Subcommand::Config(subcommand) => conf::handle_command(data, subcommand)?,
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment