EOS の Docker Quickstart に加えて、Account を作成するまでやってみた


最近 EOS を調べ始めたので、調べた内容やハマったことを共有したい

前提

  • EOS に関する説明は特にしません
  • Docker が既にインストールされている
    • Docker: Version 18.06.1-ce-mac74 (26766)
  • 使ってる eosio/eos-dev は下記のバージョンである
"Id": "sha256:8926b83923b11e8ea6e6be1c8f96f941fcd7731238273b2bed692b407e37fd3c",
"RepoTags": [
    "eosio/eos-dev:latest"
],
"RepoDigests": [
    "eosio/eos-dev@sha256:150cab925ca326293a82518bcd7d1a3cbbd5720f7e12f4545c6a616819083ab2"
],
"Parent": "",
"Comment": "",
"Created": "2018-09-12T00:24:34.401119021Z",
"Container": "b631fb0509d24f1f2a4e799681774aa12760718a9075f82d6b10ff24e62222ee",

Docker Quickstart (ほぼ公式ドキュメントのまんま)

Step 1. Docker Image を取得する

$ docker pull eosio/eos-dev

Step 2. ネットワークを作成する

$ docker network create eosdev

Step 3. コンテナを起動する

$ 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 run -d --name keosd --network=eosdev \
-i eosio/eos-dev /bin/bash -c "keosd --http-server-address=0.0.0.0:9876"

Step 4. 一旦動作確認

  • ブロック生成確認
$ docker logs --tail 10 nodeos
# 上記コマンドを実行して、下記のようにブロックが作成されているログができていればOK

2018-09-15T07:34:08.008 thread-0   producer_plugin.cpp:1302      produce_block        ] Produced block 000019e303284a82... #6627 @ 2018-09-15T07:34:08.000 signed by eosio [trxs: 0, lib: 6626, confirmed: 0]
2018-09-15T07:34:08.503 thread-0   producer_plugin.cpp:1302      produce_block        ] Produced block 000019e4200a713d... #6628 @ 2018-09-15T07:34:08.500 signed by eosio [trxs: 0, lib: 6627, confirmed: 0]
2018-09-15T07:34:09.006 thread-0   producer_plugin.cpp:1302      produce_block        ] Produced block 000019e5ac15b894... #6629 @ 2018-09-15T07:34:09.000 signed by eosio [trxs: 0, lib: 6628, confirmed: 0]
2018-09-15T07:34:09.504 thread-0   producer_plugin.cpp:1302      produce_block        ] Produced block 000019e6e0f7f8a8... #6630 @ 2018-09-15T07:34:09.500 signed by eosio [trxs: 0, lib: 6629, confirmed: 0]
2018-09-15T07:34:10.006 thread-0   producer_plugin.cpp:1302      produce_block        ] Produced block 000019e7d0021ecf... #6631 @ 2018-09-15T07:34:10.000 signed by eosio [trxs: 0, lib: 6630, confirmed: 0]
2018-09-15T07:34:10.504 thread-0   producer_plugin.cpp:1302      produce_block        ] Produced block 000019e875aeae34... #6632 @ 2018-09-15T07:34:10.500 signed by eosio [trxs: 0, lib: 6631, confirmed: 0]
2018-09-15T07:34:11.003 thread-0   producer_plugin.cpp:1302      produce_block        ] Produced block 000019e9e128983f... #6633 @ 2018-09-15T07:34:11.000 signed by eosio [trxs: 0, lib: 6632, confirmed: 0]
2018-09-15T07:34:11.503 thread-0   producer_plugin.cpp:1302      produce_block        ] Produced block 000019ea4f2468a0... #6634 @ 2018-09-15T07:34:11.500 signed by eosio [trxs: 0, lib: 6633, confirmed: 0]
2018-09-15T07:34:12.004 thread-0   producer_plugin.cpp:1302      produce_block        ] Produced block 000019eb2df923cd... #6635 @ 2018-09-15T07:34:12.000 signed by eosio [trxs: 0, lib: 6634, confirmed: 0]
2018-09-15T07:34:12.501 thread-0   producer_plugin.cpp:1302      produce_block        ] Produced block 000019ece62046d4... #6636 @ 2018-09-15T07:34:12.500 signed by eosio [trxs: 0, lib: 6635, confirmed: 0]
  • コンテナに入って、ウォレットを確認する
$ docker exec -it keosd bash

root@1883574ee3c4:/# cleos --wallet-url http://127.0.0.1:9876 wallet list keys

ここでいきなり下記画像のように赤いエラーメッセージが出てしまいますが、その内容通り、今まだウォレットを作成していないだけなので、無視して次に進めて大丈夫です〜

  • exit でコンテナから出る

    • nodes のエントリポイントを確認する
    • これ以降は全部コンテナではなく、ローカルで実行する
$ curl http://localhost:8888/v1/chain/get_info

{"server_version":"08819aae","chain_id":"cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f","head_block_num":8161,"last_irreversible_block_num":8160,"last_irreversible_block_id":"00001fe0eb0e27e6f6417493e7411ef66afc4b901601c77b2169ecec7a6fffe0","head_block_id":"00001fe1d97b445fdcdfdbb9fbb5b4c3f483a92e2fd19181ecbdd460e8eae535","head_block_time":"2018-09-15T07:47:35.500","head_block_producer":"eosio","virtual_block_cpu_limit":200000000,"virtual_block_net_limit":1048576000,"block_cpu_limit":199900,"block_net_limit":1048576,"server_version_string":"v1.2.5"}
  • 補足:ブラウザで直接に上記 URL にアクセスしても確認できる

cleos コマンドのエイリアス作成

  • 下記コマンドを実行して、 keosd コンテナの IP アドレスを確認する
$ docker network inspect eosdev
[
    {
        "Name": "eosdev",
        "Id": "f65504e7e905aaacf8133788b71caf92caac0f0f2b7562d62b492a98d92fb384",
        "Created": "2018-09-07T07:06:37.687702865Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "1883574ee3c437dbd50bb95a00ce4e98d37abc352655165d172c3dce9a1133fe": {
                "Name": "keosd",
                "EndpointID": "63506bca063dcc0fa21bb2b65c4a46ea84ecf29e88dd7eb9338bfb83210603dd",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            },
            "f0050f87cabd114dcaa4036a9a7f3cd508f185bf75ce2d6e81491d7bc3decf20": {
                "Name": "nodeos",
                "EndpointID": "adc77b77c339625538559bb3fc3ebef4480edf5f464cf0f9be6111fc595a9b1c",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
$
  • 取得できた IP アドレス(上記でできたのは 172.19.0.3)を --wallet-url のパラメータに設定して、コマンドのエリアスを作成する
$ alias cleos='docker exec -it nodeos /opt/eosio/bin/cleos --url http://127.0.0.1:8888 --wallet-url http://172.19.0.3:9876'

# cleos wallet list を実行して、設定を確認する

$ cleos wallet list
Wallets:
[]
$

アカウントを作成してみる

  • ウォレットを作成する
$ 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.
"PW5KWT9p86GuWMzwpCV4UDuB7Y9Agi5w14BtfcN3in72N93DQ8cSw"
$

ここで作成されたのは default というウォレットになります。名前を指定して別のウォレットも作成できますが、今回は割愛

  • キーペアを作成する
$ cleos create key --to-console
Private key: 5J43P9JQkNxa58uCXhtxQRQo6iFZW4jHxLRi7LfjrxEL9qNpTAt
Public key: EOS64PRrt3iQb3AbyTEBUmQxChub2eyoSKs1UQVJcvokKkTyySwpW
$
  • キーペアをウォレットにインポートする
    • プライベートキーからパブリックキーを算出できるので、プライベートキーだけ指定する
$ cleos wallet import --private-key 5J43P9JQkNxa58uCXhtxQRQo6iFZW4jHxLRi7LfjrxEL9qNpTAt
imported private key for: EOS64PRrt3iQb3AbyTEBUmQxChub2eyoSKs1UQVJcvokKkTyySwpW
$
  • ちょっとややこしいですが、新しいアカウント用のプライベート以外に、システムアカウント eosio のプライベートキーをインポートする必要もある
# https://github.com/EOSIO/eos/issues/4154#issuecomment-397820824
# docker の場合、 `eosio` アカウントのキーペアは下記になっている
# eosio public key: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
# eosio private key: 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
$
  • Account を作成する
# `cleos create account eosio` の部分は固定値
# `newaccount` は新しいアカウント名
# 最後のパラメータは、上のステップで作成したキーペアの中のパブリックキー
$ cleos create account eosio newaccount EOS64PRrt3iQb3AbyTEBUmQxChub2eyoSKs1UQVJcvokKkTyySwpW
executed transaction: a369f27db7737df0491d4df6f39ceb11b2ff8d681d3eece0014cadc361990de2  200 bytes  381 us
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"newaccount","owner":{"threshold":1,"keys":[{"key":"EOS64PRrt3iQb3AbyTEBUm...
warning: transaction executed locally, but may not be confirmed by the network yet    ]
$

お疲れ様でした!これでアカウントを作成できました!

まとめ

  • 新しいアカウントを作成する際は、eosio アカウントに対してコマンドを実行するので、eosio アカウントのキーペア情報も必要
    • この件を対応しないと、 Error 3090003: provided keys, permissions, and delays do not satisfy declared authorizations エラーになってしまう
  • アカウントの使い方については、また別記事で

参考リンク