Documentation ¶
Index ¶
- Constants
- Variables
- func MessageType(msg interface{}) uint64
- func WalMessageType(msg interface{}) uint64
- type BlockQuorumCert
- type CbftStatusData
- type ChainState
- type ConfirmedViewChange
- type GetBlockQuorumCert
- type GetLatestStatus
- type GetPrepareBlock
- type GetPrepareVote
- type GetQCBlockList
- type GetViewChange
- type LatestStatus
- type Ping
- type Pong
- type PrepareBlock
- func (pb *PrepareBlock) BHash() common.Hash
- func (pb *PrepareBlock) BlockNum() uint64
- func (pb *PrepareBlock) CannibalizeBytes() ([]byte, error)
- func (pb *PrepareBlock) EpochNum() uint64
- func (pb *PrepareBlock) MsgHash() common.Hash
- func (pb *PrepareBlock) NodeIndex() uint32
- func (pb *PrepareBlock) SetSign(sign []byte)
- func (pb *PrepareBlock) Sign() []byte
- func (pb *PrepareBlock) String() string
- func (pb *PrepareBlock) ViewNum() uint64
- type PrepareBlockHash
- type PrepareVote
- func (pv *PrepareVote) BHash() common.Hash
- func (pv *PrepareVote) BlockNum() uint64
- func (pv *PrepareVote) CannibalizeBytes() ([]byte, error)
- func (pv *PrepareVote) EpochNum() uint64
- func (pv *PrepareVote) EqualState(vote *PrepareVote) bool
- func (pv *PrepareVote) MsgHash() common.Hash
- func (pv *PrepareVote) NodeIndex() uint32
- func (pv *PrepareVote) SetSign(sign []byte)
- func (pv *PrepareVote) Sign() []byte
- func (pv *PrepareVote) String() string
- func (pv *PrepareVote) ViewNum() uint64
- type PrepareVotes
- type QCBlockList
- type SendPrepareBlock
- type SendPrepareVote
- type SendViewChange
- type State
- type ViewChange
- func (vc *ViewChange) BHash() common.Hash
- func (vc *ViewChange) BlockNum() uint64
- func (vc *ViewChange) CannibalizeBytes() ([]byte, error)
- func (vc *ViewChange) EpochNum() uint64
- func (vc *ViewChange) MsgHash() common.Hash
- func (vc *ViewChange) NodeIndex() uint32
- func (vc *ViewChange) SetSign(sign []byte)
- func (vc *ViewChange) Sign() []byte
- func (vc *ViewChange) String() string
- func (vc *ViewChange) ViewNum() uint64
- type ViewChangeQuorumCert
- type ViewChanges
- type WalMsg
Constants ¶
const ( CBFTStatusMsg = 0x00 // Protocol messages belonging to cbft PrepareBlockMsg = 0x01 PrepareVoteMsg = 0x02 ViewChangeMsg = 0x03 GetPrepareBlockMsg = 0x04 GetBlockQuorumCertMsg = 0x05 BlockQuorumCertMsg = 0x06 GetPrepareVoteMsg = 0x07 PrepareVotesMsg = 0x08 GetQCBlockListMsg = 0x09 QCBlockListMsg = 0x0a GetLatestStatusMsg = 0x0b LatestStatusMsg = 0x0c PrepareBlockHashMsg = 0x0d GetViewChangeMsg = 0x0e PingMsg = 0x0f PongMsg = 0x10 ViewChangeQuorumCertMsg = 0x11 ViewChangesMsg = 0x12 )
const ( ConfirmedViewChangeMsg = 0x01 SendViewChangeMsg = 0x02 SendPrepareBlockMsg = 0x03 SendPrepareVoteMsg = 0x04 )
const ( CommitState = 0x05 LockState = 0x06 QCState = 0x07 )
const CbftProtocolMaxMsgSize = 10 * 1024 * 1024
Maximum cap on the size of a cbft protocol message
const DefaultAvgLatency = 100
Default average delay time (in milliseconds).
Variables ¶
var ( WalMessages = []interface{}{ ConfirmedViewChange{}, SendViewChange{}, SendPrepareBlock{}, SendPrepareVote{}, } )
Functions ¶
func MessageType ¶
func MessageType(msg interface{}) uint64
A is used to convert specific message types according to the message body. The program is forcibly terminated if there is an unmatched message type and all types must exist in the match list.
func WalMessageType ¶
func WalMessageType(msg interface{}) uint64
Types ¶
type BlockQuorumCert ¶
type BlockQuorumCert struct { BlockQC *ctypes.QuorumCert `json:"qc"` // Block aggregation signature information. // contains filtered or unexported fields }
Aggregate signature response message, representing aggregated signature information for a block.
func (*BlockQuorumCert) BHash ¶
func (s *BlockQuorumCert) BHash() common.Hash
func (*BlockQuorumCert) MsgHash ¶
func (s *BlockQuorumCert) MsgHash() common.Hash
func (*BlockQuorumCert) String ¶
func (s *BlockQuorumCert) String() string
type CbftStatusData ¶
type CbftStatusData struct { ProtocolVersion uint32 `json:"protocolVersion"` // CBFT protocol version number. QCBn *big.Int `json:"qcBn"` // The highest local block number for collecting block signatures. QCBlock common.Hash `json:"qcBlock"` // The highest local block hash for collecting block signatures. LockBn *big.Int `json:"lockBn"` // Locally locked block number. LockBlock common.Hash `json:"lockBlock"` // Locally locked block hash. CmtBn *big.Int `json:"cmtBn"` // Locally submitted block number. CmtBlock common.Hash `json:"cmtBlock"` // Locally submitted block hash. // contains filtered or unexported fields }
CbftStatusData implement Message and including status information about peer.
func (*CbftStatusData) BHash ¶
func (s *CbftStatusData) BHash() common.Hash
func (*CbftStatusData) MsgHash ¶
func (s *CbftStatusData) MsgHash() common.Hash
func (*CbftStatusData) String ¶
func (s *CbftStatusData) String() string
type ChainState ¶
ChainState indicates the latest consensus state.
func (*ChainState) String ¶
func (cs *ChainState) String() string
func (*ChainState) ValidChainState ¶
func (cs *ChainState) ValidChainState() bool
type ConfirmedViewChange ¶
type ConfirmedViewChange struct { Epoch uint64 ViewNumber uint64 Block *types.Block QC *ctypes.QuorumCert `rlp:"nil"` ViewChangeQC *ctypes.ViewChangeQC `rlp:"nil"` }
ConfirmedViewChange indicates the latest confirmed view.
func (*ConfirmedViewChange) String ¶
func (c *ConfirmedViewChange) String() string
type GetBlockQuorumCert ¶
type GetBlockQuorumCert struct { BlockHash common.Hash `json:"blockHash"` // The hash of the block to be acquired. BlockNumber uint64 `json:"blockNumber"` // The number of the block to be acquired. // contains filtered or unexported fields }
GetBlockQuorumCert is the protocol message for obtaining an aggregated signature. todo: Need to determine the attribute field - ParentQC.
func (*GetBlockQuorumCert) BHash ¶
func (s *GetBlockQuorumCert) BHash() common.Hash
func (*GetBlockQuorumCert) MsgHash ¶
func (s *GetBlockQuorumCert) MsgHash() common.Hash
func (*GetBlockQuorumCert) String ¶
func (s *GetBlockQuorumCert) String() string
type GetLatestStatus ¶
type GetLatestStatus struct { BlockNumber uint64 `json:"blockNumber"` // QC Block height BlockHash common.Hash `json:"blockHash"` // QC block hash QuorumCert *ctypes.QuorumCert `json:"quorumCert" rlp:"nil"` // QC quorumCert LBlockNumber uint64 `json:"lBlockNumber"` // Locked block height LBlockHash common.Hash `json:"lBlockHash"` // Locked block hash LQuorumCert *ctypes.QuorumCert `json:"lQuorumCert" rlp:"nil"` // Locked quorumCert LogicType uint64 `json:"logicType"` // LogicType: 1 QCBn, 2 LockedBn, 3 CommitBn // contains filtered or unexported fields }
State synchronization for nodes.
func (*GetLatestStatus) BHash ¶
func (s *GetLatestStatus) BHash() common.Hash
func (*GetLatestStatus) MsgHash ¶
func (s *GetLatestStatus) MsgHash() common.Hash
func (*GetLatestStatus) String ¶
func (s *GetLatestStatus) String() string
type GetPrepareBlock ¶
type GetPrepareBlock struct { Epoch uint64 ViewNumber uint64 BlockIndex uint32 // contains filtered or unexported fields }
GetPrepareBlock is used to get the proposed block information.
func (*GetPrepareBlock) BHash ¶
func (s *GetPrepareBlock) BHash() common.Hash
func (*GetPrepareBlock) MsgHash ¶
func (s *GetPrepareBlock) MsgHash() common.Hash
func (*GetPrepareBlock) String ¶
func (s *GetPrepareBlock) String() string
type GetPrepareVote ¶
type GetPrepareVote struct { Epoch uint64 ViewNumber uint64 BlockIndex uint32 UnKnownSet *utils.BitArray // contains filtered or unexported fields }
Message used to get block voting.
func (*GetPrepareVote) BHash ¶
func (s *GetPrepareVote) BHash() common.Hash
func (*GetPrepareVote) MsgHash ¶
func (s *GetPrepareVote) MsgHash() common.Hash
func (*GetPrepareVote) String ¶
func (s *GetPrepareVote) String() string
type GetQCBlockList ¶
type GetQCBlockList struct { BlockHash common.Hash `json:"blockHash"` // The hash to the block. BlockNumber uint64 `json:"blockNumber"` // The number corresponding to the block. // contains filtered or unexported fields }
Used to get block information that has reached QC. Note: Get up to 3 blocks of data at a time.
func (*GetQCBlockList) BHash ¶
func (s *GetQCBlockList) BHash() common.Hash
func (*GetQCBlockList) MsgHash ¶
func (s *GetQCBlockList) MsgHash() common.Hash
func (*GetQCBlockList) String ¶
func (s *GetQCBlockList) String() string
type GetViewChange ¶
type GetViewChange struct { Epoch uint64 `json:"epoch"` ViewNumber uint64 `json:"viewNumber"` ViewChangeBits *utils.BitArray `json:"nodeIndexes"` // contains filtered or unexported fields }
Used to actively request to get viewChange.
func (*GetViewChange) BHash ¶
func (s *GetViewChange) BHash() common.Hash
func (*GetViewChange) MsgHash ¶
func (s *GetViewChange) MsgHash() common.Hash
func (*GetViewChange) String ¶
func (s *GetViewChange) String() string
type LatestStatus ¶
type LatestStatus struct { BlockNumber uint64 `json:"blockNumber"` // QC Block height BlockHash common.Hash `json:"blockHash"` // QC block hash QuorumCert *ctypes.QuorumCert `json:"quorumCert" rlp:"nil"` // QC quorumCert LBlockNumber uint64 `json:"lBlockNumber"` // Locked block height LBlockHash common.Hash `json:"lBlockHash"` // Locked block hash LQuorumCert *ctypes.QuorumCert `json:"lQuorumCert" rlp:"nil"` // Locked quorumCert LogicType uint64 `json:"logicType"` // LogicType: 1 QCBn, 2 LockedBn, 3 CommitBn // contains filtered or unexported fields }
Response message to GetLatestStatus request.
func (*LatestStatus) BHash ¶
func (s *LatestStatus) BHash() common.Hash
func (*LatestStatus) MsgHash ¶
func (s *LatestStatus) MsgHash() common.Hash
func (*LatestStatus) String ¶
func (s *LatestStatus) String() string
type PrepareBlock ¶
type PrepareBlock struct { Epoch uint64 `json:"epoch"` ViewNumber uint64 `json:"viewNumber"` Block *types.Block `json:"blockHash"` BlockIndex uint32 `json:"blockIndex"` // The block number of the current ViewNumber proposal, 0....10 ProposalIndex uint32 `json:"proposalIndex"` // Proposer's index. PrepareQC *ctypes.QuorumCert `json:"prepareQC" rlp:"nil"` // N-f aggregate signature ViewChangeQC *ctypes.ViewChangeQC `json:"viewchangeQC" rlp:"nil"` // viewChange aggregate signature Signature ctypes.Signature `json:"signature"` // PrepareBlock signature information // contains filtered or unexported fields }
Proposed block carrier.
func (*PrepareBlock) BHash ¶
func (pb *PrepareBlock) BHash() common.Hash
func (*PrepareBlock) BlockNum ¶
func (pb *PrepareBlock) BlockNum() uint64
func (*PrepareBlock) CannibalizeBytes ¶
func (pb *PrepareBlock) CannibalizeBytes() ([]byte, error)
func (*PrepareBlock) EpochNum ¶
func (pb *PrepareBlock) EpochNum() uint64
func (*PrepareBlock) MsgHash ¶
func (pb *PrepareBlock) MsgHash() common.Hash
func (*PrepareBlock) NodeIndex ¶
func (pb *PrepareBlock) NodeIndex() uint32
func (*PrepareBlock) SetSign ¶
func (pb *PrepareBlock) SetSign(sign []byte)
func (*PrepareBlock) Sign ¶
func (pb *PrepareBlock) Sign() []byte
func (*PrepareBlock) String ¶
func (pb *PrepareBlock) String() string
func (*PrepareBlock) ViewNum ¶
func (pb *PrepareBlock) ViewNum() uint64
type PrepareBlockHash ¶
type PrepareBlockHash struct { Epoch uint64 ViewNumber uint64 BlockIndex uint32 BlockHash common.Hash BlockNumber uint64 // contains filtered or unexported fields }
Represents the hash of the proposed block for secondary propagation.
func (*PrepareBlockHash) BHash ¶
func (s *PrepareBlockHash) BHash() common.Hash
func (*PrepareBlockHash) MsgHash ¶
func (s *PrepareBlockHash) MsgHash() common.Hash
func (*PrepareBlockHash) String ¶
func (s *PrepareBlockHash) String() string
type PrepareVote ¶
type PrepareVote struct { Epoch uint64 `json:"epoch"` ViewNumber uint64 `json:"viewNumber"` BlockHash common.Hash `json:"blockHash"` BlockNumber uint64 `json:"blockNumber"` BlockIndex uint32 `json:"blockIndex"` // The block number of the current ViewNumber proposal, 0....10 ValidatorIndex uint32 `json:"validatorIndex"` ParentQC *ctypes.QuorumCert `json:"parentQC" rlp:"nil"` Signature ctypes.Signature `json:"signature"` // contains filtered or unexported fields }
Removed the validator address, index. Mainly to ensure that the signature hash of the aggregate signature is consistent.
func (*PrepareVote) BHash ¶
func (pv *PrepareVote) BHash() common.Hash
func (*PrepareVote) BlockNum ¶
func (pv *PrepareVote) BlockNum() uint64
func (*PrepareVote) CannibalizeBytes ¶
func (pv *PrepareVote) CannibalizeBytes() ([]byte, error)
func (*PrepareVote) EpochNum ¶
func (pv *PrepareVote) EpochNum() uint64
func (*PrepareVote) EqualState ¶
func (pv *PrepareVote) EqualState(vote *PrepareVote) bool
func (*PrepareVote) MsgHash ¶
func (pv *PrepareVote) MsgHash() common.Hash
func (*PrepareVote) NodeIndex ¶
func (pv *PrepareVote) NodeIndex() uint32
func (*PrepareVote) SetSign ¶
func (pv *PrepareVote) SetSign(sign []byte)
func (*PrepareVote) Sign ¶
func (pv *PrepareVote) Sign() []byte
func (*PrepareVote) String ¶
func (pv *PrepareVote) String() string
func (*PrepareVote) ViewNum ¶
func (pv *PrepareVote) ViewNum() uint64
type PrepareVotes ¶
type PrepareVotes struct { Epoch uint64 ViewNumber uint64 BlockIndex uint32 Votes []*PrepareVote // Block voting set. // contains filtered or unexported fields }
Message used to respond to the number of block votes.
func (*PrepareVotes) BHash ¶
func (s *PrepareVotes) BHash() common.Hash
func (*PrepareVotes) MsgHash ¶
func (s *PrepareVotes) MsgHash() common.Hash
func (*PrepareVotes) String ¶
func (s *PrepareVotes) String() string
type QCBlockList ¶
type QCBlockList struct { QC []*ctypes.QuorumCert Blocks []*types.Block ForkedQC []*ctypes.QuorumCert ForkedBlocks []*types.Block // contains filtered or unexported fields }
CBFT synchronize blocks that have reached qc.
func (*QCBlockList) BHash ¶
func (s *QCBlockList) BHash() common.Hash
func (*QCBlockList) MsgHash ¶
func (s *QCBlockList) MsgHash() common.Hash
func (*QCBlockList) String ¶
func (s *QCBlockList) String() string
type SendPrepareBlock ¶
type SendPrepareBlock struct {
Prepare *PrepareBlock
}
SendPrepareBlock indicates the prepareBlock sent by the local node.
func (SendPrepareBlock) BlockNumber ¶
func (s SendPrepareBlock) BlockNumber() uint64
func (SendPrepareBlock) Epoch ¶
func (s SendPrepareBlock) Epoch() uint64
func (*SendPrepareBlock) String ¶
func (s *SendPrepareBlock) String() string
func (SendPrepareBlock) ViewNumber ¶
func (s SendPrepareBlock) ViewNumber() uint64
type SendPrepareVote ¶
type SendPrepareVote struct { Block *types.Block Vote *PrepareVote }
SendPrepareVote indicates the prepareVote sent by the local node.
func (SendPrepareVote) BlockNumber ¶
func (s SendPrepareVote) BlockNumber() uint64
func (SendPrepareVote) Epoch ¶
func (s SendPrepareVote) Epoch() uint64
func (*SendPrepareVote) String ¶
func (s *SendPrepareVote) String() string
func (SendPrepareVote) ViewNumber ¶
func (s SendPrepareVote) ViewNumber() uint64
type SendViewChange ¶
type SendViewChange struct {
ViewChange *ViewChange
}
SendViewChange indicates the viewChange sent by the local node.
func (SendViewChange) BlockNumber ¶
func (s SendViewChange) BlockNumber() uint64
func (SendViewChange) Epoch ¶
func (s SendViewChange) Epoch() uint64
func (*SendViewChange) String ¶
func (s *SendViewChange) String() string
func (SendViewChange) ViewNumber ¶
func (s SendViewChange) ViewNumber() uint64
type State ¶
type State struct { Block *types.Block QuorumCert *ctypes.QuorumCert }
func (*State) EqualState ¶
func (*State) ValidState ¶
type ViewChange ¶
type ViewChange struct { Epoch uint64 `json:"epoch"` ViewNumber uint64 `json:"viewNumber"` BlockHash common.Hash `json:"blockHash"` BlockNumber uint64 `json:"blockNumber"` ValidatorIndex uint32 `json:"validatorIndex"` PrepareQC *ctypes.QuorumCert `json:"prepareQC" rlp:"nil"` Signature ctypes.Signature `json:"signature"` // contains filtered or unexported fields }
ViewChange is message structure for view switching.
func (*ViewChange) BHash ¶
func (vc *ViewChange) BHash() common.Hash
func (*ViewChange) BlockNum ¶
func (vc *ViewChange) BlockNum() uint64
func (*ViewChange) CannibalizeBytes ¶
func (vc *ViewChange) CannibalizeBytes() ([]byte, error)
func (*ViewChange) EpochNum ¶
func (vc *ViewChange) EpochNum() uint64
func (*ViewChange) MsgHash ¶
func (vc *ViewChange) MsgHash() common.Hash
func (*ViewChange) NodeIndex ¶
func (vc *ViewChange) NodeIndex() uint32
func (*ViewChange) SetSign ¶
func (vc *ViewChange) SetSign(sign []byte)
func (*ViewChange) Sign ¶
func (vc *ViewChange) Sign() []byte
func (*ViewChange) String ¶
func (vc *ViewChange) String() string
func (*ViewChange) ViewNum ¶
func (vc *ViewChange) ViewNum() uint64
type ViewChangeQuorumCert ¶
type ViewChangeQuorumCert struct { ViewChangeQC *ctypes.ViewChangeQC `json:"viewchangeQC"` // viewChange aggregate signature HighestViewChangeQC *ctypes.ViewChangeQC `json:"highestViewChangeQC" rlp:"nil"` // the highest viewChangeQC of current epoch // contains filtered or unexported fields }
func (*ViewChangeQuorumCert) BHash ¶
func (v *ViewChangeQuorumCert) BHash() common.Hash
func (*ViewChangeQuorumCert) MsgHash ¶
func (v *ViewChangeQuorumCert) MsgHash() common.Hash
func (*ViewChangeQuorumCert) String ¶
func (v *ViewChangeQuorumCert) String() string
type ViewChanges ¶
type ViewChanges struct { VCs []*ViewChange // contains filtered or unexported fields }
func (ViewChanges) BHash ¶
func (ViewChanges) BHash() common.Hash
func (ViewChanges) MsgHash ¶
func (v ViewChanges) MsgHash() common.Hash
func (ViewChanges) String ¶
func (v ViewChanges) String() string