最近开始研究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 [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,点击导航栏上的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的三种测试环境的搭建就介绍到这里,相信总有一款适合你~
更多文章欢迎关注“鑫鑫点灯”专栏:https://blog.csdn.net/turkeycock
或关注飞久微信公众号: