Add get_signature_status() to SyncClient
And move bank::Result to transaction module.
This commit is contained in:
parent
d3844ef32a
commit
46e6911ec1
|
@ -16,11 +16,11 @@ use crate::service::Service;
|
||||||
use crate::sigverify_stage::VerifiedPackets;
|
use crate::sigverify_stage::VerifiedPackets;
|
||||||
use bincode::deserialize;
|
use bincode::deserialize;
|
||||||
use solana_metrics::counter::Counter;
|
use solana_metrics::counter::Counter;
|
||||||
use solana_runtime::bank::{self, Bank};
|
use solana_runtime::bank::Bank;
|
||||||
use solana_runtime::locked_accounts_results::LockedAccountsResults;
|
use solana_runtime::locked_accounts_results::LockedAccountsResults;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::timing::{self, duration_as_us, MAX_RECENT_BLOCKHASHES};
|
use solana_sdk::timing::{self, duration_as_us, MAX_RECENT_BLOCKHASHES};
|
||||||
use solana_sdk::transaction::{Transaction, TransactionError};
|
use solana_sdk::transaction::{self, Transaction, TransactionError};
|
||||||
use std::net::UdpSocket;
|
use std::net::UdpSocket;
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
use std::sync::mpsc::{Receiver, RecvTimeoutError};
|
use std::sync::mpsc::{Receiver, RecvTimeoutError};
|
||||||
|
@ -220,7 +220,7 @@ impl BankingStage {
|
||||||
fn record_transactions(
|
fn record_transactions(
|
||||||
bank_slot: u64,
|
bank_slot: u64,
|
||||||
txs: &[Transaction],
|
txs: &[Transaction],
|
||||||
results: &[bank::Result<()>],
|
results: &[transaction::Result<()>],
|
||||||
poh: &Arc<Mutex<PohRecorder>>,
|
poh: &Arc<Mutex<PohRecorder>>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let processed_transactions: Vec<_> = results
|
let processed_transactions: Vec<_> = results
|
||||||
|
|
|
@ -4,11 +4,12 @@ use crate::entry::{Entry, EntrySlice};
|
||||||
use crate::leader_schedule_utils;
|
use crate::leader_schedule_utils;
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use solana_metrics::counter::Counter;
|
use solana_metrics::counter::Counter;
|
||||||
use solana_runtime::bank::{Bank, Result};
|
use solana_runtime::bank::Bank;
|
||||||
use solana_runtime::locked_accounts_results::LockedAccountsResults;
|
use solana_runtime::locked_accounts_results::LockedAccountsResults;
|
||||||
use solana_sdk::genesis_block::GenesisBlock;
|
use solana_sdk::genesis_block::GenesisBlock;
|
||||||
use solana_sdk::timing::duration_as_ms;
|
use solana_sdk::timing::duration_as_ms;
|
||||||
use solana_sdk::timing::MAX_RECENT_BLOCKHASHES;
|
use solana_sdk::timing::MAX_RECENT_BLOCKHASHES;
|
||||||
|
use solana_sdk::transaction::Result;
|
||||||
use std::result;
|
use std::result;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
|
@ -10,11 +10,11 @@ use jsonrpc_core::{Error, Metadata, Result};
|
||||||
use jsonrpc_derive::rpc;
|
use jsonrpc_derive::rpc;
|
||||||
use solana_client::rpc_signature_status::RpcSignatureStatus;
|
use solana_client::rpc_signature_status::RpcSignatureStatus;
|
||||||
use solana_drone::drone::request_airdrop_transaction;
|
use solana_drone::drone::request_airdrop_transaction;
|
||||||
use solana_runtime::bank;
|
use solana_runtime::bank::Bank;
|
||||||
use solana_sdk::account::Account;
|
use solana_sdk::account::Account;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signature::Signature;
|
use solana_sdk::signature::Signature;
|
||||||
use solana_sdk::transaction::{Transaction, TransactionError};
|
use solana_sdk::transaction::{self, Transaction, TransactionError};
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::net::{SocketAddr, UdpSocket};
|
use std::net::{SocketAddr, UdpSocket};
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
@ -46,7 +46,7 @@ pub struct JsonRpcRequestProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl JsonRpcRequestProcessor {
|
impl JsonRpcRequestProcessor {
|
||||||
fn bank(&self) -> Arc<bank::Bank> {
|
fn bank(&self) -> Arc<Bank> {
|
||||||
self.bank_forks.read().unwrap().working_bank()
|
self.bank_forks.read().unwrap().working_bank()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ impl JsonRpcRequestProcessor {
|
||||||
bs58::encode(id).into_string()
|
bs58::encode(id).into_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_signature_status(&self, signature: Signature) -> Option<bank::Result<()>> {
|
pub fn get_signature_status(&self, signature: Signature) -> Option<transaction::Result<()>> {
|
||||||
self.get_signature_confirmation_status(signature)
|
self.get_signature_confirmation_status(signature)
|
||||||
.map(|x| x.1)
|
.map(|x| x.1)
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ impl JsonRpcRequestProcessor {
|
||||||
pub fn get_signature_confirmation_status(
|
pub fn get_signature_confirmation_status(
|
||||||
&self,
|
&self,
|
||||||
signature: Signature,
|
signature: Signature,
|
||||||
) -> Option<(usize, bank::Result<()>)> {
|
) -> Option<(usize, transaction::Result<()>)> {
|
||||||
self.bank().get_signature_confirmation_status(&signature)
|
self.bank().get_signature_confirmation_status(&signature)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -731,7 +731,7 @@ mod tests {
|
||||||
|
|
||||||
fn new_bank_forks() -> (Arc<RwLock<BankForks>>, Keypair) {
|
fn new_bank_forks() -> (Arc<RwLock<BankForks>>, Keypair) {
|
||||||
let (genesis_block, alice) = GenesisBlock::new(10_000);
|
let (genesis_block, alice) = GenesisBlock::new(10_000);
|
||||||
let bank = bank::Bank::new(&genesis_block);
|
let bank = Bank::new(&genesis_block);
|
||||||
(
|
(
|
||||||
Arc::new(RwLock::new(BankForks::new(bank.slot(), bank))),
|
Arc::new(RwLock::new(BankForks::new(bank.slot(), bank))),
|
||||||
alice,
|
alice,
|
||||||
|
|
|
@ -228,12 +228,12 @@ mod tests {
|
||||||
use jsonrpc_pubsub::{PubSubHandler, Session};
|
use jsonrpc_pubsub::{PubSubHandler, Session};
|
||||||
use solana_budget_api;
|
use solana_budget_api;
|
||||||
use solana_budget_api::budget_instruction;
|
use solana_budget_api::budget_instruction;
|
||||||
use solana_runtime::bank::{self, Bank};
|
use solana_runtime::bank::Bank;
|
||||||
use solana_sdk::genesis_block::GenesisBlock;
|
use solana_sdk::genesis_block::GenesisBlock;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||||
use solana_sdk::system_transaction;
|
use solana_sdk::system_transaction;
|
||||||
use solana_sdk::transaction::Transaction;
|
use solana_sdk::transaction::{self, Transaction};
|
||||||
use std::thread::sleep;
|
use std::thread::sleep;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tokio::prelude::{Async, Stream};
|
use tokio::prelude::{Async, Stream};
|
||||||
|
@ -242,7 +242,7 @@ mod tests {
|
||||||
bank: &Arc<Bank>,
|
bank: &Arc<Bank>,
|
||||||
tx: &Transaction,
|
tx: &Transaction,
|
||||||
subscriptions: &RpcSubscriptions,
|
subscriptions: &RpcSubscriptions,
|
||||||
) -> bank::Result<Arc<Bank>> {
|
) -> transaction::Result<Arc<Bank>> {
|
||||||
bank.process_transaction(tx)?;
|
bank.process_transaction(tx)?;
|
||||||
subscriptions.notify_subscribers(&bank);
|
subscriptions.notify_subscribers(&bank);
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,11 @@ use jsonrpc_core::futures::Future;
|
||||||
use jsonrpc_pubsub::typed::Sink;
|
use jsonrpc_pubsub::typed::Sink;
|
||||||
use jsonrpc_pubsub::SubscriptionId;
|
use jsonrpc_pubsub::SubscriptionId;
|
||||||
use solana_client::rpc_signature_status::RpcSignatureStatus;
|
use solana_client::rpc_signature_status::RpcSignatureStatus;
|
||||||
use solana_runtime::bank::{self, Bank};
|
use solana_runtime::bank::Bank;
|
||||||
use solana_sdk::account::Account;
|
use solana_sdk::account::Account;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signature::Signature;
|
use solana_sdk::signature::Signature;
|
||||||
use solana_sdk::transaction::TransactionError;
|
use solana_sdk::transaction::{self, TransactionError};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::RwLock;
|
use std::sync::RwLock;
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ impl RpcSubscriptions {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn check_signature(&self, signature: &Signature, bank_error: &bank::Result<()>) {
|
pub fn check_signature(&self, signature: &Signature, bank_error: &transaction::Result<()>) {
|
||||||
let status = match bank_error {
|
let status = match bank_error {
|
||||||
Ok(_) => RpcSignatureStatus::Confirmed,
|
Ok(_) => RpcSignatureStatus::Confirmed,
|
||||||
Err(TransactionError::AccountInUse) => RpcSignatureStatus::AccountInUse,
|
Err(TransactionError::AccountInUse) => RpcSignatureStatus::AccountInUse,
|
||||||
|
|
|
@ -47,7 +47,7 @@ mod tests {
|
||||||
use crate::id;
|
use crate::id;
|
||||||
use crate::vote_instruction::{self, Vote};
|
use crate::vote_instruction::{self, Vote};
|
||||||
use crate::vote_state::VoteState;
|
use crate::vote_state::VoteState;
|
||||||
use solana_runtime::bank::{Bank, Result};
|
use solana_runtime::bank::Bank;
|
||||||
use solana_runtime::bank_client::BankClient;
|
use solana_runtime::bank_client::BankClient;
|
||||||
use solana_sdk::genesis_block::GenesisBlock;
|
use solana_sdk::genesis_block::GenesisBlock;
|
||||||
use solana_sdk::instruction::InstructionError;
|
use solana_sdk::instruction::InstructionError;
|
||||||
|
@ -56,7 +56,7 @@ mod tests {
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||||
use solana_sdk::sync_client::SyncClient;
|
use solana_sdk::sync_client::SyncClient;
|
||||||
use solana_sdk::system_instruction;
|
use solana_sdk::system_instruction;
|
||||||
use solana_sdk::transaction::TransactionError;
|
use solana_sdk::transaction::{Result, TransactionError};
|
||||||
|
|
||||||
fn create_bank(lamports: u64) -> (Bank, Keypair) {
|
fn create_bank(lamports: u64) -> (Bank, Keypair) {
|
||||||
let (genesis_block, mint_keypair) = GenesisBlock::new(lamports);
|
let (genesis_block, mint_keypair) = GenesisBlock::new(lamports);
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
use crate::append_vec::AppendVec;
|
use crate::append_vec::AppendVec;
|
||||||
use crate::bank::Result;
|
|
||||||
use crate::message_processor::has_duplicates;
|
use crate::message_processor::has_duplicates;
|
||||||
use bincode::serialize;
|
use bincode::serialize;
|
||||||
use hashbrown::{HashMap, HashSet};
|
use hashbrown::{HashMap, HashSet};
|
||||||
|
@ -12,6 +11,7 @@ use solana_sdk::hash::{hash, Hash};
|
||||||
use solana_sdk::native_loader;
|
use solana_sdk::native_loader;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||||
|
use solana_sdk::transaction::Result;
|
||||||
use solana_sdk::transaction::{Transaction, TransactionError};
|
use solana_sdk::transaction::{Transaction, TransactionError};
|
||||||
use solana_vote_api;
|
use solana_vote_api;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
|
@ -22,10 +22,9 @@ use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signature::{Keypair, Signature};
|
use solana_sdk::signature::{Keypair, Signature};
|
||||||
use solana_sdk::system_transaction;
|
use solana_sdk::system_transaction;
|
||||||
use solana_sdk::timing::{duration_as_ms, duration_as_us, MAX_RECENT_BLOCKHASHES};
|
use solana_sdk::timing::{duration_as_ms, duration_as_us, MAX_RECENT_BLOCKHASHES};
|
||||||
use solana_sdk::transaction::{Transaction, TransactionError};
|
use solana_sdk::transaction::{Result, Transaction, TransactionError};
|
||||||
use solana_vote_api::vote_instruction::Vote;
|
use solana_vote_api::vote_instruction::Vote;
|
||||||
use solana_vote_api::vote_state::{Lockout, VoteState};
|
use solana_vote_api::vote_state::{Lockout, VoteState};
|
||||||
use std::result;
|
|
||||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
@ -106,8 +105,6 @@ impl EpochSchedule {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type Result<T> = result::Result<T, TransactionError>;
|
|
||||||
|
|
||||||
type BankStatusCache = StatusCache<Result<()>>;
|
type BankStatusCache = StatusCache<Result<()>>;
|
||||||
|
|
||||||
/// Manager for the state of all accounts and programs after processing its entries.
|
/// Manager for the state of all accounts and programs after processing its entries.
|
||||||
|
|
|
@ -7,7 +7,7 @@ use solana_sdk::signature::Signature;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||||
use solana_sdk::sync_client::SyncClient;
|
use solana_sdk::sync_client::SyncClient;
|
||||||
use solana_sdk::system_instruction;
|
use solana_sdk::system_instruction;
|
||||||
use solana_sdk::transaction::Transaction;
|
use solana_sdk::transaction::{self, Transaction};
|
||||||
use solana_sdk::transport::Result;
|
use solana_sdk::transport::Result;
|
||||||
use std::io;
|
use std::io;
|
||||||
|
|
||||||
|
@ -79,6 +79,13 @@ impl<'a> SyncClient for BankClient<'a> {
|
||||||
fn get_balance(&self, pubkey: &Pubkey) -> Result<u64> {
|
fn get_balance(&self, pubkey: &Pubkey) -> Result<u64> {
|
||||||
Ok(self.bank.get_balance(pubkey))
|
Ok(self.bank.get_balance(pubkey))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_signature_status(
|
||||||
|
&self,
|
||||||
|
signature: &Signature,
|
||||||
|
) -> Result<Option<transaction::Result<()>>> {
|
||||||
|
Ok(self.bank.get_signature_status(signature))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> BankClient<'a> {
|
impl<'a> BankClient<'a> {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::bank::{Bank, Result};
|
use crate::bank::Bank;
|
||||||
use solana_sdk::transaction::Transaction;
|
use solana_sdk::transaction::{Result, Transaction};
|
||||||
|
|
||||||
// Represents the results of trying to lock a set of accounts
|
// Represents the results of trying to lock a set of accounts
|
||||||
pub struct LockedAccountsResults<'a, 'b> {
|
pub struct LockedAccountsResults<'a, 'b> {
|
||||||
|
|
|
@ -6,6 +6,7 @@ use crate::instruction::Instruction;
|
||||||
use crate::message::Message;
|
use crate::message::Message;
|
||||||
use crate::pubkey::Pubkey;
|
use crate::pubkey::Pubkey;
|
||||||
use crate::signature::{Keypair, Signature};
|
use crate::signature::{Keypair, Signature};
|
||||||
|
use crate::transaction;
|
||||||
use crate::transport::Result;
|
use crate::transport::Result;
|
||||||
|
|
||||||
pub trait SyncClient {
|
pub trait SyncClient {
|
||||||
|
@ -26,4 +27,10 @@ pub trait SyncClient {
|
||||||
|
|
||||||
/// Get account balance or 0 if not found.
|
/// Get account balance or 0 if not found.
|
||||||
fn get_balance(&self, pubkey: &Pubkey) -> Result<u64>;
|
fn get_balance(&self, pubkey: &Pubkey) -> Result<u64>;
|
||||||
|
|
||||||
|
/// Get signature status.
|
||||||
|
fn get_signature_status(
|
||||||
|
&self,
|
||||||
|
signature: &Signature,
|
||||||
|
) -> Result<Option<transaction::Result<()>>>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ use crate::pubkey::Pubkey;
|
||||||
use crate::short_vec;
|
use crate::short_vec;
|
||||||
use crate::signature::{KeypairUtil, Signature};
|
use crate::signature::{KeypairUtil, Signature};
|
||||||
use bincode::serialize;
|
use bincode::serialize;
|
||||||
|
use std::result;
|
||||||
|
|
||||||
/// Reasons a transaction might be rejected.
|
/// Reasons a transaction might be rejected.
|
||||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||||
|
@ -46,6 +47,8 @@ pub enum TransactionError {
|
||||||
InvalidAccountIndex,
|
InvalidAccountIndex,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Result<T> = result::Result<T, TransactionError>;
|
||||||
|
|
||||||
/// An atomic transaction
|
/// An atomic transaction
|
||||||
#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
|
||||||
pub struct Transaction {
|
pub struct Transaction {
|
||||||
|
|
Loading…
Reference in New Issue