EOSコインのWallet操作まで(したかった)


年明け後からの相場大暴落。そしてコイン盗難事件。
期待でウハウハの状態から一気に奈落の底に突き落とされて、まだ傷が癒えきれていない昨今。皆さんいかがお過ごしでしょうか。

久しぶりにコインのランキングなどを見てみました。

# １日の取引ボリューム額順ランキング(2018年8月28日現在) 
https://coinmarketcap.com/ja/
![スクリーンショット 2018-08-28 15.09.28.png](https://qiita-image-store.s3.amazonaws.com/0/284314/cfb5744b-29c4-bc20-b4e1-ed95813457b0.png)

EOSコインというのが４位。527億円！　何このすごいコイン！　だけど全然知らないよ！
ということで、調べてみました。

以下、この記事では、testネットでnodeを立ててwalletなどの一連の操作ができるところまでの方法を記載します。


# EOSコインとは

コインの経緯や定性的な話は、他サイトの方が詳しいです。→ https://www.newscrypto.jp/articles/3705

ざっくりまとめるとEOSコインは
　1. PoWではなく、DPoS。（投票によって選出された承認者(スーパーノード)によりブロックを生成）
　2. Bitcoinのような１本のチェーンではなく、有向非巡回グラフ(DAG)を採用。
　3. 今年５月にバージョン1.0がリリース（それまではEthトークン。本物がリリースされた貴重なケース？）
というもののようです。どおりでQiitaにまだ記事がないわけだ・・・


# 早速インスコ

EOSの開発者向けサイト： https://developers.eos.io

「Docker Quickstart」とか書いてるので、従って入れてみます。※サイトに記載のまま
https://developers.eos.io/eosio-nodeos/docs/docker-quickstart

```
$ docker pull eosio/eos-dev
$ docker run --rm --name eosio -d -p 8888:8888 -p 9876:9876 -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 --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"
```

これでノードが立ちあがったようなので、RESTAPIをコールすると動作します。

```
$ curl --request POST --url http://127.0.0.1:8888/v1/chain/get_info
{"server_version":"2ad41277","chain_id":"cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f","head_block_num":326,"last_irreversible_block_num":325,"last_irreversible_block_id":"000001454aada9f34b827dd1c7a96e34970f69e88eebf8fdca99312a057cdbb9","head_block_id":"00000146b96803b85880927a39435523eb3ee859c75c3f7a0b5d8e4ee237173f","head_block_time":"2018-08-28T01:51:14.500","head_block_producer":"eosio","virtual_block_cpu_limit":276661,"virtual_block_net_limit":1451306,"block_cpu_limit":199900,"block_net_limit":1048576,"server_version_string":"v1.2.2"}
```

RESTAPIの一覧があるので、バシバシ打ってみるべし
https://developers.eos.io/eosio-cleos/reference

普通のコインですと、ノードを立ち上げると同時に自分用のオリジナルWalletもできて、残高０が確認できるものですが、
EOSコインはそうではないようです。初期状態でwalletやaccountについて問い合わせるとエラーになりました。

```
$ curl --request POST --url http://127.0.0.1:8888/v1/chain/get_account
{"code":500,"message":"Internal Service Error","error":{"code":0,"name":"exception","what":"unspecified","details":[]}}
```

docker内のcleosコマンドへエイリアスを張って呼び出す方法もあるので行いました。

```
$ alias cleos='docker exec -it eosio /opt/eosio/bin/cleos -u 
```
こうすると、cleosコマンドがdockerの外から呼び出せます。
[コマンド一覧](https://developers.eos.io/eosio-cleos/reference)

```
$ cleos wallet create -n testwallet1 --to-console
"/opt/eosio/bin/keosd" launched
Creating wallet: testwallet1
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JASM9kRGKSvBRF35bwBUG5DHFWmkWvnNyPSWoXXXXXXXXXXXXX"

$ cleos wallet open -n testwallet1
"/opt/eosio/bin/keosd" launched
Opened: testwallet1

$ cleos wallet list
"/opt/eosio/bin/keosd" launched
Wallets:
[]

```
Walletのcreate→openまではできるのですが、listに表示されない。。。
コマンド一覧のサンプルでは、ここで表示されるはずなのですが。。。


[Learn about Keys, Wallets and Accounts with cleos](https://developers.eos.io/eosio-nodeos/v1.1.0/docs/learn-about-wallets-keys-and-accounts-with-cleos) のページには、
> Prerequisites
> ・Built and running copy of cleos and keosd on your system.
> ・Built and ready to run copy of nodeos on your system.
> ・Basic understanding of command line interfaces.

と書いてあります。「Builtってコンパイルしろという意味？」などと思ったので、ソースビルドをしてみました。

# ソースからビルドしてやり直し

githubにソースが公開されてるので、git cloneして、ビルド用のシェルを実行すればokです。

```
$ git clone https://github.com/EOSIO/eos.git --recursive
$ cd eos
$ sudo ./eosio_build.sh
```

※ --recursiveが必要です。
※ eosio_build.sh を実行してもエラーで終了しましたが、再度実行すると必要ライブラリのインストールが徐々に進む感じで、私の環境では３回ほど再実行したところでやっとコンパイルが始まりました。
※ コンパイルが始まってから終わるまで２時間ほどかかりました。（当方マシンは、MacBookPro 2.9GHz Intel Core i5）

### コンパイルで出るエラー１

```
Could not find a package configuration file provided by "LLVM" (requested version 4.0)
```
対策はこちら、https://github.com/EOSIO/eos/issues/43

```
$ brew info llvm
$ export LLVM_DIR=/usr/local/Cellar/llvm/4.0.0_1/lib/cmake
```

### コンパイルで出るエラー２

```
Failed to find Gettext libintl (missing: Intl_INCLUDE_DIR)
```
対策はこちら、https://github.com/EOSIO/eos/issues/2028

```
$ brew unlink gettext && brew link --force gettext
```

### コンパイルできた！
らこんな画面が出ました。うれしい〜
<img width="565" alt="スクリーンショット 2018-08-28 17.34.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/284314/3e7d4653-8619-4f82-10fe-9ba0eaa8fc0f.png">

で、再度、Wallet作成のコマンドを実行してみます。

```
$ /usr/local/bin/mongod -f /usr/local/etc/mongod.conf &
$ cd build/programs/cleos
```
mongodを動かして、cleosのディレクトリへ移動します。
もうdockerではないので、エイリアスは使いません。cleosを直接呼びます。

```
$ cleos wallet create -n testwallet2 --to-console
"/opt/eosio/bin/keosd" launched
Creating wallet: testwallet2
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KDZ2BLrkim5EuC1yXXd1u7ADK5UGxPKCpEGSE3zTX9EXzZHgCJ"

$ cleos wallet open -n testwallet2
"/opt/eosio/bin/keosd" launched
Opened: testwallet2

$ cleos wallet list
"/opt/eosio/bin/keosd" launched
Wallets:
[]
```

Walletが表示されない・・・
ここで表示されないと、accountの作成ができません・・・

Mac環境とまだ合わないのか、何かが足りないのか、やっぱりSC◯Mなのかよくわかりませんが、ここで手詰まりのようです。
今後のバージョンアップでの改善に期待。