Limitation (or Feature) on Tendermint

After carefully study Tendermint, I found a couple of limitations based on my understanding:

  • When creating a new block, TM DOES NOT check the validity of transactions (although the transaction is pre-checked by CheckTx ABCI). This means that even the txs are valid individually, but can be invalid after running them sequentially (e.g., two tx with the same nonce).

A further issue is how TM imposes resource limits on a block such as a block size limit, gas limit or other resource limits (CPU, BW, etc) without executing the txs.

Any improvement or thoughts? Happy to discuss this.

BTW: CheckTx response has gasWanted and gasUsed fields, which may help address resource limit issue.

However, current mempool implementation of TM doesn’t consider actual gas used:

This means that an attacker can send tx with large gasWanted, but with very small gasUsed, and then essentially ddos the network.