consensus

package
v0.0.1-pre-alpha.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 14, 2022 License: MIT Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultLogPrefix string = "NODE" // Just a default that'll be replaced during consensus operations.
)

Variables

Functions

func Create

func Create(cfg *config.Config) (modules.ConsensusModule, error)

func CreatePacemaker

func CreatePacemaker(cfg *config.Config) (m *paceMaker, err error)

func CreateProposeMessage

func CreateProposeMessage(
	m *consensusModule,
	step typesCons.HotstuffStep,
	qc *typesCons.QuorumCertificate,
) (*typesCons.HotstuffMessage, error)

func CreateVoteMessage

func CreateVoteMessage(
	m *consensusModule,
	step typesCons.HotstuffStep,
	block *types.Block,
) (*typesCons.HotstuffMessage, error)

Types

type HotstuffLeaderMessageHandler

type HotstuffLeaderMessageHandler struct{}

func (*HotstuffLeaderMessageHandler) HandleCommitMessage

func (handler *HotstuffLeaderMessageHandler) HandleCommitMessage(m *consensusModule, msg *typesCons.HotstuffMessage)

func (*HotstuffLeaderMessageHandler) HandleDecideMessage

func (handler *HotstuffLeaderMessageHandler) HandleDecideMessage(m *consensusModule, msg *typesCons.HotstuffMessage)

func (*HotstuffLeaderMessageHandler) HandleNewRoundMessage

func (handler *HotstuffLeaderMessageHandler) HandleNewRoundMessage(m *consensusModule, msg *typesCons.HotstuffMessage)

func (*HotstuffLeaderMessageHandler) HandlePrecommitMessage

func (handler *HotstuffLeaderMessageHandler) HandlePrecommitMessage(m *consensusModule, msg *typesCons.HotstuffMessage)

func (*HotstuffLeaderMessageHandler) HandlePrepareMessage

func (handler *HotstuffLeaderMessageHandler) HandlePrepareMessage(m *consensusModule, msg *typesCons.HotstuffMessage)

type HotstuffMessageHandler

type HotstuffMessageHandler interface {
	HandleNewRoundMessage(*consensusModule, *typesCons.HotstuffMessage)
	HandlePrepareMessage(*consensusModule, *typesCons.HotstuffMessage)
	HandlePrecommitMessage(*consensusModule, *typesCons.HotstuffMessage)
	HandleCommitMessage(*consensusModule, *typesCons.HotstuffMessage)
	HandleDecideMessage(*consensusModule, *typesCons.HotstuffMessage)
}

TODO(olshansky): Should we just make these singletons or embed them directly in the consensusModule?

var (
	LeaderMessageHandler HotstuffMessageHandler = &HotstuffLeaderMessageHandler{}
)
var (
	ReplicaMessageHandler HotstuffMessageHandler = &HotstuffReplicaMessageHandler{}
)

type HotstuffReplicaMessageHandler

type HotstuffReplicaMessageHandler struct{}

func (*HotstuffReplicaMessageHandler) HandleCommitMessage

func (handler *HotstuffReplicaMessageHandler) HandleCommitMessage(m *consensusModule, msg *typesCons.HotstuffMessage)

func (*HotstuffReplicaMessageHandler) HandleDecideMessage

func (handler *HotstuffReplicaMessageHandler) HandleDecideMessage(m *consensusModule, msg *typesCons.HotstuffMessage)

func (*HotstuffReplicaMessageHandler) HandleNewRoundMessage

func (handler *HotstuffReplicaMessageHandler) HandleNewRoundMessage(m *consensusModule, msg *typesCons.HotstuffMessage)

func (*HotstuffReplicaMessageHandler) HandlePrecommitMessage

func (handler *HotstuffReplicaMessageHandler) HandlePrecommitMessage(m *consensusModule, msg *typesCons.HotstuffMessage)

func (*HotstuffReplicaMessageHandler) HandlePrepareMessage

func (handler *HotstuffReplicaMessageHandler) HandlePrepareMessage(m *consensusModule, msg *typesCons.HotstuffMessage)

type Pacemaker

type Pacemaker interface {
	modules.Module
	PacemakerDebug

	// TODO(olshansky): Rather than exposing the underlying `consensusModule` struct,
	// we could create a `ConsensusModuleDebug` interface that'll expose setters/getters
	// for the height/round/step/etc, and interface with the module that way.
	SetConsensusModule(module *consensusModule)

	ValidateMessage(message *typesCons.HotstuffMessage) error
	RestartTimer()
	NewHeight()
	InterruptRound()
}

type PacemakerDebug

type PacemakerDebug interface {
	SetManualMode(bool)
	IsManualMode() bool
	ForceNextView()
}

This Pacemaker interface is only used for development & debugging purposes.

Directories

Path Synopsis
vrf
NOTE: At the time of implementation, the VRF library is only used with consensus, but may be extracted into shared/crypto when/if it will be needed elsewhere.
NOTE: At the time of implementation, the VRF library is only used with consensus, but may be extracted into shared/crypto when/if it will be needed elsewhere.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL