Hi Guest

More contents, please log on!

Bitmere.com 区块链技术 Content

以太坊源码照抄 eth/handler

哈哈笑417
12 0 0
不想写了,啊啊啊
eth主要的同步txs,block,header的入口都在这个文件里
type ProtocolManager struct {
        ...
        downloader *downloader.Downloader // 名字是downloader 其实是就是在接受到数据后插入数据库
        fetcher    *fetcher.Fetcher  // 声明新的块
        peers      *peerSet
        SubProtocols []p2p.Protocol
        ...
方法 NewProtocolManager初始化一个ProtocolManager结构
这一步有一个重要的内容就是append(SubProtocols, p2p.Protocols{})
manager.SubProtocols = append(manager.SubProtocols, p2p.Protocol{
        Name:    ProtocolName,
        Version: version,
        Length:  ProtocolLengths,
        Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error {
                peer := manager.newPeer(int(version), p, rw)
                select {
                case manager.newPeerCh
func pm.handle()
这里newPeerCh接收到peer后调用pm.handle, 与pm同步txs,同时p同步pm.whiteList中的header
for number := range pm.whitelist {
        if err := p.RequestHeadersByNumber(number, 1, 0, false); err != nil {
                return err
        }
}
同时进入循环处理来自peer的消息
for {
        if err := pm.handleMsg(p); err != nil {
                p.Log().Debug("Ethereum message handling failed", "err", err)
                return err
        }
}
func pm.handleMsg(p *peer)
这个函数根据msg, err := p.rw.ReadMsg() msg的类型做出不同的处理,塞到fetcher 或者downloader中去等等
func.pm.BroadcastTxs(tx)
找到pm.peers.PeersWithoutTx(tx.Hash()) 然后把tx塞给他
这个函数在 接受到消息时就会被调用
func (pm *ProtocolManager) BroadcastBlock(block *types.Block, propagate bool)
这个就如题吧
参数propagate为true就选出前Math.sqrt(peersLen)个节点,传播出块消息参数propagate为false 简单向所有节点声明我有这个块

调用:range pm.minedBlockSub.Chan() 如果管道里有消息会执行以下代码
pm.BroadcastBlock(ev.Block, true)  // First propagate block to peers
pm.BroadcastBlock(ev.Block, false) // Only then announce to the rest
BitMere.com is Information release platform,just provides information storage space services.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
You have to log in before you can reply Login | 立即注册

Points Rules

Write the first review

哈哈笑417 初中生
  • Follow

    0

  • Following

    0

  • Articles

    11

Promoted