目的
使用 EOS docker 鏡像快速運行归形,熟悉基本操作宠页, 代幣發(fā)行和交易震庭。
這里跑的只是一個EOS單節(jié)點瑰抵,沒有和EOS測試網(wǎng)絡(luò)或主網(wǎng)鏈接,有興趣的可以自行了解器联。
前提
安裝docker: 從 https://download.docker.com/mac/stable/Docker.dmg 下載后安裝后二汛,雙擊運行。
在Mac menu bar上找到docker運行圖標(biāo)依次找到 Preferences -> Daemon -> Registry mirrors
填入:
https://registry.docker-cn.com 拨拓, 這樣讓docker從國內(nèi)鏡像倉庫拉取會快一些肴颊。
EOS 概覽
運行EOS前,先了解下會涉及到的EOS組成部分:
-
nodeos
(node + eos = nodeos) EOS 節(jié)點渣磷,是EOS核心組件婿着,以守護(hù)進(jìn)程的形式運行,區(qū)塊的生成醋界、操作鏈的API都由它負(fù)責(zé) -
keosd
(key + eos = keosd) 負(fù)責(zé)和錢包交互竟宋,用于存儲私鑰 -
cleos
(cli + eos = cleos) 和EOS區(qū)塊鏈交互、管理錢包的命令行工具 -
wallet
存儲用戶的私鑰
關(guān)系如圖所示
運行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內(nèi)部會少一些軟件逐样,如 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 現(xiàn)在是跑在docker中的官研,設(shè)置cleos命令秽澳,以便無需進(jìn)入到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
進(jìn)入docker內(nèi)部,方便操作后面的命令孩锡,目前不進(jìn)入docker內(nèi)部有時操作錢包會有問題cleos wallet create --to-console
創(chuàng)建錢包酷宵,會輸出錢包的密碼,妥善保存躬窜,以后有用cleos wallet unlock
輸入創(chuàng)建錢包時得到的密碼就可以打開錢包浇垦。錢包創(chuàng)建完成后默認(rèn)是打開的,不需要unlock荣挨,但過一段時間(默認(rèn)900秒) 后需要unlock-
cleos wallet list
可以查看錢包和其狀態(tài)男韧。如以下結(jié)果朴摊,表面有個叫default
的錢包,后面*
表明錢包已 unlockWallets: [ "default *" ]
cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
導(dǎo)入默認(rèn)賬戶eosio
的私鑰到錢包此虑,方便后續(xù)以此賬戶操作甚纲,比如創(chuàng)建其他賬戶cleos create key --to-console
創(chuàng)建一對公鑰私鑰 ,公鑰 Public key 可以用于創(chuàng)建用戶朦前,私鑰導(dǎo)入錢包后可以以用戶的身份操作區(qū)塊鏈介杆。秘鑰要成對使用。假設(shè)創(chuàng)建了秘鑰對:
Private key: 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM
Public key: EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzheccleos create account eosio usera EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzhec
創(chuàng)建一個賬戶韭寸,usera 可以替換為你想要的用戶名春哨,EOS7jpAz4sKTZnCMY1XbVHN2Zcdb2SzWnmuzmFm4MRAnBivyUzhec 可以使用你生成的其他公鑰cleos wallet import --private-key 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM
導(dǎo)入賬戶私鑰到錢包。 5JzX1ryWqP4NRijRhzVJSBbUwd8pzHbj4Kmy5ZXBAvXN7aHperM 可以替換為你生成的其他私鑰
合約和交易
啟用合約eosio.token
恩伺,以此合約發(fā)行代幣悲靴,并做一筆交易。
首先莫其,需要創(chuàng)建一個賬戶eosio.token 來使用合約eosio.token
發(fā)行代幣
cleos create key --to-console
創(chuàng)建一對秘鑰癞尚,假設(shè)如下:
Private key: 5KD8V6MuBhu21gxTknqiqwCvoQ18Qvuz9PYgh4vEt3DdcDkcf3Q
Public key: EOS637Cf9ZYB6xTgKVzafFTWNmhWWswqTJc4x35y1YPhsyK8hRBNVcleos create account eosio eosio.token EOS637Cf9ZYB6xTgKVzafFTWNmhWWswqTJc4x35y1YPhsyK8hRBNV
使用公鑰創(chuàng)建賬戶 eosio.tokencleos wallet import --private-key 5KD8V6MuBhu21gxTknqiqwCvoQ18Qvuz9PYgh4vEt3DdcDkcf3Q
導(dǎo)入eosio.token賬戶的私鑰到錢包cleos set contract eosio contracts/eosio.bios -p eosio
給賬戶eosio設(shè)置合約eosio.bios
cleos set contract eosio.token contracts/eosio.token -p eosio.token
給賬戶eosio.token設(shè)置合約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 轉(zhuǎn)賬 25 個代幣,附帶的消息是 “transfer remark”cleos get currency balance eosio.token usera
可以查看該賬戶余額cleos get account usera
查看賬戶信息乱陡,也能看到余額-
也可以用這種方式實現(xiàn)兩個賬戶間轉(zhuǎn)賬:
cleos push action eosio.token transfer \ '[ "eosio", “usera", "5.0000 SYS", "message" ]' \ -p eosio
-
交易命令執(zhí)行成功后會緊接著輸出 transaction id, 可使用 transaction id 查看交易的詳細(xì)信息 :
cleos get transaction 14575b582bdbf65c03a4122293b114059b70ad66d5ba8c14aca0e9db7ed9e97b
注
這篇 quick start 還比較淺浇揩,可以去 官網(wǎng) 查看EOS介紹。
包括以上的EOS概覽憨颠、quick start胳徽、cleos操作賬戶和錢包,以及 EOS RPC API (即http接口)等等爽彤。
關(guān)于錢包 EOS RPC API:
目前在官網(wǎng)上看到在調(diào)用 RPC API 交易時养盗,需要使用到錢包的API 如 /v1/wallet/sign_transaction
, 但始終沒找到錢包 RPC API 的說明适篙。
關(guān)于錢包守護(hù)進(jìn)程kesod:
調(diào)用 錢包命令(cleos wallet xxxxxx
)時往核,docker 內(nèi)部會自動啟動管理錢包的進(jìn)程 keosd,其啟動的方式是:/opt/eosio/bin/keosd --http-server-address=127.0.0.1:8900
嚷节。
--http-server-address=127.0.0.1:8900
表明該進(jìn)程的http服務(wù)只監(jiān)聽 docker 內(nèi)部的http請求 (錢包安全性的原因聂儒?), 開發(fā)時需要外部訪問錢包 http RPC 接口的硫痰, 可以docker exec -ti eosio bash
進(jìn)入到docker內(nèi)這樣啟動:
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 請求衩婚, 且給錢包超時鎖定設(shè)置了比較長的時間,這樣不用頻繁去unlock錢包效斑。