The Tendermint and ABCI protocol allow invalid transactions in a block. The invalid transaction may pass CheckTx, but when it is included in a block and executed with other transactions, the transaction becomes invalid.
E.g., suppose an account A has 100 Token and the owner creates two transactions:
Tx0: transfer 99 Token to B with 1 Token as tx fee
Tx1: transfer 99 Token to C with 1 Token as tx fee
Both Tx0 and Tx1 could pass CheckTx and they are valid. However, if both of them are included in the same block, the later Tx will be invalid due to insufficient funds.
So here is the attack: the attacker creates a list of Tx0, Tx1, …, TxN with sufficient high tx fee, where each of them is valid, but will be invalid if any tx in the list is executed in the blockchain. The attacker submits all Txs to the network, and if the validator packs all of them in a block, then only one is valid, and the rest will be invalid. This could be repeated for each block, and thus the attack essentially congests the network with the fee of one tx per block while excluding other transactions with a lower fee to be included in the network.
Could anyone tell me whether it is true, or if so any way to prevent it?