以太坊矿工日记 - 执行层和共识层的通讯
在跑Geth和Prysm的时候,在对terminal里跳出来的log不是很有头绪。
以前只看过EVM,但对Execution Layer和Consensus Layer之间怎么沟通的,出块整个的流程等等都不太清楚,所以想从最最小白的角度上整理一下,如果有理解错误望指出!
首先:
Execution Layer + Consensus Layer = Beacon Chain = Etheruem 2.0
接下来,会按照部署节点的顺序开始,部署的时候基本都是从执行层开始的。
执行层 - Execution Layer
执行层大概是分为两个协议栈(Stack)的,你可以想象刚进入一个大型多人在线游戏,每个版块都是不同的游戏场景的规则。
这里主要两个分别是:
发现协议栈 - Discovery Layer:
想象一下你刚加入了这个叫以太坊的大型多人在线游戏,到达新手村的第一站,你遇到了一些NPC叫Bootnodes,他们也叫引导节点;因为他们的地址是硬编码,所以永远在这里,你能马上找到,就像NPC一样。
他们在这里帮onboard新玩家,也就是帮助你找到新朋友(Peer Node),让其他玩家知道你的存在。
于是你上前和NPC说话,你说“Hi,我是xxx”,顺带介绍了一下自己(比如你这个新节点的哈希),你们互相确认过后成为朋友,也就是bonded了,亲密度+1。
接着你向他拿了一张表(Kademila - 一种分布式哈希表算法表),类似附近玩家地图。接着你向每一个新朋友打招呼bond彼此亲密度+1,也就是找到了你的peers。
ENR(以太坊节点记录)是你的游戏身份卡,里面有你的个人信息和冒险历程,
发现协议栈是建在UDP(User Datagram Protocol),UDP像是在世界对话框广播。虽然UDP不是最稳定的通讯方式,但这个最快让其他玩家之后你的存在的方式。在之后的游戏中,会切换成更加稳定的通讯方式(TCP)。
DevP2P
现在你已经算是出新手村了,刚和其他玩家打了招呼。接下来你就不用广播的方式,开始私聊他们了(TCP通讯)。
其他玩家也不是随随便便就能和你组队的,于是你开始一个个交流,介绍自己(协议版本,客户端ID, etc)
每个玩家都有自己遵守的sub-protocols,他们也会把自己支持的sub-protocols通过JSON-RPC公布出来。
共识层 Consensus Layer
共识层是在另外一个P2P的网络上,与执行层一样,新的node都会进入新手村发现阶段,发现其他的peers。执行层会更像玩家间互动,共识层更像在处理一个特殊事件,处理完的结果需要最快速的广播出去结果。
所以stack改用libp2p gossipsub v1用来快速的传播信息,如beacon blocks, proofs, attestations 等等。而Request-response功能还能让其他客户端请求信息,也不是等待信息被广播。
执行层 ←→ 共识层 交流
共识层向执行层下达命令,执行层向共识层反馈结果。两者通过本地远程调用实现连接,两个客户端使用同一个网络身份。
每次有新区块时,都会有区块生产者(Proposer),和非区块生产者(见证者)的区别。以下是区块的生产流程:
references在这里,这个更多就是个人理解的笔记啦。



