github.com/koko1123/flow-go-1@v0.29.6/model/flow/quorum_certificate.go (about)

     1  package flow
     2  
     3  // QuorumCertificate represents a quorum certificate for a block proposal as defined in the HotStuff algorithm.
     4  // A quorum certificate is a collection of votes for a particular block proposal. Valid quorum certificates contain
     5  // signatures from a super-majority of consensus committee members.
     6  type QuorumCertificate struct {
     7  	View    uint64
     8  	BlockID Identifier
     9  
    10  	// SignerIndices encodes the HotStuff participants whose vote is included in this QC.
    11  	// For `n` authorized consensus nodes, `SignerIndices` is an n-bit vector (padded with tailing
    12  	// zeros to reach full bytes). We list the nodes in their canonical order, as defined by the protocol.
    13  	SignerIndices []byte
    14  
    15  	// For consensus cluster, the SigData is a serialization of the following fields
    16  	// - SigType []byte, bit-vector indicating the type of sig produced by the signer.
    17  	// - AggregatedStakingSig []byte
    18  	// - AggregatedRandomBeaconSig []byte
    19  	// - ReconstructedRandomBeaconSig crypto.Signature
    20  	// For collector cluster HotStuff, SigData is simply the aggregated staking signatures
    21  	// from all signers.
    22  	SigData []byte
    23  }
    24  
    25  // QuorumCertificateWithSignerIDs is a QuorumCertificate, where the signing nodes are
    26  // identified via their `flow.Identifier`s instead of indices. Working with IDs as opposed to
    27  // indices is less efficient, but simpler, because we don't require a canonical node order.
    28  // It is used for bootstrapping new Epochs, because the FlowEpoch smart contract has no
    29  // notion of node ordering.
    30  type QuorumCertificateWithSignerIDs struct {
    31  	View      uint64
    32  	BlockID   Identifier
    33  	SignerIDs []Identifier
    34  	SigData   []byte
    35  }