EOSのローカル開発環境でアカウントを作成する

Takuya Fujita
Nov 24, 2018 · 15 min read

はじめに

今回から、EOSIOの公式ドキュメントに沿って、EOSのローカル開発環境を作っていきます。Dockerがインストールされていることが条件です。

Dockerに不慣れな方のためにも、Dockerを使って何を行っているかイメージができるように解説しながら、ローカルでEOSアカウントを作成していきます。次回以降コントラクトの作成や、EOS上でのトークンの発行を予定しています。

eosio/eos-dev

まずターミナルを立ち上げて、Docker上でeosio/eos-devというモジュールを用意します。

$ docker pull eosio/eos-dev

$ docker login してないとpullできないので気をつけてください。2018/11/24現在、v1.4.4がインストールされます。違うバージョンを使いたい場合は、eosio/eos-dev:v1.2.2 のように指定することもできます。

$ docker network create eosdev

Pullを終えたら、まずDocker内でネットワークを立ち上げます。これからDocker内で二つの機能を立ち上げます。それらを繋ぐためのネットワークです。

EOSチェーン nodeosの立ち上げ

次に、ローカルでEOSのチェーンを立ち上げます。まず

$ docker psCONTAINER ID  IMAGE   COMMAND   CREATED  STATUS  PORTS NAMES

を実行しましょう。これは、現在Docker上で何が動いているか把握するためのコマンドです。何も表示されていないので、今現在は何も稼働していません。次に、

$ docker run --name nodeos -d -p 8888:8888 --network eosdev \
-v /tmp/eosio/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 --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で立ち上がったかを確認してみましょう。うまくいけば、上で指定した通りNAMESがnodeosのものが追加されているはずです。ノディオスと読みます。

$ docker logs --tail 10 nodeos

で、最新の10ブロックの情報を取得することもできます。ブロックの生成時間をみると、最新であることがわかるはずです。表示時間は世界標準時なので日本時間ときっちり9時間ずれています。

keosdを立ち上げる

次に、今立ち上げたnodeosとは別に、keosdというものもDocker上で稼働させます。このkeosdはEOSのウォレットやアドレスを管理するための場所です。

$ docker run -d --name keosd --network=eosdev \
-i eosio/eos-dev /bin/bash -c "keosd --http-server-address=0.0.0.0:9876"

を実行させましょう。再度 $ docker ps で確認してみてください。NAMEがkeosdのものが立ち上がっていると思います。ちなみにですが、このDocker上で稼働しているそれぞれをコンテナと呼びます。なので今回はkeosdのコンテナを立ち上げました。keosdの読み方は私もわかりません。。

keosdの中がどうなっているか確認してみましょう。

$ docker exec -it keosd bash# cleos --wallet-url http://127.0.0.1:9876 wallet list keysWallets:
[]
Error 3120006: No available wallet
Ensure that you have created a wallet and have it open

これを実行するとErrorと出ますが特に問題はないです。まだウォレットを作っていないのですから当然です。

ネットワークの確認,接続

ここまででEOSのノードと、ウォレットの2つの機能を立ち上げました。ここで、これらがちゃんと意図した通りに、最初のネットワークで繋がっているかを見てみます。

$ docker network inspect eosdev[
{
"Name": "eosdev",
"Id": "b24a6ae0b8a559212a1bf94cac77a17748cdb98970f4ff909d6084ef966ebf23",
"Created": "2018-09-05T01:20:26.4181748Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"2b6d8421243f8b02d19caf84735f05118f90e35f35b0ba0a035bbb045c64d707": {
"Name": "nodeos",
"EndpointID": "164d47d6f79b4b7348154485a6c79d9762e66d5c70cfeb39af7c7e55e7d7369f",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"ffe5f373dffdf9b31b69394416cadb7e292aa8030c6b66bd03ec90d316387dad": {
"Name": "keosd",
"EndpointID": "ac8c6bf49ba698c226631b41d98cb49f7289ed37f369da74ab8dd62d3dd5fa76",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]

上記のように、“Containers”の中に”nodeos”と”keosd”があれば、ネットワークが設定できているということです。

次に、今呼び出したネットワークの設定を参照しながら今後長いコマンドを使いやすいようにエイリアスを設定しておきます。エイリアスとはコマンドを別名で登録したものです。

$ alias cleos='docker exec -it nodeos /opt/eosio/bin/cleos --url http://127.0.0.1:8888 --wallet-url http://[keosd_ip]:9876'

[keosd_ip]のところに、参照したkeosdのIPアドレスを入れましょう。今回の場合ですと、太字の場所の172.18.0.3 を入力することになります。

上の図のように今設定したcleosがnodeosとkeosdを結び、間接的にウォレットとチェーンを結びつけてくれます。

アカウント作成

一通りの設定は終わったので、アカウントの作成に入って行きましょう!ウォレットの作成、中の秘密鍵の作成、アカウントの登録という順番です。EOSのアカウント登録はすでにアカウントを持っている人からの紹介がないとできない仕組みになっているので、ローカル環境では公開されているEOSIOの情報も使います。

$ cleos create key --to-consoleCreating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JzGJZpzG578BNNUPzHTeRxtzD39C7oTUvVGoKG2P1A52LpBmp2"

と実行することでウォレットが作成できます。最後に出ているハッシュ値はウォレットを紛失した際に復元するためのpasswordなので必ず別の場所にメモしておきましょう。時間が経つとウォレットがロックされて、このパスワードを聞かれる場合があります。ウォレットがロックされてしまった場合は、$ cleos wallet unlock -n (ウォレット名) でアンロックすることができます。今回だとdefaultがウォレット名ですね。ターミナルを再起動した後だと、cleosを再度登録してあげる必要があります。

次にウォレットの中にEOSの秘密鍵を作成します。

$ cleos create key --to-consolePrivate key: 5K9ZXTtGV6DuRzgscTysYwCtfAMSvQyGzQsEY2X3TGpoeAVXpQp
Public key: EOS7WriLmbvGqfozW5R6ge5UygJfkHB78ZkP49qYj2v2vRWR26wD6

これだけだとあくまでも秘密鍵、公開鍵を生成しただけです。ウォレットにインポートしてあげましょう。

$ cleos wallet import --private-key (今作った秘密鍵)imported private key for: (対応する公開鍵が表示されます。)

次に、アカウントを登録するためにEOSIOの秘密鍵をインポートします。これはコピペで大丈夫です。

$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

最後に、アカウントの登録です。アカウント名は13文字以下の英数字にしてください。

$ cleos create account eosio (自分のアカウント名) (自分の公開鍵)executed transaction: 51ac9c40342e8bc14225b0c3b5dcdf4da0a2f432d5acce1035c12a473d94f1ca  200 bytes  432 us
# eosio <= eosio::newaccount
{"creator":"eosio","name":"(自分のアカウント名)","owner":{"threshold":1,"keys"
[{"key":"EOS7WriLmbvGqfozW5R6ge5UygJf...
warning: transaction executed locally, but may not be confirmed by the network yet ]

アカウントの登録自体がトランザクションを発生させており、その先がeosioとなっているのがわかると思います。

これでアカウントの登録完了です!

補足(EOSノードの止め方)

今回はここまでですが、Docker上で立ち上げたEOSノードは一度ストップさせておかないと、動き続けることになるので、EOSノードの止め方を書いておきます。

これまで同様に$ docker ps を実行させると、以下のように今立ち上がっているコンテナが表示されるはずです。

$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6bf1845a67cf eosio/eos-dev “/bin/bash -c ‘nodeo…” 7 hours ago Up 7 hours 0.0.0.0:8888->8888/tcp nodeos
a22ae86fc6d5 eosio/eos-dev “/bin/bash -c ‘keosd…” 7 hours ago Up 7 hours keosd

この一番左のCONTAINER ID からnodeosのものを選んで(今回だと6bf1845a67cf) $ docker stop (CONTAINER ID) を実行することで、ノードを一時的に止めることができます。また実行させたい時は $ docker start (CONTAINER ID)で稼働させることができます。チェーンを立ち上げたままにしておくと、知らないうちにかなりの容量を食ってしまうことがあるので気をつけておきましょう。以上補足でした。ちなみに、稼働してないコンテナも含めてコンテナを確認したい時は $ docker ps -a で確認できます。そこから実行したいコンテナのIDを確認しましょう。

以上、補足でした。

まとめ

お疲れ様でした。Docker自体に慣れてない人や、コントラクト作成などをしたことない人もわかるように書いたので、まわりくどい内容になっているかもしれませんがご容赦を!
今回の内容を踏まえて、自分でどんどん先を勉強されたい方は、参考資料にEOSIOの公式サイトがあるのでそちらを参照するのがいいと思います。

次回はこの続きとして、ローカル環境でのコントラクトの作成を行います!続けることが大事!ほんと!

執筆者:藤田 拓也(HashHubインターン:@peaceandwhisky

参考資料

お知らせ

■HashHubでは入居者募集中です!
HashHubは、ブロックチェーン業界で働いている人のためのコワーキングスペースを運営しています。ご利用をご検討の方は、下記のWEBサイトからお問い合わせください。また、最新情報はTwitterで発信中です。

HashHub:https://hashhub.tokyo/
Twitter:https://twitter.com/HashHub_Tokyo

■ブロックチェーンエンジニア集中講座開講中!
HashHubではブロックチェーンエンジニアを育成するための短期集中講座を開講しています。お申込み、詳細は下記のページをご覧ください。

ブロックチェーンエンジニア集中講座:https://www.blockchain-edu.jp/

■HashHubでは下記のポジションを積極採用中です!
・コミュニティマネージャー
・ブロックチェーン技術者・開発者
・ビジネスディベロップメント

詳細は下記Wantedlyのページをご覧ください。

Wantedly:https://www.wantedly.com/companies/hashhub/projects

GBEC Tech Blog

This Blog is for all Blockchain Engineer

Takuya Fujita

Written by

GBEC Tech Blog

This Blog is for all Blockchain Engineer