IOSTに触れてみる！！

# IOSTの開発環境を作る

##1. Mac上にiwalletをインストールする
IOSTの開発をdocker内だけで行うのは嫌だという方はiwalletをMacに入れたほうが良いと考える．
goをインストールし，iwalletをインストールする．
※既にgoの環境がある場合，環境が壊れる可能性がある．そのため，iwalletはインストールせずに，dockerイメージ上のiwalletを使うことを推奨する．

```
$ brew install go
$ go get github.com/iost-official/go-iost/cmd/iwallet
```

##2. Docker上でIOSTのローカルサーバを動かす

### イメージを落とす
しばらくすると完了するのでイメージがあるかどうか確認する．

```
$ docker pull iostio/iost-node
・・・
$ docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
iostio/iost-node              latest              7579e226b50b        4 days ago          213MB

```
### 起動させる

デーモンとして起動
iwalletをインストールしなかった場合は [-v] でディレクトリの共有を行ったほうが開発が楽である．
docker stop をして毎回消すのが面倒な場合は [--rm] を入れると良い．

```

$ docker run -d --name iserver -p 30000-30003:30000-30003 iostio/iost-node
8a4df7cb4aad5eb19942d529ce4d63c9241567368e49a90aa946708a73c18580
```

プロセスを確認する(コンテナIDでiserverがあるか確認)

```

$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS                                                                    NAMES
8a4df7cb4aad        iostio/iost-node     "iserver -f /var/lib…"   2 minutes ago       Up 2 minutes                0.0.0.0:30000-30003->30000-30003/tcp                                     iserver
```
docker logs で状態を確認できる

```

$ docker logs iserver
Info 2019-04-16 08:19:23.446 main.go:86 Config Information:
acc:
  id: producer000
  seckey: 1rA******
  algorithm: ed25519
genesis: /var/lib/iserver/genesis
vm:
  jspath: vm/v8vm/v8/libjs/
  loglevel: ""
db:
  ldbpath: /var/lib/iserver/storage/
snapshot:
  enable: false
  filepath: /var/lib/iserver/storage/snapshot.tar.gz
︙
Info 2019-04-16 08:19:23.446 main.go:88 build time:20190412_142146+0800
Info 2019-04-16 08:19:23.446 main.go:89 git hash:fc91aa689b97b6bd17d2cae98472ad64fc8a44a3
Info 2019-04-16 08:19:23.446 main.go:90 code version:3.0.9
Info 2019-04-16 08:19:23.465 recovery.go:17 Genesis is not exist.
Info 2019-04-16 08:19:24.648 recovery.go:36 Created Genesis.
Info 2019-04-16 08:19:24.648 recovery.go:39 GenesisHash: 5KKs5a38awYuNCt4wLBrND5qRrcBENxW8oTEHb33tGfR
Info 2019-04-16 08:19:24.648 recovery.go:59 current Tag: 5KKs5a38awYuNCt4wLBrND5qRrcBENxW8oTEHb33tGfR
Info 2019-04-16 08:19:24.656 encoder.go:41 Encoder Name: /var/lib/iserver/storage/BlockCacheWAL/.1555402764656127000.0.wal.tmp
Info 2019-04-16 08:19:24.658 block_cache.go:362 Got LIB: 0
Info 2019-04-16 08:19:24.658 block_cache.go:373 Witness Block Num:0
Info 2019-04-16 08:19:24.659 block_cache.go:375 ActiveWitness:6sNQa7PV2SFzqCBtQUcQYJGGoU7XaB6R4xuCQVXNZe6b
Info 2019-04-16 08:19:24.659 block_cache.go:378 PendingWitness:6sNQa7PV2SFzqCBtQUcQYJGGoU7XaB6R4xuCQVXNZe6b
Info 2019-04-16 08:19:24.659 collector.go:39 Add node metrics: diskstats
Error 2019-04-16 08:19:24.659 collector.go:42 Create metrics diskstats failed: device not found for path: /var/lib/iserver/storage
Info 2019-04-16 08:19:24.660 collector.go:68 Node metrics started.
Info 2019-04-16 08:19:24.662 defer.go:64 defer index num: 0
Info 2019-04-16 08:19:24.663 peer_manager.go:444 no routing file. file=/var/lib/iserver/p2p/routing.table
Info 2019-04-16 08:19:24.663 net_service.go:112 local multiaddr: /ip4/127.0.0.1/tcp/30000/ipfs/12D3KooWQ5vPYgvkFquqGDKN1LvqRhW8PMiiLoU3jdaoTKKz6t87
Info 2019-04-16 08:19:24.664 net_service.go:112 local multiaddr: /ip4/172.17.0.2/tcp/30000/ipfs/12D3KooWQ5vPYgvkFquqGDKN1LvqRhW8PMiiLoU3jdaoTKKz6t87
Info 2019-04-16 08:19:24.664 defer.go:168 next defer schedule: 1s
Info 2019-04-16 08:19:25.668 defer.go:168 next defer schedule: 2129991h27m51.186501107s
Info 2019-04-16 08:19:26.665 sync.go:171 Syncing block in [1 1000]...
Info 2019-04-16 08:19:27.024 block.go:30 Generate block - @0 id:6sNQa7PV2S..., t:1555402767001127700, num:1, confirmed:1, txs:1, pendingtxs:0, et:23ms
Info 2019-04-16 08:19:27.531 block.go:30 Generate block - @1 id:6sNQa7PV2S..., t:1555402767504026800, num:2, confirmed:2, txs:1, pendingtxs:0, et:27ms
Info 2019-04-16 08:19:28.025 block.go:30 Generate block - @2 id:6sNQa7PV2S..., t:1555402768000456300, num:3, confirmed:3, txs:1, pendingtxs:0, et:25ms
Info 2019-04-16 08:19:28.531 block.go:30 Generate block - @3 id:6sNQa7PV2S..., t:1555402768502649700, num:4, confirmed:4, txs:1, pendingtxs:0, et:28ms
Info 2019-04-16 08:19:28.667 sync.go:171 Syncing block in [1 1000]...
︙

```

起動が確認できたら終了です．お疲れ様でした．

## おわりに
今回はIOSTの開発環境を作成しました．
次回は実際にスマートコントラクトを動かしでみたいと考えています！
それでは〜

## 参考文献
[IOST Docs 3.0.7 Launch Local Server](https://developers.iost.io/docs/en/4-running-iost-node/LocalServer.html)