For background, see tendermint/tendermint#2175 (comment) including that whole issue, not just the comment.
We must be careful, since proposing a bad block might not mean that a proposer (node) is malicious. In fact, our current code for CheckTx allows a double-spending transaction to get into the mempool, if it came after the last block, and once a transaction gets into the mempool, it soon ends up in a proposed block.
The reason is that our current code for CheckTx assumes the "state of the world" is the state at the end of the last block, not including transactions that have been added to the mempool since then. That will have to be changed if we want to have any hope of detecting truly malicious block-proposers.
For background, see tendermint/tendermint#2175 (comment) including that whole issue, not just the comment.
We must be careful, since proposing a bad block might not mean that a proposer (node) is malicious. In fact, our current code for CheckTx allows a double-spending transaction to get into the mempool, if it came after the last block, and once a transaction gets into the mempool, it soon ends up in a proposed block.
The reason is that our current code for CheckTx assumes the "state of the world" is the state at the end of the last block, not including transactions that have been added to the mempool since then. That will have to be changed if we want to have any hope of detecting truly malicious block-proposers.