Documentation ¶
Overview ¶
软件包下载器包含手动全链同步。
Index ¶
- Variables
- type BlockChain
- type DoneEvent
- type Downloader
- func (d *Downloader) Cancel()
- func (d *Downloader) DeliverBodies(id string, transactions [][]*types.Transaction, uncles [][]*types.Header) (err error)
- func (d *Downloader) DeliverHeaders(id string, headers []*types.Header) (err error)
- func (d *Downloader) DeliverNodeData(id string, data [][]byte) (err error)
- func (d *Downloader) DeliverReceipts(id string, receipts [][]*types.Receipt) (err error)
- func (d *Downloader) Progress() ethereum.SyncProgress
- func (d *Downloader) RegisterLightPeer(id string, version int, peer LightPeer) error
- func (d *Downloader) RegisterPeer(id string, version int, peer Peer) error
- func (d *Downloader) Synchronise(id string, head common.Hash, td *big.Int, mode SyncMode) error
- func (d *Downloader) Synchronising() bool
- func (d *Downloader) Terminate()
- func (d *Downloader) UnregisterPeer(id string) error
- type FailedEvent
- type FakePeer
- func (p *FakePeer) Head() (common.Hash, *big.Int)
- func (p *FakePeer) RequestBodies(hashes []common.Hash) error
- func (p *FakePeer) RequestHeadersByHash(hash common.Hash, amount int, skip int, reverse bool) error
- func (p *FakePeer) RequestHeadersByNumber(number uint64, amount int, skip int, reverse bool) error
- func (p *FakePeer) RequestNodeData(hashes []common.Hash) error
- func (p *FakePeer) RequestReceipts(hashes []common.Hash) error
- type LightChain
- type LightPeer
- type Peer
- type PublicDownloaderAPI
- type StartEvent
- type SyncMode
- type SyncStatusSubscription
- type SyncingResult
Constants ¶
This section is empty.
Variables ¶
var ( MaxHashFetch = 512 //每个检索请求要获取的哈希数 MaxBlockFetch = 128 //每个检索请求要获取的块的数量 MaxHeaderFetch = 192 //每个检索请求要获取的块头的数量 MaxSkeletonSize = 128 //骨架程序集所需的头提取数 MaxBodyFetch = 128 //每个检索请求要获取的块体数量 MaxReceiptFetch = 256 //允许每个请求提取的事务处理收据的数量 MaxStateFetch = 384 //允许每个请求提取的节点状态值的数量 MaxForkAncestry = 3 * params.EpochDuration //最大链重组 )
Functions ¶
This section is empty.
Types ¶
type BlockChain ¶
type BlockChain interface { LightChain //hasblock验证块在本地链中的存在。 HasBlock(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 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) 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 ¶
Synchronise尝试将本地区块链与远程对等机同步,两者都是 添加各种健全性检查,并用各种日志条目包装它。
func (*Downloader) Terminate ¶
func (d *Downloader) Terminate()
终止中断下载程序,取消所有挂起的操作。 调用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) RequestBodies ¶
请求体实现downloader.peer,返回一批块体 对应于指定的块散列。
func (*FakePeer) RequestHeadersByHash ¶
requestHeadersByHash实现downloader.peer,返回一批头 由源哈希和关联的查询参数定义。
func (*FakePeer) RequestHeadersByNumber ¶
requestHeadersByNumber实现downloader.peer,返回一批头 由原点编号和关联的查询参数定义。
func (*FakePeer) RequestNodeData ¶
requestNodeData实现downloader.peer,返回一批状态trie 与指定的trie散列对应的节点。
type LightChain ¶
type LightChain interface { //hasheader验证头在本地链中的存在。 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表示下载程序的同步模式。
func (SyncMode) MarshalText ¶
func (*SyncMode) UnmarshalText ¶
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"` }
同步结果提供有关此节点当前同步状态的信息。