1. Home
  2. Docs
  3. EOS DApp合约开发之DICE游戏
  4. 第八课:EOS开发环境搭建

第八课:EOS开发环境搭建

EOS DApp合约开发,可以选择以下三种网络进行开发:

  • 主网
  • Jungle 测试网络
  • 本地网络

咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络和EOS主网中。

本教程的开发环境选择为:Ubuntu 16.04、eos V1.2.6。接下来开始搭建EOS本地环境将它部署在单个主机。

EOS环境安装可以使用以下两种方式:

  • docker配置:熟悉Docker的同学使用Docker配置就比较快捷了,可以快速安装并启动节点。
  • 自动编译和安装的脚本:适用于大多数开发人员,脚本已经编写好,直接运行即可安装。

方式一:docker安装eos节点环境

  • docker安装的教程大家直接查看docker配置官方教程
  • 需要另外安装eosio.cdt编译工具。
  • 装好环境后再去执行第五、六步骤,创建钱包、部署eosio.token合约。

方式二:脚本安装eos节点环境

  • 参考下文即可。

一、下载和编译EOS

获取EOS指定版本源码及其所有子模块,若不加入--recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。

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

编译源码生成可执行文件

cd eos
./eosio_build.sh

编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示

71F24E685F4FB1F9F862BD9278428E980A92324C-2B39-45A0-AA29-7C80068CE2EE

在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。

编译时报错的解决办法

1. 物理内存RAM不足

9693B8E3ACB5D26B1638BBAD1AF02241

解决办法:

修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。

2. 可用内存不足

You must have at least 20GB of available storage to install EOSIO.
Exiting now.

解决办法:

在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。

DISK_MIN=1

3. 无法下载(MongoDB等)

无法下载MongoDB等是由于翻墙配置的问题。

解决办法:

Mac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下

1535600980168

8528A0604C15D806E6A4628A26F0A3C3

Ubuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。

1535591849761

4. 不能创建/tmp/llvm-compiler文件夹

A07E067560ED88595DF5E37659DC7F50

解决办法:

进入/tmp目录,删除llvm-compiler文件夹即可。

二、安装EOSIO

安装所有依赖库并构建EOSIO,使用如下命令

sudo ./eosio_install.sh

若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。

5D8B5FB752A1FCAB72272DCE9FEB4338

安装成功后的效果如下016237F5E602EE9A6A3DA5F914DADF28

安装完在根目录新增了build文件夹,最后EOS的目录结构如下。

8CB06D3E4FF6BB97893C3649C2188038

三、配置Nodeos与Keosd

1. 配置Nodeos

Nodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:

  • 找到如下config.ini文件的位置,然后打开config.ini文件
    • Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini
    • Linux: ~/.local/share/eosio/nodeos/config/config.ini
  • 将文中enable-stale-production所在行用#注释,producer-name所在行也用#注释
  • 再最后面添加如下内容
# 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
# 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 history
plugin = eosio::history_api_plugin

2. 配置Keosd

keosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。

  • 找到路径~/eosio-wallet/config.ini,然后打开config.ini文件
  • 将第一行的服务地址设置为:http-server-address = 127.0.0.1:8889

四、启动节点

1. 启动nodeos

使用以下命令启动自己的单节点区块链:

nodeos

启动后应该每0.5秒生成一个块并有日志输出到终端,如下

2018-08-27 19.03.44

如果报如下错误,则添加参数--delete-all-blocks

1535545676300

2. 启动keosd

可以直接输入命令keosd即可启动keosd。

$ keosd

停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。

$ pkill keosd

注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。

lixu@ubuntu:~$ cleos wallet create
"/usr/local/eosio/bin/keosd" launched
Unable to connect to keosd, if keosd is running please kill the process and try again.

五、使用Cleos创建钱包

下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。

1. 创建钱包

钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。

cleos wallet create

若是1.2以上版本,则需添加参数--to-console,输出如下

lixu@ubuntu:~$ cleos wallet create --to-console
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"

成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。

2. 解锁钱包

可以通过两种方式解锁钱包,推荐使用第二种方式解锁。

  • 直接在命令行上添加密码参数,可以通过-n参数指定钱包名称
cleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS
  • 在交互模式下解锁
cleos wallet unlock

接着提示password:,然后输入密码即可

lixu@ubuntu:~$ cleos wallet unlock

password:

两种方式解锁成功后都会输出Unlocked: default

注意:

直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。

出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。

3. 查看钱包列表

使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。

lixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list
Wallets:
[
  "default *",
]

4. 导入密钥到钱包

上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。

使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称

lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

注意:此时导入的私钥并不是创建钱包时生成的密码。

这个密钥5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3在以下配置文件中可以查看

  • Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini
  • Linux: ~/.local/share/eosio/nodeos/config/config.ini

打开文件后滑动到最下面即可查看到私钥。

F4F70517139459A32E6E07603D0BEFED

注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。

六、部署系统eosio.token代币合约

现在我们有一个拥有帐户eosio密钥的钱包defualt,确保钱包defualt处于解锁状态。eosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。

1. 创建eosio.token账号

那么接下来用eosio账户创建eosio.token系统账号。

cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

2. 部署eosio.token合约

使用eosio.token账号部署eosio.token合约。

cleos set contract eosio.token build/contracts/eosio.token

3. 创建EOS代币

大家查找eos源码中在contracts/eosio.token/eosio.token.hpp文件中可以查看到token合约接口,如下

32A41D3B0DFBCA95B7761C2490703234

需要调用create()方法去创建Token合约。发行人可以对该Token合约执行一些特有的操作,例如质押、赎回、账号冻结、资金冻结、游戏挖矿、空投、召回和列入所有者白名单等功能。使用如下命令创建Token代币

cleos push action eosio.token create '[ "eosio", "1000000000.0000 EOS"]' -p eosio.token@active

此命令是通过eosio.token账户创建了一个Token,发布者是eosio,Token名为EOS,其精度为4位小数,发布的总量是1000000000.0000 EOS。

4. 查询代币信息

根据命令cleos get currency stats可以查看查询代币命令的参数

$ cleos get currency stats

ERROR: RequiredError: contract
Retrieve the stats of for a given currency
Usage: cleos get currency stats contract [symbol]

Positionals:
  contract TEXT               代币合约名称 ,此项必填
  symbol TEXT                 代币符号,例如 EOS ,此项必填

因此,可知查询账户余额的命令为 cleos get currency stats 合约名称 代币符号

lixu@ubuntu:~$ cleos get currency stats eosio.token EOS
{
  "EOS": {
    "supply": "0 EOS",
    "max_supply": "1000000000.0000 EOS",
    "issuer": "eosio"
  }
}

大家可根据此方式去输入cleos命令,后面将不再详细介绍。

发行代币的步骤将在后续创建了玩家账号后再发行EOS。

Was this article helpful to you? Yes No

How can we help?