Deprecate commitment variants (#14797)
* Deprecate commitment variants * Add new CommitmentConfig builders * Add helpers to avoid allowing deprecated variants * Remove deprecated transaction-status code * Include new commitment variants in runtime commitment; allow deprecated as long as old variants persist * Remove deprecated banks code * Remove deprecated variants in core; allow deprecated in rpc/rpc-subscriptions for now * Heavier hand with rpc/rpc-subscription commitment * Remove deprecated variants from local-cluster * Remove deprecated variants from various tools * Remove deprecated variants from validator * Update docs * Remove deprecated client code * Add new variants to cli; remove deprecated variants as possible * Don't send new commitment variants to old clusters * Retain deprecated method in test_validator_saves_tower * Fix clippy matches! suggestion for BPF solana-sdk legacy compile test * Refactor node version check to handle commitment variants and transaction encoding * Hide deprecated variants from cli help * Add cli App comments
This commit is contained in:
@@ -20,7 +20,7 @@ use solana_account_decoder::parse_token::UiTokenAmount;
|
||||
pub use solana_runtime::bank::RewardType;
|
||||
use solana_sdk::{
|
||||
clock::{Slot, UnixTimestamp},
|
||||
commitment_config::{CommitmentConfig, CommitmentLevel},
|
||||
commitment_config::CommitmentConfig,
|
||||
deserialize_utils::default_on_eof,
|
||||
instruction::CompiledInstruction,
|
||||
message::{Message, MessageHeader},
|
||||
@@ -281,22 +281,18 @@ pub struct TransactionStatus {
|
||||
|
||||
impl TransactionStatus {
|
||||
pub fn satisfies_commitment(&self, commitment_config: CommitmentConfig) -> bool {
|
||||
match commitment_config.commitment {
|
||||
CommitmentLevel::Max | CommitmentLevel::Root => self.confirmations.is_none(),
|
||||
CommitmentLevel::SingleGossip => {
|
||||
if let Some(status) = &self.confirmation_status {
|
||||
*status != TransactionConfirmationStatus::Processed
|
||||
} else {
|
||||
// These fallback cases handle TransactionStatus RPC responses from older software
|
||||
self.confirmations.is_some() && self.confirmations.unwrap() > 1
|
||||
|| self.confirmations.is_none()
|
||||
}
|
||||
if commitment_config.is_finalized() {
|
||||
self.confirmations.is_none()
|
||||
} else if commitment_config.is_confirmed() {
|
||||
if let Some(status) = &self.confirmation_status {
|
||||
*status != TransactionConfirmationStatus::Processed
|
||||
} else {
|
||||
// These fallback cases handle TransactionStatus RPC responses from older software
|
||||
self.confirmations.is_some() && self.confirmations.unwrap() > 1
|
||||
|| self.confirmations.is_none()
|
||||
}
|
||||
CommitmentLevel::Single => match self.confirmations {
|
||||
Some(confirmations) => confirmations >= 1,
|
||||
None => true,
|
||||
},
|
||||
CommitmentLevel::Recent => true,
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -620,11 +616,9 @@ mod test {
|
||||
confirmation_status: Some(TransactionConfirmationStatus::Finalized),
|
||||
};
|
||||
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::default()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::root()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::single()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::single_gossip()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::recent()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::finalized()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::confirmed()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::processed()));
|
||||
|
||||
let status = TransactionStatus {
|
||||
slot: 0,
|
||||
@@ -634,11 +628,9 @@ mod test {
|
||||
confirmation_status: Some(TransactionConfirmationStatus::Confirmed),
|
||||
};
|
||||
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::default()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::root()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::single()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::single_gossip()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::recent()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::finalized()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::confirmed()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::processed()));
|
||||
|
||||
let status = TransactionStatus {
|
||||
slot: 0,
|
||||
@@ -648,11 +640,9 @@ mod test {
|
||||
confirmation_status: Some(TransactionConfirmationStatus::Processed),
|
||||
};
|
||||
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::default()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::root()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::single()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::single_gossip()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::recent()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::finalized()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::confirmed()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::processed()));
|
||||
|
||||
let status = TransactionStatus {
|
||||
slot: 0,
|
||||
@@ -662,11 +652,9 @@ mod test {
|
||||
confirmation_status: None,
|
||||
};
|
||||
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::default()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::root()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::single()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::single_gossip()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::recent()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::finalized()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::confirmed()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::processed()));
|
||||
|
||||
// Test single_gossip fallback cases
|
||||
let status = TransactionStatus {
|
||||
@@ -676,7 +664,7 @@ mod test {
|
||||
err: None,
|
||||
confirmation_status: None,
|
||||
};
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::single_gossip()));
|
||||
assert!(!status.satisfies_commitment(CommitmentConfig::confirmed()));
|
||||
|
||||
let status = TransactionStatus {
|
||||
slot: 0,
|
||||
@@ -685,7 +673,7 @@ mod test {
|
||||
err: None,
|
||||
confirmation_status: None,
|
||||
};
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::single_gossip()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::confirmed()));
|
||||
|
||||
let status = TransactionStatus {
|
||||
slot: 0,
|
||||
@@ -694,6 +682,6 @@ mod test {
|
||||
err: None,
|
||||
confirmation_status: None,
|
||||
};
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::single_gossip()));
|
||||
assert!(status.satisfies_commitment(CommitmentConfig::confirmed()));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user