Substrateでブロックチェーンとアプリケーションを作る  インストール〜アカウント作成

こんにちは、[Staked](https://staked.co.jp/)の渡辺創太です。Substrateでブロックチェーンとアプリケーションを作ってみようと思います。Web3 SummitでGavin Woodが新品のマックを持ってきて0からSubstrate上にブロックチェーンを作っていましたが、それを参考にしています。

<h1>事前作業</h1>
こちらは当たり前ですが、npmとnodeの最新版はインストールしておきましょう。Substrateを動かすにはRustといくつかのディペンデンシーをインストールしておく必要がありますが、こちらは以下のコードでインストールできます。
`curl https://getsubstrate.io -sSf | bash`
時間が結構かかります。

次に、Substrate UIをインストールしてきます。
`substrate-ui-new substrate`

Substrate UIと同じディレクトリでSubstrateのnode templateもインストールしておきます。
`substrate-node-new substrate-node-template sota`
sotaのところには自分の名前を入れてください。

ノードを起動するために、`substrate-node-template`内で
`./target/release/substrate-node-template --dev`
を実行します。

実行にあたり、ブロック掘削が始まったのがわかります。
<img width="712" alt="Screen Shot 2019-02-12 at 13.23.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/327904/a9c3b7af-0d81-4411-62a9-0552df4d70ea.png">

走っているコードを見てみると、versionやblockの数などがわかります。Local Node Addressは`/ip4/0.0.0.0/tcp/30333/p2p/QmWH6NCm78tbgGuuH6MmzGvuwhxCRoMT1agrpNzumFshEi`となっていますが、これ多分、libp2pですね。

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">プロトコルの拡張性が高いのか。<br>“Why libp2p?” by <a href="https://twitter.com/tomaka17?ref_src=twsrc%5Etfw">@tomaka17</a> <a href="https://t.co/PIezUBGARJ">https://t.co/PIezUBGARJ</a></p>&mdash; Sota Watanabe (渡辺創太) (@WatanabeSota) <a href="https://twitter.com/WatanabeSota/status/1094792539649929216?ref_src=twsrc%5Etfw">February 11, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<img width="414" alt="20180915133806.png" src="https://qiita-image-store.s3.amazonaws.com/0/327904/e4de2868-0112-1dfb-d796-ad25c78fb801.png">

Stackはこういう仕組みになっています。

ここまでできたら、先程インストールした`substrate-ui`のディレクトリーに移動し`npm run dev`コマンドを実行します。この際に、別のタブでブロックの掘削を同時に行っておく必要があります。こんな感じになるはずです。
<img width="721" alt="Screen Shot 2019-02-12 at 13.32.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/327904/f23f251d-a58e-703a-2745-2cd1100668c1.png">

その後、[http://localhost:8000/](http://localhost:8000/)にアクセスします。

![Screen Shot 2019-02-12 at 13.35.02 (2).png](https://qiita-image-store.s3.amazonaws.com/0/327904/0152c46b-4009-8cb0-693e-2853fd89d4bb.png)

ここで自分で作成したチェーンとやりとりをすることができます。

<h1>ネットワークに他のプレーヤーを追加する</h1>
独自環境を構築したので、現時点では参加者は自分1人です。ここに別の参加者を加えたいと思います。

`git clone https://github.com/paritytech/substrate`で、Substrateのインストールを行います。
<img width="384" alt="Screen Shot 2019-02-12 at 15.02.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/327904/aff90746-ca49-59e8-1a11-0054e9c6e0f4.png">

現在ファイルは3つです。インストールしたsubstrateのファイル内に`subkey`というファイルがあるので、その中で、
`$ subkey restore Alice`
を実行するとAliceのKey情報が入手できます。

<img width="731" alt="Screen Shot 2019-02-12 at 15.00.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/327904/8a04b177-fac4-6016-d51d-93c8c3a14075.png">

これを`localhost:8000`のインターフェース上で入力することでAliceを加えることができます。

<img width="1425" alt="Screen Shot 2019-02-12 at 15.05.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/327904/73119351-4b35-ad3f-7199-6aa80e5fa201.png">

追加しました。

これでAliceのWalletからDefaultのWalletにunitsを送信することができます。

<img width="1434" alt="Screen Shot 2019-02-12 at 15.06.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/327904/ae97c671-55c0-f697-8fed-a10b5fa97e67.png">

Source:大本のビデオは[こちら](https://www.youtube.com/watch?v=0IoUZdDi5Is&feature=youtu.be)を参考にしてください。