sync

package
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Nov 7, 2024 License: GPL-3.0 Imports: 29 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrCorruptBootstrapFromStorageDb = errors.New("corrupt bootstrap storage database")

ErrCorruptBootstrapFromStorageDb signals that the bootstrap database is corrupt

View Source
var ErrGenesisTimeMissmatch = errors.New("genesis time missmatch")

ErrGenesisTimeMissmatch signals that a received header has a genesis time missmatch

View Source
var ErrHeaderNotFound = errors.New("header is not found")

ErrHeaderNotFound signals that the needed header is not found

View Source
var ErrHigherNonceInBlock = errors.New("higher nonce in block")

ErrHigherNonceInBlock signals that the nonce in block is higher than what could exist in the current round

View Source
var ErrHigherRoundInBlock = errors.New("higher round in block")

ErrHigherRoundInBlock signals that the round index in block is higher than the current round of chronology

View Source
var ErrLowerNonceInBlock = errors.New("lower nonce in block")

ErrLowerNonceInBlock signals that the nonce in block is lower than the last check point nonce

View Source
var ErrLowerRoundInBlock = errors.New("lower round in block")

ErrLowerRoundInBlock signals that the round index in block is lower than the checkpoint round

View Source
var ErrNilHash = errors.New("nil hash")

ErrNilHash signals that a nil hash has been provided

View Source
var ErrNilHeader = errors.New("nil header")

ErrNilHeader signals that a nil header has been provided

View Source
var ErrRollBackBehindFinalHeader = errors.New("roll back behind final header is not permitted")

ErrRollBackBehindFinalHeader signals that a roll back behind final header has been attempted

View Source
var ErrRollBackBehindForkNonce = errors.New("roll back behind fork nonce is not permitted")

ErrRollBackBehindForkNonce signals that a roll back behind fork nonce is not permitted

Functions

func NewMetaForkDetector

func NewMetaForkDetector(
	roundHandler consensus.RoundHandler,
	blackListHandler process.TimeCacher,
	blockTracker process.BlockTracker,
	genesisTime int64,
) (*metaForkDetector, error)

NewMetaForkDetector method creates a new metaForkDetector object

func NewShardForkDetector

func NewShardForkDetector(
	roundHandler consensus.RoundHandler,
	blackListHandler process.TimeCacher,
	blockTracker process.BlockTracker,
	genesisTime int64,
) (*shardForkDetector, error)

NewShardForkDetector method creates a new shardForkDetector object

Types

type ArgBaseBootstrapper

type ArgBaseBootstrapper struct {
	HistoryRepo                  dblookupext.HistoryRepository
	PoolsHolder                  dataRetriever.PoolsHolder
	Store                        dataRetriever.StorageService
	ChainHandler                 data.ChainHandler
	RoundHandler                 consensus.RoundHandler
	BlockProcessor               process.BlockProcessor
	WaitTime                     time.Duration
	Hasher                       hashing.Hasher
	Marshalizer                  marshal.Marshalizer
	ForkDetector                 process.ForkDetector
	RequestHandler               process.RequestHandler
	ShardCoordinator             sharding.Coordinator
	Accounts                     state.AccountsAdapter
	BlackListHandler             process.TimeCacher
	NetworkWatcher               process.NetworkConnectionWatcher
	BootStorer                   process.BootStorer
	StorageBootstrapper          process.BootstrapperFromStorage
	EpochHandler                 dataRetriever.EpochHandler
	MiniblocksProvider           process.MiniBlockProvider
	Uint64Converter              typeConverters.Uint64ByteSliceConverter
	AppStatusHandler             core.AppStatusHandler
	OutportHandler               outport.OutportHandler
	AccountsDBSyncer             process.AccountsDBSyncer
	CurrentEpochProvider         process.CurrentNetworkEpochProviderHandler
	IsInImportMode               bool
	ScheduledTxsExecutionHandler process.ScheduledTxsExecutionHandler
	ProcessWaitTime              time.Duration
	RepopulateTokensSupplies     bool
}

ArgBaseBootstrapper holds all dependencies required by the bootstrap data factory in order to create new instances

type ArgMetaBootstrapper

type ArgMetaBootstrapper struct {
	ArgBaseBootstrapper
	EpochBootstrapper           process.EpochBootstrapper
	ValidatorStatisticsDBSyncer process.AccountsDBSyncer
	ValidatorAccountsDB         state.AccountsAdapter
}

ArgMetaBootstrapper holds all dependencies required by the bootstrap data factory in order to create new instances of meta bootstrapper

type ArgShardBootstrapper

type ArgShardBootstrapper struct {
	ArgBaseBootstrapper
}

ArgShardBootstrapper holds all dependencies required by the bootstrap data factory in order to create new instances of shard bootstrapper

type ErrSignedBlock

type ErrSignedBlock struct {
	CurrentNonce uint64
}

ErrSignedBlock signals that a block is signed

func (ErrSignedBlock) Error

func (err ErrSignedBlock) Error() string

type MetaBootstrap

type MetaBootstrap struct {
	// contains filtered or unexported fields
}

MetaBootstrap implements the bootstrap mechanism

func NewMetaBootstrap

func NewMetaBootstrap(arguments ArgMetaBootstrapper) (*MetaBootstrap, error)

NewMetaBootstrap creates a new Bootstrap object

func (MetaBootstrap) AddSyncStateListener

func (boot MetaBootstrap) AddSyncStateListener(syncStateListener func(isSyncing bool))

AddSyncStateListener adds a syncStateListener that get notified each time the sync status of the node changes

func (*MetaBootstrap) Close

func (boot *MetaBootstrap) Close() error

Close closes the synchronization loop

func (MetaBootstrap) GetNodeState

func (boot MetaBootstrap) GetNodeState() common.NodeState

GetNodeState method returns the sync state of the node. If it returns 'NsNotSynchronized', this means that the node is not synchronized yet, and it has to continue the bootstrapping mechanism. If it returns 'NsSynchronized', this means that the node is already synced, and it can participate in the consensus. This method could also return 'NsNotCalculated' which means that the state of the node in the current round is not calculated yet. Note that when the node is not connected to the network, GetNodeState could return 'NsNotSynchronized' but the SyncBlock is not automatically called.

func (*MetaBootstrap) IsInterfaceNil

func (boot *MetaBootstrap) IsInterfaceNil() bool

IsInterfaceNil returns true if there is no value under the interface

func (*MetaBootstrap) StartSyncingBlocks

func (boot *MetaBootstrap) StartSyncingBlocks() error

StartSyncingBlocks method will start syncing blocks as a go routine

func (*MetaBootstrap) SyncBlock

func (boot *MetaBootstrap) SyncBlock(ctx context.Context) error

SyncBlock method actually does the synchronization. It requests the next block header from the pool and if it is not found there it will be requested from the network. After the header is received, it requests the block body in the same way(pool and then, if it is not found in the pool, from network). If either header and body are received the ProcessBlock and CommitBlock method will be called successively. These methods will execute the block and its transactions. Finally, if everything works, the block will be committed in the blockchain, and all this mechanism will be reiterated for the next block.

type ShardBootstrap

type ShardBootstrap struct {
	// contains filtered or unexported fields
}

ShardBootstrap implements the bootstrap mechanism

func NewShardBootstrap

func NewShardBootstrap(arguments ArgShardBootstrapper) (*ShardBootstrap, error)

NewShardBootstrap creates a new Bootstrap object

func (ShardBootstrap) AddSyncStateListener

func (boot ShardBootstrap) AddSyncStateListener(syncStateListener func(isSyncing bool))

AddSyncStateListener adds a syncStateListener that get notified each time the sync status of the node changes

func (*ShardBootstrap) Close

func (boot *ShardBootstrap) Close() error

Close closes the synchronization loop

func (ShardBootstrap) GetNodeState

func (boot ShardBootstrap) GetNodeState() common.NodeState

GetNodeState method returns the sync state of the node. If it returns 'NsNotSynchronized', this means that the node is not synchronized yet, and it has to continue the bootstrapping mechanism. If it returns 'NsSynchronized', this means that the node is already synced, and it can participate in the consensus. This method could also return 'NsNotCalculated' which means that the state of the node in the current round is not calculated yet. Note that when the node is not connected to the network, GetNodeState could return 'NsNotSynchronized' but the SyncBlock is not automatically called.

func (*ShardBootstrap) IsInterfaceNil

func (boot *ShardBootstrap) IsInterfaceNil() bool

IsInterfaceNil returns true if there is no value under the interface

func (*ShardBootstrap) StartSyncingBlocks

func (boot *ShardBootstrap) StartSyncingBlocks() error

StartSyncingBlocks method will start syncing blocks as a go routine

func (*ShardBootstrap) SyncBlock

func (boot *ShardBootstrap) SyncBlock(ctx context.Context) error

SyncBlock method actually does the synchronization. It requests the next block header from the pool and if it is not found there it will be requested from the network. After the header is received, it requests the block body in the same way(pool and then, if it is not found in the pool, from network). If either header and body are received the ProcessBlock and CommitBlock method will be called successively. These methods will execute the block and its transactions. Finally, if everything works, the block will be committed in the blockchain, and all this mechanism will be reiterated for the next block.

type TestMetaBootstrap

type TestMetaBootstrap struct {
	*MetaBootstrap
}

TestMetaBootstrap extends MetaBootstrap and is used in integration tests as it exposes some funcs that are not supposed to be used in production code Exported funcs simplify the reproduction of edge cases

func (TestMetaBootstrap) AddSyncStateListener

func (boot TestMetaBootstrap) AddSyncStateListener(syncStateListener func(isSyncing bool))

AddSyncStateListener adds a syncStateListener that get notified each time the sync status of the node changes

func (TestMetaBootstrap) GetNodeState

func (boot TestMetaBootstrap) GetNodeState() common.NodeState

GetNodeState method returns the sync state of the node. If it returns 'NsNotSynchronized', this means that the node is not synchronized yet, and it has to continue the bootstrapping mechanism. If it returns 'NsSynchronized', this means that the node is already synced, and it can participate in the consensus. This method could also return 'NsNotCalculated' which means that the state of the node in the current round is not calculated yet. Note that when the node is not connected to the network, GetNodeState could return 'NsNotSynchronized' but the SyncBlock is not automatically called.

func (*TestMetaBootstrap) RollBack

func (tmb *TestMetaBootstrap) RollBack(revertUsingForkNonce bool) error

RollBack decides to call (or not) the rollBackOneBlock on the current block from the blockchain structure

func (*TestMetaBootstrap) SetProbableHighestNonce

func (tmb *TestMetaBootstrap) SetProbableHighestNonce(nonce uint64)

SetProbableHighestNonce sets the probable highest nonce in the contained fork detector

type TestShardBootstrap

type TestShardBootstrap struct {
	*ShardBootstrap
}

TestShardBootstrap extends ShardBootstrap and is used in integration tests as it exposes some funcs that are not supposed to be used in production code Exported funcs simplify the reproduction of edge cases

func (TestShardBootstrap) AddSyncStateListener

func (boot TestShardBootstrap) AddSyncStateListener(syncStateListener func(isSyncing bool))

AddSyncStateListener adds a syncStateListener that get notified each time the sync status of the node changes

func (TestShardBootstrap) GetNodeState

func (boot TestShardBootstrap) GetNodeState() common.NodeState

GetNodeState method returns the sync state of the node. If it returns 'NsNotSynchronized', this means that the node is not synchronized yet, and it has to continue the bootstrapping mechanism. If it returns 'NsSynchronized', this means that the node is already synced, and it can participate in the consensus. This method could also return 'NsNotCalculated' which means that the state of the node in the current round is not calculated yet. Note that when the node is not connected to the network, GetNodeState could return 'NsNotSynchronized' but the SyncBlock is not automatically called.

func (*TestShardBootstrap) RollBack

func (tsb *TestShardBootstrap) RollBack(revertUsingForkNonce bool) error

RollBack decides to call (or not) the rollBackOneBlock on the current block from the blockchain structure

func (*TestShardBootstrap) SetProbableHighestNonce

func (tsb *TestShardBootstrap) SetProbableHighestNonce(nonce uint64)

SetProbableHighestNonce sets the probable highest nonce in the contained fork detector

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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