本文csdn博客链接为:http://blog.csdn.net/screscent/article/details/79416251
先介绍一篇文章,也是介绍以太坊p2p通信的,http://blog.csdn.net/teaspring/article/details/78455046
这篇文章写的非常好。里面对以太坊源码的分析也非常到位,在代码框架上,表达非常清晰。
那么为何我还要写这篇源码分析呢,在分析源码的同时,也有看这篇文章,但这篇文章主要是在代码框架上,代码的细节方面,还有待补充。这就是我写博客的初衷。
那么正文开始
完整的代码目录,说明,这个版本的源码为go-ethereum-release-1.0.0版本。关于为何用这个版本,版本越低,其源码复杂性相对会比较简单,但原理应该不会相差太大,这个是考虑的初衷。
那么我们就开是进入源码
先从入口开始:
github.com/ethereum/go-ethereum/eth/backend.go中
这里面有两个很重要的成员。
ProtocolManager 是p2p通信的管理模块
P2p.Server是p2p的传输模块
下面看New这个函数,为
github.com/ethereum/go-ethereum/eth/backend.go中
这个函数是构建入口,这里简单的看下为何是入口
github.com/ethereum/go-ethereum/cmd/geth/main.go中
Console在哪里呢,我们看init函数
看下start
github.com/ethereum/go-ethereum/cmd/geth/main.go中
在github.com/ethereum/go-ethereum/cmd/utils/cmd.go中
上面的main.go中的入口从new到start。
言归正传,回到
github.com/ethereum/go-ethereum/eth/backend.go
在New函数中
func New(config *Config) (*Ethereum, error) {
Ethereum结构体的初始化
下面是ProtocolManager的初始化
下面是p2p.Server的初始化。
其中最重要的东西为Protocols的传递。这里将上层的protocolManager与底层的p2p连接在一起。
然后是Start函数
龚浩华 初稿
月牙寂 道长
QQ 29185807
2018年03月01日