Building on the design space introduced by Bedrock, we propose decomposing BFT protocols into distinct elements and dynamically selecting the optimal configuration (e.g., values, implementations, techniques) for each element (fine-grained actions) at runtime, rather than treating protocols as black boxes (coarse-grained actions). At a high level, a consensus node’s lifecycle in a leader-based BFT protocol consists of five stages: ordering, execution, view change, checkpointing, and recovery. The ordering stage establishes a unique sequence for requests, while the execution stage applies these requests to the replicated state machine. The view-change stage involves replacing the current leader, checkpointing serves to garbage-collect data and help trailing replicas catch up, and the recovery stage restores replicas from faults. This project aims to enable the system to choose between various mechanisms for each stage of leader-based BFT protocols. Once we identify the optimal BFT protocol configuration, the next challenge involves developing the switching routine between BFT protocol configurations.