move rpc types from client to client-types crate (#9039)

* Separate client types into own crate, so ledger does not need it

Removes about 50 crates of dependency from ledger

* Drop Rpc name from transaction-status types
This commit is contained in:
sakridge
2020-03-26 13:29:30 -07:00
committed by GitHub
parent ed036b978d
commit b7b4aa5d4d
17 changed files with 241 additions and 205 deletions

View File

@ -28,7 +28,7 @@ reed-solomon-erasure = { package = "solana-reed-solomon-erasure", version = "4.0
regex = "1.3.6"
serde = "1.0.105"
serde_bytes = "0.11.3"
solana-client = { path = "../client", version = "1.1.0" }
solana-transaction-status = { path = "../transaction-status", version = "1.1.0" }
solana-genesis-programs = { path = "../genesis-programs", version = "1.1.0" }
solana-logger = { path = "../logger", version = "1.1.0" }
solana-measure = { path = "../measure", version = "1.1.0" }

View File

@ -22,10 +22,6 @@ use rayon::{
ThreadPool,
};
use rocksdb::DBRawIterator;
use solana_client::rpc_response::{
RpcConfirmedBlock, RpcEncodedTransaction, RpcRewards, RpcTransactionEncoding,
RpcTransactionStatusMeta, RpcTransactionWithStatusMeta,
};
use solana_measure::measure::Measure;
use solana_metrics::{datapoint_debug, datapoint_error};
use solana_rayon_threadlimit::get_thread_count;
@ -40,6 +36,10 @@ use solana_sdk::{
timing::timestamp,
transaction::Transaction,
};
use solana_transaction_status::{
ConfirmedBlock, EncodedTransaction, Rewards, TransactionEncoding, TransactionStatusMeta,
TransactionWithStatusMeta,
};
use solana_vote_program::{vote_instruction::VoteInstruction, vote_state::TIMESTAMP_SLOT_INTERVAL};
use std::{
cell::RefCell,
@ -1430,15 +1430,15 @@ impl Blockstore {
pub fn get_confirmed_block(
&self,
slot: Slot,
encoding: Option<RpcTransactionEncoding>,
) -> Result<RpcConfirmedBlock> {
encoding: Option<TransactionEncoding>,
) -> Result<ConfirmedBlock> {
let lowest_cleanup_slot = self.lowest_cleanup_slot.read().unwrap();
// lowest_cleanup_slot is the last slot that was not cleaned up by
// LedgerCleanupService
if *lowest_cleanup_slot > slot {
return Err(BlockstoreError::SlotCleanedUp);
}
let encoding = encoding.unwrap_or(RpcTransactionEncoding::Json);
let encoding = encoding.unwrap_or(TransactionEncoding::Json);
if self.is_root(slot) {
let slot_meta_cf = self.db.column::<cf::SlotMeta>();
let slot_meta = match slot_meta_cf.get(slot)? {
@ -1467,7 +1467,7 @@ impl Blockstore {
let rewards = self.rewards_cf.get(slot)?.unwrap_or_else(|| vec![]);
let block = RpcConfirmedBlock {
let block = ConfirmedBlock {
previous_blockhash: previous_blockhash.to_string(),
blockhash: blockhash.to_string(),
parent_slot: slot_meta.parent_slot,
@ -1487,15 +1487,14 @@ impl Blockstore {
fn map_transactions_to_statuses<'a>(
&self,
slot: Slot,
encoding: RpcTransactionEncoding,
encoding: TransactionEncoding,
iterator: impl Iterator<Item = Transaction> + 'a,
) -> Vec<RpcTransactionWithStatusMeta> {
) -> Vec<TransactionWithStatusMeta> {
iterator
.map(|transaction| {
let signature = transaction.signatures[0];
let encoded_transaction =
RpcEncodedTransaction::encode(transaction, encoding.clone());
RpcTransactionWithStatusMeta {
let encoded_transaction = EncodedTransaction::encode(transaction, encoding.clone());
TransactionWithStatusMeta {
transaction: encoded_transaction,
meta: self
.transaction_status_cf
@ -1509,23 +1508,23 @@ impl Blockstore {
pub fn read_transaction_status(
&self,
index: (Slot, Signature),
) -> Result<Option<RpcTransactionStatusMeta>> {
) -> Result<Option<TransactionStatusMeta>> {
self.transaction_status_cf.get(index)
}
pub fn write_transaction_status(
&self,
index: (Slot, Signature),
status: &RpcTransactionStatusMeta,
status: &TransactionStatusMeta,
) -> Result<()> {
self.transaction_status_cf.put(index, status)
}
pub fn read_rewards(&self, index: Slot) -> Result<Option<RpcRewards>> {
pub fn read_rewards(&self, index: Slot) -> Result<Option<Rewards>> {
self.rewards_cf.get(index)
}
pub fn write_rewards(&self, index: Slot, rewards: RpcRewards) -> Result<()> {
pub fn write_rewards(&self, index: Slot, rewards: Rewards) -> Result<()> {
self.rewards_cf.put(index, &rewards)
}
@ -4848,7 +4847,7 @@ pub mod tests {
.put_meta_bytes(slot - 1, &serialize(&parent_meta).unwrap())
.unwrap();
let expected_transactions: Vec<(Transaction, Option<RpcTransactionStatusMeta>)> = entries
let expected_transactions: Vec<(Transaction, Option<TransactionStatusMeta>)> = entries
.iter()
.cloned()
.filter(|entry| !entry.is_tick())
@ -4865,7 +4864,7 @@ pub mod tests {
.transaction_status_cf
.put(
(slot, signature),
&RpcTransactionStatusMeta {
&TransactionStatusMeta {
status: Ok(()),
fee: 42,
pre_balances: pre_balances.clone(),
@ -4877,7 +4876,7 @@ pub mod tests {
.transaction_status_cf
.put(
(slot + 1, signature),
&RpcTransactionStatusMeta {
&TransactionStatusMeta {
status: Ok(()),
fee: 42,
pre_balances: pre_balances.clone(),
@ -4887,7 +4886,7 @@ pub mod tests {
.unwrap();
(
transaction,
Some(RpcTransactionStatusMeta {
Some(TransactionStatusMeta {
status: Ok(()),
fee: 42,
pre_balances,
@ -4904,12 +4903,12 @@ pub mod tests {
let confirmed_block = ledger.get_confirmed_block(slot, None).unwrap();
assert_eq!(confirmed_block.transactions.len(), 100);
let expected_block = RpcConfirmedBlock {
let expected_block = ConfirmedBlock {
transactions: expected_transactions
.iter()
.cloned()
.map(|(tx, meta)| RpcTransactionWithStatusMeta {
transaction: RpcEncodedTransaction::encode(tx, RpcTransactionEncoding::Json),
.map(|(tx, meta)| TransactionWithStatusMeta {
transaction: EncodedTransaction::encode(tx, TransactionEncoding::Json),
meta,
})
.collect(),
@ -4925,12 +4924,12 @@ pub mod tests {
let confirmed_block = ledger.get_confirmed_block(slot + 1, None).unwrap();
assert_eq!(confirmed_block.transactions.len(), 100);
let expected_block = RpcConfirmedBlock {
let expected_block = ConfirmedBlock {
transactions: expected_transactions
.iter()
.cloned()
.map(|(tx, meta)| RpcTransactionWithStatusMeta {
transaction: RpcEncodedTransaction::encode(tx, RpcTransactionEncoding::Json),
.map(|(tx, meta)| TransactionWithStatusMeta {
transaction: EncodedTransaction::encode(tx, TransactionEncoding::Json),
meta,
})
.collect(),
@ -5150,7 +5149,7 @@ pub mod tests {
assert!(transaction_status_cf
.put(
(0, Signature::default()),
&RpcTransactionStatusMeta {
&TransactionStatusMeta {
status: solana_sdk::transaction::Result::<()>::Err(
TransactionError::AccountNotFound
),
@ -5162,7 +5161,7 @@ pub mod tests {
.is_ok());
// result found
let RpcTransactionStatusMeta {
let TransactionStatusMeta {
status,
fee,
pre_balances,
@ -5180,7 +5179,7 @@ pub mod tests {
assert!(transaction_status_cf
.put(
(9, Signature::default()),
&RpcTransactionStatusMeta {
&TransactionStatusMeta {
status: solana_sdk::transaction::Result::<()>::Ok(()),
fee: 9u64,
pre_balances: pre_balances_vec.clone(),
@ -5190,7 +5189,7 @@ pub mod tests {
.is_ok());
// result found
let RpcTransactionStatusMeta {
let TransactionStatusMeta {
status,
fee,
pre_balances,
@ -5245,7 +5244,7 @@ pub mod tests {
transaction_status_cf
.put(
(slot, transaction.signatures[0]),
&RpcTransactionStatusMeta {
&TransactionStatusMeta {
status: solana_sdk::transaction::Result::<()>::Err(
TransactionError::AccountNotFound,
),
@ -5268,7 +5267,7 @@ pub mod tests {
let map = blockstore.map_transactions_to_statuses(
slot,
RpcTransactionEncoding::Json,
TransactionEncoding::Json,
transactions.into_iter(),
);
assert_eq!(map.len(), 5);

View File

@ -10,8 +10,8 @@ use rocksdb::{
};
use serde::de::DeserializeOwned;
use serde::Serialize;
use solana_client::rpc_response::{RpcRewards, RpcTransactionStatusMeta};
use solana_sdk::{clock::Slot, signature::Signature};
use solana_transaction_status::{Rewards, TransactionStatusMeta};
use std::{collections::HashMap, fs, marker::PhantomData, path::Path, sync::Arc};
use thiserror::Error;
@ -269,7 +269,7 @@ pub trait TypedColumn: Column {
}
impl TypedColumn for columns::TransactionStatus {
type Type = RpcTransactionStatusMeta;
type Type = TransactionStatusMeta;
}
pub trait SlotColumn<Index = u64> {}
@ -330,7 +330,7 @@ impl ColumnName for columns::Rewards {
const NAME: &'static str = REWARDS_CF;
}
impl TypedColumn for columns::Rewards {
type Type = RpcRewards;
type Type = Rewards;
}
impl Column for columns::ShredCode {