EOS的三种测试环境的搭建

时间:2024-03-14 17:05:21

最近开始研究EOS,首先需要搭建EOS的测试环境,目前主要有3种方式:

  • docker
  • 搭建私网
  • 连接测试网

本文将逐一进行介绍,大家可以比较一下,自行选择适合自己的方式。

1.概览

EOS三大组件:

  • nodeos:EOS节点程序,维护完整的区块链
  • cleos:EOS命令行程序,完成和节点的交互
  • keosd:EOS钱包/**管理程序
    EOS的三种测试环境的搭建

2.docker方式运行EOS

这是EOS官方推荐的方式,用来测试合约也比较方便。缺点是这是一个裸系统,如果你想模拟真实主网环境,需要自己手动完成系统合约部署、账号创建、发币转币等操作。

2.1下载&运行EOS镜像

首先去docker官网上下载安装docker软件:https://www.docker.com

然后创建一个contracts目录,用于映射到docker容器中。比如我创建了一个/Users/macbook/Code/EOS/contracts目录,然后用下面的命令下载、运行EOS镜像:

$ docker pull eosio/eos-dev:v1.4.2
$ docker run --name eosio \
  --publish 7777:7777 \
  --publish 127.0.0.1:5555:5555 \
  --volume /Users/macbook/Code/EOS/contracts:/Users/macbook/Code/EOS/contracts \
  --detach \
  eosio/eos:v1.4.2 \
  /bin/bash -c \
    "keosd --http-server-address=0.0.0.0:5555 \
           --unlock-timeout=86400 & \
     exec nodeos -e -p eosio \
       --plugin eosio::producer_plugin \
       --plugin eosio::chain_api_plugin \
       --plugin eosio::history_plugin \
       --plugin eosio::history_api_plugin \
       --plugin eosio::http_plugin \
       -d /mnt/dev/data \
       --config-dir /mnt/dev/config \
       --http-server-address=0.0.0.0:7777 \
       --access-control-allow-origin=* \
       --contracts-console \
       --http-validate-host=false \
       --filter-on='*'"

查看运行状态:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                              NAMES
5cea17bfff0e        eosio/eos:v1.4.2    "/bin/bash -c 'keosd…"   3 seconds ago       Up 3 seconds        127.0.0.1:5555->5555/tcp, 0.0.0.0:7777->7777/tcp   eosio

查看控制台日志:(最后10行log)

$ docker logs --tail 10 eosio
info  2018-11-22T08:37:13.003 thread-0  producer_plugin.cpp:1490      produce_block        ] Produced block 00000128e8cbaf9e... #296 @ 2018-11-22T08:37:13.000 signed by eosio [trxs: 0, lib: 295, confirmed: 0]
info  2018
... ...

验证RPC是否正常工作:

$ curl http://localhost:7777/v1/chain/get_info
{"server_version":"60c8bace","chain_id":"cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f","head_block_num":116,"last_irreversible_block_num":115,"last_irreversible_block_id":"00000073914654e0f55617d76b21433c68bf41830b45cee109699b58779a6e2d","head_block_id":"00000074c94790a92d9819daae0546a1f225c98f82f5f5aeb78eb79d2db9f336","head_block_time":"2018-11-23T05:13:32.500","head_block_producer":"eosio","virtual_block_cpu_limit":224328,"virtual_block_net_limit":1176376,"block_cpu_limit":199900,"block_net_limit":1048576,"server_version_string":"v1.4.2"}

2.2启动&停止EOS运行

EOS启动后就开始出块了,如果你不想运行它了,可以用下面的命令停止:(eosio就是我们刚刚给这个容器取的名字)

$ docker stop eosio

如果你想重新启动EOS,用下面的命令:

$ docker start eosio

2.3为cleos设置别名

把下面的内容添加到~/.profile文件(MacOS)或者~/.bash_rc文件(Linux)中,这样每次需要和keosd或者nodeos交互时就不用进入docker容器的bash了:

alias cleos='docker exec -it eosio /opt/eosio/bin/cleos --url http://127.0.0.1:7777 --wallet-url http://127.0.0.1:5555'

比如我们想查看当前的钱包列表,可以直接用下面的命令:

$ cleos wallet list

2.4创建&解锁一个钱包

钱包是用来存储私钥的,后面发起交易的时候需要用私钥签名。使用钱包功能之前,需要先打开并解锁钱包:

$ 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.
"PW5JafE14dyVvUsTcr1Uiz9Exmwb8Hcxa9JF64sipNmR7f6WKntyv"

$ cleos wallet open
Opened: default

$ cleos wallet list
Wallets:
[
  "default"
]

$ cleos wallet unlock
password: Unlocked: default

$ cleos wallet list
Wallets:
[
  "default *"
]

上面的星号就表示钱包目前处于解锁状态。

2.5创建私钥

有两种创建私钥的方式,一种是先创建,再导入钱包:

$ cleos create key --to-console
Private key: 5JeubT8b6kJU4qGDaBH5Gj4y7qt37NFu8z1yHe9GD7SQ3gCoWoP
Public key: EOS5X1A5DqEEPuRwQm55g7zxZMaycuD2PnJheVHLaSHHUVw5sdsBV

$ cleos wallet import

还有一种是官方推荐的做法,只需要一条命令就可以完成(可以通过cleos wallet private_keys命令查看私钥):

$ cleos wallet create_key
Created new private key with a public key of: "EOS6YW9HQiHmToWjpzR89tAX3G3uy4T4KBQR2FytwnKpAZSbtVPvu"

同时还要导入一个超级账户eosio的私钥:

$ cleos wallet import
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

可以用下面的命令查看钱包中所有私钥:

$ cleos wallet keys
[
  "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
  "EOS6YW9HQiHmToWjpzR89tAX3G3uy4T4KBQR2FytwnKpAZSbtVPvu"
]

2.6创建账号

$ cleos create account eosio bob EOS6YW9HQiHmToWjpzR89tAX3G3uy4T4KBQR2FytwnKpAZSbtVPvu 
$ cleos create account eosio alice EOS6YW9HQiHmToWjpzR89tAX3G3uy4T4KBQR2FytwnKpAZSbtVPvu

其中eosio就是那个超级账户,bob/alice是要创建的新账户,后面需要跟上两个公钥,分别给owner和active权限使用。这里只配置了owner权的公钥,没有配置active权限。

有了账号以后后面就可以愉快地测试智能合约了~

3.搭建私网

3.1下载编译EOS源码

$ git clone https://github.com/EOSIO/eos --recursive
$ cd eos
$ ./eos_build.sh

编译成功后会出现下面的图案:
EOS的三种测试环境的搭建

然后进行安装:

$ cd build
$ sudo make install

测试是否安装成功:

$ mongod -f /usr/local/etc/mongod.conf &
$ cd build
$ make test

3.2启动EOS

在EOS源码的tutorials/bios-boot-tutorial目录中有一个脚本,可以帮我们完成一系列的系统配置操作,生成和主网相同的运行环境。执行脚本之前先确保你安装了numpy:

$ pip install numpy

然后执行脚本:

$ cd tutorials/bios-boot-tutorial
$ ./

我们可以看一下这个脚本具体帮我们做了哪些事情:
EOS的三种测试环境的搭建
可以看到,部署了3个系统合约token、msig、system,并完成了一系列的配置操作。

3.3手动部署系统合约(不推荐)

这个是我没发现上面的脚本之前的手动部署过程,不推荐使用,仅作参考。

首先下载系统合约代码:

$ git clone https://github.com/EOSIO/eosio.contracts --branch v1.4.0 --single-branch
$ cd eosio.contracts/eosio.token

创建新账户,编译部署合约:

$ cleos create account eosio eosio.token EOS6YW9HQiHmToWjpzR89tAX3G3uy4T4KBQR2FytwnKpAZSbtVPvu
$ eosio-cpp -I include -o eosio.token.wasm src/eosio.token.cpp --abigen
$ cleos set contract eosio.token CONTRACTS_DIR/eosio.contracts/eosio.token --abi eosio.token.abi -p [email protected]

创建新代币:(两种方法等价,后一种JSON格式和以太坊类似)

$ cleos push action eosio.token create '[ "eosio", "1000000000.0000 EOS"]' -p [email protected]
$ cleos push action eosio.token create '{"issuer":"eosio", "maximum_supply":"1000000000.0000 EOS"}' -p [email protected]

铸币:(会产生一个internal transfer,方便统计)

$ cleos push action eosio.token issue '[ "alice", "100.0000 EOS", "memo" ]' -p [email protected]

转币:(会给两个账户发通知,类似于以太坊的event,但可以指定账户)

$ cleos push action eosio.token transfer '[ "alice", "bob", "25.0000 EOS", "m" ]' -p [email protected]

executed transaction: 304b47afb4b704646a19283c26c7e41a5e7304f892960ea9ea43e6e2776d445a  128 bytes  1652 us
#   eosio.token <= eosio.token::transfer        {"from":"alice","to":"bob","quantity":"25.0000 EOS","memo":"m"}
#         alice <= eosio.token::transfer        {"from":"alice","to":"bob","quantity":"25.0000 EOS","memo":"m"}
#           bob <= eosio.token::transfer        {"from":"alice","to":"bob","quantity":"25.0000 EOS","memo":"m"}

查看余额:(类似于以太坊ERC20中的getBalance())

$ cleos get currency balance eosio.token bob EOS
25.0000 EOS

这里只部署了token合约,还需要部署system合约,过程类似,这里就不说了~

4.连接测试网

如果不想本地跑节点,可以直接连测试网,比较常用的是Jungle:https://monitor.jungletestnet.io

首先你需要申请账户,点击导航栏上的"Create Account"。注意账户名只能由a~z以及1~5这些字符组成,另外由于测试网上有system合约,你的账户名长度必须是12。
EOS的三种测试环境的搭建

然后你可以免费申请一些EOS,点击导航栏上的Faucet:
EOS的三种测试环境的搭建

点击“Send Coins”,100个EOS就发到你的账户了。

要连接到测试网,需要一个节点URL,点击导航栏上的“API”可以查看所有可用的URL:
EOS的三种测试环境的搭建

接下来你就可以通过cleos的-u选项跟测试网交互了,比如查询你的账户信息:

$ cleos -u https://jungle2.cryptolions.io:443 get account <账户名>

另外一个常见的问题,部署合约是需要消耗RAM和CPU的,如果发现资源不够,可以用下面的命令购买和抵押:

$ cleos -u http://jungle2.cryptolions.io:80 system buyram <账户名> <账户名> --kbytes 200
$ cleos -u http://jungle2.cryptolions.io:80 system delegatebw <账户名> <账户名> "1 EOS" "1 EOS"

EOS的三种测试环境的搭建就介绍到这里,相信总有一款适合你~

更多文章欢迎关注“鑫鑫点灯”专栏:https://blog.csdn.net/turkeycock
或关注飞久微信公众号:
EOS的三种测试环境的搭建