We use PoW as the block DoS guard, and fees for txs. They are validated in the context of a next block (the actual block may have an incompatible context, but almost never, and we revalidate as necessary). We don’t have a mempool, we have a tx pool (unconfirmed txs, either from weak (reorged or disgorged) blocks or as unconfirmed txs relay). The store is append only, once we write a tx it never changes and they are all stored I. The same manner/place.