テストブロックチェーンネットワークを使って分散アプリケーションを動かす - メモ程度 -


始めに

  • かなり初級レベルの話になります。自分の整理のために書いている記事となります。
  • ETHEREUM PET SHOP -- YOUR FIRST DAPPに従い、開発環境で構築して挙動確認までしました。
    • 構成としては
      • テストブロックチェーン: Ganache
      • デプロイ、コンパイル、アプリケーション本体の管理: Truffle
      • コントラクト言語: Solidity
      • ブラウザ内のEthereum DAppsとブロックチェーンネットワークを接続: MetaMask

所感

  • やってよかった。
    • 各構成要素が何を具体的に処理しているのかイメージできるようになった。
      • 例えば、Truffleだと想定以上に幅広い守備範囲を持つとおもった。compile, deploy以外にも、他の人が開発したmodule(?)を簡単に呼び出したりできるTRUFFLE BOXESというものがあるとは知らなかった。今回は、このBOXESの中からPET-SHOPをもってくることになった。
      • MetaMaskは、ブラウザ上のアプリケーションとネットワークの接続を可能にしてくれている(RPC)
      • Ganacheを見ていると、コンソールでみているときよりもGASやどんな類のものにコストが発生するのかがより整理されていく。ブロックチェーン自体への理解が浅いなって思える。
    • 各構成要素の接続もイメージできるようになった。
      • お互いにどんな情報を受け渡しているのか、などをソースコードレベルで見れると「なるほど」と理解が深まることが多かった。
    • 地味にnode.jsとかの理解も深まった。そもそも触ったことがなかったので。
  • 所要時間は環境構築など含めて3時間くらいで終わる。だらだらすると6時間くらい。

使った資料

Tips

環境構築編

1. node.js
node.jsを「フレームワーク」だと勘違いしていたけど、全然違った。
Node.js を5分で大雑把に理解する
初心者向け!3分で理解するNode.jsとは何か?

Node.jsでは、Webサーバとアプリケーションが同じ PHPのWebサイトで無理やり例えると、Apache + mod_php + Webアプリ です。なので、Node.js の Hello Worldのサンプルは、HTTPを受付け、200とヘッダーと内容を返す、というのが多い。

node.jsをインストールする方法
npmっていうのを聞いたことはあった。

Node Package Manager。npmの正式名称からも解るように、Node.jsのパッケージ(Package )を管理する(Manager)ツール
便利なパッケージ管理ツール!npmとは【初心者向け】
面白いとおもったのが、MVCフレームワークとかもある。

実際にMacにインストールしてみる。
Macにnode.jsをインストールする手順。
MacにNode.jsをインストール
nodebrewをインストールするとパッケージで諸々使えるようになる。

ブロックチェーンテストネットワーク

Ganacheをインストール
新しい設定は必要ない。立ち上げるだけでlocalhost:7545で動いてくれる。
個人的にはgethなどを使ってコンソール操作ではなくてGUIで直感的にブロックの動きとか、ログが見れたりするので、ありがたかった。本当に素晴らしい。
gethなどのインストールが不要。

truffleで実装

Dappsのフレームワーク提供、関連するcompile, deployをしてくれるツールであるTruffleに加えて、Ethereum処理言語Solidity, JSフレームワークのWeb3.jsもインストールにしてくれている。

 ~ $ truffle version
Truffle v5.0.8 (core: 5.0.8)
Solidity v0.5.0 (solc-js)
Node v11.12.0
Web3.js v1.0.0-beta.37

ディレクトリ構造

.git/
.github/
contracts/ #Contains the Solidity source files for our smart contracts. There is an important contract in here called Migrations.sol, which we'll talk about later.ここにスマートコントラクトスクリプトは格納
migrations/ #Truffle uses a migration system to handle smart contract deployments. A migration is an additional special smart contract that keeps track of changes. ここでマイグレーションを管理する。
node_modules/ #たくさん入っている
src/ #front-endの情報が入っていた
test/ #JavaScript, Solidityのテスト
LICENSE
README.md
box-img-lg.png
box-img-sm.png
bs-config.json
package-lock.json #package.jsonで実際にインストールされているもの
package.json #プロジェクトに必要なパッケージとバージョン記述することでnpmがインストールしてくれる.。https://qiita.com/Sekky0905/items/452619651cdd950c2271。truffleが動く上で必要なパッケージが記述されている。
truffle-config.js #truffleの設定ファイル

compileとmigration

  • compileが成功するとbuildディレクトができて、各ソースコード分のJSONが作られていた
.
└── contracts
    ├── Adoption.json
    └── Migrations.json
  • migrate
    • migration fileは各solidity code fileごとに作成してあげる。
    • migrations/ ディレクトリ配下にて管理してある。
    • 1つのcontract ソースコードfileに対して1つのmigration fileを作成してあげる。
    • 注意としては、「 we don't double-migrate unchanged contracts in the future.」
      • 再度、migrateしたいときは--resetオプションで.

あとはGUI作成...

次にやりたいこと

  • コードリーディング。ゾンビの方もやれるとHAPPY
  • 自分で作ってみる
  • 最終的に本番ネットワークに上げてみる
    • 守備範囲広めなのでキャッチアップが大変そうだけど、楽しみ。

お読みいただきありがとうございました。
間違い、ないし、改善レビューがありましたらコメントいただけると嬉しいです。