Fail simulation if transaction contains duplicate accounts (#18304) (#18334)

(cherry picked from commit b08f8bd1b0)

Co-authored-by: Justin Starry <justin@solana.com>
This commit is contained in:
mergify[bot]
2021-06-30 21:35:56 +00:00
committed by GitHub
parent 6e27360fbc
commit 4ff482cd47

View File

@@ -2616,8 +2616,17 @@ impl Bank {
&'a self,
tx: &'b Transaction,
) -> TransactionBatch<'a, 'b> {
let check_transaction = |tx: &Transaction| -> Result<()> {
tx.sanitize().map_err(TransactionError::from)?;
if Accounts::has_duplicates(&tx.message.account_keys) {
Err(TransactionError::AccountLoadedTwice)
} else {
Ok(())
}
};
let mut batch = TransactionBatch::new(
vec![tx.sanitize().map_err(|e| e.into())],
vec![check_transaction(tx)],
self,
Cow::Owned(vec![HashedTransaction::from(tx)]),
);