「Ganache」でDapps開発用のローカルネットを構築する
Dappsの開発を進めるにあたって、常にイーサリアムのメインネットにデプロイしないと開発できないんだとすると、それは非常につらい事になる事が容易に想像できますよね…!
仮に、テストネットを開発用のデプロイ先にしたとしても、あまりに影響範囲がでかすぎるし、ネットワークを無駄に消費するし、情報漏洩の可能性もあるしで、双方にとって「lose-lose」である事は間違いありません。
当たり前の欲求として、
「自分だけのプライベートネットを構築したい!!!」
と声を荒げたくなるはずです。
我慢しなくていいんです。当たり前の欲求ですから…!
Ganache
そんな欲求を満たしてくれるのが、「Ganache」です。
こいつも Truffle ブランドのプロダクトですね。この人達、本当に優秀…!優秀すぎて、嫉妬の炎がやばい…ッ!
インストールは、難しい事は何一つなくて、WEBサイトにアクセスして、ダウンロードして、えいっとインストールするだけで立ち上がります。
「CURRENT BLOCK 0」 を見た瞬間に感動しましたね。
本当に、まっさらなイーサリアムのブロックチェーンがローカルに展開されたようです。
github上のGanacheのコードを見ると、中身はreactで書かれており、それをElectronで立ち上げているようです。
積まれているブロックの数も0みたいなのに、複数のアカウントがそれぞれ100ETH持ってるのは、そういう事もあり得るのかな?(よく分かってない)
Truflleから接続してみる
Ganacheは正常に立ち上がっているように見えるので、試しにTruffleからGanacheが立ち上げたローカルネットワークに対してデプロイしてみたいと思います。
なお、前置きになりますが、自分の環境は、に書いたとおり、truffleがdockerコンテナ上で稼働するようになっているので、発行するコマンドや設定に少し注意が必要です。
ネットワーク設定
Truffleの接続先がロカールネットに向くように、設定を加えてみましょう。
設定する値は、Ganacheの「RPC SERVER」に表示されている値を設定してください。
コンソールが接続できれば、たぶんOK
設定したネットワーク設定で、ganacheに接続可能か確認してみます。
truffleには、console機能があるので、それで確認します。
うん、接続できてそうですね!
コントラクトのデプロイ
HelloWorldコントラクトの作成
テストネット上にデプロイするために、簡単な HelloWorld
コントラクタを作成します。
中身は適当にそれっぽく書いておきます。
コンパイル
作成したコントラクトをデプロイするためにも、正常にコンパイルできるか試してみます。
うん、あっさり!
マイグレーションの作成
調べてみると、デプロイするためには、まずマイグレーションの用意が必要みたいです。
言われるままに、まずは作成してみましょう。
このあたりは、がっつり本家のドキュメント を確認したほうがよさそうなので、そちらを確認しつつ進めます。
なにも出力されないけど、作成されたんだろうか…?
うん。なんかそれっぽいファイルが作成されました。
ただ、中身が空なので、ドキュメントを参考にしつつ、下記のように編集します。
デプロイ
さあ、ようやくデプロイを行えます!
truffleでは、deployコマンドはmigrateコマンドのエイリアスみたいなので、truffleにおいては両者は同じ意味のようです。
驚異の一発OK…!パーフェクト…!
え、こんなに簡単でいいんですか?
Ganache側でデプロイされた内容を確認してみる
正常にデプロイされていれば、Ganacheのローカルネット内のブロックチェーンに、デプロイの記録が積まれているはずです。
なんか、一つ目のアカウントの残高が減ってる…!
新規に4つのブロックが積まれてるじゃありませんか…!
トランザクションの閲覧も問題なく行えます。
すげえ。ひたすら、truffleとganacheのすごさに驚嘆しております。
ありがとう、truffle…!ありがとう、ganache…!
振り返り
いやあ、本当に簡単にローカルネットの構築から、デプロイまでが出来てしまいましたね。
最初は手探り感が否めなかったDapps開発ですが、徐々に道筋が見えてきました。
本当は、WEBフロントからデプロイしたコントラクトの呼び出しまでも行いたかったのですが、少し長くなりそうでしたので、 WEBフロントからのコントラクトアクセスに関しては、別の記事として切り出したいと思っています。
本日はここまで!