From 2ebc68a9e2071297598a9cf4982c6bff1a93da99 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Sat, 15 Aug 2020 17:26:00 -0700 Subject: [PATCH] decode-transaction now supports binary64 --- cli/src/cli.rs | 28 +++++++++++++++++++++++----- transaction-status/src/lib.rs | 19 ++++++++++--------- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/cli/src/cli.rs b/cli/src/cli.rs index c9078e876b..f572eb0eaf 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -10,7 +10,7 @@ use crate::{ validator_info::*, vote::*, }; -use clap::{App, AppSettings, Arg, ArgMatches, SubCommand}; +use clap::{App, AppSettings, Arg, ArgMatches, SubCommand, value_t_or_exit}; use log::*; use num_traits::FromPrimitive; use serde_json::{self, json, Value}; @@ -821,8 +821,16 @@ pub fn parse_command( _ => Err(CliError::BadParameter("Invalid signature".to_string())), }, ("decode-transaction", Some(matches)) => { + let blob = value_t_or_exit!(matches, "transaction", String); + let encoding = match matches.value_of("encoding").unwrap() { + "binary" => UiTransactionEncoding::Binary, + "binary64" => UiTransactionEncoding::Binary64, + _ => unreachable!() + }; + let encoded_transaction = EncodedTransaction::Binary( - matches.value_of("base58_transaction").unwrap().to_string(), + blob, + encoding, ); if let Some(transaction) = encoded_transaction.decode() { Ok(CliCommandInfo { @@ -2155,12 +2163,22 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, ' SubCommand::with_name("decode-transaction") .about("Decode a base-58 binary transaction") .arg( - Arg::with_name("base58_transaction") + Arg::with_name("transaction") .index(1) - .value_name("BASE58_TRANSACTION") + .value_name("TRANSACTION") .takes_value(true) .required(true) - .help("The transaction to decode"), + .help("transaction to decode"), + ) + .arg( + Arg::with_name("encoding") + .index(2) + .value_name("ENCODING") + .possible_values(&["binary", "binary64"]) // Subset of `UiTransactionEncoding` enum + .default_value("binary") + .takes_value(true) + .required(true) + .help("transaction encoding"), ), ) .subcommand( diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index 0069e0eeb3..d2d6a084c3 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -308,15 +308,16 @@ impl EncodedTransaction { .into_vec() .ok() .and_then(|bytes| bincode::deserialize(&bytes).ok()), - EncodedTransaction::Binary(blob, encoding) => { - if *encoding == UiTransactionEncoding::Binary64 { - base64::decode(blob) - .ok() - .and_then(|bytes| bincode::deserialize(&bytes).ok()) - } else { - None - } - } + EncodedTransaction::Binary(blob, encoding) => match *encoding { + UiTransactionEncoding::Binary64 => base64::decode(blob) + .ok() + .and_then(|bytes| bincode::deserialize(&bytes).ok()), + UiTransactionEncoding::Binary => bs58::decode(blob) + .into_vec() + .ok() + .and_then(|bytes| bincode::deserialize(&bytes).ok()), + UiTransactionEncoding::Json | UiTransactionEncoding::JsonParsed => None, + }, } } }