Skip to content

Limit transaction validation to stateless checks [#3208]

Ethan Reesor requested to merge 3208-stateless-transaction-validation into main

Closes #3208 (closed). Updates validation of transactions to only include stateless checks to verify the transaction is well-formed and exclude stateful checks of the accounts involved.

As long as the transaction is well-formed, it should be let into the block. There are many cases where we cannot safely evaluate the transaction during validation. If we are evaluating a synthetic transaction, we must not reject it as long as it is properly formed and has a proof, since rejecting it otherwise would cause problems for sequencing. If Alice initiates a transaction for Bob, Bob may not be on this partition so we cannot evaluate the transaction. And even in cases where we could safely evaluate the transaction, doing so would cause inconsistencies: the authority a user uses to initiate a transaction and which partitions the accounts are on would become a factor in whether or not a transaction makes it into the block. Besides that, there's the argument FairyProof made that the previous approach (rejecting the transaction due to things like an insufficient balance) could be considered a replay attack vector. Thus, as long as the transaction is well-formed, signed, and the signer can be charged something, we will let the transaction into the block.

Changelog: fix

Merge request reports