diff --git a/cli/src/cli.rs b/cli/src/cli.rs index db010a275..ec0078af7 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -54,7 +54,7 @@ use solana_stake_program::{ stake_instruction::LockupArgs, stake_state::{Lockup, StakeAuthorize}, }; -use solana_transaction_status::{EncodedTransaction, TransactionEncoding}; +use solana_transaction_status::{EncodedTransaction, UiTransactionEncoding}; use solana_vote_program::vote_state::VoteAuthorize; use std::{ collections::HashMap, @@ -1173,7 +1173,7 @@ fn process_confirm( if let Some(transaction_status) = status { if config.verbose { match rpc_client - .get_confirmed_transaction(signature, TransactionEncoding::Binary) + .get_confirmed_transaction(signature, UiTransactionEncoding::Binary) { Ok(confirmed_transaction) => { println!( diff --git a/cli/src/display.rs b/cli/src/display.rs index 091c400ab..fb9ac3a90 100644 --- a/cli/src/display.rs +++ b/cli/src/display.rs @@ -5,7 +5,7 @@ use solana_sdk::{ hash::Hash, native_token::lamports_to_sol, program_utils::limited_deserialize, transaction::Transaction, }; -use solana_transaction_status::RpcTransactionStatusMeta; +use solana_transaction_status::UiTransactionStatusMeta; use std::{collections::HashMap, fmt, io}; // Pretty print a "name value" @@ -81,7 +81,7 @@ pub fn println_signers( pub fn write_transaction( w: &mut W, transaction: &Transaction, - transaction_status: &Option, + transaction_status: &Option, prefix: &str, ) -> io::Result<()> { let message = &transaction.message; @@ -204,7 +204,7 @@ pub fn write_transaction( pub fn println_transaction( transaction: &Transaction, - transaction_status: &Option, + transaction_status: &Option, prefix: &str, ) { let mut w = Vec::new(); diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index 3de5dd559..decc1de83 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -28,7 +28,7 @@ use solana_sdk::{ transaction::{self, Transaction}, }; use solana_transaction_status::{ - ConfirmedBlock, ConfirmedTransaction, TransactionEncoding, TransactionStatus, + ConfirmedBlock, ConfirmedTransaction, TransactionStatus, UiTransactionEncoding, }; use solana_vote_program::vote_state::MAX_LOCKOUT_HISTORY; use std::{ @@ -238,13 +238,13 @@ impl RpcClient { } pub fn get_confirmed_block(&self, slot: Slot) -> ClientResult { - self.get_confirmed_block_with_encoding(slot, TransactionEncoding::Json) + self.get_confirmed_block_with_encoding(slot, UiTransactionEncoding::Json) } pub fn get_confirmed_block_with_encoding( &self, slot: Slot, - encoding: TransactionEncoding, + encoding: UiTransactionEncoding, ) -> ClientResult { self.send(RpcRequest::GetConfirmedBlock, json!([slot, encoding])) } @@ -285,7 +285,7 @@ impl RpcClient { pub fn get_confirmed_transaction( &self, signature: &Signature, - encoding: TransactionEncoding, + encoding: UiTransactionEncoding, ) -> ClientResult { self.send( RpcRequest::GetConfirmedTransaction, diff --git a/core/src/rpc.rs b/core/src/rpc.rs index 9e57bfd6c..be95406c0 100644 --- a/core/src/rpc.rs +++ b/core/src/rpc.rs @@ -40,7 +40,7 @@ use solana_sdk::{ transaction::{self, Transaction}, }; use solana_transaction_status::{ - ConfirmedBlock, ConfirmedTransaction, TransactionEncoding, TransactionStatus, + ConfirmedBlock, ConfirmedTransaction, TransactionStatus, UiTransactionEncoding, }; use solana_vote_program::vote_state::{VoteState, MAX_LOCKOUT_HISTORY}; use std::{ @@ -541,7 +541,7 @@ impl JsonRpcRequestProcessor { pub fn get_confirmed_block( &self, slot: Slot, - encoding: Option, + encoding: Option, ) -> Result> { if self.config.enable_rpc_transaction_history && slot @@ -710,7 +710,7 @@ impl JsonRpcRequestProcessor { pub fn get_confirmed_transaction( &self, signature: Signature, - encoding: Option, + encoding: Option, ) -> Result> { if self.config.enable_rpc_transaction_history { Ok(self @@ -1031,7 +1031,7 @@ pub trait RpcSol { &self, meta: Self::Metadata, slot: Slot, - encoding: Option, + encoding: Option, ) -> Result>; #[rpc(meta, name = "getBlockTime")] @@ -1050,7 +1050,7 @@ pub trait RpcSol { &self, meta: Self::Metadata, signature_str: String, - encoding: Option, + encoding: Option, ) -> Result>; #[rpc(meta, name = "getConfirmedSignaturesForAddress")] @@ -1525,7 +1525,7 @@ impl RpcSol for RpcSolImpl { &self, meta: Self::Metadata, slot: Slot, - encoding: Option, + encoding: Option, ) -> Result> { meta.get_confirmed_block(slot, encoding) } @@ -1547,7 +1547,7 @@ impl RpcSol for RpcSolImpl { &self, meta: Self::Metadata, signature_str: String, - encoding: Option, + encoding: Option, ) -> Result> { let signature = verify_signature(&signature_str)?; meta.get_confirmed_transaction(signature, encoding) @@ -1647,7 +1647,7 @@ pub mod tests { system_transaction, transaction::{self, TransactionError}, }; - use solana_transaction_status::{EncodedTransaction, RpcMessage, TransactionWithStatusMeta}; + use solana_transaction_status::{EncodedTransaction, TransactionWithStatusMeta, UiMessage}; use solana_vote_program::{ vote_instruction, vote_state::{Vote, VoteInit, MAX_LOCKOUT_HISTORY}, @@ -3213,8 +3213,8 @@ pub mod tests { if transaction.signatures[0] == confirmed_block_signatures[0].to_string() { let meta = meta.unwrap(); let transaction_recent_blockhash = match transaction.message { - RpcMessage::Parsed(message) => message.recent_blockhash, - RpcMessage::Raw(message) => message.recent_blockhash, + UiMessage::Parsed(message) => message.recent_blockhash, + UiMessage::Raw(message) => message.recent_blockhash, }; assert_eq!(transaction_recent_blockhash, blockhash.to_string()); assert_eq!(meta.status, Ok(())); diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index d1a32ab88..c08a55c43 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -37,8 +37,8 @@ use solana_sdk::{ transaction::Transaction, }; use solana_transaction_status::{ - ConfirmedBlock, ConfirmedTransaction, EncodedTransaction, Rewards, RpcTransactionStatusMeta, - TransactionEncoding, TransactionStatusMeta, TransactionWithStatusMeta, + ConfirmedBlock, ConfirmedTransaction, EncodedTransaction, Rewards, TransactionStatusMeta, + TransactionWithStatusMeta, UiTransactionEncoding, UiTransactionStatusMeta, }; use solana_vote_program::{vote_instruction::VoteInstruction, vote_state::TIMESTAMP_SLOT_INTERVAL}; use std::{ @@ -1516,7 +1516,7 @@ impl Blockstore { pub fn get_confirmed_block( &self, slot: Slot, - encoding: Option, + encoding: Option, ) -> Result { datapoint_info!( "blockstore-rpc-api", @@ -1528,7 +1528,7 @@ impl Blockstore { if *lowest_cleanup_slot > 0 && *lowest_cleanup_slot >= slot { return Err(BlockstoreError::SlotCleanedUp); } - let encoding = encoding.unwrap_or(TransactionEncoding::Json); + let encoding = encoding.unwrap_or(UiTransactionEncoding::Json); if self.is_root(slot) { let slot_meta_cf = self.db.column::(); let slot_meta = match slot_meta_cf.get(slot)? { @@ -1579,7 +1579,7 @@ impl Blockstore { fn map_transactions_to_statuses<'a>( &self, slot: Slot, - encoding: TransactionEncoding, + encoding: UiTransactionEncoding, iterator: impl Iterator + 'a, ) -> Vec { iterator @@ -1591,7 +1591,7 @@ impl Blockstore { meta: self .read_transaction_status((signature, slot)) .expect("Expect database get to succeed") - .map(RpcTransactionStatusMeta::from), + .map(UiTransactionStatusMeta::from), } }) .collect() @@ -1761,7 +1761,7 @@ impl Blockstore { pub fn get_confirmed_transaction( &self, signature: Signature, - encoding: Option, + encoding: Option, ) -> Result> { datapoint_info!( "blockstore-rpc-api", @@ -1770,7 +1770,7 @@ impl Blockstore { if let Some((slot, status)) = self.get_transaction_status(signature)? { let transaction = self.find_transaction_in_slot(slot, signature)? .expect("Transaction to exist in slot entries if it exists in statuses and hasn't been cleaned up"); - let encoding = encoding.unwrap_or(TransactionEncoding::Json); + let encoding = encoding.unwrap_or(UiTransactionEncoding::Json); let encoded_transaction = EncodedTransaction::encode(transaction, encoding); Ok(Some(ConfirmedTransaction { slot, @@ -5100,7 +5100,7 @@ pub mod tests { .put_meta_bytes(slot - 1, &serialize(&parent_meta).unwrap()) .unwrap(); - let expected_transactions: Vec<(Transaction, Option)> = entries + let expected_transactions: Vec<(Transaction, Option)> = entries .iter() .cloned() .filter(|entry| !entry.is_tick()) @@ -5164,7 +5164,7 @@ pub mod tests { .iter() .cloned() .map(|(tx, meta)| TransactionWithStatusMeta { - transaction: EncodedTransaction::encode(tx, TransactionEncoding::Json), + transaction: EncodedTransaction::encode(tx, UiTransactionEncoding::Json), meta, }) .collect(), @@ -5185,7 +5185,7 @@ pub mod tests { .iter() .cloned() .map(|(tx, meta)| TransactionWithStatusMeta { - transaction: EncodedTransaction::encode(tx, TransactionEncoding::Json), + transaction: EncodedTransaction::encode(tx, UiTransactionEncoding::Json), meta, }) .collect(), @@ -5802,7 +5802,7 @@ pub mod tests { blockstore.insert_shreds(shreds, None, false).unwrap(); blockstore.set_roots(&[slot - 1, slot]).unwrap(); - let expected_transactions: Vec<(Transaction, Option)> = entries + let expected_transactions: Vec<(Transaction, Option)> = entries .iter() .cloned() .filter(|entry| !entry.is_tick()) @@ -5845,7 +5845,7 @@ pub mod tests { for (transaction, status) in expected_transactions.clone() { let signature = transaction.signatures[0]; let encoded_transaction = - EncodedTransaction::encode(transaction, TransactionEncoding::Json); + EncodedTransaction::encode(transaction, UiTransactionEncoding::Json); let expected_transaction = ConfirmedTransaction { slot, transaction: TransactionWithStatusMeta { @@ -6073,7 +6073,7 @@ pub mod tests { let map = blockstore.map_transactions_to_statuses( slot, - TransactionEncoding::Json, + UiTransactionEncoding::Json, transactions.into_iter(), ); assert_eq!(map.len(), 5); diff --git a/stake-monitor/src/lib.rs b/stake-monitor/src/lib.rs index bd24fffae..3911cd341 100644 --- a/stake-monitor/src/lib.rs +++ b/stake-monitor/src/lib.rs @@ -7,7 +7,7 @@ use solana_sdk::{ pubkey::Pubkey, signature::Signature, transaction::Transaction, }; use solana_stake_program::{stake_instruction::StakeInstruction, stake_state::Lockup}; -use solana_transaction_status::{ConfirmedBlock, RpcTransactionStatusMeta, TransactionEncoding}; +use solana_transaction_status::{ConfirmedBlock, UiTransactionEncoding, UiTransactionStatusMeta}; use std::{collections::HashMap, thread::sleep, time::Duration}; pub type PubkeyString = String; @@ -65,7 +65,7 @@ impl AccountsInfo { fn process_transaction( slot: Slot, transaction: &Transaction, - meta: &RpcTransactionStatusMeta, + meta: &UiTransactionStatusMeta, accounts: &mut HashMap, ) { let mut last_instruction = true; @@ -289,7 +289,7 @@ fn load_blocks( let mut blocks = vec![]; for slot in slots.into_iter() { let block = - rpc_client.get_confirmed_block_with_encoding(slot, TransactionEncoding::Binary)?; + rpc_client.get_confirmed_block_with_encoding(slot, UiTransactionEncoding::Binary)?; blocks.push((slot, block)); } Ok(blocks) diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index c1019e6a5..e3cd4d67b 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -16,23 +16,24 @@ use solana_sdk::{ transaction::{Result, Transaction, TransactionError}, }; +/// A duplicate representation of an Instruction for pretty JSON serialization #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase", untagged)] -pub enum RpcInstruction { - Compiled(RpcCompiledInstruction), +pub enum UiInstruction { + Compiled(UiCompiledInstruction), Parsed(Value), } /// A duplicate representation of a CompiledInstruction for pretty JSON serialization #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct RpcCompiledInstruction { +pub struct UiCompiledInstruction { pub program_id_index: u8, pub accounts: Vec, pub data: String, } -impl From<&CompiledInstruction> for RpcCompiledInstruction { +impl From<&CompiledInstruction> for UiCompiledInstruction { fn from(instruction: &CompiledInstruction) -> Self { Self { program_id_index: instruction.program_id_index, @@ -62,9 +63,10 @@ impl Default for TransactionStatusMeta { } } +/// A duplicate representation of TransactionStatusMeta with `err` field #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct RpcTransactionStatusMeta { +pub struct UiTransactionStatusMeta { pub err: Option, pub status: Result<()>, // This field is deprecated. See https://github.com/solana-labs/solana/issues/9302 pub fee: u64, @@ -72,7 +74,7 @@ pub struct RpcTransactionStatusMeta { pub post_balances: Vec, } -impl From for RpcTransactionStatusMeta { +impl From for UiTransactionStatusMeta { fn from(meta: TransactionStatusMeta) -> Self { Self { err: meta.status.clone().err(), @@ -129,47 +131,47 @@ pub struct ConfirmedTransaction { /// A duplicate representation of a Transaction for pretty JSON serialization #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct RpcTransaction { +pub struct UiTransaction { pub signatures: Vec, - pub message: RpcMessage, + pub message: UiMessage, } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase", untagged)] -pub enum RpcMessage { - Parsed(RpcParsedMessage), - Raw(RpcRawMessage), +pub enum UiMessage { + Parsed(UiParsedMessage), + Raw(UiRawMessage), } -/// A duplicate representation of a Message for pretty JSON serialization +/// A duplicate representation of a Message, in raw format, for pretty JSON serialization #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct RpcRawMessage { +pub struct UiRawMessage { pub header: MessageHeader, pub account_keys: Vec, pub recent_blockhash: String, - pub instructions: Vec, + pub instructions: Vec, } -/// A duplicate representation of a Message for pretty JSON serialization +/// A duplicate representation of a Message, in parsed format, for pretty JSON serialization #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct RpcParsedMessage { +pub struct UiParsedMessage { pub account_keys: Value, pub recent_blockhash: String, - pub instructions: Vec, + pub instructions: Vec, } #[derive(Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TransactionWithStatusMeta { pub transaction: EncodedTransaction, - pub meta: Option, + pub meta: Option, } #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] #[serde(rename_all = "camelCase")] -pub enum TransactionEncoding { +pub enum UiTransactionEncoding { Binary, Json, JsonParsed, @@ -179,18 +181,18 @@ pub enum TransactionEncoding { #[serde(rename_all = "camelCase", untagged)] pub enum EncodedTransaction { Binary(String), - Json(RpcTransaction), + Json(UiTransaction), } impl EncodedTransaction { - pub fn encode(transaction: Transaction, encoding: TransactionEncoding) -> Self { + pub fn encode(transaction: Transaction, encoding: UiTransactionEncoding) -> Self { match encoding { - TransactionEncoding::Binary => EncodedTransaction::Binary( + UiTransactionEncoding::Binary => EncodedTransaction::Binary( bs58::encode(bincode::serialize(&transaction).unwrap()).into_string(), ), _ => { - let message = if encoding == TransactionEncoding::Json { - RpcMessage::Raw(RpcRawMessage { + let message = if encoding == UiTransactionEncoding::Json { + UiMessage::Raw(UiRawMessage { header: transaction.message.header, account_keys: transaction .message @@ -207,7 +209,7 @@ impl EncodedTransaction { .collect(), }) } else { - RpcMessage::Parsed(RpcParsedMessage { + UiMessage::Parsed(UiParsedMessage { account_keys: parse_accounts(&transaction.message), recent_blockhash: transaction.message.recent_blockhash.to_string(), instructions: transaction @@ -218,15 +220,15 @@ impl EncodedTransaction { let program_id = instruction.program_id(&transaction.message.account_keys); if let Some(parsed_instruction) = parse(program_id, instruction) { - RpcInstruction::Parsed(parsed_instruction) + UiInstruction::Parsed(parsed_instruction) } else { - RpcInstruction::Compiled(instruction.into()) + UiInstruction::Compiled(instruction.into()) } }) .collect(), }) }; - EncodedTransaction::Json(RpcTransaction { + EncodedTransaction::Json(UiTransaction { signatures: transaction .signatures .iter() diff --git a/watchtower/src/main.rs b/watchtower/src/main.rs index 4a69fc208..874aaa7d6 100644 --- a/watchtower/src/main.rs +++ b/watchtower/src/main.rs @@ -16,7 +16,7 @@ use solana_sdk::{ clock::Slot, hash::Hash, native_token::lamports_to_sol, program_utils::limited_deserialize, pubkey::Pubkey, }; -use solana_transaction_status::{ConfirmedBlock, TransactionEncoding}; +use solana_transaction_status::{ConfirmedBlock, UiTransactionEncoding}; use solana_vote_program::vote_instruction::VoteInstruction; use std::{ collections::HashMap, @@ -226,7 +226,7 @@ fn load_blocks( let mut blocks = vec![]; for slot in slots.into_iter() { let block = - rpc_client.get_confirmed_block_with_encoding(slot, TransactionEncoding::Binary)?; + rpc_client.get_confirmed_block_with_encoding(slot, UiTransactionEncoding::Binary)?; blocks.push((slot, block)); } Ok(blocks)