Documentation ¶
Index ¶
- Constants
- Variables
- func ValidateMsg(pb proto.Message) error
- type BlockPool
- func (pool *BlockPool) AddBlock(peerID p2p.ID, block *types.Block, extCommit *types.ExtendedCommit, ...) error
- func (pool *BlockPool) Height() int64
- func (pool *BlockPool) IsCaughtUp() (isCaughtUp bool, height, maxPeerHeight int64)
- func (pool *BlockPool) MaxPeerHeight() int64
- func (pool *BlockPool) OnStart() error
- func (pool *BlockPool) PeekTwoBlocks() (first, second *types.Block, firstExtCommit *types.ExtendedCommit)
- func (pool *BlockPool) PopRequest()
- func (pool *BlockPool) RedoRequest(height int64) p2p.IDdeprecated
- func (pool *BlockPool) RedoRequestFrom(height int64, peerID p2p.ID)
- func (pool *BlockPool) RemovePeer(peerID p2p.ID)
- func (pool *BlockPool) RemovePeerAndRedoAllPeerRequests(height int64) p2p.ID
- func (pool *BlockPool) SetPeerRange(peerID p2p.ID, base int64, height int64)
- type BlockRequest
- type ErrInvalidBase
- type ErrInvalidHeight
- type ErrReactorValidation
- type ErrUnknownMessageType
- type Metrics
- type Reactor
- func (bcR *Reactor) AddPeer(peer p2p.Peer)
- func (bcR *Reactor) BroadcastStatusRequest()
- func (*Reactor) GetChannels() []*p2p.ChannelDescriptor
- func (bcR *Reactor) OnStart() error
- func (bcR *Reactor) OnStop()
- func (bcR *Reactor) Receive(e p2p.Envelope)
- func (bcR *Reactor) RemovePeer(peer p2p.Peer, _ any)
- func (bcR *Reactor) SetLogger(l log.Logger)
- func (bcR *Reactor) SwitchToBlockSync(state sm.State) error
Constants ¶
const ( // NOTE: keep up to date with bcproto.BlockResponse. BlockResponseMessagePrefixSize = 4 BlockResponseMessageFieldKeySize = 1 MaxMsgSize = types.MaxBlockSizeBytes + BlockResponseMessagePrefixSize + BlockResponseMessageFieldKeySize )
const ( // BlocksyncChannel is a channel for blocks and status updates (`BlockStore` height). BlocksyncChannel = byte(0x40) )
const ( // MetricsSubsystem is a subsystem shared by all metrics exposed by this // package. MetricsSubsystem = "blocksync" )
Variables ¶
var ErrNilMessage = errors.New("message cannot be nil")
ErrNilMessage is returned when provided message is empty.
Functions ¶
Types ¶
type BlockPool ¶
type BlockPool struct { service.BaseService // contains filtered or unexported fields }
BlockPool keeps track of the block sync peers, block requests and block responses.
func NewBlockPool ¶
func NewBlockPool(start int64, requestsCh chan<- BlockRequest, errorsCh chan<- peerError) *BlockPool
NewBlockPool returns a new BlockPool with the height equal to start. Block requests and errors will be sent to requestsCh and errorsCh accordingly.
func (*BlockPool) AddBlock ¶
func (pool *BlockPool) AddBlock(peerID p2p.ID, block *types.Block, extCommit *types.ExtendedCommit, blockSize int) error
AddBlock validates that the block comes from the peer it was expected from and calls the requester to store it.
This requires an extended commit at the same height as the supplied block - the block contains the last commit, but we need the latest commit in case we need to switch over from block sync to consensus at this height. If the height of the extended commit and the height of the block do not match, we do not add the block and return an error. TODO: ensure that blocks come in order for each peer.
func (*BlockPool) IsCaughtUp ¶
IsCaughtUp returns true if this node is caught up, false - otherwise. TODO: relax conditions, prevent abuse.
func (*BlockPool) MaxPeerHeight ¶
MaxPeerHeight returns the highest reported height.
func (*BlockPool) OnStart ¶
OnStart implements service.Service by spawning requesters routine and recording pool's start time.
func (*BlockPool) PeekTwoBlocks ¶
func (pool *BlockPool) PeekTwoBlocks() (first, second *types.Block, firstExtCommit *types.ExtendedCommit)
PeekTwoBlocks returns blocks at pool.height and pool.height+1. We need to see the second block's Commit to validate the first block. So we peek two blocks at a time. We return an extended commit, containing vote extensions and their associated signatures, as this is critical to consensus in ABCI++ as we switch from block sync to consensus mode.
The caller will verify the commit.
func (*BlockPool) PopRequest ¶
func (pool *BlockPool) PopRequest()
PopRequest removes the requester at pool.height and increments pool.height.
func (*BlockPool) RedoRequest
deprecated
func (*BlockPool) RedoRequestFrom ¶
RedoRequestFrom retries the request at the given height. It does not remove the peer.
func (*BlockPool) RemovePeer ¶
RemovePeer removes the peer with peerID from the pool. If there's no peer with peerID, function is a no-op.
func (*BlockPool) RemovePeerAndRedoAllPeerRequests ¶
RemovePeerAndRedoAllPeerRequests retries the request at the given height and all the requests made to the same peer. The peer is removed from the pool. Returns the ID of the removed peer.
type BlockRequest ¶
BlockRequest stores a block request identified by the block Height and the PeerID responsible for delivering the block.
type ErrInvalidBase ¶
ErrInvalidBase is returned when peer informs of a status with invalid base.
func (ErrInvalidBase) Error ¶
func (e ErrInvalidBase) Error() string
type ErrInvalidHeight ¶
ErrInvalidBase is returned when peer informs of a status with invalid height.
func (ErrInvalidHeight) Error ¶
func (e ErrInvalidHeight) Error() string
type ErrReactorValidation ¶
type ErrReactorValidation struct {
Err error
}
func (ErrReactorValidation) Error ¶
func (e ErrReactorValidation) Error() string
func (ErrReactorValidation) Unwrap ¶
func (e ErrReactorValidation) Unwrap() error
type ErrUnknownMessageType ¶
func (ErrUnknownMessageType) Error ¶
func (e ErrUnknownMessageType) Error() string
type Metrics ¶
type Metrics struct { // Whether or not a node is block syncing. 1 if yes, 0 if no. Syncing metrics.Gauge // Number of transactions in the latest block. NumTxs metrics.Gauge // Total number of transactions. TotalTxs metrics.Gauge // Size of the latest block. BlockSizeBytes metrics.Gauge // The height of the latest block. LatestBlockHeight metrics.Gauge }
Metrics contains metrics exposed by this package.
func NopMetrics ¶
func NopMetrics() *Metrics
func PrometheusMetrics ¶
type Reactor ¶
type Reactor struct { p2p.BaseReactor // contains filtered or unexported fields }
Reactor handles long-term catchup syncing.
func NewReactor ¶
func NewReactor(state sm.State, blockExec *sm.BlockExecutor, store *store.BlockStore, blockSync bool, metrics *Metrics, offlineStateSyncHeight int64, ) *Reactor
NewReactor returns new reactor instance.
func (*Reactor) BroadcastStatusRequest ¶
func (bcR *Reactor) BroadcastStatusRequest()
BroadcastStatusRequest broadcasts `BlockStore` base and height.
func (*Reactor) GetChannels ¶
func (*Reactor) GetChannels() []*p2p.ChannelDescriptor
GetChannels implements Reactor.
func (*Reactor) RemovePeer ¶
RemovePeer implements Reactor by removing peer from the pool.