solana-tokens: enable confirmation of many transactions (#13876) (#13881)

* Update comment

* Chunk signature status checks to handle distributions greater than 256 tx

(cherry picked from commit c59e088142)

Co-authored-by: Tyera Eulberg <teulberg@gmail.com>
This commit is contained in:
mergify[bot]
2020-12-01 04:15:22 +00:00
committed by GitHub
parent 7890957250
commit 97c1c944fb

View File

@ -18,6 +18,7 @@ use solana_client::{
client_error::{ClientError, Result as ClientResult},
rpc_client::RpcClient,
rpc_config::RpcSendTransactionConfig,
rpc_request::MAX_GET_SIGNATURE_STATUSES_QUERY_ITEMS,
};
use solana_sdk::{
commitment_config::CommitmentConfig,
@ -566,15 +567,23 @@ fn update_finalized_transactions(
.map(|(tx, _slot)| tx.signatures[0])
.filter(|sig| *sig != Signature::default()) // Filter out dry-run signatures
.collect();
let transaction_statuses = client
.get_signature_statuses(&unconfirmed_signatures)?
.value;
let mut statuses = vec![];
for unconfirmed_signatures_chunk in
unconfirmed_signatures.chunks(MAX_GET_SIGNATURE_STATUSES_QUERY_ITEMS - 1)
{
statuses.extend(
client
.get_signature_statuses(&unconfirmed_signatures_chunk)?
.value
.into_iter(),
);
}
let root_slot = client.get_slot()?;
let mut confirmations = None;
for ((transaction, last_valid_slot), opt_transaction_status) in unconfirmed_transactions
.into_iter()
.zip(transaction_statuses.into_iter())
.zip(statuses.into_iter())
{
match db::update_finalized_transaction(
db,