We're happy to announce that Libra protocol now provides initial support for reconfiguration, which is the ability to change any configuration parameter on the blockchain without restarting any validators and while preserving Libra Byzantine Fault Tolerance (LibraBFT) safety and liveness guarantees. Reconfiguration has been successfully executed several times on testnet to add and remove validators from the validator set. We expect that reconfiguration will be used to add new validators to pre-mainnet. In the future, reconfiguration can be leveraged to change other configuration parameters such as upgrading the consensus protocol or the Move language specifications.
How it works
A set of configurations — for example, a consensus protocol and a set of validators — is used to create a consensus instance. The first consensus instance is generated after the reconfiguration transaction in the genesis block. Once the first consensus instance is active, transactions are proposed and committed by this consensus instance. In the future, a reconfiguration transaction may be committed by the current consensus instance that creates a new consensus instance (potentially with a different consensus protocol and/or a different set of validators) to continue the chain of committed transactions going forward.
We were able to demonstrate the low cost of reconfiguration from the results of early experiments. The data shows that reconfiguration finished within a few seconds, and the performance cost was minor.
As depicted below, removing a node has no impact on a steady transaction rate. Adding a node temporarily slows the transaction rate for a brief period while all live nodes are trying to help the added node replay the transaction that it missed after being removed from the test Libra Blockchain. The transaction rate spike from the added node illustrates the catch-up rate for the missing transactions.
We will share a detailed reconfiguration report in the near future. Additionally, we are working on supporting more configuration parameters with reconfiguration.