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

* Update comment

* Chunk signature status checks to handle distributions greater than 256 tx
This commit is contained in:
Tyera Eulberg 2020-11-30 19:55:18 -07:00 committed by GitHub
parent 4a4a4d8e49
commit c59e088142
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 5 deletions

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,

View File

@ -186,5 +186,5 @@ mod tests {
// async fn test_process_spl_token_transfer_amount_allocations()
// async fn test_check_spl_token_balances()
//
// TODO: link to v1.4 tests
// https://github.com/solana-labs/solana/blob/5511d52c6284013a24ced10966d11d8f4585799e/tokens/src/spl_token.rs#L490-L685
}