Windows 10へのGanache + Truffle + MetaMask導入手順とETH送金テスト

ブロックチェーンアプリケーション開発のために、Windows 10に以下のソフトウェアをインストールします。最低限導入しておけばよさそうなのは以下4つ。

- Node.js
- Truffle
- Yarn
- Ganache
 
#Node.jsの導入確認
コマンドプロンプトで下記コマンドを実行し、インストール状況を確認。以前導入していたバージョンが入っていました。

```
C:\Users\chimy>node -v
v13.3.0

C:\Users\chimy>npm -v
6.13.1
```

未導入の方は、以下を参考に導入しましょう。
Windowsの場合は、インストーラに従いGUIベースで実行していくだけなので、迷うポイントはないと思います。

https://prog-8.com/docs/nodejs-env-win

#Truffleのインストール
Truffleをインストールします。

```
C:\Users\chimy>npm install -g truffle

:

+ truffle@5.1.63
added 143 packages from 62 contributors in 157.161s

C:\Users\chimy>
```

バージョンを確認します。コマンドhelpも表示されます。

```
C:\Users\chimy>truffle -v
Truffle v5.1.63 - a development framework for Ethereum

Usage: truffle <command> [options]

Commands:
  build     Execute build pipeline (if configuration present)
  compile   Compile contract source files
  config    Set user-level configuration options
  console   Run a console with contract abstractions and commands available
  create    Helper to create new contracts, migrations and tests
  debug     Interactively debug any transaction on the blockchain
  deploy    (alias for migrate)
  develop   Open a console with a local development blockchain
  exec      Execute a JS module within this Truffle environment
  help      List all commands or provide information about a specific command
  init      Initialize new and empty Ethereum project
  install   Install a package from the Ethereum Package Registry
  migrate   Run migrations to deploy contracts
  networks  Show addresses for deployed contracts on each network
  obtain    Fetch and cache a specified compiler
  opcode    Print the compiled opcodes for a given contract
  publish   Publish a package to the Ethereum Package Registry
  run       Run a third-party command
  test      Run JavaScript and Solidity tests
  unbox     Download a Truffle Box, a pre-built Truffle project
  version   Show version number and exit
  watch     Watch filesystem for changes and rebuild the project automatically

See more at http://trufflesuite.com/docs


C:\Users\chimy>
```

##Truffleプロジェクト作成テスト
Truffleのプロジェクト作成を試してみます。プロジェクト用のフォルダを作成し、`truffle init`コマンドを実行します。

```
c:\>mkdir mypj
c:\>cd mypj
c:\mypj>truffle init

Starting init...
================

> Copying project files to c:\mypj

Init successful, sweet!


c:\mypj>dir /b
contracts
migrations
test
truffle-config.js

c:\mypj>
```

実行すると、以下の構造が出来上がります。

```
C:\mypj>dir
:
 c:\mypj のディレクトリ

2021/01/23  16:49    <DIR>          .
2021/01/23  16:49    <DIR>          ..
2021/01/23  16:49    <DIR>          contracts
2021/01/23  16:49    <DIR>          migrations
2021/01/23  16:49    <DIR>          test
1985/10/26  17:15             4,198 truffle-config.js
               1 個のファイル               4,198 バイト
               5 個のディレクトリ  11,056,128,000 バイトの空き領域
```

#yarnのインストール
今回使いませんがyarnをインストールします。読み方は、ヤーン。

JavaScriptに組み込んで使うパッケージ管理システム。Node.js向けのパッケージ管理システムであるnpmと違って、簡易性やセキュリティの面でメリットがある。Facebook社が開発し、2016年にオープンソース化したという経緯があります。

```
C:\Users\chimy>npm install -g yarn

> yarn@1.22.10 preinstall C:\Users\chimy\AppData\Roaming\npm\node_modules\yarn
> :; (node ./preinstall.js > /dev/null 2>&1 || true)

C:\Users\chimy\AppData\Roaming\npm\yarnpkg -> C:\Users\chimy\AppData\Roaming\npm\node_modules\yarn\bin\yarn.js
C:\Users\chimy\AppData\Roaming\npm\yarn -> C:\Users\chimy\AppData\Roaming\npm\node_modules\yarn\bin\yarn.js
+ yarn@1.22.10
added 1 package in 1.542s

C:\Users\chimy>
```

以下コマンドを実行し、バージョン情報が確認できればインストールに成功している。

```
C:\Users\chimy>yarn -v
1.22.10
```

#Ganacheのインストール
読み方はガナッシュで合ってる？

Ganacheは、dApp(分散型アプリケーション)を開発するための、パーソナルブロックチェーンを効率よく構築できるソフトウェア。EthereumとCorda対応している。

こちらのサイトのトップページからインストーラをダウンロードし、実行することで導入する。ダウンロードには結構時間がかかるので、ここでいったん休憩。私の環境では10分ほどかかった。

https://www.trufflesuite.com/ganache

##Ganacheインストーラ実行
インストーラを実行すると、下記の画面が表示されるの`インストール`をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/1c086d1a-7ded-ff1b-eb2d-079eddca9893.png)

##Google Analyticsにトラッキング送信するかどうか
インストール実行後、Google Analyticsにトラッキング送信させてくださいよ、addressやprivate keyは抜かないので安心してくださいよ、と言われる。

お好みで左下のスイッチを変更して`CONTINUE`を押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/54ca7505-21df-2c76-8a3d-d1eb5a7c8f08.png)

##Ganacheワークスペースの作成
ワークスペース作成画面が表示される。プルダウンからEthereumかCordaを選択して作成する。QuickStartか、オプションをカスタマイズして作成するかを選択できるので、今日はEthereumをQuickStartで作ってみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/e8d9c572-3f62-ab31-006c-6829339b7215.png)

##ワークスペースの確認
ワークスペースを作成すると、初期でアカウントのアドレスが10作成された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/7f57edba-3535-7220-cd36-308e5d88eabb.png)

#MetaMaskのインストール
以下のサイトからMetaMaskのインストーラを入手する。MetaMaskは偽物が多いらしく、情報が抜かれるので注意したほうが良いそうです。

MetaMaskは、Google Chromeの拡張機能としてインストールします。

https://metamask.io/

#MetaMaskでウォレットの作成
ChromeでMetaMaskの画面を表示すると、初期で以下の画面が表示されます。'Create a Wallet'を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/6a4fae11-d376-32dd-7dc7-d047f3027199.png)

パスワードを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/ec23287d-a728-8711-1880-30d667dbd3ab.png)

secret pass phraseによる認証が求められるので、12のワードをコピペでメモし、入力します。

Chromeの拡張機能アイコンからMetaMaskを選択すると、以下の画面が表示されますので、カスタムRPCを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/1305def5-996d-9501-53c4-3618e25558eb.png)

NetWork Nameを任意入力し、アドレスにはローカルループバックアドレスとGanache側に作成したワークスペースのポート番号（QuickStartの場合はデフォルト）を入力します。

``http://127.0.0.1:5745``

ポート番号は、Ganache側のコンソールで確認できます。`AUTOMINE`がデフォルトで有効です。miningは自動実行されているので、ETHの送金もできそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/13978258-1df3-f183-3d9b-0551d723e373.png)

続いて、Ganacheの秘密鍵情報をMetaMaskに設定します。Ganacheのコンソールで、アカウント名の右側の鍵マークをクリックし、秘密鍵情報をコピーします。

Metaアカウントのアイコンをクリックし、「アカウントのインポート」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/80d998d7-f3a8-5b61-14d8-391b9a5e207d.png)

コピーした秘密鍵情報をペーストします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/722be838-5f32-1f57-76fe-8d19484f143c.png)

インポートに成功すると、所持しているETHが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/6fc7df06-5967-2fdb-4a0f-8b3f5496e942.png)

#ETHの送金
ETHを送金してみます。Ganacheのアカウント画面で別のアドレスをコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/97d8f421-1449-54d7-90be-92d8ccf65d29.png)

MetaMaskのプラグインメニューから「送信」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/1bdc2d75-2c0e-bd03-1529-2400ab72b100.png)

そして、Ganacheでコピーした別アカウントのアドレスを貼り付けます。`金額`に送金する額を入力します。とりあえず5ETH送ってみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/6b0ea2ec-fc83-d98e-1aea-245809872644.png)

Ganacheのコンソールを確認すると、ETHの送金に成功し、アカウントのINDEX0から1へ5ETH送られていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/6e06ec81-a259-7880-6938-988afb8bd328.png)

MetaMaskで確認すると、同様にアカウントの所有ETHが減少しています。GASの分が目減りしていることが分かります。

Ganache側ではブロックチェーンネットワークの状態を確認でき、1ブロック増えていて、送金のトランザクションが確認できます。

``BLOCKSタブ``
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/938726a2-faf5-c714-a639-ea7ac2cc4463.png)
``TRANSACTIONSタブ``
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/d013e0c2-5ac3-259f-c196-b39705c92c79.png)
``LOGSタブ``
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529867/8c9782de-75ff-e649-f0a4-4756f0dbff48.png)


#まとめ
気軽に開発環境にブロックチェーンネットワークを構築できるので、大変便利。Ganacheは、Ethereumのコントラクト主要言語SolidityのフレームワークであるTruffleと組み合わせてdAppの開発環境として稼働させることで本領を発揮するらしい。

次回そのあたりを深く取り組んでいきたい。