From 97c1c944fbc12330cae0ae1ac607bdfa03fbe261 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 1 Dec 2020 04:15:22 +0000 Subject: [PATCH] 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 c59e088142adf77706f4a9c584080b06b4d4b859) Co-authored-by: Tyera Eulberg --- tokens/src/commands.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/tokens/src/commands.rs b/tokens/src/commands.rs index dd73e34f8b..0b809c231e 100644 --- a/tokens/src/commands.rs +++ b/tokens/src/commands.rs @@ -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,