【许晓笛】从零开始运行EOS系统

复习一下上次文章的内容,EOS 系统主要有三个应用程序:

nodeos: EOS 系统的核心进程,也就是所谓的“节点”。

cleos:本地的命令行工具,通过命令行与真人用户交互,并与节点(nodeos)和钱包(keosd)通信。是用户或者开发者与节点进程交互的桥梁。

keosd:本地钱包工具。可以管理多个含有私钥的钱包并加密。

要求
本篇教程适用于以下系统,但是不论你的电脑是 windows 还是 mac,都强烈建议安装一个虚拟机,在 Ubuntu 上搞,因为 Mac 上有很多坑。安装 Ubuntu 虚拟机有关教程大家可以在网上搜到。

Amazon 2017.09 and higher.

Centos 7.

Fedora 25 and higher (Fedora 27 recommended).

Mint 18.

Ubuntu 16.04 (Ubuntu 16.10 recommended).

MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended).

配置要求:

8GB 内存

20GB 硬盘空余空间

如果机器内存不够 8G,自动编译脚本会报错。

运行 EOS 需要一点 linux 和 github 基础,不过不要嫌麻烦,以后开发 EOS 合约需要大量这方面的知识。推荐你先按步骤搞起来,有不明白的可以参考以下文章。别怕,谁也不是生下来就什么都会的。

linux 命令基础: https://linux.cn/article-6160-1.html

github 基础: http://www.runoob.com/w3cnote/git-guide.html

下载 EOS 代码
如果你是 Mac,需要先下载 git,可以搜索 “Mac git” 就能找的各种文章教你在 Mac 上安装 git。

首先使用 cd 命令进入你想安装的文件夹,我一般就是根目录了,执行以下命令下载 EOS 代码:

git clone https://github.com/EOSIO/eos --recursive
注意要加后面这个 --recursive 命令,因为 EOS 有几个子模块,这样就能全部下载下来,如果忘了这个命令,使用下面的命令可以补救:

git submodule update --init --recursive
构建 EOS
有了源代码,我们就可以构建我们本地的 EOS 程序了,EOS 官方非常体贴地为我们准备了自动构建的脚本,使用这个脚本可以大大简化,首先我们进入刚刚下载的 eos 目录,并执行构建脚本:

cd eos
./eosio_build.sh
根据网速和机器性能的不同,可能要用 30 分钟 - 1 小时的时间,请耐心等待。构建完成后需要对构建的产物进行验证:

Linux 系(Ubuntu等):

~/opt/mongodb/bin/mongod -f ~/opt/mongodb/mongod.conf &
Mac:

/usr/local/bin/mongod -f /usr/local/etc/mongod.conf &
然后所有操作系统再执行以下命令:

cd build
make test
为了方便开发智能合约,还需要在 build 目录进行 make install:
如果已经进入 build 目录请去掉 cd build。

cd build
sudo make install
建立本地单节点测试网络
构建完成后,我们进入 eos/build/programs/nodeos 目录(使用 cd 和 cd .. 命令),运行 nodeos 节点程序:

./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin 
命令中, -p 参数表示使用了 eosio 账户的权限,这是本地测试系统提供的原始账户。后面的各个 plug in 参数是选择加载的插件。

成功后,如果看到类似下面的输出,就是成功建立了一个本地单节点测试网络:

1575001ms thread-0 chain_controller.cpp:235 _push_block ] initm #1 @2017-09-04T04:26:15 | 0 trx, 0 pending, exectime_ms=0
1575001ms thread-0 producer_plugin.cpp:207 block_production_loo ] initm generated block #1 @ 2017-09-04T04:26:15 with 0 trxs 0 pending
1578001ms thread-0 chain_controller.cpp:235 _push_block ] initc #2 @2017-09-04T04:26:18 | 0 trx, 0 pending, exectime_ms=0
1578001ms thread-0 producer_plugin.cpp:207 block_production_loo ] initc generated block #2 @ 2017-09-04T04:26:18 with 0 trxs 0 pending
...
eosio generated block 046b9984... #101527 @ 2018-04-01T14:24:58.000 with 0 trxs
eosio generated block 5e527ee2... #101528 @ 2018-04-01T14:24:58.500 with 0 trxs
...
说明本地的单节点已经开始正常出块了。

如上次文章所讲,我们建立的本地测试网络如下如,并没有单独的 keosd 钱包,而是使用了 nodeos 程序里的钱包插件。

高级设置
如果你不满足于以上,可以对节点配置进行修改,配置文件位于:

Mac OS: ~/Library/Application Support/eosio/nodeos/config

Linux: ~/.local/share/eosio/nodeos/config

上述文件夹中默认有 genesis.json 配置文件,可以直接修改它,或者在别的文件里再写一个新的配置文件,不过运行 nodeos 时,就要通过 --config-dir 命令指出新配置文件的位置。

配置文件夹还默认有一个 config.ini 文件。如果没有的话,nodeos 启动时会自动创建一个,但自动创建的 config.ini 文件是不让节点出块的,此时你需要使用 Ctrl-C 停止 nodeos,并编辑这个文件:

# 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 = eosio
# 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
# This will be used by the validation step below, to view account history
plugin = eosio::account_history_api_plugin
这样配置好后,重新启动 nodeos,就会顺利出块了。

nodeos 的运行数据文件夹(log和共享存储等数据)位于以下文件夹:

Mac OS: ~/Library/Application Support/eosio/nodeos/data

Linux: ~/.local/share/eosio/nodeos/data

但也可以使用 nodeos 的 --data-dir 命令重新指定数据文件夹。

圆方圆区块链汇集大批区块链名师,采取导师值班制,为学员实时解决技术疑难。请关注圆方圆区块链知识星球与导师。(培训咨询请联系船长13826054890微信手机同号)

作者小笛 ,专注于 EOS 技术研究与区块链智能合约开发.是圆方圆区块链的导师,更多小笛老师的文章和视频请关注圆方圆链圈公众号。

原文地址:http://blog.51cto.com/13625500/2107535

时间: 2024-11-06 09:27:39

【许晓笛】从零开始运行EOS系统的相关文章

【许晓笛】EOS:IPFS落地的重要途径

写在前面,这一篇文章是许晓笛 2018.05.20 在北京 <IPFS开发者圆桌会议>上的发言实录,感谢主办方戴嘉乐和董天一的邀请,感谢编辑们.先介绍一下<IPFS开发者圆桌会议>,创办人是戴嘉乐,前百度高级工程师,最早的IPFS工程师,一个会跳街舞的天才程序员,一个成功的价值主链投资者,能做学术研究也能做团队组织者,简直太全面了有木有.联合创办人是董天一,国内IPFS界不可不知的布道者,为IPFS项目在中国的推广做出了很大的贡献.戴嘉乐和董天一发起的<IPFS开发者圆桌会议

【许晓笛】详解 EOS 的新共识机制 BFT-DPoS

EOS 最新的白皮书中已经将共识机制从 DPoS 升级为了 BFT-DPoS(Byzantine Fault Tolerance - Deligated Proof of Stake,带有拜占庭容错的委托股权证明),本篇文章将详解新共识机制的原理. 传统 DPoS EOS 项目刚刚发布的时候的共识机制是 DPoS(Deligated Proof of Stake,委托股权证明),类似于 Bitshares 和 Steem,这种共识机制采用随机的见证人出块顺序,出块速度为 3 秒,交易不可逆需要4

【许晓笛】EOS 超级节点的五个使命

在EOS系统中,有"两股势力"是整个系统最关键的因素,那就是项目方和见证人.很多人觉得EOS这个项目"奇葩",就奇葩在项目方和见证人的关系上.EOS的项目方是BlockOne公司,创始人是BlockOne公司的首席技术官(CTO)Daniel Larimer,坊间称BM(ByteMaster).BlockOne公司曾经多次声明,其公司只开发EOS软件,并免费提供给任何想使用软件的人,公司不负责任何EOS网络启动.更令投资者难以接受的是,BlockOne公司公开宣称,

【许晓笛】重新理解EOS的系统架构

从区块链三要素的角度 区块链系统中,去中心化程度与效率之间天然地存在矛盾关系.如果区块链智能合约系统想追求类似比特币的去中心化程度,理论上效率就会大打折扣.现实也是这样的:比特币每秒钟只能处理7笔左右的交易,每一笔交易要用至少30分钟才能确认,这种效率和速度是远远不如银行转账的.作为一个全球资产交易平台,比特币这样的效率或许可以接受,但对于智能合约平台这样的效率是远远不够的.因为在智能合约中,每一个动作都可以看成是一笔交易,例如五子棋游戏合约中,每下一步棋就是一个交易,用户是无法等待半个小时才能

【许晓笛】EOS 区块数据结构

对于一个区块链项目来说,最核心的数据莫过于区块数据,区块数据结构是整个区块链项目的技术基础.不过由于 EOS 项目一直在快速迭代,区块数据结构也不断更新,所以今天才向大家介绍. 区块头(block_header) 首先是区块头数据结构,包括了哈希.时间戳.默克尔根.见证人账户等. //区块头结构体struct block_header{   //前一区块哈希     block_id_type           previous;   //区块时间戳   block_timestamp_typ

实现同一个脚本多次运行,系统中只有一个进程

编写脚本,实现同一个脚本多次运行,系统中只有一个进程 [email protected] scripts]#cat pid.sh #!/bin/sh pidpath=/tmp/a.pid if [ -f "$pidpath" ]   then     kill `cat $pidpath` >/dev/null 2>&1     rm -f $pidpath fi echo $$ >$pidpath sleep 300 测试如下 [email protecte

cefSharp 设置运行时系统语言

在使用用CefSharp使用过程中,系统用了很多第三方控件.这些控件很多能够根据浏览器设置的语言来进行控件展示对应语言. 在cefSharp可以设置系统语言,代码如下: CefSharp.Settings setting = new CefSharp.Settings(); string flashPath = Application.StartupPath+ @"\Plug\gcswf32.dll"; setting.AddPluginPath(flashPath); //设置语言

魅族Pro5运行Ubuntu系统遭曝光

近日有一张疑似魅族Pro5运行Ubuntu系统的图片遭到爆光,运行的Ubuntu系统版本为15.04,不过魅族官方并没有对此进行回应.Ubuntu系统的优势在于,无需依赖传统APP来填满你的主屏,通过Ubuntu的Scope,你可以将自己最关心的内容直接呈现到你的主屏,你查询的内容和服务无需隐藏在迷宫般的APP网格背后. 在操作上,Ubuntu给用户带来了全新的体验,大多数手机操作都可依靠上下左右的滑动来完成.然而像Ubuntu这样的小众手机系统仍然仅仅是一些发烧友用来尝鲜的,实际拿来做主力机使

iOS学习之Objective-C 2.0 运行时系统编程

0 导言 本主主要内容包括: 1.概述2.参考3.运行时系统的版本和平台4.和运行时系统的交互5.消息6.动态方法解析7.消息转发8.类型编码9.属性声明 1 概述 Objective-C语言将决定尽可能的从编译和链接时推迟到运行时.只要有可能,Objective-C总是使用动态的方式来解决问题.这意味着Objective-C语言不仅需要一个编译器,同时也需要一个运行时系统来执行编译好的代码.这里的运行时系统扮演的角色类似于 Objective-C语言的操作系统,Objective-C基于该系统