statesyncclient

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Jul 30, 2025 License: BSD-3-Clause Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrUnmarshalResponse = errors.New("failed to unmarshal response")
)

Functions

func NewClient

func NewClient(config *Config) *client

Types

type CallbackLeafSyncer

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

func NewCallbackLeafSyncer

func NewCallbackLeafSyncer(client LeafClient, tasks <-chan LeafSyncTask, requestSize uint16) *CallbackLeafSyncer

NewCallbackLeafSyncer creates a new syncer object to perform leaf sync of tries.

func (*CallbackLeafSyncer) Done

func (c *CallbackLeafSyncer) Done() <-chan error

Done returns a channel which produces any error that occurred during syncing or nil on success.

func (*CallbackLeafSyncer) Start

func (c *CallbackLeafSyncer) Start(ctx context.Context, numThreads int, onFailure func(error) error)

Start launches [numThreads] worker goroutines to process LeafSyncTasks from [c.tasks]. onFailure is called if the sync completes with an error.

type Client

type Client interface {
	// GetLeafs synchronously sends the given request, returning a parsed LeafsResponse or error
	// Note: this verifies the response including the range proofs.
	GetLeafs(ctx context.Context, request message.LeafsRequest) (message.LeafsResponse, error)

	// GetBlocks synchronously retrieves blocks starting with specified common.Hash and height up to specified parents
	// specified range from height to height-parents is inclusive
	GetBlocks(ctx context.Context, blockHash common.Hash, height uint64, parents uint16) ([]*types.Block, error)

	// GetCode synchronously retrieves code associated with the given hashes
	GetCode(ctx context.Context, hashes []common.Hash) ([][]byte, error)
}

Client synchronously fetches data from the network to fulfill state sync requests. Repeatedly requests failed requests until the context to the request is expired.

type Config

type Config struct {
	SendRequest      func(ctx context.Context, peerID ids.NodeID, req []byte) ([]byte, error)
	Logger           log.Logger
	Stats            stats.ClientSyncerStats
	StateSyncNodeIDs []ids.NodeID
	BlockParser      EthBlockParser
}

type EthBlockParser

type EthBlockParser interface {
	ParseEthBlock(b []byte) (*types.Block, error)
}

type LeafClient

type LeafClient interface {
	// GetLeafs synchronously sends the given request, returning a parsed LeafsResponse or error
	// Note: this verifies the response including the range proofs.
	GetLeafs(context.Context, message.LeafsRequest) (message.LeafsResponse, error)
}

type LeafSyncTask

type LeafSyncTask interface {
	Root() common.Hash                  // Root of the trie to sync
	Account() common.Hash               // Account hash of the trie to sync (only applicable to storage tries)
	Start() []byte                      // Starting key to request new leaves
	End() []byte                        // End key to request new leaves
	OnStart() (bool, error)             // Callback when tasks begins, returns true if work can be skipped
	OnLeafs(keys, vals [][]byte) error  // Callback when new leaves are received from the network
	OnFinish(ctx context.Context) error // Callback when there are no more leaves in the trie to sync or when we reach End()
}

LeafSyncTask represents a complete task to be completed by the leaf syncer. Note: each LeafSyncTask is processed on its own goroutine and there will not be concurrent calls to the callback methods. Implementations should return the same value for Root, Account, Start, and NodeType throughout the sync. The value returned by End can change between calls to OnLeafs.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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