1. 程式人生 > >EOS的三種測試環境的搭建

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
或關注飛久微信公眾號:
在這裡插入圖片描述