EOS的三種測試環境的搭建
最近開始研究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
或關注飛久微信公眾號: