Documentation ¶
Index ¶
- Constants
- Variables
- func CompareBlockByHash(a *types.Block, b *types.Block) int
- func CompareSyncPeerConfigByblockHashes(a *SyncPeerConfig, b *SyncPeerConfig) int
- func GetHowManyMaxConsensus(blocks []*types.Block) (int, int)
- func GetSyncingPort(nodePort string) string
- func ParseResult(res SyncCheckResult) (IsSynchronized bool, OtherHeight uint64, HeightDiff uint64)
- func ProcessStateSync(syncConfig *SyncConfig, heights []uint64, bc core.BlockChain) error
- func RlpDecodeBlockOrBlockWithSig(payload []byte) (*types.Block, error)
- type BlockWithSig
- type EpochSync
- func (ss *EpochSync) CreateSyncConfig(peers []p2p.Peer, shardID uint32, selfPeerID libp2p_peer.ID, ...) error
- func (ss *EpochSync) GetActivePeerNumber() int
- func (ss *EpochSync) GetSyncStatus() SyncCheckResult
- func (ss *EpochSync) SyncLoop(bc core.BlockChain, consensus *consensus.Consensus) time.Duration
- type StateSync
- func (ss *StateSync) AddLastMileBlock(block *types.Block)
- func (ss *StateSync) AddNewBlock(peerHash []byte, block *types.Block)
- func (ss *StateSync) CreateSyncConfig(peers []p2p.Peer, shardID uint32, selfPeerID libp2p_peer.ID, ...) error
- func (ss *StateSync) GetActivePeerNumber() int
- func (ss *StateSync) GetMaxPeerHeight() (uint64, error)
- func (ss *StateSync) GetParsedSyncStatus() (IsSynchronized bool, OtherHeight uint64, HeightDiff uint64)
- func (ss *StateSync) GetParsedSyncStatusDoubleChecked() (IsSynchronized bool, OtherHeight uint64, HeightDiff uint64)
- func (ss *StateSync) GetSyncStatus() SyncCheckResult
- func (ss *StateSync) GetSyncStatusDoubleChecked() SyncCheckResult
- func (ss *StateSync) IntoEpochSync() *EpochSync
- func (ss *StateSync) IsSameBlockchainHeight(bc core.BlockChain) (uint64, bool)
- func (ss *StateSync) IsSynchronized() bool
- func (ss *StateSync) ProcessStateSync(startHash []byte, size uint32, bc core.BlockChain) error
- func (ss *StateSync) RegisterNodeInfo() int
- func (ss *StateSync) SyncLoop(bc core.BlockChain, isBeacon bool, consensus *consensus.Consensus, ...)
- func (ss *StateSync) UpdateBlockAndStatus(block *types.Block, bc core.BlockChain) error
- type SyncBlockTask
- type SyncCheckResult
- type SyncConfig
- func (sc *SyncConfig) AddPeer(peer *SyncPeerConfig)
- func (sc *SyncConfig) CloseConnections()
- func (sc *SyncConfig) FindPeerByHash(peerHash []byte) *SyncPeerConfig
- func (sc *SyncConfig) ForEachPeer(f func(peer *SyncPeerConfig) (brk bool))
- func (sc *SyncConfig) GetBlockHashesConsensusAndCleanUp() error
- func (sc *SyncConfig) GetPeers() []*SyncPeerConfig
- func (sc *SyncConfig) InitForTesting(client *downloader.Client, blockHashes [][]byte)
- func (sc *SyncConfig) PeersCount() int
- func (sc *SyncConfig) RemovePeer(peer *SyncPeerConfig, reason string)
- func (sc *SyncConfig) ShardID() uint32
- type SyncPeerConfig
Constants ¶
const ( RegistrationNumber = 3 SyncingPortDifference = 3000 SyncLoopBatchSize uint32 = 30 // maximum size for one query of block hashes LastMileBlocksSize = 50 // after cutting off a number of connected peers, the result number of peers // shall be between numPeersLowBound and numPeersHighBound NumPeersLowBound = 3 //LoopMinTime sync loop must take at least as this value, otherwise it waits for it LoopMinTime = 0 )
Constants for syncing.
Variables ¶
var ( ErrRegistrationFail = errors.New("[SYNC]: registration failed") ErrGetBlock = errors.New("[SYNC]: get block failed") ErrGetBlockHash = errors.New("[SYNC]: get blockhash failed") ErrProcessStateSync = errors.New("[SYNC]: get blockhash failed") ErrGetConsensusHashes = errors.New("[SYNC]: get consensus hashes failed") ErrGenStateSyncTaskQueue = errors.New("[SYNC]: generate state sync task queue failed") ErrDownloadBlocks = errors.New("[SYNC]: get download blocks failed") ErrUpdateBlockAndStatus = errors.New("[SYNC]: update block and status failed") ErrGenerateNewState = errors.New("[SYNC]: get generate new state failed") )
Errors ...
Functions ¶
func CompareBlockByHash ¶
CompareBlockByHash compares two block by hash, it will be used in sort the blocks
func CompareSyncPeerConfigByblockHashes ¶
func CompareSyncPeerConfigByblockHashes(a *SyncPeerConfig, b *SyncPeerConfig) int
CompareSyncPeerConfigByblockHashes compares two SyncPeerConfig by blockHashes.
func GetHowManyMaxConsensus ¶
GetHowManyMaxConsensus will get the most common blocks and the first such blockID
func GetSyncingPort ¶
GetSyncingPort returns the syncing port.
func ParseResult ¶
func ParseResult(res SyncCheckResult) (IsSynchronized bool, OtherHeight uint64, HeightDiff uint64)
func ProcessStateSync ¶
func ProcessStateSync(syncConfig *SyncConfig, heights []uint64, bc core.BlockChain) error
ProcessStateSync processes state sync from the blocks received but not yet processed so far
Types ¶
type BlockWithSig ¶
BlockWithSig the serialization structure for request DownloaderRequest_BLOCKWITHSIG The block is encoded as block + commit signature
type EpochSync ¶
type EpochSync struct {
// contains filtered or unexported fields
}
func (*EpochSync) CreateSyncConfig ¶
func (ss *EpochSync) CreateSyncConfig(peers []p2p.Peer, shardID uint32, selfPeerID libp2p_peer.ID, waitForEachPeerToConnect bool) error
CreateSyncConfig creates SyncConfig for StateSync object.
func (*EpochSync) GetActivePeerNumber ¶
GetActivePeerNumber returns the number of active peers
func (*EpochSync) GetSyncStatus ¶
func (ss *EpochSync) GetSyncStatus() SyncCheckResult
GetSyncStatus get the last sync status for other modules (E.g. RPC, explorer). If the last sync result is not expired, return the sync result immediately. If the last result is expired, ask the remote DNS nodes for latest height and return the result.
type StateSync ¶
type StateSync struct {
// contains filtered or unexported fields
}
StateSync is the struct that implements StateSyncInterface.
func CreateStateSync ¶
func CreateStateSync(bc blockChain, ip string, port string, peerHash [20]byte, peerID libp2p_peer.ID, isExplorer bool, role nodeconfig.Role) *StateSync
CreateStateSync returns the implementation of StateSyncInterface interface.
func (*StateSync) AddLastMileBlock ¶
AddLastMileBlock add the latest a few block into queue for syncing only keep the latest blocks with size capped by LastMileBlocksSize
func (*StateSync) AddNewBlock ¶
AddNewBlock will add newly received block into state syncing queue
func (*StateSync) CreateSyncConfig ¶
func (ss *StateSync) CreateSyncConfig(peers []p2p.Peer, shardID uint32, selfPeerID libp2p_peer.ID, waitForEachPeerToConnect bool) error
CreateSyncConfig creates SyncConfig for StateSync object.
func (*StateSync) GetActivePeerNumber ¶
GetActivePeerNumber returns the number of active peers
func (*StateSync) GetMaxPeerHeight ¶
GetMaxPeerHeight ..
func (*StateSync) GetParsedSyncStatus ¶
func (*StateSync) GetParsedSyncStatusDoubleChecked ¶
func (*StateSync) GetSyncStatus ¶
func (ss *StateSync) GetSyncStatus() SyncCheckResult
GetSyncStatus get the last sync status for other modules (E.g. RPC, explorer). If the last sync result is not expired, return the sync result immediately. If the last result is expired, ask the remote DNS nodes for latest height and return the result.
func (*StateSync) GetSyncStatusDoubleChecked ¶
func (ss *StateSync) GetSyncStatusDoubleChecked() SyncCheckResult
GetSyncStatusDoubleChecked return the sync status when enforcing a immediate query on DNS nodes with a double check to avoid false alarm.
func (*StateSync) IntoEpochSync ¶
func (*StateSync) IsSameBlockchainHeight ¶
func (ss *StateSync) IsSameBlockchainHeight(bc core.BlockChain) (uint64, bool)
IsSameBlockchainHeight checks whether the node is out of sync from other peers
func (*StateSync) IsSynchronized ¶
func (*StateSync) ProcessStateSync ¶
ProcessStateSync processes state sync from the blocks received but not yet processed so far
func (*StateSync) RegisterNodeInfo ¶
RegisterNodeInfo will register node to peers to accept future new block broadcasting return number of successful registration
func (*StateSync) SyncLoop ¶
func (ss *StateSync) SyncLoop(bc core.BlockChain, isBeacon bool, consensus *consensus.Consensus, loopMinTime time.Duration)
SyncLoop will keep syncing with peers until catches up
func (*StateSync) UpdateBlockAndStatus ¶
UpdateBlockAndStatus ...
type SyncBlockTask ¶
type SyncBlockTask struct {
// contains filtered or unexported fields
}
SyncBlockTask is the task struct to sync a specific block.
type SyncCheckResult ¶
type SyncConfig ¶
type SyncConfig struct {
// contains filtered or unexported fields
}
SyncConfig contains an array of SyncPeerConfig.
func NewSyncConfig ¶
func NewSyncConfig(shardID uint32, selfPeerID libp2p_peer.ID, peers []*SyncPeerConfig) *SyncConfig
func (*SyncConfig) AddPeer ¶
func (sc *SyncConfig) AddPeer(peer *SyncPeerConfig)
AddPeer adds the given sync peer.
func (*SyncConfig) CloseConnections ¶
func (sc *SyncConfig) CloseConnections()
CloseConnections close grpc connections for state sync clients
func (*SyncConfig) FindPeerByHash ¶
func (sc *SyncConfig) FindPeerByHash(peerHash []byte) *SyncPeerConfig
FindPeerByHash returns the peer with the given hash, or nil if not found.
func (*SyncConfig) ForEachPeer ¶
func (sc *SyncConfig) ForEachPeer(f func(peer *SyncPeerConfig) (brk bool))
ForEachPeer calls the given function with each peer. It breaks the iteration iff the function returns true.
func (*SyncConfig) GetBlockHashesConsensusAndCleanUp ¶
func (sc *SyncConfig) GetBlockHashesConsensusAndCleanUp() error
GetBlockHashesConsensusAndCleanUp selects the most common peer config based on their block hashes to download/sync. Note that choosing the most common peer config does not guarantee that the blocks to be downloaded are the correct ones. The subsequent node syncing steps of verifying the block header chain will give such confirmation later. If later block header verification fails with the sync peer config chosen here, the entire sync loop gets retried with a new peer set.
func (*SyncConfig) GetPeers ¶
func (sc *SyncConfig) GetPeers() []*SyncPeerConfig
func (*SyncConfig) InitForTesting ¶
func (sc *SyncConfig) InitForTesting(client *downloader.Client, blockHashes [][]byte)
InitForTesting used for testing.
func (*SyncConfig) PeersCount ¶
func (sc *SyncConfig) PeersCount() int
func (*SyncConfig) RemovePeer ¶
func (sc *SyncConfig) RemovePeer(peer *SyncPeerConfig, reason string)
RemovePeer removes a peer from SyncConfig
func (*SyncConfig) ShardID ¶
func (sc *SyncConfig) ShardID() uint32
type SyncPeerConfig ¶
type SyncPeerConfig struct {
// contains filtered or unexported fields
}
SyncPeerConfig is peer config to sync.
func CreateTestSyncPeerConfig ¶
func CreateTestSyncPeerConfig(client *downloader.Client, blockHashes [][]byte) *SyncPeerConfig
CreateTestSyncPeerConfig used for testing.
func (*SyncPeerConfig) GetBlocks ¶
func (peerConfig *SyncPeerConfig) GetBlocks(hashes [][]byte) ([][]byte, error)
GetBlocks gets blocks by calling grpc request to the corresponding peer.
func (*SyncPeerConfig) GetClient ¶
func (peerConfig *SyncPeerConfig) GetClient() *downloader.Client
GetClient returns client pointer of downloader.Client
func (*SyncPeerConfig) IsEqual ¶
func (peerConfig *SyncPeerConfig) IsEqual(pc2 *SyncPeerConfig) bool
IsEqual checks the equality between two sync peers
func (*SyncPeerConfig) String ¶
func (peerConfig *SyncPeerConfig) String() interface{}