Skip to content

Commit

Permalink
Fix CLI output of submit_unbond
Browse files Browse the repository at this point in the history
  • Loading branch information
brentstone committed Mar 27, 2023
1 parent 372ee4b commit 04f5c54
Showing 1 changed file with 38 additions and 7 deletions.
45 changes: 38 additions & 7 deletions apps/src/lib/client/tx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2404,6 +2404,18 @@ pub async fn submit_unbond(ctx: Context, args: args::Unbond) {
}
}

// Query the unbonds before submitting the tx
let unbonds =
rpc::query_unbond_with_slashing(&client, &bond_source, &validator)
.await;
let mut withdrawable = BTreeMap::<Epoch, token::Amount>::new();
for ((_start_epoch, withdraw_epoch), amount) in unbonds.into_iter() {
let to_withdraw = withdrawable.entry(withdraw_epoch).or_default();
*to_withdraw += amount;
}
let (latest_withdraw_epoch_pre, latest_withdraw_amount_pre) =
withdrawable.into_iter().last().unwrap();

let data = pos::Unbond {
validator: validator.clone(),
amount: args.amount,
Expand All @@ -2424,6 +2436,7 @@ pub async fn submit_unbond(ctx: Context, args: args::Unbond) {
)
.await;

// Query the unbonds post-tx
let unbonds =
rpc::query_unbond_with_slashing(&client, &bond_source, &validator)
.await;
Expand All @@ -2432,14 +2445,32 @@ pub async fn submit_unbond(ctx: Context, args: args::Unbond) {
let to_withdraw = withdrawable.entry(withdraw_epoch).or_default();
*to_withdraw += amount;
}
let (withdraw_epoch, withdraw_amount) = withdrawable.iter().last().unwrap();
debug_assert!(args.amount <= *withdraw_amount);
println!(
"Amount {} withdrawable starting from epoch {}",
args.amount, *withdraw_epoch
);
let (latest_withdraw_epoch_post, latest_withdraw_amount_post) =
withdrawable.into_iter().last().unwrap();

rpc::query_and_print_unbonds(&client, &bond_source, &validator).await;
match latest_withdraw_epoch_post.cmp(&latest_withdraw_epoch_pre) {
std::cmp::Ordering::Less => {
eprintln!(
"Unexpected behavior reading the unbonds data has occurred"
);
if !args.tx.force {
safe_exit(1)
}
}
std::cmp::Ordering::Equal => {
println!(
"Amount {} withdrawable starting from epoch {}",
latest_withdraw_amount_post - latest_withdraw_amount_pre,
latest_withdraw_epoch_post
);
}
std::cmp::Ordering::Greater => {
println!(
"Amount {} withdrawable starting from epoch {}",
latest_withdraw_amount_post, latest_withdraw_epoch_post
);
}
}
}

pub async fn submit_withdraw(ctx: Context, args: args::Withdraw) {
Expand Down

0 comments on commit 04f5c54

Please sign in to comment.