目的
使用 EOS docker 鏡像快速運行,熟悉基本操作, 代幣發(fā)行和交易。
這里跑的只是一個EOS單節(jié)點,沒有和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 節(jié)點,是EOS核心組件,以守護進程的形式運行,區(qū)塊的生成、操作鏈的API都由它負責 -
keosd(key + eos = keosd) 負責和錢包交互,用于存儲私鑰 -
cleos(cli + eos = cleos) 和EOS區(qū)塊鏈交互、管理錢包的命令行工具 -
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 能得到區(qū)塊鏈信息表示正常運行
注
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區(qū)塊鏈交互,可以用于管理錢包wallet。
由于cleos 現在是跑在docker中的,設置cleos命令,以便無需進入到docker中,方便直接在外面執(zhí)行cleos
alias cleos='docker exec -it eosio /opt/eosio/bin/cleos -u http://localhost:8888'
可以將以上命令放到 ~/.bashrc 文件中 (使用zsh的放到 ~/.zshrc),方便在每次啟動命令行工具時自動執(zhí)行。比如執(zhí)行:
echo "alias cleos='docker exec -it eosio /opt/eosio/bin/cleos -u http://localhost:8888'" >> ~/.bashrc
source ~/.bashrc
執(zhí)行 cleos --help 能正常顯示幫助信息,表明已成功。
cleos基本操作
cleos get info
獲取區(qū)塊鏈信息docker exec -ti eosio bash
進入docker內部,方便操作后面的命令,目前不進入docker內部有時操作錢包會有問題cleos wallet create --to-console
創(chuàng)建錢包,會輸出錢包的密碼,妥善保存,以后有用cleos wallet unlock
輸入創(chuàng)建錢包時得到的密碼就可以打開錢包。錢包創(chuàng)建完成后默認是打開的,不需要unlock,但過一段時間(默認900秒) 后需要unlock-
cleos wallet list
可以查看錢包和其狀態(tài)。如以下結果,表面有個叫default的錢包,后面*表明錢包已 unlockWallets: [ "default *" ] cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
導入默認賬戶eosio的私鑰到錢包,方便后續(xù)以此賬戶操作,比如創(chuàng)建其他賬戶cleos create key --to-console
創(chuàng)建一對公鑰私鑰 ,公鑰 Public key 可以用于創(chuàng)建用戶,私鑰導入錢包后可以以用戶的身份操作區(qū)塊鏈。秘鑰要成對使用。假設創(chuàng)建了秘鑰對:
Private key: 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM
Public key: EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzheccleos create account eosio usera EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzhec
創(chuàng)建一個賬戶,usera 可以替換為你想要的用戶名,EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzhec 可以使用你生成的其他公鑰cleos wallet import --private-key 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM
導入賬戶私鑰到錢包。 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM 可以替換為你生成的其他私鑰
合約和交易
啟用合約eosio.token ,以此合約發(fā)行代幣,并做一筆交易。
首先,需要創(chuàng)建一個賬戶eosio.token 來使用合約eosio.token發(fā)行代幣
cleos create key --to-console
創(chuàng)建一對秘鑰,假設如下:
Private key: 5KD8V6MuBhu21gxTknqiqwCvoQ18Qvuz9PYgh4vEt3DdcDkcf3Q
Public key: EOS637Cf9ZYB6xTgKVzafFTWNmhWWswqTJc4x35y1YPhsyK8hRBNVcleos create account eosio eosio.token EOS637Cf9ZYB6xTgKVzafFTWNmhWWswqTJc4x35y1YPhsyK8hRBNV
使用公鑰創(chuàng)建賬戶 eosio.tokencleos wallet import --private-key 5KD8V6MuBhu21gxTknqiqwCvoQ18Qvuz9PYgh4vEt3DdcDkcf3Q
導入eosio.token賬戶的私鑰到錢包cleos set contract eosio contracts/eosio.bios -p eosio
給賬戶eosio設置合約eosio.bioscleos set contract eosio.token contracts/eosio.token -p eosio.token
給賬戶eosio.token設置合約eosio.token-
創(chuàng)建代幣
cleos push action eosio.token create \ '{"issuer":"eosio", "maximum_supply":"1000000000.0000 SYS"}' \ -p eosio.token -
發(fā)放代幣
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 -
交易命令執(zhí)行成功后會緊接著輸出 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服務只監(jiān)聽 docker 內部的http請求 (錢包安全性的原因?), 開發(fā)時需要外部訪問錢包 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 &
監(jiān)聽所有 IP 來的 http 請求, 且給錢包超時鎖定設置了比較長的時間,這樣不用頻繁去unlock錢包。