阅读源码对深入理解以太坊和区块链的原理是非常有用的,通过阅读源码可以知道交易、区块等核心数据结构的组成,可以对区块链的底层实现原理和运行过程有一个更清晰的认识,很多不明确的问题都可以从源码中找到答案。
网上以太坊的技术资料很多,但多数是关于智能合约和应用开发的,真正涉及底层实现和源码的很少。本文介绍以太坊go-ethereum源码的阅读环境配置,之后会陆续介绍一些源码阅读心得体会。以太坊有8种语言的实现,选择go-ethereum是因为它是以太坊的官方实现版本,包含了以太坊的所有特性,比较权威和全面,它是用go语言编写的,go语言学习起来比较容易,而且可读性也比较好。
阅读源码有一个代码编辑器就够了,但是为了更好的体验和更高的效率,还需要做一些配置,比如代码高亮、代码跳转等。
安装go语言
为了能支持代码跳转,需要安装go语言,其中最重要的是要保证正确设置了GOPATH,这样才能进行代码跳转。
配置编辑器
看代码可以选择你喜欢的代码编辑器,我用的是Visual Studio Code,为了支持go语言代码高亮,需要安装一个插件。在vscode的插件面板中搜索lukehoban,安装即可。
接下来安装一些go语言工具(有些需要翻墙),在命令行中执行以下命令安装:
go get -u -v github.com/nsf/gocode go get -u -v github.com/rogpeppe/godef go get -u -v github.com/zmb3/gogetdoc go get -u -v github.com/golang/lint/golint go get -u -v github.com/lukehoban/go-outline go get -u -v sourcegraph.com/sqs/goreturns go get -u -v golang.org/x/tools/cmd/gorename go get -u -v github.com/tpng/gopkgs go get -u -v github.com/acroca/go-symbols go get -u -v golang.org/x/tools/cmd/guru go get -u -v github.com/cweill/gotests/... go get -u -v golang.org/x/tools/cmd/godoc go get -u -v github.com/fatih/gomodifytags |
下载源码
以太坊代码都托管在github上,它的代码经常更新,每次更新会加入一些新的东西,也可能改变代码的组织架构,所以最好选择一个稳定版阅读,这里以1.5.9版本为例。
首先在GOPATH/src下创建github.com/ethereum目录:
$ mkdir -p $GOPATH/src/github.com/ethereum |
然后进入上面创建的目录,下载go-ethereum项目源码:
$ cd $GOPATH/src/github.com/ethereum $ git clone https://github.com/ethereum/go-ethereum.git $ cd go-ethereum $ git checkout v1.5.9 |
上面通过git clone下载源码,然后通过git checkout检出指定版本的代码,如果想使用其他版本,在git checkout中指定相应的版本号即可。
下载完成后目录结构应该是这样的:
GOPATH/src ├── github.com └── ethereum └── go-ethereum |
路径和目录名一定要与上面的一致,不能放到其他地方或者改成其他名字,因为go语言是按照路径搜索包的。
其实上面最重要的就是要正确设置了GOPATH,并且要把源码放到GOPATH/src中正确的路径中。接下来就可以开始阅读代码了。
如果对以太坊开发有兴趣,推荐两个教程:
1.适合区块链新手的以太坊DApp开发:
http://xc.hubwiz.com/course/5a952991adb3847553d205d1
2.用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建以太坊DApp电商平台:
http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6
登录 | 立即注册