downloader

package
v0.0.0-...-39cdb81 Latest Latest
Warning

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

Go to latest
Published: Jan 21, 2019 License: GPL-3.0 Imports: 25 Imported by: 0

Documentation

Overview

Package downloader contains the manual full chain synchronisation.

Index

Constants

This section is empty.

Variables

View Source
var (
	MaxHashFetch    = 512 //每个检索请求要获取的哈希数
	MaxBlockFetch   = 128 //每个检索请求要获取的块的数量
	MaxHeaderFetch  = 192 //Amount of block headers to be fetched per retrieval request
	MaxSkeletonSize = 128 //骨架程序集所需的头提取数
	MaxBodyFetch    = 128 //每个检索请求要获取的块体数量
	MaxReceiptFetch = 256 //Amount of transaction receipts to allow fetching per request
	MaxStateFetch   = 384 //允许每个请求提取的节点状态值的数量

	MaxForkAncestry = 3 * params.EpochDuration //最大链重组

)

Functions

This section is empty.

Types

type BlockChain

type BlockChain interface {
	LightChain

	//hasblock验证块在本地链中的存在。
	HasBlock(common.Hash, uint64) bool

	//HasFastBlock验证快速块在本地链中的存在。
	HasFastBlock(common.Hash, uint64) bool

	//GetBlockByHash从本地链中检索块。
	GetBlockByHash(common.Hash) *types.Block

	//currentBlock从本地链检索头块。
	CurrentBlock() *types.Block

	//currentFastBlock从本地链检索头快速块。
	CurrentFastBlock() *types.Block

	//fastsynccommithead直接将头块提交给某个实体。
	FastSyncCommitHead(common.Hash) error

	//插入链将一批块插入到本地链中。
	InsertChain(types.Blocks) (int, error)

	//InsertReceiptChain将一批收据插入本地链。
	InsertReceiptChain(types.Blocks, []types.Receipts) (int, error)
}

区块链封装了同步(完整或快速)区块链所需的功能。

type DoneEvent

type DoneEvent struct{}

type Downloader

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

func New

func New(mode SyncMode, stateDb ethdb.Database, mux *event.TypeMux, chain BlockChain, lightchain LightChain, dropPeer peerDropFn) *Downloader

新建创建一个新的下载程序,从远程对等端获取哈希和块。

func (*Downloader) Cancel

func (d *Downloader) Cancel()

取消中止所有操作,并等待所有下载Goroutines到 返回前完成。

func (*Downloader) DeliverBodies

func (d *Downloader) DeliverBodies(id string, transactions [][]*types.Transaction, uncles [][]*types.Header) (err error)

deliverbodies注入从远程节点接收的新批块体。

func (*Downloader) DeliverHeaders

func (d *Downloader) DeliverHeaders(id string, headers []*types.Header) (err error)

DeliverHeaders插入从远程服务器接收的新批块头 进入下载计划。

func (*Downloader) DeliverNodeData

func (d *Downloader) DeliverNodeData(id string, data [][]byte) (err error)

DeliverNodeData注入从远程节点接收到的新一批节点状态数据。

func (*Downloader) DeliverReceipts

func (d *Downloader) DeliverReceipts(id string, receipts [][]*types.Receipt) (err error)

DeliverReceipts插入从远程节点接收的新一批收据。

func (*Downloader) Progress

func (d *Downloader) Progress() ethereum.SyncProgress

进程检索同步边界,特别是起源。 同步开始于的块(可能已失败/暂停);块 或头同步当前位于;以及同步目标的最新已知块。

此外,在快速同步的状态下载阶段, 同时返回已处理状态和已知状态总数。否则 这些都是零。

func (*Downloader) RegisterLightPeer

func (d *Downloader) RegisterLightPeer(id string, version int, peer LightPeer) error

Regiterlightpeer注入一个轻量级客户端对等端,将其包装起来,使其看起来像一个普通对等端。

func (*Downloader) RegisterPeer

func (d *Downloader) RegisterPeer(id string, version int, peer Peer) error

registerpeer将一个新的下载对等注入到要 用于从获取哈希和块。

func (*Downloader) Synchronise

func (d *Downloader) Synchronise(id string, head common.Hash, td *big.Int, mode SyncMode) error

Synchronise尝试将本地区块链与远程对等机同步,两者都是 添加各种健全性检查,并用各种日志条目包装它。

func (*Downloader) Synchronising

func (d *Downloader) Synchronising() bool

同步返回下载程序当前是否正在检索块。

func (*Downloader) Terminate

func (d *Downloader) Terminate()

Terminate interrupts the downloader, canceling all pending operations. 调用terminate后,下载程序不能再使用。

func (*Downloader) UnregisterPeer

func (d *Downloader) UnregisterPeer(id string) error

注销对等机从已知列表中删除对等机,以阻止 指定的对等机。还将努力将任何挂起的回迁返回到 排队。

type FailedEvent

type FailedEvent struct{ Err error }

type FakePeer

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

FakePeer是一个模拟下载程序对等机,在本地数据库实例上运行。 而不是实际的活动节点。它对测试和实现很有用 从现有本地数据库同步命令。

func NewFakePeer

func NewFakePeer(id string, db ethdb.Database, hc *core.HeaderChain, dl *Downloader) *FakePeer

newfakepeer用给定的数据源创建一个新的模拟下载器对等。

func (*FakePeer) Head

func (p *FakePeer) Head() (common.Hash, *big.Int)

head实现downloader.peer,返回当前head哈希和数字 最著名的标题。

func (*FakePeer) RequestBodies

func (p *FakePeer) RequestBodies(hashes []common.Hash) error

请求体实现downloader.peer,返回一批块体 对应于指定的块散列。

func (*FakePeer) RequestHeadersByHash

func (p *FakePeer) RequestHeadersByHash(hash common.Hash, amount int, skip int, reverse bool) error

requestHeadersByHash实现downloader.peer,返回一批头 由源哈希和关联的查询参数定义。

func (*FakePeer) RequestHeadersByNumber

func (p *FakePeer) RequestHeadersByNumber(number uint64, amount int, skip int, reverse bool) error

requestHeadersByNumber实现downloader.peer,返回一批头 由原点编号和关联的查询参数定义。

func (*FakePeer) RequestNodeData

func (p *FakePeer) RequestNodeData(hashes []common.Hash) error

RequestNodeData implements downloader.Peer, returning a batch of state trie 与指定的trie散列对应的节点。

func (*FakePeer) RequestReceipts

func (p *FakePeer) RequestReceipts(hashes []common.Hash) error

requestReceipts实现downloader.peer,返回一批事务 与指定的块哈希相对应的收据。

type LightChain

type LightChain interface {
	//HasHeader verifies a header's presence in the local chain.
	HasHeader(common.Hash, uint64) bool

	//GetHeaderByHash从本地链检索头。
	GetHeaderByHash(common.Hash) *types.Header

	//currentHeader从本地链中检索头标头。
	CurrentHeader() *types.Header

	//gettd返回本地块的总难度。
	GetTd(common.Hash, uint64) *big.Int

	//InsertHeaderChain将一批头插入本地链。
	InsertHeaderChain([]*types.Header, int) (int, error)

	//回滚从本地链中删除一些最近添加的元素。
	Rollback([]common.Hash)
}

LightChain封装了同步轻链所需的功能。

type LightPeer

type LightPeer interface {
	Head() (common.Hash, *big.Int)
	RequestHeadersByHash(common.Hash, int, int, bool) error
	RequestHeadersByNumber(uint64, int, int, bool) error
}

light peer封装了与远程light peer同步所需的方法。

type Peer

type Peer interface {
	LightPeer
	RequestBodies([]common.Hash) error
	RequestReceipts([]common.Hash) error
	RequestNodeData([]common.Hash) error
}

对等体封装了与远程完整对等体同步所需的方法。

type PublicDownloaderAPI

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

PublicDownloaderAPI提供了一个API,它提供有关当前同步状态的信息。 它只提供对任何人都可以使用的数据进行操作的方法,而不存在安全风险。

func NewPublicDownloaderAPI

func NewPublicDownloaderAPI(d *Downloader, m *event.TypeMux) *PublicDownloaderAPI

新建PublicDownloaderAPI创建新的PublicDownloaderAPI。API有一个内部事件循环, 通过全局事件mux从下载程序侦听事件。如果它收到 这些事件会将其广播到通过 InstallSyncSubscription频道。

func (*PublicDownloaderAPI) SubscribeSyncStatus

func (api *PublicDownloaderAPI) SubscribeSyncStatus(status chan interface{}) *SyncStatusSubscription

订阅同步状态创建将广播新同步更新的订阅。 给定的通道必须接收接口值,结果可以是

func (*PublicDownloaderAPI) Syncing

func (api *PublicDownloaderAPI) Syncing(ctx context.Context) (*rpc.Subscription, error)

同步提供此节点何时开始与以太坊网络同步以及何时完成同步的信息。

type StartEvent

type StartEvent struct{}

type SyncMode

type SyncMode int

SyncMode表示下载程序的同步模式。

const (
	FullSync  SyncMode = iota //从完整块同步整个区块链历史
	FastSync                  //快速下载邮件头,仅在链头完全同步
	LightSync                 //只下载邮件头,然后终止
)

func (SyncMode) IsValid

func (mode SyncMode) IsValid() bool

func (SyncMode) MarshalText

func (mode SyncMode) MarshalText() ([]byte, error)

func (SyncMode) String

func (mode SyncMode) String() string

字符串实现字符串接口。

func (*SyncMode) UnmarshalText

func (mode *SyncMode) UnmarshalText(text []byte) error

type SyncStatusSubscription

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

SyncStatusSubscription表示同步订阅。

func (*SyncStatusSubscription) Unsubscribe

func (s *SyncStatusSubscription) Unsubscribe()

取消订阅将从DeloLoad事件循环中卸载订阅。 传递给subscribeSyncStatus的状态通道不再使用。 在这个方法返回之后。

type SyncingResult

type SyncingResult struct {
	Syncing bool                  `json:"syncing"`
	Status  ethereum.SyncProgress `json:"status"`
}

同步结果提供有关此节点当前同步状态的信息。

Jump to

Keyboard shortcuts

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