目的
使用 EOS docker 镜像快速运行,熟悉基本操作, 代币发行和交易。
这里跑的只是一个EOS单节点,没有和EOS测试网络或主网链接,有兴趣的可以自行了解。
前提
安装docker: 从 https://download.docker.com/mac/stable/Docker.dmg 下载后安装后,双击运行。
在Mac menu bar上找到docker运行图标依次找到 Preferences -> Daemon -> Registry mirrors
填入:
https://registry.docker-cn.com , 这样让docker从国内镜像仓库拉取会快一些。
EOS 概览
运行EOS前,先了解下会涉及到的EOS组成部分:
-
nodeos
(node + eos = nodeos) EOS 节点,是EOS核心组件,以守护进程的形式运行,区块的生成、操作链的API都由它负责 -
keosd
(key + eos = keosd) 负责和钱包交互,用于存储私钥 -
cleos
(cli + eos = cleos) 和EOS区块链交互、管理钱包的命令行工具 -
wallet
存储用户的私钥
关系如图所示
运行docker
拉取docker镜像
docker pull eosio/eos-dev
运行:
docker run --rm --name eosio -d -p 8888:8888 -p 9876:9876 -p 8900:8900 -v /tmp/work:/work -v /tmp/eosio/data:/mnt/dev/data -v /tmp/eosio/config:/mnt/dev/config eosio/eos-dev /bin/bash -c "nodeos -e -p eosio --plugin eosio::producer_plugin --plugin eosio::history_plugin --filter-on=* --plugin eosio::chain_api_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:8888 --access-control-allow-origin=* --contracts-console --http-validate-host=false"
检验是否运行
docker ps | grep eosio
输出类似:
feac5002187e eosio/eos-dev "/bin/bash -c 'nodeo…" 8 hours ago Up 8 hours 0.0.0.0:8888->8888/tcp, 0.0.0.0:9876->9876/tcp eosio
或直接访问接口:http://localhost:8888/v1/chain/get_info 能得到区块链信息表示正常运行
注
docker 镜像名称 可以换为 eosio/eos
,镜像只有两三百MB,eosio/eos-dev
镜像有3个多GB。
但 eosio/eos
运行起来后docker内部会少一些软件,如 curl
~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
eosio/eos-dev latest 10052b957b65 6 days ago 3.11GB
eosio/eos latest 01b0e8c06b2d 6 days ago 250MB
cleos 命令行工具
cleos 命令行工具可以和EOS区块链交互,可以用于管理钱包wallet。
由于cleos 现在是跑在docker中的,设置cleos命令,以便无需进入到docker中,方便直接在外面执行cleos
alias cleos='docker exec -it eosio /opt/eosio/bin/cleos -u http://localhost:8888'
可以将以上命令放到 ~/.bashrc
文件中 (使用zsh的放到 ~/.zshrc
),方便在每次启动命令行工具时自动执行。比如执行:
echo "alias cleos='docker exec -it eosio /opt/eosio/bin/cleos -u http://localhost:8888'" >> ~/.bashrc
source ~/.bashrc
执行 cleos --help
能正常显示帮助信息,表明已成功。
cleos基本操作
cleos get info
获取区块链信息docker exec -ti eosio bash
进入docker内部,方便操作后面的命令,目前不进入docker内部有时操作钱包会有问题cleos wallet create --to-console
创建钱包,会输出钱包的密码,妥善保存,以后有用cleos wallet unlock
输入创建钱包时得到的密码就可以打开钱包。钱包创建完成后默认是打开的,不需要unlock,但过一段时间(默认900秒) 后需要unlock-
cleos wallet list
可以查看钱包和其状态。如以下结果,表面有个叫default
的钱包,后面*
表明钱包已 unlockWallets: [ "default *" ]
cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
导入默认账户eosio
的私钥到钱包,方便后续以此账户操作,比如创建其他账户cleos create key --to-console
创建一对公钥私钥 ,公钥 Public key 可以用于创建用户,私钥导入钱包后可以以用户的身份操作区块链。秘钥要成对使用。假设创建了秘钥对:
Private key: 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM
Public key: EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzheccleos create account eosio usera EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzhec
创建一个账户,usera 可以替换为你想要的用户名,EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzhec 可以使用你生成的其他公钥cleos wallet import --private-key 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM
导入账户私钥到钱包。 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM 可以替换为你生成的其他私钥
合约和交易
启用合约eosio.token
,以此合约发行代币,并做一笔交易。
首先,需要创建一个账户eosio.token 来使用合约eosio.token
发行代币
cleos create key --to-console
创建一对秘钥,假设如下:
Private key: 5KD8V6MuBhu21gxTknqiqwCvoQ18Qvuz9PYgh4vEt3DdcDkcf3Q
Public key: EOS637Cf9ZYB6xTgKVzafFTWNmhWWswqTJc4x35y1YPhsyK8hRBNVcleos create account eosio eosio.token EOS637Cf9ZYB6xTgKVzafFTWNmhWWswqTJc4x35y1YPhsyK8hRBNV
使用公钥创建账户 eosio.tokencleos wallet import --private-key 5KD8V6MuBhu21gxTknqiqwCvoQ18Qvuz9PYgh4vEt3DdcDkcf3Q
导入eosio.token账户的私钥到钱包cleos set contract eosio contracts/eosio.bios -p eosio
给账户eosio设置合约eosio.bios
cleos set contract eosio.token contracts/eosio.token -p eosio.token
给账户eosio.token设置合约eosio.token
-
创建代币
cleos push action eosio.token create \ '{"issuer":"eosio", "maximum_supply":"1000000000.0000 SYS"}' \ -p eosio.token
-
发放代币
cleos push action eosio.token issue \ '[ "eosio", "1000000000.0000 SYS", "memo" ]' \ -p eosio
cleos transfer eosio usera '25 SYS' 'transfer remark'
给用户usera 转账 25 个代币,附带的消息是 “transfer remark”cleos get currency balance eosio.token usera
可以查看该账户余额cleos get account usera
查看账户信息,也能看到余额-
也可以用这种方式实现两个账户间转账:
cleos push action eosio.token transfer \ '[ "eosio", “usera", "5.0000 SYS", "message" ]' \ -p eosio
-
交易命令执行成功后会紧接着输出 transaction id, 可使用 transaction id 查看交易的详细信息 :
cleos get transaction 14575b582bdbf65c03a4122293b114059b70ad66d5ba8c14aca0e9db7ed9e97b
注
这篇 quick start 还比较浅,可以去 官网 查看EOS介绍。
包括以上的EOS概览、quick start、cleos操作账户和钱包,以及 EOS RPC API (即http接口)等等。
关于钱包 EOS RPC API:
目前在官网上看到在调用 RPC API 交易时,需要使用到钱包的API 如 /v1/wallet/sign_transaction
, 但始终没找到钱包 RPC API 的说明。
关于钱包守护进程kesod:
调用 钱包命令(cleos wallet xxxxxx
)时,docker 内部会自动启动管理钱包的进程 keosd,其启动的方式是:/opt/eosio/bin/keosd --http-server-address=127.0.0.1:8900
。
--http-server-address=127.0.0.1:8900
表明该进程的http服务只监听 docker 内部的http请求 (钱包安全性的原因?), 开发时需要外部访问钱包 http RPC 接口的, 可以docker exec -ti eosio bash
进入到docker内这样启动:
nohup /opt/eosio/bin/keosd --http-server-address=0.0.0.0:8900 --http-validate-host=false --unlock-timeout=99999999 > keosd.log 2>&1 &
监听所有 IP 来的 http 请求, 且给钱包超时锁定设置了比较长的时间,这样不用频繁去unlock钱包。