A major evolution to ABCI, allows every step of consensus to be programmable, creating a tighter connection between the app layer & consensus layer.
ABCI is the interface that sits between an application and consensus, its main role is to execute blocks finalized by consensus. With ABCI, the app only interacted with consensus at decision time and gave it little control on what transactions to pick out of mempool. ABCI++ adds programmability to every step of consensus, allowing applications to reorder, modify, drop, delay or add transactions. This opens up the possibility for numerous improvements, some examples such as:
- Vote Extensions: validators must agree on some data before block is produced. For example, agreeing on some off-chain price from an oracle
- Optimistic block production: start processing blocks in parallel with prevote and precommit stages of consensus -> speeds up block times
- Threshold encryption: encrypt transaction details sent to block proposers to prevent transaction reordering (MEV)
- Parallel execution: process transactions in parallel instead of sequentially