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

WIP refac to track tx progress

parent 31c17838
No related branches found
No related tags found
1 merge request!7Big refacto
......@@ -85,7 +85,7 @@ pub async fn technical_committee_vote(
proposal_hash: H256,
proposal_index: u32,
vote: bool,
) -> Result<()> {
) -> Result<TxProgress, subxt::Error> {
client
.tx()
.sign_and_submit_then_watch(
......@@ -95,7 +95,5 @@ pub async fn technical_committee_vote(
&PairSigner::new(pair),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
Ok(())
.await
}
......@@ -5,7 +5,6 @@ use crate::runtime::runtime_types::common_runtime::entities::IdtyData;
use crate::runtime::runtime_types::pallet_identity::types::*;
use crate::runtime::runtime_types::sp_core::sr25519::Signature;
use crate::runtime::runtime_types::sp_runtime::MultiSignature;
use anyhow::{anyhow, Result};
use sp_core::{crypto::AccountId32, sr25519::Pair};
use std::str::FromStr;
use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner};
......@@ -15,7 +14,7 @@ pub async fn get_identity(
mut account_id: Option<AccountId32>,
mut identity_id: Option<u32>,
mut username: Option<String>,
) -> Result<()> {
) -> Result<(), anyhow::Error> {
let client = data.client();
let indexer = data.indexer.clone();
......@@ -73,7 +72,7 @@ pub async fn get_identity(
pub async fn get_idty_index_by_account_id(
client: &Client,
account_id: &AccountId32,
) -> Result<Option<u32>> {
) -> Result<Option<u32>, anyhow::Error> {
Ok(client
.storage()
.fetch(
......@@ -86,7 +85,7 @@ pub async fn get_idty_index_by_account_id(
pub async fn get_identity_by_index(
client: &Client,
idty_index: u32,
) -> Result<Option<IdtyValue<u32, AccountId32, IdtyData>>> {
) -> Result<Option<IdtyValue<u32, AccountId32, IdtyData>>, anyhow::Error> {
Ok(client
.storage()
.fetch(&runtime::storage().identity().identities(idty_index), None)
......
use crate::*;
use anyhow::Result;
use sp_core::{crypto::AccountId32, sr25519::Pair};
use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner};
......@@ -9,7 +8,7 @@ pub async fn create_oneshot_account(
client: &Client,
balance: u64,
dest: AccountId32,
) -> Result<()> {
) -> Result<TxProgress, subxt::Error> {
client
.tx()
.sign_and_submit_then_watch(
......@@ -19,9 +18,7 @@ pub async fn create_oneshot_account(
&PairSigner::new(pair),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
Ok(())
.await
}
pub async fn consume_oneshot_account(
......@@ -29,7 +26,7 @@ pub async fn consume_oneshot_account(
client: &Client,
dest: AccountId32,
dest_oneshot: bool,
) -> Result<()> {
) -> Result<TxProgress, subxt::Error> {
let number = client
.storage()
.fetch(&runtime::storage().system().number(), None)
......@@ -53,9 +50,7 @@ pub async fn consume_oneshot_account(
&PairSigner::new(pair),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
Ok(())
.await
}
pub async fn consume_oneshot_account_with_remaining(
......@@ -66,7 +61,7 @@ pub async fn consume_oneshot_account_with_remaining(
dest_oneshot: bool,
remaining_to: AccountId32,
remaining_to_oneshot: bool,
) -> Result<()> {
) -> Result<TxProgress, subxt::Error> {
let number = client
.storage()
.fetch(&runtime::storage().system().number(), None)
......@@ -102,12 +97,10 @@ pub async fn consume_oneshot_account_with_remaining(
&PairSigner::new(pair),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
Ok(())
.await
}
pub async fn oneshot_account_balance(client: &Client, account: AccountId32) -> Result<()> {
pub async fn oneshot_account_balance(client: &Client, account: AccountId32) -> Result<(), anyhow::Error> {
log::info!(
"{}",
client
......
use crate::*;
use anyhow::{anyhow, Result};
use sp_core::{crypto::AccountId32, sr25519::Pair, Pair as _};
use std::ops::Deref;
use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner, TxStatus};
type SessionKeys = [u8; 128];
pub async fn rotate_keys(client: &Client) -> Result<SessionKeys> {
pub async fn rotate_keys(client: &Client) -> Result<SessionKeys, anyhow::Error> {
client
.rpc()
.rotate_keys()
......@@ -21,7 +20,7 @@ pub async fn set_session_keys(
pair: Pair,
client: &Client,
session_keys: SessionKeys,
) -> Result<()> {
) -> Result<TxProgress, subxt::Error> {
client
.tx()
.sign_and_submit_then_watch(
......@@ -31,17 +30,15 @@ pub async fn set_session_keys(
&PairSigner::new(pair),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
Ok(())
.await
}
pub async fn update_session_keys(pair: Pair, client: &Client) -> Result<()> {
pub async fn update_session_keys(pair: Pair, client: &Client) -> Result<TxProgress, GcliError> {
let session_keys = rotate_keys(client).await?;
set_session_keys(pair, client, session_keys).await
set_session_keys(pair, client, session_keys).await.map_err(|e| e.into())
}
pub async fn go_online(pair: Pair, client: &Client) -> Result<()> {
pub async fn go_online(pair: Pair, client: &Client) -> Result<TxProgress, GcliError> {
if client
.storage()
.fetch(
......@@ -53,7 +50,7 @@ pub async fn go_online(pair: Pair, client: &Client) -> Result<()> {
.await?
.is_none()
{
return Err(anyhow!("This account has not set session keys!"));
return Err(GcliError::Logic("This account has not set session keys!".to_string()));
}
client
......@@ -63,12 +60,10 @@ pub async fn go_online(pair: Pair, client: &Client) -> Result<()> {
&PairSigner::new(pair),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
Ok(())
.await.map_err(|e| e.into())
}
pub async fn go_offline(pair: Pair, client: &Client) -> Result<()> {
pub async fn go_offline(pair: Pair, client: &Client) -> Result<TxProgress, subxt::Error> {
client
.tx()
.sign_and_submit_then_watch(
......@@ -76,12 +71,10 @@ pub async fn go_offline(pair: Pair, client: &Client) -> Result<()> {
&PairSigner::new(pair),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
Ok(())
.await
}
pub async fn online(data: &Data) -> Result<()> {
pub async fn online(data: &Data) -> Result<(), anyhow::Error> {
let client = data.client();
let indexer = data.indexer.clone();
......@@ -162,7 +155,7 @@ pub async fn online(data: &Data) -> Result<()> {
}
/// submit a certification and track progress
pub async fn cert(client: &Client, pair: Pair, issuer: u32, receiver: u32) -> Result<()> {
pub async fn cert(client: &Client, pair: Pair, issuer: u32, receiver: u32) -> Result<(), anyhow::Error> {
let mut progress = client
.tx()
.sign_and_submit_then_watch(
......
use crate::*;
use anyhow::Result;
use sp_core::{crypto::AccountId32, sr25519::Pair};
use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner};
pub async fn set_key(pair: Pair, client: &Client, new_key: AccountId32) -> Result<()> {
pub async fn set_key(
pair: Pair,
client: &Client,
new_key: AccountId32,
) -> Result<TxProgress, subxt::Error> {
client
.tx()
.sign_and_submit_then_watch(
......@@ -12,7 +15,5 @@ pub async fn set_key(pair: Pair, client: &Client, new_key: AccountId32) -> Resul
&PairSigner::new(pair),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
Ok(())
.await
}
use crate::*;
use anyhow::Result;
use sp_core::{crypto::AccountId32, sr25519::Pair};
use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner};
......@@ -14,7 +13,7 @@ pub async fn transfer(
balance: u64,
dest: AccountId32,
keep_alive: bool,
) -> Result<()> {
) -> Result<TxProgress, subxt::Error> {
if keep_alive {
client
.tx()
......@@ -23,7 +22,7 @@ pub async fn transfer(
&PairSigner::new(pair),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
.await
} else {
client
.tx()
......@@ -34,10 +33,8 @@ pub async fn transfer(
&PairSigner::new(pair),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
.await
}
Ok(())
}
pub async fn transfer_multiple(
......@@ -45,7 +42,7 @@ pub async fn transfer_multiple(
client: &Client,
amount: u64,
dests: Vec<AccountId32>,
) -> Result<()> {
) -> Result<TxProgress, subxt::Error> {
// build the list of transactions from the destination accounts
let transactions: Vec<Call> = dests
.into_iter()
......@@ -65,7 +62,5 @@ pub async fn transfer_multiple(
&PairSigner::new(pair.clone()),
BaseExtrinsicParamsBuilder::new(),
)
.await?;
Ok(())
.await
}
......@@ -5,6 +5,7 @@ mod data;
mod indexer;
mod keys;
use anyhow::anyhow;
use clap::Parser;
use codec::Encode;
use data::*;
......@@ -119,6 +120,8 @@ pub enum GcliError {
Duniter(String),
/// error coming from indexer
Indexer(String),
/// logic error (illegal operation or security)
Logic(String),
/// error coming from anyhow
Anyhow(anyhow::Error),
}
......@@ -315,7 +318,7 @@ async fn main() -> Result<(), GcliError> {
}
Subcommand::CreateOneshot { balance, dest } => {
data = data.build_client().await?;
commands::oneshot::create_oneshot_account(
let progress = commands::oneshot::create_oneshot_account(
get_keys(
args.secret_format,
&args.address,
......@@ -328,11 +331,12 @@ async fn main() -> Result<(), GcliError> {
balance,
dest,
)
.await?
.await?;
track_progress(progress).await?;
}
Subcommand::ConsumeOneshot { dest, dest_oneshot } => {
data = data.build_client().await?;
commands::oneshot::consume_oneshot_account(
let progress = commands::oneshot::consume_oneshot_account(
get_keys(
args.secret_format,
&args.address,
......@@ -345,7 +349,8 @@ async fn main() -> Result<(), GcliError> {
dest,
dest_oneshot,
)
.await?
.await?;
track_progress(progress).await?;
}
Subcommand::ConsumeOneshotWithRemaining {
balance,
......@@ -355,7 +360,7 @@ async fn main() -> Result<(), GcliError> {
remaining_to_oneshot,
} => {
data = data.build_client().await?;
commands::oneshot::consume_oneshot_account_with_remaining(
let progress = commands::oneshot::consume_oneshot_account_with_remaining(
get_keys(
args.secret_format,
&args.address,
......@@ -371,7 +376,8 @@ async fn main() -> Result<(), GcliError> {
remaining_to,
remaining_to_oneshot,
)
.await?
.await?;
track_progress(progress).await?;
}
Subcommand::Expire { blocks, sessions } => {
data = data.build_client().await?;
......@@ -402,7 +408,7 @@ async fn main() -> Result<(), GcliError> {
}
Subcommand::GoOffline => {
data = data.build_client().await?;
commands::smith::go_offline(
let progress = commands::smith::go_offline(
get_keys(
args.secret_format,
&args.address,
......@@ -413,11 +419,12 @@ async fn main() -> Result<(), GcliError> {
.unwrap(),
data.client(),
)
.await?
.await?;
track_progress(progress).await?;
}
Subcommand::GoOnline => {
data = data.build_client().await?;
commands::smith::go_online(
let progress = commands::smith::go_online(
get_keys(
args.secret_format,
&args.address,
......@@ -428,7 +435,8 @@ async fn main() -> Result<(), GcliError> {
.unwrap(),
data.client(),
)
.await?
.await?;
track_progress(progress).await?;
}
Subcommand::OneshotBalance { account } => {
data = data.build_client().await?;
......@@ -476,7 +484,8 @@ async fn main() -> Result<(), GcliError> {
}
Subcommand::SudoSetKey { new_key } => {
data = data.build_keypair().build_client().await?;
commands::sudo::set_key(data.keypair(), data.client(), new_key).await?
let progress = commands::sudo::set_key(data.keypair(), data.client(), new_key).await?;
track_progress(progress).await?;
}
Subcommand::SmithCert { to } => {
data = data
......@@ -502,7 +511,7 @@ async fn main() -> Result<(), GcliError> {
1 => true,
_ => panic!("Vote must be written 0 if you disagree, or 1 if you agree."),
};
commands::collective::technical_committee_vote(
let progress = commands::collective::technical_committee_vote(
get_keys(
args.secret_format,
&args.address,
......@@ -516,7 +525,8 @@ async fn main() -> Result<(), GcliError> {
index,
vote,
)
.await?
.await?;
track_progress(progress).await?;
}
Subcommand::Transfer {
amount,
......@@ -524,7 +534,7 @@ async fn main() -> Result<(), GcliError> {
keep_alive,
} => {
data = data.build_client().await?;
commands::transfer::transfer(
let progress = commands::transfer::transfer(
get_keys(
args.secret_format,
&args.address,
......@@ -538,11 +548,12 @@ async fn main() -> Result<(), GcliError> {
dest,
keep_alive,
)
.await?
.await?;
track_progress(progress).await?;
}
Subcommand::TransferMultiple { amount, dests } => {
data = data.build_client().await?;
commands::transfer::transfer_multiple(
let progress = commands::transfer::transfer_multiple(
get_keys(
args.secret_format,
&args.address,
......@@ -555,11 +566,12 @@ async fn main() -> Result<(), GcliError> {
amount,
dests,
)
.await?
.await?;
track_progress(progress).await?;
}
Subcommand::UpdateKeys => {
data = data.build_client().await?;
commands::smith::update_session_keys(
let progress = commands::smith::update_session_keys(
get_keys(
args.secret_format,
&args.address,
......@@ -570,8 +582,8 @@ async fn main() -> Result<(), GcliError> {
.unwrap(),
data.client(),
)
.await
.unwrap()
.await?;
track_progress(progress).await?;
}
Subcommand::RuntimeInfo => {
data = data.build_client().await?.fetch_system_properties().await?;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment