Documentation ¶
Overview ¶
Package netsync implements a concurrency safe block syncing protocol.
The SyncManager communicates with connected peers to perform an initial block download, keep the chain and unconfirmed transaction pool in sync, and announce new blocks connected to the chain. Currently the sync manager selects a single sync peer that it downloads all blocks from until it is up to date with the longest chain the sync peer is aware of.
Index ¶
- Variables
- func UseLogger(logger *cl.SubSystem)
- type Config
- type PeerNotifier
- type SyncManager
- func (sm *SyncManager) DonePeer(peer *peerpkg.Peer)
- func (sm *SyncManager) IsCurrent() bool
- func (sm *SyncManager) NewPeer(peer *peerpkg.Peer)
- func (sm *SyncManager) Pause() chan<- struct{}
- func (sm *SyncManager) ProcessBlock(block *util.Block, flags blockchain.BehaviorFlags) (bool, error)
- func (sm *SyncManager) QueueBlock(block *util.Block, peer *peerpkg.Peer, done chan struct{})
- func (sm *SyncManager) QueueHeaders(headers *wire.MsgHeaders, peer *peerpkg.Peer)
- func (sm *SyncManager) QueueInv(inv *wire.MsgInv, peer *peerpkg.Peer)
- func (sm *SyncManager) QueueTx(tx *util.Tx, peer *peerpkg.Peer, done chan struct{})
- func (sm *SyncManager) Start()
- func (sm *SyncManager) Stop() error
- func (sm *SyncManager) SyncPeerID() int32
Constants ¶
This section is empty.
Variables ¶
var Log = cl.NewSubSystem("chain/sync", ll.DEFAULT)
Log is the logger for the netsync package
Functions ¶
Types ¶
type Config ¶
type Config struct { PeerNotifier PeerNotifier Chain *blockchain.BlockChain TxMemPool *mempool.TxPool ChainParams *chaincfg.Params DisableCheckpoints bool MaxPeers int FeeEstimator *mempool.FeeEstimator }
type PeerNotifier ¶
type SyncManager ¶
type SyncManager struct {
// contains filtered or unexported fields
}
func New ¶
func New( config *Config) (*SyncManager, error)
New constructs a new SyncManager. Use Start to begin processing asynchronous block, tx, and inv updates.
func (*SyncManager) DonePeer ¶
func ( sm *SyncManager, ) DonePeer( peer *peerpkg.Peer, )
DonePeer informs the blockmanager that a peer has disconnected.
func (*SyncManager) IsCurrent ¶
func ( sm *SyncManager, ) IsCurrent() bool
IsCurrent returns whether or not the sync manager believes it is synced with the connected peers.
func (*SyncManager) NewPeer ¶
func ( sm *SyncManager, ) NewPeer( peer *peerpkg.Peer, )
NewPeer informs the sync manager of a newly active peer.
func (*SyncManager) Pause ¶
func ( sm *SyncManager, ) Pause() chan<- struct{}
Pause pauses the sync manager until the returned channel is closed. Note that while paused, all peer and block processing is halted. The message sender should avoid pausing the sync manager for long durations.
func (*SyncManager) ProcessBlock ¶
func ( sm *SyncManager, ) ProcessBlock( block *util.Block, flags blockchain.BehaviorFlags) (bool, error)
ProcessBlock makes use of ProcessBlock on an internal instance of a block chain.
func (*SyncManager) QueueBlock ¶
func ( sm *SyncManager, ) QueueBlock( block *util.Block, peer *peerpkg.Peer, done chan struct{})
QueueBlock adds the passed block message and peer to the block handling queue. Responds to the done channel argument after the block message is processed.
func (*SyncManager) QueueHeaders ¶
func ( sm *SyncManager, ) QueueHeaders( headers *wire.MsgHeaders, peer *peerpkg.Peer)
QueueHeaders adds the passed headers message and peer to the block handling queue.
func (*SyncManager) QueueInv ¶
func ( sm *SyncManager, ) QueueInv( inv *wire.MsgInv, peer *peerpkg.Peer)
QueueInv adds the passed inv message and peer to the block handling queue.
func (*SyncManager) QueueTx ¶
func ( sm *SyncManager, ) QueueTx( tx *util.Tx, peer *peerpkg.Peer, done chan struct{})
QueueTx adds the passed transaction message and peer to the block handling queue. Responds to the done channel argument after the tx message is processed.
func (*SyncManager) Start ¶
func ( sm *SyncManager, ) Start()
Start begins the core block handler which processes block and inv messages.
func (*SyncManager) Stop ¶
func ( sm *SyncManager, ) Stop() error
Stop gracefully shuts down the sync manager by stopping all asynchronous handlers and waiting for them to finish.
func (*SyncManager) SyncPeerID ¶
func ( sm *SyncManager, ) SyncPeerID() int32
SyncPeerID returns the ID of the current sync peer, or 0 if there is none.