主页 > imtoken和比特派 > eos源码赏析(一):Ubuntu下eos代码编译

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

imtoken和比特派 2023-11-16 05:11:46

mapreduce 2.0源码分析与编程实战_prototypejs源码分析_btc源码分析

网上已经有很多关于btc的源码分析了。 由于eos主网上线还需要时间,而且网上关于eos的源码分析很少,所以我会尝试做一个系列文章,学习eos的源码,提高自己的能力阅读代码和理解新知识的能力。 阅读欣赏源码,先运行一下,看看长什么样子,这样心里才有底线,心里会踏实一些。 本文是该系列的第一篇文章。 Ubuntu下eos代码的编译是按照官网文档的指导完成的。

官方文档链接:

根据官方文档,eos代码只支持在Ubuntu 16.04及以上版本编译(推荐Ubuntu 16.10),本文在Ubuntu 16.04上实现。 在编译eos代码之前,我们首先要获取eos代码编译运行所需要的工具和库。 具体的获取方式可以在终端中输入以下命令来实现:

sudo apt-get 更新

wget -O -

sudo apt-get 安装 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++编写btc源码分析,用于优化编译器(compile-time)、链接时(link-time)、运行时(run)用任何编程语言编写的程序。 -time)和空闲时间(idle-time),而Clang就是我们用来编译eos代码的编译器。 Eos代码严重依赖boost库,所以我们需要获取boost库,编译安装,并将boost库的相关信息添加到环境变量中。 上述步骤可以通过以下指令实现:

光盘~

wget -c '#39; -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

来源 ~/.bash_profile

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

./b2 安装

来源 ~/.bash_profile

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

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

光盘~

混帐克隆

cdsecp256k1-zkp

./autogen.sh

。/配置

制作

须藤安装

同时,我们还需要 WASM 编译器。 由于llvm和clang中没有配置WASM,所以我们需要手动编译

mkdir ~/wasm-编译器

cd ~/wasm-编译器

git clone --depth 1 --single-branch --branch release_40

cdllvm/工具

git clone --depth 1 --single-branch --branch release_40

光盘..

mkdir 构建

光盘构建

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

使-j4安装

上面已经获取了eos代码编译需要的工具和依赖库。 确保完成以上步骤后,我们就可以编译运行一个eos节点了。 在编译之前,我们首先要从git上下载eos的源码。 由于eos代码有很多分支,我们可以加上--recursive得到完整的代码,如下:

git clone --recursive

拿到代码后,我们就可以编译eos了

光盘~

git clone --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 ..

制作-j$(nproc)

编译后btc源码分析,我们可以在~/eos/build/programs路径下看到如下文件夹:

mapreduce 2.0源码分析与编程实战_btc源码分析_prototypejs源码分析

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

eosioc包含区块链命令行界面的相关文件

eosio-launcher 包含网络节点的应用程序相关文件。

eosiowd 包含 eos 钱包相关文件。

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

# 加载测试网创世状态,它使用默认密钥创建一些初始区块生产者

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

# 在陈旧的链上启用生产,因为单节点测试链几乎总是陈旧的

启用陈旧生产=真

# 启用测试网生产者的区块生产

生产者名称 = inita

生产者名称=initb

生产者名称=initc

生产者名称=initd

生产者名称=初始

生产者名称=initf

生产者名称=initg

生产者名称 = inith

生产者名称 = initi

生产者名称=initj

生产者名称=initk

生产者名称=initl

生产者名称=initm

生产者名称=initn

生产者名称= inito

生产者名称=initp

生产者名称=initq

生产者名称 = initr

生产者名称 = inits

生产者名称=initt

生产者名称 = initu

# 加载块生产者插件,这样你就可以生产块

插件 = eosio::producer_plugin

# 钱包插件

插件 = eosio::wallet_api_plugin

# 以及 API 和 HTTP 插件

插件 = eosio::chain_api_plugin

插件 = eosio::http_plugin

再次运行./eosiod,还是报错

btc源码分析_prototypejs源码分析_mapreduce 2.0源码分析与编程实战

原来是genesis.json文件的路径不对,所以我们可以使用Locate genesis找到本机genesis.json的路径,将路径添加到eos的编译配置文件中,如图下图:

mapreduce 2.0源码分析与编程实战_btc源码分析_prototypejs源码分析

再次运行eosiod,出现如下错误信息:

prototypejs源码分析_mapreduce 2.0源码分析与编程实战_btc源码分析

原来是提示我们在配置文件中enable-stale-production被使用了两次以上。 我们可以重新打开config.ini,把其中的enable-stale-production注释掉。

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

btc源码分析_mapreduce 2.0源码分析与编程实战_prototypejs源码分析

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

至此,我们完成了eos编译环境的搭建,eos编译工具的获取和安装,eos代码依赖库的获取和安装,在ubuntu16.04环境下eos代码的编译和运行。以官方文档的说明,并以eosiod为例进行简单说明,了解运行过程中出现的问题及解决方法,当然我们也可以打开config.ini查看eosiod相关的配置信息。

欢迎来到 EOSIO!