[关闭]
@hitchhacker 2018-07-22T10:40:15.000000Z 字数 9213 阅读 1301

第四章 测试环境搭建

通过上一个章节的介绍,我们对 EOS 这个「区块链操作系统」有了一个整体上的把握。现在,我们可以进入实战环节了。

对于开发者而言,在 EOS 上开发 DApp 一般需要经过本地环境开发与测试->测试网络测试->主网测试与上线这几个部分。所以对于开发者而言,如何在本地上搭建测试环境、如何连接主网与测试网络并进行操作都是必要的知识。
本章具体分为分为「原生方法」安装 EOSIO 、Docker 安装 EOSIO 、EOSIO 的升级、连接主网/测试网络与账户操作四个部分,最后会对本章内容进行一个总结。

注:第四章、第五章均基于EOSIO v1.0.7代码。因为成书时 EOSIO v1.0.7 为稳定版本。

我比较推荐用「原生方法」安装 EOSIO ,因为用 Docker 始终还是多了一个虚拟环境,操作文件有时候不方便。但是,「原生方法」安装仅支持 Mac OS 和 Linux(Ubuntu、CentOS等)系统,所以建议 Windows 用户 安装双系统。

4.1 「原生方法」安装 EOSIO

测试环境:

系统版本: macOS Sierra 10.12.6 / Ubuntu 16.04

EOS 版本: EOSIO v1.0.7

注: Ubuntu用户可以直接跳到「二、安装 EOS 」部分。

4.1.1 前期准备——iTerm/Brew/Git三件套

(1)iTerm

首先,你要在 Mac 上安装一个 iTerm 。它相对原生的 Terminal 来说最大的好处是可以分屏,这样左半屏幕开个进程打包区块,右半屏幕开个进程操作,方便简洁!

iTerm的下载地址为:https://www.iTerm2.com/downloads.html

iterm.webp-55.4kB

(2)Brew

Brew 是 Mac 上必备的命令行下的软件管理工具,Brew 怎么安装呢?

第一步,打开 iTerm 。

安装好1.1说的 iTerm 以后,用「 Command +空格」快捷键打开 Spotlight ,输入 iterm 按回车就能打开 iTerm 。

iterm2.webp-11.3kB

第二步,安装 Brew 。

将下面这行代码复制粘贴进It iTerm ,即可安装 Brew 。如果要输入密码,输入你当前使用的账户(需要是管理员账户)的密码即可。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew.webp-18.5kB
通过以上两个步骤,我们就在本机上安装好 Brew 了!

(3)Git

Git 是现在流行的代码管理软件,通过 Brew 我们可以很容易的安装它。

brew install git

对于 EOS 的环境配置来说,我们只要掌握 Clone 命令就可以。以下这行代码的意思是从 Github 代码仓库上把 EOS 弄到本地。注意,recursive 参数是让你下载安装子模块的,别漏掉了:

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

在第一次使用 Git 时,Git 可能提示你需要配置账号和邮箱,输入以下两条命令即可。

git config --global user.name "yourname"

yourname 是你的英文名。

git config --global user.email yourname@example.com

yourname@example.com 是你的邮箱。

4.1.2 安装 EOSIO

第一步,用cd命令进入1.3中git clone下来的eos文件夹。

cd eos

第二步,用文件夹中的脚本安装EOS。

./eosio_build.sh

如果安装完以后出现以下这张图,就说明你EOS环境搭建成功了,恭喜恭喜!

eosio.webp-20.6kB

4.1.3 安装中可能遇到的问题

本小结总结了一下在用原生方法搭建 EOSIO 的时候,可能遇到的一些问题及其解决方案:

(1)Gettext 问题
fail_to_find.jpeg-323kB

gettext_2.jpeg-299.7kB

在错误代码中搜索gettext,如果包含这个关键词,尝试执行以下两步:

a)重装项目。

brew reinstall --universal --with-examples gettext

b)重新链接项目。

brew unlink gettext && brew link gettext -force

(2)Boost 问题

Boost 是 EOS 需要的C++资源库。在错误代码中搜索 Boost,如果包含这个关键词,尝试用以下方式解决:

a)如果没安装过 Boost ,尝试手动安装:

brew install boost

b)如果原来已安装过旧的版本,那么请不要升级,直接卸载重新安装。

brew uninstall boost
brew install boost

安装完之后,用brew info boost查看,如果 Boost 是最新版本(1.67 及以上),就说明你安装成功了。

boost_version.png-59.8kB

(3)MongoDB 安装失败问题

偶尔会出现安装时安装 MongoDB 失败的问题,这个问题可以通过以下方式解决:

a)手动下载 mongo-c-driver-1.9.3.tar.gz 包,并放到 /tmp 目录下。

b)修改启动脚本,使其不联网下载MongoDB。
打开 EOS/scripts 文件夹。如果是 Ubuntu 用户,打开 eosio_build_ubuntu.sh ;如果是 Mac 用户,打开 eosio_build_darwin.sh ;其它操作系统自行查找。
然后找到

STATUS=$(curl -LO -w '%{http_code}' --connect-timeout 30 https://github.com/mongodb/mongo-c-driver/releases/download/1.9.3/mongo-c-driver-1.9.3.tar.gz)

这行,用 # 注释掉再运行脚本即可。

(4)权限不足问题

如果在某个过程中遇到权限不足的问题,可以在命令前加上sudo试一下。

(5)操作系统版本问题

操作系统版本不对可能会导致报错,可以先升级一下系统版本。

Mac_OS_upgrade.png-2780.4kB

(6)某些依赖包安装不正确

安装EOS会需要一些依赖的包,如下图所示。
eos_required.png-102.2kB

大部分情况下会自动安装。如果出现错误,提示你有些包版本不对或者安装错误,用 brew upgrade [软件名] 更新即可。

4.2 「Docker 方法」安装 EOSIO

Docker 方法是安装 EOSIO 系统的另一种方式。对于只是想简单学习了解一下,或者做一些简单的 DApp 开发的用户而言,Docker 安装法不失为一种方便快捷的安装方法。

4.2.1 下载安装 Docker

在 Docker 官方网站根据你的平台提供合适的版本,下载 Community Edition 免费社区版即可:

https://www.docker.com/get-docker

顺便注册一个账号,待会儿运行软件会让你登录。
image.png-271.6kB

概念解析:
什么是Docker?
简单说来 Docker 你可以理解为它就是某种类似于虚拟机的机制,使得你可以方便快捷的生成/部署自己的软件的运行环境。它可以在Windows、Mac OS、Ubuntu 等 Linux 内核的多种平台上运行。甚至在 Windows 下的 Docker 也有能力运行 Linux 版本的 Docker 容器。
什么是容器?
可以简单地认为是一个虚拟机实例。

4.2.2 下载 EOSIO 的镜像

在任何一个你习惯的终端(cmd、Powershell、iterm等)下运行如下命令,下载 EOSIO 的 Docker 镜像:

docker pull eosio/eos

4.2.3 启动 EOSIO

注意:EOS 的原始镜像是个 Linux 版本的,所以如果你是在 Windows 下,要确保当前容器环境是 Linux ,不然会出错。右下角任务栏找到Docker 小鲸鱼图标,点击右键 「Switch to Linux containers…」即可。

然后,把下面一行命令输入,即可启动 EOSIO 系统了:

docker run --name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh

此时可以看到终端里的区块已经一个接一个的在打包了:

image.png-767.9kB

4.2.4 容器的操作

除了用 run 命令创建容器外,我们还需要掌握「列出、停止、启动、删除与查看帮助」五种操作:

(1)docker ps ,列出当前运行的容器(也可以输入 docker container list 列出所有容器,包括已经停止运行的)。

(2)docker stop [你的容器 id],来停止该容器的运行( 容器 ID 不需要输入完全的,输入前面几个字符就好)。

(3)docker start [你的容器 id],重启停止的容器,但是这时候是在后台运行,如果要看到跑块过程,需要输入 docker start -i [你的容器 id]

(4)有时候容器建多了,需要删掉,用 docker rm [你的容器 id] 就能删掉该容器。

(5)如果有命令不记得了,在终端里面输入docker help 就可以列出各种命令了。然后还可以再继续查看列出命令的帮助,例如docker stop —help

注意,用 docker stop 命令来停止容器之后,下次再用 docker run 命令来启动容器会报错,因为docker run方法是建立新的容器,而 EOS 系统的容器已经存在。所以,docker start [容器名] 命令才是正确的系统重启方法。

4.2.5 用 VS Code 启动 EOS

如果觉得在终端里启动还是麻烦,有没有更简洁的方法呢?有的,那就是通过 VS Code 的插件启动 容器。

(1) 了解 Docker-compose
Docker-compose文件后缀名为 yml(或者yaml),可以简单的理解为是 Docker 容器运行的一系列环境、参数、方式等等的一个配置文件。
头疼记不住里面的配置的格式怎么办?当然是去抄一份照着改啊。

EOS 官方的 docker-compose.yml 文件地址:

https://github.com/EOSIO/eos/blob/master/Docker/docker-compose.yml

image.png-180.7kB

(2) 安装配置 VS Code
我们需要一个好的yaml编辑工具和容器管理工具,这里推荐使用 Visual Studio Code(VS Code),下载地址如下:

https://code.visualstudio.com/

免费、开源、功能强大、扩展众多,最重要的是两个关键特性特性:

下载安装完毕之后,按下 Ctrl+Shift+X( Mac 下为 Command+Shift+X)打开扩展窗口,然后在搜索栏输入 Docker ,安装由微软官方出品的「Docker」和 Jun Han 出品的「Docker Explorer」"这两个插件。
(3)新建 yml 文件
现在我们在 VSCode中新建一个 docker-compose.nodeos.yml。之所以要这样命名,是因为大家习惯于用 docker-compose 做前缀,而且某些插件对他更加友好。

把它存在一个文件夹中,例如我是存在 EOSDocker 文件夹。然后输入如下的内容:

  1. version: "3"
  2. services:
  3. nodeosd:
  4. image: eosio/eos:latest
  5. command: /opt/eosio/bin/nodeosd.sh
  6. working_dir:
  7. /opt/eosio/bin/
  8. ports:
  9. - 8888:8888
  10. - 9876:9876
  11. expose:
  12. - "8888"

第一行是版本信息,

下面的按照字面意思就依次可以理解了:
a)我们需要一个服务,服务名为「nodeosd」
b)这个服务的镜像是从 eosio/eos 获取的,标签为 latest 的那个。
c)启动起来后要执行的命令是
/opt/eosio/bin/nodeosd.sh
d)工作路径为
/opt/eosio/bin/
e)它需要用到两个端口 8888和9876
f)8888端口是容器的对外暴露端口,允许外部访问。

(4)执行yml文件,启动 nodeos 系统

然后,通过「文件」>「打开」打开yml文件保存的文件夹。注意!是打开文件夹,打开文件是不行的。

[有图有图]

然后在 Visual Studio Code里面左侧文件目录里右击的yml文件选择 Compose Up

image.png-483.4kB

你会在左侧的 Docker Containers 目录里看到你的这个运行起来的容器(正常的话是绿色图标),右键点击它选择“Attach”在VSCode下方的集成终端里就能看到区块产生的过程了。

yml.webp-57.5kB
停止的方式是,右击这个 yml 文件然后选择 Compose Down

除此之外,还可以通过「Execute in Bath」,从 VS Code 的集成终端里直接进入容器的「里世界」,查看容器中 Linux 系统中的内容。

(5)设置cleos别名

因为在docker下调用cleos的命令相对于原生安装法要长,所以我们可以通过Linux中的alias命令设置别名,让Docker下的cleos和普通方法安装下的cleos一模一样。

这个设置是这样子的:

alias cleos='docker-compose exec nodeosd cleos --wallet-url http://localhost:8888'*

然后运行

cleos get info

如果出现以下返回,说明alias设置成功了!之后我们正常使用 cleos 即可。

4

关于 alias 命令的小贴士:
· 如果不想使用别名了,unalias cleos 即可。
· 直接输入alias可以查看目前的所有别名。

4.3 EOSIO 的升级

在开发过程中,我们可能会遇到 EOSIO 系统的更新。这个时候我们使用git pull命令即可:

  1. cd eos #进入eos的根目录
  2. git add .
  3. git commit -m "sthsth" #先commit了才能Pull
  4. git pull

(1)用git tag命令查看软件版本
输入git tag,查看软件版本,拉到最后,我们可以看到最新的版本是 v1.0.7:

newest.png-147.1kB

(2)通过 checkout 命令建立新的分支

输入git checkout -b [自己起的分支名] [用 tag 查到的版本名]创建并切换到新的分支。例如git checkout -b v1.0.7 v1.0.7
现在已经自动切换到v1.0.7分支了——也就是切换到了eosio 1.0.7 版本。

(3)切换分支

之后想切换回新版本,先用git branch命令查看有哪些分支,然后git checkout [分支名]切换即可。

(4)删除分支

有时候分支不小心建错了,用git branch -d [分支名]即可删除分支。
注意,当前的分支是不能删除的,如果要删除当前分支,先git branch切换分支再进行删除操作。

(5)重新安装
同样的,在 eos 根目录下执行:

./eosio_build.sh

4.4 连接主网/测试网络与账户操作

4.4.1 连接主网/测试网络

通过以下命令让 cleos 连上主网或测试网络:

alias cleos="cleos --wallet-url http://127.0.0.1:8900 -u http://mainnet.genereos.io"

几个主网节点地址供参考:

http://mainnet.genereos.io
http://mainnet.eoswz.com
http://mainnet.eoscalgary.io
http://p2p.meet.one:8888
http://eosio.tc.ink
https://api-eos.ono.chat
https://api.mainnet.eospace.io

目前比较好用的测试网络:

国外:http://jungle.cryptolions.io
国内:https://eosfans.io/wiki/eos-party-testnet

连接之后可以用 cleos get info 命令来查看是否连接成功。

4.4.2 创建本地钱包并导入私钥

cleos wallet create

create_wallet.png-126.9kB

cleos wallet钱包操作命令一览:
Subcommands:
create 在本地创建一个新钱包。
open 打开一个现有钱包。
lock 锁定钱包
lock_all 锁定所有未锁定的钱包
unlock 解锁钱包
import 将私钥导入钱包
remove_key 将密钥对移出钱包
create_key 在钱包中创建私钥
list 列出现有钱包,打 * 号的是锁定的
keys 列出所有未锁定钱包的公钥
private_keys 列出一个未锁定钱包的私钥(需要该钱包的私钥)
stop 停止 keosd

*以上操作均带有可选参数:-n,--name TEXT=default,TEXT=后面的是钱包名字

会返回给你一个钱包的私钥,保存下来。

钱包一段时间不用会自动锁定,如果锁定的话用钱包的私钥解锁。

cleos wallet unlock

输入上述命令后会让你输入钱包私钥,输入即可。

4.4.3 注册 EOS 账户名

注册 EOS 账户名分为两种情况:「主网上线时已映射过,分配了一个账户,还有就是主网上线时没有映射,没有分配账户。

第一种情况下,先查询主网分配的账户名:

cleos get accounts [账户公钥]

钱包中导入映射时给你的账户私钥:

cleos wallet import [账户私钥]

然后注册新账户:

cleos system newaccount --stake-net '0.0001 EOS' --stake-cpu '0.001 EOS' --buy-ram-kbytes 3 [自动分配的账户名] [新注册账户名] [账户公钥]

newaccount.png-431.9kB

注:账户名要求必须是12位字符,其中的可用字符为:12345abcdefghijklmnopqrstuvwxyz

第二种情况下,可以找一个已有主网账号的朋友,叫他用他现有的账户帮你注册一个。首先你要用cleos create key生成密钥对并通过cleos wallet import [账户私钥]导入钱包,然后有两种方法:

cleos system newaccount --stake-net '0.0001 EOS' --stake-cpu '0.001 EOS' --buy-ram-kbytes 3 [自动分配的账户名] [新注册账户名] [账户公钥]

newaccount.png-431.9kB

注:账户名要求必须是12位字符,其中的可用字符为:12345abcdefghijklmnopqrstuvwxyz

4.4.4 查看账户信息

a)查看账户余额

cleos get currency balance eosio.token [账户名]

get_balance.png-30kB

这条命令能查到该账户的余额。

cleos get account [账户名]

account_info.png-259kB

第一段 permissions,指的是账户权限,包括所有者权限(owner)和活动权限(active)

  • 所有者权限 代表着账户的所有权。 只有少数交易需要这种权限力,但最值得注意的是任何对所有者权力作出改变的行为(actions)。一般而言,建议所有者私钥用冷存储(cold storage)的方式保存,并且不与任何人共享。 所有者可用于恢复可能已被泄露的另一个权限。
  • 活动权限 用于转移资金,投票给区块生产者,并进行其他高级别的账户更改操作。

第二段 memory 指的是目前所有的内存和已经使用的内存,内存是消耗品,使用后不可恢复。

第三段 net bandwidth 和第四段 cpu bandwidth 分别指 网络带宽和 CPU 带宽。

其中要注意的是 staked 和 delegated 。这两部分都是通过抵押 EOS 来购买 cpu 带宽和网络带宽。区别在于 staked 对应的是自己给自己买,delegated 对应的是别人给你买。用户可以通过 undelegatedbw 命令把这部分 EOS 提到余额(balances)中的可用余额(liquid)里。但是,提现只能提回原始账号。比如,staked 部分就是提回自己的账号,delegated 部分就是提回到提供者的账号。

第五段 unstaking tokens 指的是在赎回过程中的 EOS 。目前,赎回的 EOS 需要 72 小时才能返回账户。

第六段 eos balances 指的是目前账户的余额情况,包括 liquid 可用余额、 staked 已抵押的 EOS 和 unstaking 赎回过程中的 EOS 。

第七段 produckers 是指的投票情况。

cleos get table eosio [账户名] userres

account_info2.png-67.5kB

这条命令查到的用户信息更加简要,仅包括所有者、抵押于网络带宽的 EOS、抵押于 CPU 带宽的 EOS ,现有内存。

cleos system listbw [账户名]

listbw.png-45.2kB

这条命令查到的是账户网络带宽与 CPU 带宽的抵押信息。和上面不同,此处包括给自己抵押的和给别人抵押的。

cleos get table eosio [账户名] delband

record.png-96.6kB

这条命令查到的是该账户的抵押记录。

4.4.5 账户操作

a)转账

cleos transfer [账户A] [账户B] '0.01 EOS' 'memo'

transfer.png-116.9kB

这条命令让用户将 EOS 从账户 A 转账给账户 B。

b)抵押与赎回抵押

cleos system delegatebw [账户A] [账户B] '0.1 EOS' '0.1 EOS'

delegate.png-240.2kB

这条命令让账户A给账户B抵押网络带宽与 CPU 带宽。如果两个账户填同一个,即给本账户抵押。

cleos system undelegatebw [账户A] [账户B] '0.001 EOS' '0.02 EOS'

这条命令让账户A赎回给账户B抵押的网络带宽与 CPU 带宽。如果两个账户填同一个,即给本账户赎回抵押。

c)购买与卖出内存

cleos system buyram [账户A] [账户B] "0.01 EOS"

这条命令让账户A给账户B购买内存(RAM)。如果两个账户填同一个,即给本账户购买。

cleos system sellram [账户] 4000

这条命令让账户卖出内存,单位是 bytes。

d)变更账户权属:

cleos set account permission [账户名] owner [新公钥] owner
cleos set account permission [账户名] active [新公钥] owner

这两条命令分别设置账户的所有者权限和活动权限。注意,需要掌握 owner 公钥的私钥,不然账户就丢失了。

4.5 本章总结

本章先阐述了两种搭建 EOS 开发环境的方法——「原生方法」和「Docker 方法」,然后阐述了如何连接主网/测试网络与如何进行必要的账户操作。把本章内容掌握了,EOS App 开发的准备工作就做好了,下面可以开始学习 EOS App的开发了:)。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注