Generalize send_and_confirm_transactions_with_spinner()
This commit is contained in:
@ -35,7 +35,6 @@ use solana_sdk::{
|
|||||||
account_utils::StateMut,
|
account_utils::StateMut,
|
||||||
bpf_loader, bpf_loader_deprecated,
|
bpf_loader, bpf_loader_deprecated,
|
||||||
bpf_loader_upgradeable::{self, UpgradeableLoaderState},
|
bpf_loader_upgradeable::{self, UpgradeableLoaderState},
|
||||||
commitment_config::CommitmentConfig,
|
|
||||||
instruction::Instruction,
|
instruction::Instruction,
|
||||||
instruction::InstructionError,
|
instruction::InstructionError,
|
||||||
loader_instruction,
|
loader_instruction,
|
||||||
@ -2095,22 +2094,11 @@ fn send_deploy_messages(
|
|||||||
if let Some(write_messages) = write_messages {
|
if let Some(write_messages) = write_messages {
|
||||||
if let Some(write_signer) = write_signer {
|
if let Some(write_signer) = write_signer {
|
||||||
trace!("Writing program data");
|
trace!("Writing program data");
|
||||||
let (blockhash, last_valid_block_height) =
|
send_and_confirm_messages_with_spinner(
|
||||||
rpc_client.get_latest_blockhash_with_commitment(config.commitment)?;
|
|
||||||
let mut write_transactions = vec![];
|
|
||||||
for message in write_messages.iter() {
|
|
||||||
let mut tx = Transaction::new_unsigned(message.clone());
|
|
||||||
tx.try_sign(&[payer_signer, write_signer], blockhash)?;
|
|
||||||
write_transactions.push(tx);
|
|
||||||
}
|
|
||||||
|
|
||||||
send_and_confirm_transactions_with_spinner(
|
|
||||||
rpc_client.clone(),
|
rpc_client.clone(),
|
||||||
&config.websocket_url,
|
&config.websocket_url,
|
||||||
write_transactions,
|
write_messages,
|
||||||
&[payer_signer, write_signer],
|
&[payer_signer, write_signer],
|
||||||
config.commitment,
|
|
||||||
last_valid_block_height,
|
|
||||||
)
|
)
|
||||||
.map_err(|err| format!("Data writes to account failed: {}", err))?;
|
.map_err(|err| format!("Data writes to account failed: {}", err))?;
|
||||||
}
|
}
|
||||||
@ -2174,17 +2162,28 @@ fn report_ephemeral_mnemonic(words: usize, mnemonic: bip39::Mnemonic) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_and_confirm_transactions_with_spinner<T: Signers>(
|
fn send_and_confirm_messages_with_spinner<T: Signers>(
|
||||||
rpc_client: Arc<RpcClient>,
|
rpc_client: Arc<RpcClient>,
|
||||||
websocket_url: &str,
|
websocket_url: &str,
|
||||||
mut transactions: Vec<Transaction>,
|
messages: &[Message],
|
||||||
signer_keys: &T,
|
signers: &T,
|
||||||
commitment: CommitmentConfig,
|
|
||||||
mut last_valid_block_height: u64,
|
|
||||||
) -> Result<(), Box<dyn error::Error>> {
|
) -> Result<(), Box<dyn error::Error>> {
|
||||||
|
let commitment = rpc_client.commitment();
|
||||||
|
|
||||||
let progress_bar = new_spinner_progress_bar();
|
let progress_bar = new_spinner_progress_bar();
|
||||||
|
let send_transaction_interval = Duration::from_millis(10); /* ~100 TPS */
|
||||||
let mut send_retries = 5;
|
let mut send_retries = 5;
|
||||||
|
|
||||||
|
let (blockhash, mut last_valid_block_height) =
|
||||||
|
rpc_client.get_latest_blockhash_with_commitment(commitment)?;
|
||||||
|
|
||||||
|
let mut transactions = vec![];
|
||||||
|
for message in messages {
|
||||||
|
let mut transaction = Transaction::new_unsigned(message.clone());
|
||||||
|
transaction.try_sign(signers, blockhash)?;
|
||||||
|
transactions.push(transaction);
|
||||||
|
}
|
||||||
|
|
||||||
progress_bar.set_message("Finding leader nodes...");
|
progress_bar.set_message("Finding leader nodes...");
|
||||||
let tpu_client = TpuClient::new(
|
let tpu_client = TpuClient::new(
|
||||||
rpc_client.clone(),
|
rpc_client.clone(),
|
||||||
@ -2214,8 +2213,7 @@ fn send_and_confirm_transactions_with_spinner<T: Signers>(
|
|||||||
num_transactions
|
num_transactions
|
||||||
));
|
));
|
||||||
|
|
||||||
// Throttle transactions to about 100 TPS
|
sleep(send_transaction_interval);
|
||||||
sleep(Duration::from_millis(10));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Collect statuses for all the transactions, drop those that are confirmed
|
// Collect statuses for all the transactions, drop those that are confirmed
|
||||||
@ -2293,7 +2291,7 @@ fn send_and_confirm_transactions_with_spinner<T: Signers>(
|
|||||||
last_valid_block_height = new_last_valid_block_height;
|
last_valid_block_height = new_last_valid_block_height;
|
||||||
transactions = vec![];
|
transactions = vec![];
|
||||||
for (_, mut transaction) in pending_transactions.into_iter() {
|
for (_, mut transaction) in pending_transactions.into_iter() {
|
||||||
transaction.try_sign(signer_keys, blockhash)?;
|
transaction.try_sign(signers, blockhash)?;
|
||||||
transactions.push(transaction);
|
transactions.push(transaction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user