tendermint: github.com/tendermint/tendermint/consensus/types Index | Files

package types

import "github.com/tendermint/tendermint/consensus/types"

Index

Package Files

codec.go height_vote_set.go peer_round_state.go round_state.go

Constants

const (
    RoundStepNewHeight     = RoundStepType(0x01) // Wait til CommitTime + timeoutCommit
    RoundStepNewRound      = RoundStepType(0x02) // Setup new round and go to RoundStepPropose
    RoundStepPropose       = RoundStepType(0x03) // Did propose, gossip proposal
    RoundStepPrevote       = RoundStepType(0x04) // Did prevote, gossip prevotes
    RoundStepPrevoteWait   = RoundStepType(0x05) // Did receive any +2/3 prevotes, start timeout
    RoundStepPrecommit     = RoundStepType(0x06) // Did precommit, gossip precommits
    RoundStepPrecommitWait = RoundStepType(0x07) // Did receive any +2/3 precommits, start timeout
    RoundStepCommit        = RoundStepType(0x08) // Entered commit state machine

)

RoundStepType

Variables

var (
    GotVoteFromUnwantedRoundError = errors.New("Peer has sent a vote that does not match our round for more than one round")
)

type HeightVoteSet Uses

type HeightVoteSet struct {
    // contains filtered or unexported fields
}

Keeps track of all VoteSets from round 0 to round 'round'.

Also keeps track of up to one RoundVoteSet greater than 'round' from each peer, to facilitate catchup syncing of commits.

A commit is +2/3 precommits for a block at a round, but which round is not known in advance, so when a peer provides a precommit for a round greater than mtx.round, we create a new entry in roundVoteSets but also remember the peer to prevent abuse. We let each peer provide us with up to 2 unexpected "catchup" rounds. One for their LastCommit round, and another for the official commit round.

func NewHeightVoteSet Uses

func NewHeightVoteSet(chainID string, height int64, valSet *types.ValidatorSet) *HeightVoteSet

func (*HeightVoteSet) AddVote Uses

func (hvs *HeightVoteSet) AddVote(vote *types.Vote, peerID p2p.ID) (added bool, err error)

Duplicate votes return added=false, err=nil. By convention, peerID is "" if origin is self.

func (*HeightVoteSet) Height Uses

func (hvs *HeightVoteSet) Height() int64

func (*HeightVoteSet) MarshalJSON Uses

func (hvs *HeightVoteSet) MarshalJSON() ([]byte, error)

func (*HeightVoteSet) POLInfo Uses

func (hvs *HeightVoteSet) POLInfo() (polRound int, polBlockID types.BlockID)

Last round and blockID that has +2/3 prevotes for a particular block or nil. Returns -1 if no such round exists.

func (*HeightVoteSet) Precommits Uses

func (hvs *HeightVoteSet) Precommits(round int) *types.VoteSet

func (*HeightVoteSet) Prevotes Uses

func (hvs *HeightVoteSet) Prevotes(round int) *types.VoteSet

func (*HeightVoteSet) Reset Uses

func (hvs *HeightVoteSet) Reset(height int64, valSet *types.ValidatorSet)

func (*HeightVoteSet) Round Uses

func (hvs *HeightVoteSet) Round() int

func (*HeightVoteSet) SetPeerMaj23 Uses

func (hvs *HeightVoteSet) SetPeerMaj23(round int, type_ types.SignedMsgType, peerID p2p.ID, blockID types.BlockID) error

If a peer claims that it has 2/3 majority for given blockKey, call this. NOTE: if there are too many peers, or too much peer churn, this can cause memory issues. TODO: implement ability to remove peers too

func (*HeightVoteSet) SetRound Uses

func (hvs *HeightVoteSet) SetRound(round int)

Create more RoundVoteSets up to round.

func (*HeightVoteSet) String Uses

func (hvs *HeightVoteSet) String() string

func (*HeightVoteSet) StringIndented Uses

func (hvs *HeightVoteSet) StringIndented(indent string) string

type PeerRoundState Uses

type PeerRoundState struct {
    Height                   int64               `json:"height"`                      // Height peer is at
    Round                    int                 `json:"round"`                       // Round peer is at, -1 if unknown.
    Step                     RoundStepType       `json:"step"`                        // Step peer is at
    StartTime                time.Time           `json:"start_time"`                  // Estimated start of round 0 at this height
    Proposal                 bool                `json:"proposal"`                    // True if peer has proposal for this round
    ProposalBlockPartsHeader types.PartSetHeader `json:"proposal_block_parts_header"` //
    ProposalBlockParts       *cmn.BitArray       `json:"proposal_block_parts"`        //
    ProposalPOLRound         int                 `json:"proposal_pol_round"`          // Proposal's POL round. -1 if none.
    ProposalPOL              *cmn.BitArray       `json:"proposal_pol"`                // nil until ProposalPOLMessage received.
    Prevotes                 *cmn.BitArray       `json:"prevotes"`                    // All votes peer has for this round
    Precommits               *cmn.BitArray       `json:"precommits"`                  // All precommits peer has for this round
    LastCommitRound          int                 `json:"last_commit_round"`           // Round of commit for last height. -1 if none.
    LastCommit               *cmn.BitArray       `json:"last_commit"`                 // All commit precommits of commit for last height.
    CatchupCommitRound       int                 `json:"catchup_commit_round"`        // Round that we have commit for. Not necessarily unique. -1 if none.
    CatchupCommit            *cmn.BitArray       `json:"catchup_commit"`              // All commit precommits peer has for this height & CatchupCommitRound
}

PeerRoundState contains the known state of a peer. NOTE: Read-only when returned by PeerState.GetRoundState().

func (*PeerRoundState) Marshal Uses

func (ps *PeerRoundState) Marshal() ([]byte, error)

Marshal returns the amino encoding.

func (*PeerRoundState) MarshalTo Uses

func (ps *PeerRoundState) MarshalTo(data []byte) (int, error)

MarshalTo calls Marshal and copies to the given buffer.

func (*PeerRoundState) Size Uses

func (ps *PeerRoundState) Size() int

Size returns the size of the amino encoding, in bytes.

func (PeerRoundState) String Uses

func (prs PeerRoundState) String() string

String returns a string representation of the PeerRoundState

func (PeerRoundState) StringIndented Uses

func (prs PeerRoundState) StringIndented(indent string) string

StringIndented returns a string representation of the PeerRoundState

func (*PeerRoundState) Unmarshal Uses

func (ps *PeerRoundState) Unmarshal(bs []byte) error

Unmarshal deserializes from amino encoded form.

type RoundState Uses

type RoundState struct {
    Height                    int64               `json:"height"` // Height we are working on
    Round                     int                 `json:"round"`
    Step                      RoundStepType       `json:"step"`
    StartTime                 time.Time           `json:"start_time"`
    CommitTime                time.Time           `json:"commit_time"` // Subjective time when +2/3 precommits for Block at Round were found
    Validators                *types.ValidatorSet `json:"validators"`
    Proposal                  *types.Proposal     `json:"proposal"`
    ProposalBlock             *types.Block        `json:"proposal_block"`
    ProposalBlockParts        *types.PartSet      `json:"proposal_block_parts"`
    LockedRound               int                 `json:"locked_round"`
    LockedBlock               *types.Block        `json:"locked_block"`
    LockedBlockParts          *types.PartSet      `json:"locked_block_parts"`
    ValidRound                int                 `json:"valid_round"`       // Last known round with POL for non-nil valid block.
    ValidBlock                *types.Block        `json:"valid_block"`       // Last known block of POL mentioned above.
    ValidBlockParts           *types.PartSet      `json:"valid_block_parts"` // Last known block parts of POL metnioned above.
    Votes                     *HeightVoteSet      `json:"votes"`
    CommitRound               int                 `json:"commit_round"` //
    LastCommit                *types.VoteSet      `json:"last_commit"`  // Last precommits at Height-1
    LastValidators            *types.ValidatorSet `json:"last_validators"`
    TriggeredTimeoutPrecommit bool                `json:"triggered_timeout_precommit"`
}

RoundState defines the internal consensus state. NOTE: Not thread safe. Should only be manipulated by functions downstream of the cs.receiveRoutine

func (*RoundState) CompleteProposalEvent Uses

func (rs *RoundState) CompleteProposalEvent() types.EventDataCompleteProposal

CompleteProposalEvent returns information about a proposed block as an event.

func (*RoundState) NewRoundEvent Uses

func (rs *RoundState) NewRoundEvent() types.EventDataNewRound

NewRoundEvent returns the RoundState with proposer information as an event.

func (*RoundState) RoundStateEvent Uses

func (rs *RoundState) RoundStateEvent() types.EventDataRoundState

RoundStateEvent returns the H/R/S of the RoundState as an event.

func (*RoundState) RoundStateSimple Uses

func (rs *RoundState) RoundStateSimple() RoundStateSimple

Compress the RoundState to RoundStateSimple

func (*RoundState) String Uses

func (rs *RoundState) String() string

String returns a string

func (*RoundState) StringIndented Uses

func (rs *RoundState) StringIndented(indent string) string

StringIndented returns a string

func (*RoundState) StringShort Uses

func (rs *RoundState) StringShort() string

StringShort returns a string

type RoundStateSimple Uses

type RoundStateSimple struct {
    HeightRoundStep   string          `json:"height/round/step"`
    StartTime         time.Time       `json:"start_time"`
    ProposalBlockHash cmn.HexBytes    `json:"proposal_block_hash"`
    LockedBlockHash   cmn.HexBytes    `json:"locked_block_hash"`
    ValidBlockHash    cmn.HexBytes    `json:"valid_block_hash"`
    Votes             json.RawMessage `json:"height_vote_set"`
}

Compressed version of the RoundState for use in RPC

func (*RoundStateSimple) Marshal Uses

func (rs *RoundStateSimple) Marshal() ([]byte, error)

Marshal returns the amino encoding.

func (*RoundStateSimple) MarshalTo Uses

func (rs *RoundStateSimple) MarshalTo(data []byte) (int, error)

MarshalTo calls Marshal and copies to the given buffer.

func (*RoundStateSimple) Size Uses

func (rs *RoundStateSimple) Size() int

Size returns the size of the amino encoding, in bytes.

func (*RoundStateSimple) Unmarshal Uses

func (rs *RoundStateSimple) Unmarshal(bs []byte) error

Unmarshal deserializes from amino encoded form.

type RoundStepType Uses

type RoundStepType uint8 // These must be numeric, ordered.

RoundStepType enumerates the state of the consensus state machine

func (RoundStepType) IsValid Uses

func (rs RoundStepType) IsValid() bool

IsValid returns true if the step is valid, false if unknown/undefined.

func (RoundStepType) String Uses

func (rs RoundStepType) String() string

String returns a string

type RoundVoteSet Uses

type RoundVoteSet struct {
    Prevotes   *types.VoteSet
    Precommits *types.VoteSet
}

Package types imports 10 packages (graph) and is imported by 19 packages. Updated 2019-07-24. Refresh now. Tools for package owners.