前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >EOS开发环境搭建,如何编译安装构建EOSIO

EOS开发环境搭建,如何编译安装构建EOSIO

作者头像
笔阁
发布于 2018-09-04 09:43:50
发布于 2018-09-04 09:43:50
1.5K00
代码可运行
举报
文章被收录于专栏:极客编程极客编程
运行总次数:0
代码可运行

获取代码

下载所有的EOSIO代码,clone eos库和所有的子模块。

shell 命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/EOSIO/eos --recursive

如果忘记加 --recursive 参数也没关系,随后也可以用命令 clone 所有子模块。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git submodule update --init --recursive

安装构建设置

EOSIO可以在多个平台上安装构建,并有各种路径进行安装构建。大多数用户更喜欢使用自动化脚本或docker,而更高级的用户或希望部署公共节点的用户可能需要手动方法。构建内容生成在eos/build文件夹中。可执行文件可以在eos/build/programs文件夹的子文件夹中找到。

  • 自动化脚本 :适合于大多数开发人员,这个脚本是基于Mac OS和许多Linux版本的。
  • docker-compose方式 :到目前为止最快的安装方法,可以在两分钟内启动并运行一个节点。也就是说,它需要一些额外的本地配置来进行开发,以便顺利运行并遵循我们提供的教程。
  • 手动安装构建:适用于那些可能对自动化脚本有冲突的环境,或者希望对其构建进行更多控制的开发者。
  • 可执行文件安装构建:一个可选的make install步骤,可以使本地开发更加友好。

如果你是新手,建议直接看通过docker快速构建安装EOSIO

自动化脚本安装

有一个自动化的构建脚本,可以安装所有依赖项并构建EOSIO。脚本支持以下操作系统。

我们正在支持和将来发布会支持的Linux/UNIX发行版。

  • Amazon 2017.09 和更高版本。
  • Centos 7。
  • Fedora 25和更高版本(推荐 Fedora 27)。
  • Mint 18。
  • Ubuntu 16.04(推荐 Ubuntu 16.10)。
  • MacOS Darwin 10.12和更高版本(推荐 MacOS 10.13.x)。

eos目录运行安装构建脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd eos
./eosio_build.sh
docker-compose方式构建

如果你只是想跑起来,可能通过docker快速构建安装EOSIO更适合。否则你想了解更高级的构建,那么继续。

安装依赖项
Docker的要求
  • 至少7GB RAM(DOCK->首选项->高级->内存->7GB或以上)
  • 如果安装构建失败,请确保你已经调整了Docker内存设置,然后再试一次。
构建eos镜像
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/EOSIO/eos.git --recursive  --depth 1
cd eos/Docker
docker build . -t eosio/eos

以上将在默认情况下构建对主分支的最新提交。如果想针对特定的分支/tag,可以使用生成参数。例如,如果希望根据v1.0.0 tag生成Docker镜像,可以执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker build -t eosio/eos:v1.0.0 --build-arg branch=v1.0.0 .

默认情况下,eosio.system的 symbol 设置为SYS。在构建Docker镜像时,可以使用 symbol 参数来做到这一点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker build -t eosio/eos --build-arg symbol=ABC.
在 docker 中启动 nodeos
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh -e arg1 arg2

默认情况下,所有数据都保存在docker卷中。如果数据过时或损坏,则可以删除它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker inspect --format '{{ range .Mounts }}{{ .Name }} {{ end }}' nodeos
fdc265730a4f697346fa8b078c176e315b959e79365fc9cbd11f090ea0cb5cbc
$ docker volume rm fdc265730a4f697346fa8b078c176e315b959e79365fc9cbd11f090ea0cb5cbc

或者,可以直接将宿主目录安装到docker中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --name nodeos -v /path-to-data-dir:/opt/eosio/bin/data-dir -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh -e arg1 arg2
获取区块链信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl http://127.0.0.1:8888/v1/chain/get_info
在docker中启动nodeos和keosd
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker volume create --name=nodeos-data-volume
docker volume create --name=keosd-data-volume
docker-compose up -d

docker-compose -d之后,将启动nodeoskeosd两个服务。nodeos服务会将端口8888和9876提供给主机。kesod服务不向主机公开任何端口,只有当在cleos容器中运行cleos时,cleos才可以访问它。

执行cleos命令

你可以运行cloes通过bash别名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alias cleos='docker-compose exec keosd /opt/eosio/bin/cleos -u http://nodeosd:8888 --wallet-url http://localhost:8900'
cleos get info
cleos get account inita

如果你想在任何地方使用cleos命令,你可以在docker-compose.yml指定路径:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alias cleos='docker-compose -f path-to-eos-dir/Docker/docker-compose.yml exec keosd /opt/eosio/bin/cleos -u http://nodeosd:8888 --wallet-url http://localhost:8900'

提交exchange示例合约:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cleos set contract exchange contracts/exchange/

如果你不需要keosd,可以停止使用keosd服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker-compose stop keosd
开发构建客户合约

由于eosio/eos镜像不包含合约开发所需的依赖关系(这样设计是为了保持较小镜像尺寸),所以需要使用 eosio/eos-dev镜像。此镜像包含使用eosiocpp构建合约的所需二进制文件和依赖项。

可以使用Docker Hub上可用的镜像或进入到dev文件夹并手动构建镜像。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd dev
docker build -t eosio/eos-dev .
修改默认配置

可以使用docker compose更改默认配置。例如,创建一个备用配置文件config2.inidocker-compose.override.yml,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: "2"

services:
  nodeos:
    volumes:
      - nodeos-data-volume:/opt/eosio/bin/data-dir
      - ./config2.ini:/opt/eosio/bin/data-dir/config.ini

然后重启docker:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker-compose down
docker-compose up
删除data-dir

docker-compose创建的data卷可以被删除:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker volume rm nodeos-data-volume
docker volume rm keosd-data-volume
Docker Hub

Docker Hub 镜像来自docker hub

建立一个新的docker-compose.yaml文件内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: "3"

services:
  nodeosd:
    image: eosio/eos:latest
    command: /opt/eosio/bin/nodeosd.sh --data-dir /opt/eosio/bin/data-dir -e
    hostname: nodeosd
    ports:
      - 8888:8888
      - 9876:9876
    expose:
      - "8888"
    volumes:
      - nodeos-data-volume:/opt/eosio/bin/data-dir

  keosd:
    image: eosio/eos:latest
    command: /opt/eosio/bin/keosd --wallet-dir /opt/eosio/bin/data-dir --http-server-address=127.0.0.1:8900
    hostname: keosd
    links:
      - nodeosd
    volumes:
      - keosd-data-volume:/opt/eosio/bin/data-dir

volumes:
  nodeos-data-volume:
  keosd-data-volume:

注意:默认版本是最新版本,可以将其更改为你想要的版本。

  • 运行: docker pull eosio/eos:latest
  • 运行: docker-compose up
EOSIO 1.0 Testnet

我们可以很容易地建立一个EOSIO 1.0本地Testnet测试链,使用docker镜像。只需运行以下命令:

注意:如果你想使用mongo db插件,你必须首先在data-dir/config.ini启用它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# pull images
docker pull eosio/eos:v1.0.0

# create volume
docker volume create --name=nodeos-data-volume
docker volume create --name=keosd-data-volume
# start containers
docker-compose -f docker-compose-eosio1.0.yaml up -d
# get chain info
curl http://127.0.0.1:8888/v1/chain/get_info
# get logs
docker-compose logs -f nodeosd
# stop containers
docker-compose -f docker-compose-eosio1.0.yaml down

默认情况下,blocks数据存储--data-dir下,默认情况下钱包文件存储--wallet-dir下,当然,你可以根据需要更改这些文件路径。

关于MongoDB插件

目前,MongoDB插件在config.ini中被禁用,默认情况下,必须在config.ini中手动更改它,或者可以在docker-compose文件中将config.ini文件mount到/opt/eosio/bin/data-dir/config.ini

手动安装构建

若要手动生成,请使用以下步骤在eos文件夹中创建build文件夹,然后执行build。下面的步骤假设eos存储库被clone到home(即,~)文件夹中。还假定已经安装了必要的依赖项。请参见手动安装依赖项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~
mkdir -p ~/eos/build && cd ~/eos/build

在Linux平台上,使用这个cmake命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmake -DBINARYEN_BIN=~/binaryen/bin -DWASM_ROOT=~/wasm-compiler/llvm -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib -DBUILD_MONGO_DB_PLUGIN=true ..

在MacOS上,使用这个cmake命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmake -DBINARYEN_BIN=~/binaryen/bin -DWASM_ROOT=/usr/local/wasm -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib -DBUILD_MONGO_DB_PLUGIN=true ..

然后在所在平台上执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make -j$( nproc )

也支持Out-of-source安装构建。若要在编译器中重写默认选择,请将这些标志添加到CMake命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-DCMAKE_CXX_COMPILER=/path/to/c++ -DCMAKE_C_COMPILER=/path/to/cc

对于调试模式的安装构建,添加-DCMAKE_BUILD_TYPE=Debug。其他常见的构建类型包括ReleaseRelWithDebInfo

可执行文件安装构建

为了便于智能合约开发,可以使用make install将目标内容安装到/usr/local中。此步骤要从build目录下运行的。需要适当的安装权限。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd build
sudo make install
系统需求(包括所有平台)
  • 内存 7GB
  • 硬盘 20GB

安装构建的验证

可选地,可以对我们的构建运行一组测试,以执行一些基本验证。要在构建后运行测试套件,启动mongod然后运行make test

在 Linux 平台上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~/opt/mongodb/bin/mongod -f ~/opt/mongodb/mongod.conf &

在 MacOS 平台上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/usr/local/bin/mongod -f /usr/local/etc/mongod.conf &

然后执行下面的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd build
make test

另:**《EOS智能合约与DApp开发入门》**教程已经上线,欢迎大家关注:

EOS教程

本教程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用React和EOS的各知识点完成一个便签DApp的开发。

汇智网原创翻译,转载请标明出处。原文

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
03.Scala:样例类、模式匹配、Option、偏函数、泛型
样例类是一种特殊类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类),在后续要学习并发编程和spark、flink这些框架也都会经常使用它。
Maynor
2021/04/09
2.2K0
Scala 高阶(九):Scala中的模式匹配
本次主要分享Scala中关于模式匹配的内容,Scala中的模式匹配类似于Java中的switch语法,但是Scala在基于Java的思想上补充了特有的功能。
百思不得小赵
2022/12/01
1.7K0
2021年大数据常用语言Scala(三十三):scala高级用法 模式匹配
在Java中,有switch关键字,可以简化if条件判断语句。在scala中,可以使用match表达式替代。
Lansonli
2021/10/11
8160
Scala入门与进阶(五)- 模式匹配
6.模式匹配 1.最基础的模式匹配 Java: 对一个值进行条件判断,返回针对不同的条件进行不同的处理 Scala: 变量 match { case value1 =>代码1, case value2 =>代码2, ... case _ => 代码N } object MatchApp extends App { val names = Array("zhangsan","lisi","wangwu") val name = names(Random.nextInt(names.length)) nam
Meet相识
2018/09/12
5490
Scala入门与进阶(五)- 模式匹配
Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、
1:Scala和Java的对比: 1.1:Scala中的函数是Java中完全没有的概念。因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只有方法的概念,即寄存和依赖于类与对象中的方法。Java中的方法是绝对不可能脱离类和对象独立存在的。 1.2:Scala是一门既面向对象,又面向过程的语言。因此在Scala中有非常好的面向对象的特性,可以使用Scala来基于面向对象的思想开发大型复杂的系统和工程,而且Scala也面向过程,因此Scala中有函数的
别先生
2018/04/02
3K0
Scala 模式匹配
一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
王知无-import_bigdata
2019/03/19
9500
【Scala篇】--Scala中Trait、模式匹配、样例类、Actor模型
Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。
LhWorld哥陪你聊算法
2018/09/13
7730
Scala专题系列 (八) : 模式匹配
上面例子中,创建一个单例Demo,里面包含一个函数matchTest,并且参数类型是Any(scala中所有类的超类,表示任意类型), 注意看函数体 x = match{ case 1 => "one" } 这个就是scala中模式匹配的语法结构, 首先变量.match(选择器) 后面跟着一个花括号, 括号里面case指定的匹配项 , 而 => 右面指定的是表达式 , 在语句中 case _ 等同于java中swich语句的default ,如果匹配项都不符合要求,那么就返回一个默认值
用户5252199
2022/04/18
9140
Scala 【 12 模式匹配 】
​ Scala 的模式匹配除了可以对值进行匹配之外,还可以对类型进行匹配、对 Array 和 List 的元素情况进行匹配、对 case class 进行匹配、甚至对有值或没值(Option)进行匹配。
Lokinli
2023/03/09
6460
Scala中的模式匹配:强大的匹配和转换工具
在Scala编程语言中,模式匹配是一种强大的工具,用于匹配和转换数据。它可以用于匹配不同类型的值、解构复杂的数据结构以及处理不同的情况。本文将介绍如何在Scala中使用模式匹配,并通过具体的代码和运行结果进行演示。
GeekLiHua
2025/01/21
1780
模式匹配「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/166930.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/21
7190
scala 模式匹配的几个模式
Scala 的模式匹配是类似与正则匹配的的模式匹配,但是不仅仅如此,它还可以匹配对象的内在的构建形式.
Tim在路上
2020/08/04
1.3K0
有趣的Scala模式匹配
它被称为模式匹配,模式匹配包含了一系列以case关键字开头的分支,每一个分支包含一个模式或者是多个表达式。模式有很多种,例如常量模式('*',1),变量模式(可以匹配任何值),通配模式(又见面了,'_'符号),构造方法模式(类似于样例类的初始化)等等。 用一个例子简单说明就是:
哒呵呵
2018/08/06
1.2K0
Scala最基础入门教程
(1)Scala和Java一样属于JVM语言,使用时都需要先编译为class字节码文件,并且Scala能够直接调用Java的类库。
ha_lydms
2023/09/29
8210
Scala最基础入门教程
Scala 入门3(类、Trait、模式匹配、正则、异常、提取器、IO)
学自 https://www.runoob.com/scala/scala-tutorial.html
Michael阿明
2021/09/06
3790
Scala学习笔记(八)
模式匹配是 Scala 的重要特性之一,前面两篇笔记Scala学习笔记(六) Scala的偏函数和偏应用函数、Scala学习笔记(七) Sealed Class 和 Enumeration都是为了这一篇而铺垫准备的。
fengzhizi715
2018/08/24
1.1K0
Scala基础——模式匹配
当需要从多个分支进行选择的场景,类似Java中的switch语句,不需要使用break停止代码执行。
羊羽shine
2019/08/20
6190
Scala基础——模式匹配
scala 语法深析
scala是一种基于JVM的编程语言,spark框架是使用scala语言编写的,要阅读源码就必须掌握scala,虽然spark可以采用java和python进行开发,但是最快速的支持方式任然是scala方式的API.
Tim在路上
2020/08/04
6890
Scala——多范式, 可伸缩, 类似Java的编程语言
3.将features和plugins两个文件夹拷贝到eclipse安装目录中的” dropins/scala”目录下。进入dropins,新建scala文件夹,将两个文件夹拷贝到“dropins/scala”下
时间静止不是简史
2020/07/24
3.1K2
(数据科学学习手札49)Scala中的模式匹配
  Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍:
Feffery
2018/09/07
7800
推荐阅读
相关推荐
03.Scala:样例类、模式匹配、Option、偏函数、泛型
更多 >
目录
  • 获取代码
  • 安装构建设置
    • 自动化脚本安装
    • docker-compose方式构建
      • 安装依赖项
      • Docker的要求
      • 构建eos镜像
      • 在 docker 中启动 nodeos
      • 获取区块链信息
      • 在docker中启动nodeos和keosd
      • 执行cleos命令
      • 开发构建客户合约
      • 修改默认配置
      • 删除data-dir
      • Docker Hub
      • EOSIO 1.0 Testnet
      • 关于MongoDB插件
    • 手动安装构建
    • 可执行文件安装构建
    • 系统需求(包括所有平台)
  • 安装构建的验证
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档