EOS的三种测试环境的搭建

上一篇 / 下一篇  2019-02-14 09:46:04

  最近开始研究EOS,首先需要搭建EOS的测试环境,目前主要有3种方式:
  · docker
  · 搭建私网
  · 连接测试网
  本文将逐一进行介绍,大家可以比较一下,自行选择适合自己的方式。
  1.概览
  EOS三大组件:
  · nodeos:EOS节点程序,维护完整的区块链
  · cleos:EOS命令行程序,完成和节点的交互
  · keosd: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
  编译成功后会出现下面的图案:
  然后进行安装:
  $ 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
  $ ./
  我们可以看一下这个脚本具体帮我们做了哪些事情:
  可以看到,部署了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 eosio.token@active
  创建新代币:(两种方法等价,后一种JSON格式和以太坊类似)
$ cleos push action eosio.token create '[ "eosio", "1000000000.0000 EOS"]' -p eosio.token@active
$ cleos push action eosio.token create '{"issuer":"eosio", "maximum_supply":"1000000000.0000 EOS"}' -p eosio.token@active
  铸币:(会产生一个internal transfer,方便统计)
$ cleos push action eosio.token issue '[ "alice", "100.0000 EOS", "memo" ]' -p eosio@active
  转币:(会给两个账户发通知,类似于以太坊的event,但可以指定账户)
$ cleos push action eosio.token transfer '[ "alice", "bob", "25.0000 EOS", "m" ]' -p alice@active
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,点击导航栏上的Faucet:
  点击“Send Coins”,100个EOS就发到你的账户了。
  要连接到测试网,需要一个节点URL,点击导航栏上的“API”可以查看所有可用的URL:
  接下来你就可以通过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的三种测试环境的搭建就介绍到这里,相信总有一款适合你~

TAG: 软件测试技术 测试环境

 

评分:0

我来说两句

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 54335
  • 日志数: 43
  • 建立时间: 2019-02-12
  • 更新时间: 2020-08-10

RSS订阅

Open Toolbar