consensus

package
v0.98.1 Latest Latest
Warning

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

Go to latest
Published: Jan 31, 2022 License: MIT Imports: 30 Imported by: 1

Documentation

Overview

Package consensus contains Neo consensus node implementation.

It uses external dBFT library for the core algorithm and basically joins this library with Neo node internals implemented in NeoGo.

Index

Constants

View Source
const Category = "dBFT"

Category is message category for extensible payloads.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	// Logger is a logger instance.
	Logger *zap.Logger
	// Broadcast is a callback which is called to notify server
	// about new consensus payload to sent.
	Broadcast func(p *npayload.Extensible)
	// Chain is a Ledger instance.
	Chain Ledger
	// ProtocolConfiguration contains protocol settings.
	ProtocolConfiguration config.ProtocolConfiguration
	// RequestTx is a callback to which will be called
	// when a node lacks transactions present in a block.
	RequestTx func(h ...util.Uint256)
	// TimePerBlock minimal time that should pass before next block is accepted.
	TimePerBlock time.Duration
	// Wallet is a local-node wallet configuration.
	Wallet *config.Wallet
}

Config is a configuration for consensus services.

type Ledger added in v0.98.1

type Ledger interface {
	AddBlock(block *coreb.Block) error
	ApplyPolicyToTxSet([]*transaction.Transaction) []*transaction.Transaction
	GetMemPool() *mempool.Pool
	GetNextBlockValidators() ([]*keys.PublicKey, error)
	GetStateModule() blockchainer.StateRoot
	GetTransaction(util.Uint256) (*transaction.Transaction, uint32, error)
	GetValidators() ([]*keys.PublicKey, error)
	PoolTx(t *transaction.Transaction, pools ...*mempool.Pool) error
	SubscribeForBlocks(ch chan<- *coreb.Block)
	UnsubscribeFromBlocks(ch chan<- *coreb.Block)
	interop.Ledger
	mempool.Feer
}

Ledger is the interface to Blockchain sufficient for Service.

type Payload

type Payload struct {
	npayload.Extensible
	// contains filtered or unexported fields
}

Payload is a type for consensus-related messages.

func NewPayload added in v0.90.0

func NewPayload(m netmode.Magic, stateRootEnabled bool) *Payload

NewPayload creates new consensus payload for the provided network.

func (*Payload) DecodeBinary

func (p *Payload) DecodeBinary(r *io.BinReader)

DecodeBinary implements io.Serializable interface.

func (*Payload) EncodeBinary

func (p *Payload) EncodeBinary(w *io.BinWriter)

EncodeBinary implements io.Serializable interface.

func (Payload) GetChangeView

func (p Payload) GetChangeView() payload.ChangeView

GetChangeView implements payload.ConsensusPayload interface.

func (Payload) GetCommit

func (p Payload) GetCommit() payload.Commit

GetCommit implements payload.ConsensusPayload interface.

func (Payload) GetPrepareRequest

func (p Payload) GetPrepareRequest() payload.PrepareRequest

GetPrepareRequest implements payload.ConsensusPayload interface.

func (Payload) GetPrepareResponse

func (p Payload) GetPrepareResponse() payload.PrepareResponse

GetPrepareResponse implements payload.ConsensusPayload interface.

func (Payload) GetRecoveryMessage

func (p Payload) GetRecoveryMessage() payload.RecoveryMessage

GetRecoveryMessage implements payload.ConsensusPayload interface.

func (Payload) GetRecoveryRequest

func (p Payload) GetRecoveryRequest() payload.RecoveryRequest

GetRecoveryRequest implements payload.ConsensusPayload interface.

func (*Payload) Hash

func (p *Payload) Hash() util.Uint256

Hash implements payload.ConsensusPayload interface.

func (Payload) Height

func (p Payload) Height() uint32

Height implements payload.ConsensusPayload interface.

func (Payload) Payload

func (p Payload) Payload() interface{}

Payload implements payload.ConsensusPayload interface.

func (*Payload) SetHeight

func (p *Payload) SetHeight(h uint32)

SetHeight implements payload.ConsensusPayload interface.

func (*Payload) SetPayload

func (p *Payload) SetPayload(pl interface{})

SetPayload implements payload.ConsensusPayload interface.

func (*Payload) SetType

func (p *Payload) SetType(t payload.MessageType)

SetType implements payload.ConsensusPayload interface.

func (*Payload) SetValidatorIndex

func (p *Payload) SetValidatorIndex(i uint16)

SetValidatorIndex implements payload.ConsensusPayload interface.

func (*Payload) SetViewNumber

func (p *Payload) SetViewNumber(view byte)

SetViewNumber implements payload.ConsensusPayload interface.

func (*Payload) Sign

func (p *Payload) Sign(key *privateKey) error

Sign signs payload using the private key. It also sets corresponding verification and invocation scripts.

func (Payload) Type

func (p Payload) Type() payload.MessageType

Type implements payload.ConsensusPayload interface.

func (Payload) ValidatorIndex

func (p Payload) ValidatorIndex() uint16

ValidatorIndex implements payload.ConsensusPayload interface.

func (Payload) ViewNumber

func (p Payload) ViewNumber() byte

ViewNumber implements payload.ConsensusPayload interface.

type Service

type Service interface {
	// Start initializes dBFT and starts event loop for consensus service.
	// It must be called only when sufficient amount of peers are connected.
	Start()
	// Shutdown stops dBFT event loop.
	Shutdown()

	// OnPayload is a callback to notify Service about new received payload.
	OnPayload(p *npayload.Extensible) error
	// OnTransaction is a callback to notify Service about new received transaction.
	OnTransaction(tx *transaction.Transaction)
}

Service represents consensus instance.

func NewService

func NewService(cfg Config) (Service, error)

NewService returns new consensus.Service instance.

Jump to

Keyboard shortcuts

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