solana decode-transaction
no longer panics on unsanitary transactions
This commit is contained in:
@ -25,6 +25,7 @@ use solana_sdk::{
|
|||||||
instruction::CompiledInstruction,
|
instruction::CompiledInstruction,
|
||||||
message::{Message, MessageHeader},
|
message::{Message, MessageHeader},
|
||||||
pubkey::Pubkey,
|
pubkey::Pubkey,
|
||||||
|
sanitize::Sanitize,
|
||||||
signature::Signature,
|
signature::Signature,
|
||||||
transaction::{Result, Transaction, TransactionError},
|
transaction::{Result, Transaction, TransactionError},
|
||||||
};
|
};
|
||||||
@ -557,7 +558,7 @@ impl EncodedTransaction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn decode(&self) -> Option<Transaction> {
|
pub fn decode(&self) -> Option<Transaction> {
|
||||||
match self {
|
let transaction: Option<Transaction> = match self {
|
||||||
EncodedTransaction::Json(_) => None,
|
EncodedTransaction::Json(_) => None,
|
||||||
EncodedTransaction::LegacyBinary(blob) => bs58::decode(blob)
|
EncodedTransaction::LegacyBinary(blob) => bs58::decode(blob)
|
||||||
.into_vec()
|
.into_vec()
|
||||||
@ -575,7 +576,8 @@ impl EncodedTransaction {
|
|||||||
| UiTransactionEncoding::Json
|
| UiTransactionEncoding::Json
|
||||||
| UiTransactionEncoding::JsonParsed => None,
|
| UiTransactionEncoding::JsonParsed => None,
|
||||||
},
|
},
|
||||||
}
|
};
|
||||||
|
transaction.filter(|transaction| transaction.sanitize().is_ok())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -594,6 +596,20 @@ pub struct TransactionByAddrInfo {
|
|||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_decode_invalid_transaction() {
|
||||||
|
// This transaction will not pass sanitization
|
||||||
|
let unsanitary_transaction = EncodedTransaction::Binary(
|
||||||
|
"ju9xZWuDBX4pRxX2oZkTjxU5jB4SSTgEGhX8bQ8PURNzyzqKMPPpNvWihx8zUe\
|
||||||
|
FfrbVNoAaEsNKZvGzAnTDy5bhNT9kt6KFCTBixpvrLCzg4M5UdFUQYrn1gdgjX\
|
||||||
|
pLHxcaShD81xBNaFDgnA2nkkdHnKtZt4hVSfKAmw3VRZbjrZ7L2fKZBx21CwsG\
|
||||||
|
hD6onjM2M3qZW5C8J6d1pj41MxKmZgPBSha3MyKkNLkAGFASK"
|
||||||
|
.to_string(),
|
||||||
|
UiTransactionEncoding::Base58,
|
||||||
|
);
|
||||||
|
assert!(unsanitary_transaction.decode().is_none());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_satisfies_commitment() {
|
fn test_satisfies_commitment() {
|
||||||
let status = TransactionStatus {
|
let status = TransactionStatus {
|
||||||
|
Reference in New Issue
Block a user