以太坊细节(2):msg到达时间的来源

本文探讨了以太坊中消息到达时间的处理,从消息中ReceivedAt字段的写入逻辑到区块中ReceivedAt的赋值过程,详细解析了如何跟踪和判断消息在网络中传播的时间,对于理解以太坊网络的运行机制和时间同步问题具有参考价值。
摘要由CSDN通过智能技术生成

背景

有些依赖时间弱同步假设的共识,比如PBFT,DPOS,和一些元胞自动机衍生(MoCA)的共识。在实现的时候需要得到消息的到达时间。
学习了一下以太坊如何处理区块到达时间的。这里记录一下。

消息中ReceivedAt的写入逻辑

一切的起点是p2p模块的server.run()函数
从这里开始,geth启动了p2p服务器。

func (srv *Server) run(dialstate dialer) {
	srv.log.Info("Started P2P networking", "self", srv.localnode.Node().URLv4())
	...
				go srv.runPeer(p)
				peers[c.node.ID()] = p
    ...
}

调用runPeer函数 p2p/server.go, L1044 - L1067

func (srv *Server) runPeer(p *Peer) {
	...
	remoteRequested, err := p.run()
    ...
}

p2p服务器通过runPeer函数,调用了peerrun函数
启动节点。
run函数中启动了各种监听,

func (p *Peer) run() (remoteRequested bool, err error) {
	...
	go p.readLoop(readErr)
	go p.pingLoop()
    ...
}

跟进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱多多白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值