The mempool maintains a list of potentially valid transactions, both to broadcast to other nodes, as well as to provide to the consensus reactor when it is selected as the block proposer.
There are two sides to the mempool state:
External functionality is exposed via network interfaces to potentially untrusted actors.
Internal functionality is exposed via method calls to other code compiled into the tendermint binary.
What does it provide the consensus reactor? What guarantees does it need from the ABCI app? (talk about interleaving processes in concurrency)
Talk about the LRU cache to make sure we don't process any tx that we have seen before