首页
学习
活动
专区
工具
TVP
发布

eos源码赏析(一):Ubuntu下eos代码编译

网上已经有很多关于btc的源码分析了,由于eos主网上线还需时日,且网上关于eos的源码解析较少,斗胆尝试着做一个系列的文,学习eos的源码,也提升一下自己的阅读代码的能力和对新知识的了解能力。要阅读赏析源码首先运行起来,看看大概是个什么样子,这样心里有个底,也就踏实多了。本文为系列文的第一篇,Ubuntu下eos代码的编译,是依据官网文档的指导完成的。

官方文档链接:https://github.com/EOSIO/eos

根据官方文档提示,eos代码仅支持Ubuntu16.04版本或更高版本上进行编译(推荐使用Ubuntu16.10),本文在Ubuntu16.04上实现。在编译eos代码之前,我们首先要获取eos代码编译、运行所需要依赖的工具和库,具体获取方式可在终端中输入以下指令来实现:

sudo apt-get update

wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key

sudo apt-get install clang-4.0 lldb-4.0 libclang-4.0-dev cmake make

libbz2-dev libssl-dev libgmp3-dev

autotools-dev build-essential

libbz2-dev libicu-dev python-dev

autoconf libtool git

其中 LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),而Clang正是我们完成eos代码编译的编译器。Eos代码大量的依赖于boost库,因此我们需要获取boost库并进行编译、安装,同时将boost库的相关信息添加至环境变量,以上步骤可以通过以下指令来实现:

cd~

wget -c'https://sourceforge.net/projects/boost/files/boost/1.66.0/boost_1_66_0.tar.bz2/download'-O boost_1.66.0.tar.bz2

tar xjf boost_1.66.0.tar.bz2

cdboost_1_66_0/

echo"export BOOST_ROOT=$HOME/boost_1_66_0">>~/.bash_profile

source~/.bash_profile

./bootstrap.sh"--prefix=$BOOST_ROOT"

./b2 install

source~/.bash_profile

如果觉得下载慢的话,也可以自己去boost官网下载对应的版本(linux64位)然后按照上面的步骤进行解压、添加环境变量、编译、安装。

接下来我们需要获取并安装secp256k1-zkp,具体我们可以把它看做是一个加解密的库,具体获取、编译、安装可以通过以下方式实现:

cd~

git clone https://github.com/cryptonomex/secp256k1-zkp.git

cdsecp256k1-zkp

./autogen.sh

./configure

make

sudo make install

同时,我们还需要WASM编译器,由于llvm和clang中并未对WASM进行配置,因此需要我们进行手动编译

mkdir~/wasm-compiler

cd~/wasm-compiler

git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git

cdllvm/tools

git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git

cd..

mkdir build

cdbuild

cmake -G"Unix Makefiles"-DCMAKE_INSTALL_PREFIX=.. -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../

make -j4 install

以上获取了eos代码编译所需要使用的工具以及依赖库,在保证以上步骤完成的基础上,我们就可以编译并运行一个eos节点了。在编译之前,我们首先要从git上下载eos的源码,由于eos代码分支较多,我们可以加上—recursive来获取完整的代码,如下指令:

git clone https://github.com/eosio/eos --recursive

获取到代码之后,我们就可以对eos进行编译了

cd~

git clone https://github.com/eosio/eos --recursive

mkdir -p~/eos/build&&cd~/eos/build

cmake -DBINARYEN_BIN=~/binaryen/bin -DWASM_ROOT=~/wasm-compiler/llvm -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib ..

make -j$( nproc )

编译完成之后我们可以在路径~/eos/build/programs看到以下文件夹:

eosiod里面是服务端的区块链组件相关文件。

eosioc里面是区块链的命令行接口相关文件

eosio-launcher里面是网络节点的应用相关文件。

eosiowd里面是eos钱包相关文件。

现在我们cd到eosiod路径下,可以执行eosiod,在执行的过程中可能会产生报错,如果没产生报错的话,可以用ctrl+c停止eosiod的运行,此时我们可以在eosiod文件夹下看到一个名为data-dir的文件夹,其中包含有eosiod的相关配置信息。打开config.ini把以下内容添加进去:

# Load the testnet genesis state, which creates some initial block producers with the default key

genesis-json = /path/to/eos/source/genesis.json

# Enable production on a stale chain, since a single-node test chain is pretty much always stale

enable-stale-production = true

# Enable block production with the testnet producers

producer-name = inita

producer-name = initb

producer-name = initc

producer-name = initd

producer-name = inite

producer-name = initf

producer-name = initg

producer-name = inith

producer-name = initi

producer-name = initj

producer-name = initk

producer-name = initl

producer-name = initm

producer-name = initn

producer-name = inito

producer-name = initp

producer-name = initq

producer-name = initr

producer-name = inits

producer-name = initt

producer-name = initu

# Load the block producer plugin, so you can produce blocks

plugin = eosio::producer_plugin

# Wallet plugin

plugin = eosio::wallet_api_plugin

# As well as API and HTTP plugins

plugin = eosio::chain_api_plugin

plugin = eosio::http_plugin

再次运行./eosiod,然鹅,又一次出现了错误

原来提示我们genesis.json文件路径不对,那么我们可以用Locate genesis来查找我们本机中的genesis.json所在的路径,并将该路径添加至,eos的编译配置文件中去,如下图:

再次运行eosiod,又出现了下图的报错:

原来是提示我们配置文件中enable-stale-production使用了两次或者两次以上,我们再重新打开config.ini将其中一个enable-stale-production注释掉即可。

现在我们再运行一次./eosiod,终于,见证奇迹的时刻到了:

当你看到上图,说明你的第一个eos节点已经运行起来了,还真的是一波三折。

至此我们根据官方文档的指示,在ubuntu16.04环境下完成了eos编译环境的搭建、eos编译工具获取安装、eos代码依赖库获取安装、eos代码的编译及运行,其中以eosiod为例简单的描述了运行中产生的问题及解决方案,当然我们也可以打开config.ini查看eosiod相关的配置信息。

So Welcome to EOSIO!

下一篇将围绕eos的代码结构进行相关分析。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180313G1LVMA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券