• 简体版 | 繁體版
  • 联系我们
  • 加入我们
  • 关于我们
  •  
  • 首页
  • 快讯
  • 价值号
  • 视频
  • 专题
  • 入驻价值号
  • 碳链APP
    微信公众号

    扫码下载App

  • 登录
  • 微信公众号

    微信公众号

导航
  • 首页
  • 快讯
  • 区块链+
  • 价值号
  • 视频
  • 专题
  • DeFi优选
碳链价值APP
专注服务于金融科技和区块链
立即打开

知道创宇:以太坊主动数据同步简析

知道创宇区块链安全实验室知道创宇区块链安全实验室  •  2022-03-23
以太坊数据同步是一个复杂的流程,需要节点、数据主体、以太坊P2P通信协议、执行器通力合作才能完成。数据主体如何确定需要同步的数据呢?不同数据又是否需要分类同步呢?

一、前言

开门见山,以太坊数据同步是以节点(peer)作为数据载体存放和传输主要以Header,Body,Reciept组成的数据主体,通过以太坊p2p通信协议管理数据同步事务,最后交给执行器(主动同步会交给Downloader,被动同步会交给Fetcher)执行最后的数据下载任务。

那么问起数据主体我们进行同步需要同步哪些数据?不同数据又是否需要分类同步?

知道创宇区块链安全实验室 进行了全面而详细的分析。

二、数据主体:

进行数据同步首先需要明确我们同步的数据主体由什么组成,笼统来分有两类,一类不需要节点发送主动同步请求,节点会在完成数据打包的时候自行向网络广播,这一类数据有三种——完整block,区块hash,和交易Transaction。而我们今天重点探讨下一类数据。

第二类数据是需要节点主动发送同步请求随后其他节点响应才能进行同步的数据,除了第一类数据其他需要同步的数据都属于第二类,所以可以说他的种类更加繁杂,而其中最重要的也有三种——区块头Header,区块体Body,交易回执Receipt(具体代码⬇⬇⬇),跟第一类不同这三者可以说都是完整区块的某一组成部分,这也显示了主动同步希望节点进行数据同步时范围自由可控,能够优先同步必要数据而放弃同步暂时非必要的数据。

⬆Header表示区块头,在区块里扮演这相当重要的角色,ParentHash会记录上一个区块的区块hash,uncleHash会记录叔块hash,coinbase则标识矿工地址。Root,Txhash,ReceiptHash这三个分别是state trie,tx trie,Receipt.trie三个前缀树的根节点RLP编码hash一个用于描述世界状态,一个用于描述交易,一个用于描述交易回执。bloom是区块头中的布隆过滤器用于快速判断目标hash是否在某个集合中。Header中以上数据都是区块头用来对区块以及区块中重要数据模块利用hash进行标识的。剩下的数据则各有他用不细赘述。可以看出一个区块头其实已经将一个区块框架基本描述出来了这也为后面谈到的数据同步策略埋下了伏笔。

⬆Body就比较简明了,里面包含一组交易对象,和一个叔块的区块头数组。

⬆Receipt是区块中所有交易对象在执行完成后生成的一个数组,用于记录交易处理信息。他们会在生成后被逐个插入到Receipt trie中同时也会生成区块头中的ReceiptHash。一个交易回执记录了三部分信息用于交易的管理和标识,第一部分为共识部分,PostState,Status,CumulativeGasUsed,Bloom,Logs只有这五个数据在ReceiptRLP会被encode构成回执hash随后回执hash会参与共识的校验,第二部分数据是交易部分,TxHash指的是交易回执所对应的交易哈希,,ContractAddress是当这笔交易是部署新合约时记录新合约的地址,GasUsed表示该笔交易的Gas使用量,第三部分是区块部分,他记录的是BlockHash区块哈希,BlockNumber当前区块数,TransactionIndex 该交易在区块中的序号。对于Receipt在数据同步策略中有着直观的区别,下文说到的fullSync和fastSync最直观的区别就在于到底是同步对端的Receipt,还是本地自行生成Receipt。

三、数据载体

数据传输载体为peer节点,这个数据载体peer,如果你在源码里面去认真寻找你会发现,某些角落里就能找到一个peer.go.首先我列出有关数据同步模块我所找到的peer结构。有p2p/peer.go,eth/peer.go ,les/peer.go ,eth/downloader/peer.go。以太坊的网络也有传输层,会话层,表示层和协议层。

previewpreview

那p2p包中的peer扮演了一个底层的节点模型,传输层会基于UDP协议发现相邻peer并维持peer连接,还会基于TCP协议建立peer之间的信息交流通道。会话层Peer管理主要管理的是节点和上层子协议的交互,而NodeTable管理主要管理的是底层基于udp协议构建的节点连接表table。所以p2p这一层的peer节点他需要能获取和开启子协议的能力,还需要有ping通其他节点的能力当然还要去接受其他节点消息。这就体现在p2p/peer.go中的3个重要功能模块,pingLoop,readLoop,startProtocols而这也是peer.run()方法里的3个函数。

可以看出上面是底层peer结构,下图则是子协议层的peer结构,不同的子协议层会有不同的peer结构,这也就是为什么会有eth/peer.go和les/peer.go毕竟不同子协议应用于不同的数据场景。

我们可以看出数据载体有底层peer,和子协议层peer,而进行数据同步需要利用通信协议管理连接两层peer,由底层实现peer的消息分发,消息的监听,子协议层peer执行数据的下载和同步,而这两层之间就需要非常重要的protocolManger进行管理和沟通。

四、数据同步流程

那么如何启动protocolManager呢?我们上面介绍了peer结构,他主要是代表远程其他节点,在以太坊中还有一类同样是代表了节点的结构Node,他主要代表了本地节点自身会稍微有点区别,而节点想要启动p2p网络就要依靠本地Node模块,其中利用Node.Start()函数开启了两个任务,一个是启动Ethereum Service,其中的Ethereum.start就启动了protocolmanager;另一个是启动p2p.Server,新建并刷新K桶,开启UDP端口监听,同时监听TCP端口,处理从远端节点发来的message。

previewpreview

当protocolManager启动了之后,他就开始需要连接底层逻辑层peer(p2p)和顶层协议层peer(eth):

当启动了protocolManager,首先节点会进行初始化,调用NewProtocolManager,初始化的过程中会调用SubProtocol函数向地城p2p.peer获取一个消息读写通道,然后再构建一个消息处理器Handle,Handle,他不仅会接受请求同步的消息,也会接受节点响应的消息,在protocolManger的start方法中他会启动一个定期同步协程syncer,他会根据消息通知调用fecher或者downloader执行器执行数据同步。

  • 数据同步模式
  1. 主动数据同步指的是本地节点自发的向相邻节点请求区块数据,数据入口在eth/downloader/downloader,和eth/handler里
  2. 被动数据同步指本地节点收到其他节点数据同步消息(Message)而后请求区块数据,数据入口在eth/fetcher/fetcher.go
  • 主动同步流程我们以主动同步为例,当调用downloader执行器时,他会先调用findAncestor找到本地链和远程链的共同祖先,从共同祖先开始同步,他会配置4个fetchers,分别是fetcherHeader,fetcherBodies,fetcherReceipts,ProcessHeaders最后根据同步模式调用收到processFullSyncContent 和processFastSyncContent最后调用spawnSync执行同步。

previewpreview

以上为同步过程的源码,从源码里可以看出主要的下载任务是集中在他构造的可拓展fetchers里,他是一个fetcher任务队列。而根据不同的数据同步策略他的fetcher任务队列不仅构造不同,fetcher之间的协作流程也不尽相同。

五、数据同步策略

fetcher任务队列的作用概括起来就是在进行,数据填充,数据组装,和最后的数据插入。而其中填充什么样的数据,那些数据需要组装,什么时候插入数据,均由一个重要的数据结构mode进行标识,他代表了数据同步策略,主要分为三种。

  1. lightSync:轻节点同步,数据填充的时候只填充区块头数据,不需要进行数据组装,调用insertHeaderchain直接插入区块头。
  2. fullSync:全节点同步,数据填充的时候需要填充区块头Header,区块体Body,但不填充交易回执Receipt,将数据组装到结果集Result,之后调用importBlockResults将结果集内数据插入到主链,和lightSync区别在于轻节点同步没有区块体,所以他不会执行和验证交易而fullSync全节点同步会在插入数据的同时执行交易并验证这也是他为什么同步速度慢的原因,之后会自行生成交易回执Receipt,所以他在填充组装的时候不需要Receipt参与。
  3. fastSync:快速同步,数据填充的时候会填充Header,Body,同时也会填充Receipt,然后组装3个数据,执行数据插入,而在执行数据插入的时候和fullSync,lightSync完全不同,他调用的commitFastSyncData这个函数和fullSync全节点同步调用的importBlockResults不一样他不会执行交易而只是提交同步数据,所以他为了保证安全加了一步验证获取来的交易回执。而这也才是快速同步的一部分,快速同步为了保证数据的安全性古老的区块会使用上述方法同步,对于时间上来说比较新的区块会使用fullSync的同步模式进行同步。用而言之就是fastSync会快速同步一大部分而一小部分还是会按照fullSync的同步模式同步。

六、结语

以太坊数据同步非常复杂,他涵盖了其网络架构,通信协议管理,数据传输通道的相互配合,数据同步策略的安排,以及加速数据同步速率的算法。其中还有众多细节和逻辑关系。而数据同步是区块链节点和外界通信的基石他还有更多的架构彩蛋令人拍案叫绝。期待后续文章和大家分享。

展开全文
打开碳链价值APP  查看更多精彩资讯
声明:本文内容为作者独立观点,不代表碳链价值立场,且不构成任何投资理财建议。
0 0
以太坊知道创宇

扫一扫,分享到微信

相关推荐

以太坊2.0:从PoW迈向PoS的征途 深度

以太坊2.0:从PoW迈向PoS的征途

老雅痞 2022-07-02 深度
以太坊
因此,ETH2.0的升级计划也理所当然的成为当下加密世界最受关注的热点之一。而该次升级计划的核心之一就在于验证机制将由PoW转变为PoS。
下半年数字货币值得关注的几个方向 价值号

下半年数字货币值得关注的几个方向

一只团子 2022-07-01 价值号
比特币以太坊layer2Cosmos
上半年的失去能不能在下半年挽回?
以太坊分叉成功,Sepolia 测试网准备试用 Merge 价值号

以太坊分叉成功,Sepolia 测试网准备试用 Merge

币圈一级市场阿生 2022-07-01 价值号
以太坊Medalla测试网
以太坊分叉成功,Sepolia 测试网准备试用 Merge

碳链快讯更多 ›

2022-07-04

CoinShares宣布收购拿破仑资产管理公司

2022-07-04

数字银行YAP完成4100万美元融资,Aljazira Capital等参投

2022-07-04

加密借贷平台Vauld暂停平台提款,或将进行重组

2022-07-04

NFT巨鲸在NFTfi抵押147个CryptoPunks,共贷出约316万美元

2022-07-04

​彭博社:Curve 3pool中USDT流动性占比为65%,投资者对Tether仍持谨慎态度

2022-07-04

欧洲央行计划提高加密货币规则的协调性要求

2022-07-04

QQ音乐测试版本上线虚拟社区“Music Zone”

2022-07-04

欧易OKX推出大宗组合交易平台:无滑点、多腿组合交易

2022-07-04

East Ventures新基金完成5.5亿美元募资,将专注金融科技和Web3领域

2022-07-04

吉利成立区块链科技公司,注册资本1亿元

2022-07-04

俄罗斯加密媒体bits media遭该国监管机构封锁

2022-07-04

特斯拉或将在第二季度财报中报告4.4亿美元的比特币减值损失

2022-07-04

魏鹏举:金融化并非是数字藏品真正的问题,传统的文化资产、艺术资产就可以金融化

2022-07-04

Voyager拥有的加密资产及现金约16.5亿美元,对三箭资本的索赔超6.5亿美元

2022-07-04

外媒:Tether卖空者数量正在增加

2022-07-04

在中国互联网监管机构注册的区块链服务总数达到1821项

2022-07-04

中非共和国正式推出国家加密货币Sango

2022-07-04

接陕西省工商局通知,数藏平台“赛博艺术藏品”暂关闭市场

2022-07-03

美图:上半年净亏损同比增加超过99%,主要因为已购买加密货币减值

2022-07-03

传中国邮政测试数字藏品频道

2022-07-03

可口可乐在Polygon网络上推出骄傲系列NFT

2022-07-03

分析师:比特币或面临新一轮下跌,将短暂回调至1.6万美元后反弹

2022-07-03

全聚德将与中青报联合发行数字藏品

2022-07-03

全国首笔跨境电商数字人民币普惠贷款落地苏州

2022-07-03

以太坊转账成本持续下降,Gas费用触及19个月低点

2022-07-03

Celsius裁员约150人,占总员工数的四分之一

2022-07-03

韩国检察机关将对Terra崩盘事件开启第二轮全面调查

2022-07-03

MicroStrategy当前BTC持仓价值较三个月前减少58%

2022-07-03

经济部长辞职后阿根廷投资者寻求加密货币对冲,USDT法币成交量飙升

2022-07-03

Ripple报告:区块链将对企业产生重大影响

2022-07-03

Ripple围绕CBDC互操作性和金融普惠性推出黑客马拉松,奖金达19.7万美元

2022-07-03

三箭旗下场外交易平台TPS Capital仍在运行,但其复杂所有权结构或加大债权人追款难度

2022-07-02

Peter Schiff寻求出售旗下Euro Pacific International Bank

2022-07-02

英伟达GPU二手市场价格下跌50%,购买量同步下降

2022-07-02

FatMan:新加坡登记记录显示,三箭资本控制着5处高端房产

2022-07-02

Custodia Bank CEO:行业不良行为和监管机构不作为导致加密货币崩溃

2022-07-02

Cosmos开发公司Ignite裁员超50%

2022-07-02

香港回归25周年系列策划《风继续吹》数字藏品正式上线

2022-07-02

哥伦比亚国家土地局集成基于Ripple XPRL区块链的数字土地注册系统

2022-07-02

6月以太坊链上NFT销售额仅为6.8亿美元,达2021年8月以来低点

2022-07-02

三箭资本已向纽约法院申请破产保护

2022-07-02

BlockFi与FTX US达成总价值6.8亿美元的信贷额度和收购选择权协议

2022-07-02

Meta将于9月关闭其Novi加密钱包项目试点,并建议用户尽快提款

2022-07-02

Voyager Digital宣布暂停交易、存取款及忠诚度奖励

2022-07-02

Ripple完成7亿枚XRP锁定,价值超2.1亿美元

2022-07-02

美联储戴利:支持美联储7月再加息75个基点,预计联邦基金利率到2022年年底将被提升至3.1%

2022-07-01

火币创始人李林寻求出售其在火币中的股份

2022-07-01

云创作工具Echo3D完成550万美元融资,Qualcomm Ventures领投

2022-07-01

以太坊扩容项目AltLayer完成720万美元种子轮融资,Polychain Capital等领投

2022-07-01

全球500位超级富豪上半年财富总计缩水1.4万亿美元,创史上最大跌幅

推荐文章

  • 元宇宙土地:数字房地产为什么值钱?

    2022-06-03

  • 创始人自述:我是如何从零开始构建一个投资DAO?

    2022-06-03

  • 从监管视角解析NFT如何赋能实体产业

    2022-06-02

  • 来自 a16z 联合创始人的加密课程:Web3 应该从 Web1 学到些什么?

    2022-06-02

  • Consensys:代币设计和发行的 30 个注意事项

    2022-06-01

价值号更多 ›

吉时通信
吉时通信
文章: 133
  • 以太坊合并:如何影响显卡和区块链行业?
  • 以太坊合并的底层观察:区块结构和MEV
  • 宏观视角解析LUNA和UST崩盘:稳定币的路在何方?
链集市ChainMarket
链集市ChainMarket
文章: 177
  • 区块链产业周刊丨全球区块链商业委员会与全球数字金融合并;最高人民法院发布区块链司法应用相关意见;蚂蚁链区块链应用专利获国家授权
  • 区块链将如何帮助我们解决气候问题?
  • 区块链产业周刊丨国家级数据云平台“人民云”正式上线;徐工机械成立包含区块链技术的国重实验室;欧盟推进数字欧元发展阶段
Unitimes
Unitimes
文章: 380
  • 深度研究:如何设计代币经济学框架?
  • 创作者经济:正统性危机之下的变革之路
  • 哈佛商业评论:Web3的机遇和挑战
换一批

热门标签

新基建 比特币 以太坊 矿业 DeFi 共识对话 区块链+ 研报 美联储 央行数字货币 无限QE 加密衍生品 AI 云计算 大数据 5G 政策 交易所 稳定币 电子支付 Libra 算力产业 联盟链 公链 区块链 加密货币 Nervos Cosmos EOS STO

邮件订阅

及时、全面、专业、准确的资讯与数据,致力于为区块链爱好者以及数字货币投资者提供最好的服务。

App内打开

邮件订阅

及时、全面、专业、准确的资讯与数据,致力于为区块链爱好者以及数字货币投资者提供最好的服务。

Moshou

碳链价值是集资讯、行情、数据于一身的区块链信息服务平台,我们追求及时、全面、专业、精确的资讯与数据,致力于为区块链创新者和数字货币投资者提供优质的服务。

关于我们 加入我们 联系我们 隐私条款
微信公众号

扫一扫关注微信公众号

Copyright © 2018-2020 碳链价值 京ICP备18046423号
下载碳链App

下载碳链App

微信公众号

微信公众号

微信公众号

微信公众号

打赏文章作者

支付宝打赏二维码 支付宝扫一扫打赏
微信打赏二维码 微信扫一扫打赏

# 热门搜索 #

CBDC 比特币 DeFi 以太坊 区块链