aboutsummaryrefslogblamecommitdiff
path: root/include/hotstuff/liveness.h
blob: c87a24229709eccf5f3e043ff76d2d3dfc62f8fc (plain) (tree)
1
2
3
4
5
6
7
8


                            
                            



                               


                     

                                                

                      

                                   

                                                                      
                                                         
                                                                             

                                                                          
                                 
                                    
                                         


                                                                               
                                                   







                                                                               



                                                                           























                                                                         


                                                                              
                                          



                                        
              




                                              

                                                                   














                                                            



                                           


                               



                                       













                                                               
                                                                      




                                                             
                                            



                                                  




                                              



                                       






                                                 






































                                                                               
                                                              




                                       





                                            











                                                    

                                                                             




                                                          
                                                  


                                            

                                                            
                                                            
                 
             
                                                       
                                     
                             










                                                                       
                                     







                                                         

                                                                






                                               









                                                                    

                                                                 




                                                    

                                                                              


                                                           







                                                                    


                                              
                                                







                                                     
                                                           





                                                    


                        
                                                













                                                              
                                                 


                                 
                                



                                                     

                                                                                




                                           
                       






                                       
                             


                                   

                                         


                                 
                                                                 



                                     

                                                             




                                 


      
#ifndef _HOTSTUFF_LIVENESS_H
#define _HOTSTUFF_LIVENESS_H

#include "salticidae/util.h"
#include "hotstuff/consensus.h"

namespace hotstuff {

using salticidae::_1;
using salticidae::_2;

/** Abstraction for liveness gadget (oracle). */
class PaceMaker {
    protected:
    HotStuffCore *hsc;
    public:
    virtual ~PaceMaker() = default;
    /** Initialize the PaceMaker. A derived class should also call the
     * default implementation to set `hsc`. */
    virtual void init(HotStuffCore *_hsc) { hsc = _hsc; }
    /** Get a promise resolved when the pace maker thinks it is a *good* time
     * to issue new commands. When promise is resolved, the replica should
     * propose the command. */
    virtual promise_t beat() = 0;
    /** Get the current proposer. */
    virtual ReplicaID get_proposer() = 0;
    /** Select the parent blocks for a new block.
     * @return Parent blocks. The block at index 0 is the direct parent, while
     * the others are uncles/aunts. The returned vector should be non-empty. */