Finality discussion


Finality defines a point in time when a blockchain transaction is considered final an can no longer be reversed. In EOS, and current FIO, it is achieved implicitly once 2/3 + 1 BPs sign it. Since every BP produces for 6 seconds, finality is achieved after 180 seconds. The implications of finality for FIO are primarily around how quickly a FIO Request can be confidently shown inside a FIO-enabled wallet. 180 seconds is high enough to create user experience friction for e-commerce implementations and as a result we would likely have to make pre-final data available to users.

A discussion on 10/10/2019 identified a potential solution to accelerate finality to about 4.5 sec.

Contemplated Solution

  • Increase block time from 0.5s to 3s. If we can achieve finality in 4.5 seconds there really is no much need for FIO to support pre-finality transactions. Those could still be available in transaction queue for those who really want it. BPS would rotate every 3 seconds (vs. 6 seconds today), so implicit finality (achieved when 2/3 + 1 BPS produced blocks on top of transaction) would be reached in half the time.

  • Implement BFT messaging. Every block would be shared with with all BPs immediately after creation. These PBFT proofs would be stored in cache (not on chain) and discarded once implicit finality is reached. A node would consider transaction is final, once they received once 2/3 + 1 proofs.

  • APIs would be modified to only return data that is final.

It is estimated that with this approach finality can be achieved in 4.5 seconds (3 - 6 seconds range).

BOS chain, for of EOS, has supposedly implemented something similar.

EOSIO might have started building some functionality for BTF messages.

As next steps we should evaluate the technical complexity of implementing the Contemplated Solution and based on hat assessment decide if it's going into Mainnet.


Reference Reading