Saitama.js vol.0 で発表した資料です https://saitamajs.connpass.com/event/222401/
JavaScriptから入門するブロックチェーンエンジニアリングMakoto Nakagawa(@let_mkt)1
View Slide
About meMakoto Nakagawa (@let_mkt)JavaScript好きで、Vue.jsをよく書いていましたVue 3リファレンスの日本語翻訳などもお手伝いしていました4月に埼玉県新座市に引っ越してきました趣味はゲームと日本語ヒップホップ2
このLTで話すことJavaScriptと Ethereumがどう関係しているかEthereum,ブロックチェーン,スマートコントラクトなどの概念スマートコントラクトを開発する方法どんな言語で、どうやってテストして、どこにデプロイする?スマートコントラクトを触り始めたWebエンジニアの所感3
Caution発表者は最近スマートコントラクトを作り始めた一般的なWebアプリケーション開発者です。自分の理解度が浅いため、大きく間違ったことを書いていたらぜひご指摘ください4
JavaScriptから入門するブロックチェーンエンジニアリング前提概念の紹介SolidityとNode.jsの関係スマートコントラクト開発の周辺ツールWebアプリエンジニアからみた所感3行まとめ5
ブロックチェーンとはブロックを連結したリスト(≒チェーン)状のデータ構造のこと各ブロックは1つ前のブロックを指しており、ブロック自体はトランザクションのリストで構成されているつまりリストのリスト(二次元配列)の形をとる『SolidityとEthereumによる実践スマートコントラクト開発』P3の図1-1より転載 6
Ethereumとはブロックチェーンの実装仮想通貨通貨単位は Ether(ETH)スマートコントラクト機能を備えた分散型アプリケーションプラットフォームここが送金・受領機能しか持たないビットコインとの決定的な違い7
スマートコントラクトとはEthereumのブロックチェーン上にデプロイするコードのことを指し、他から呼び出されて利用される厳密にはトランザクション(TX)としてブロックに保持される一意なアドレスが割り振られる『SolidityとEthereumによる実践スマートコントラクト開発』P3の図1-1より転載 8
スマートコントラクトとはスマートコントラクトを使ったアプリケーションは Dapp(分散型アプリケーション) と呼ばれる9
Dappの一例:CryptoKittiesユニークな組み合わせの特性を持つ仮想の猫を集めるゲーム交配を通して親の特性を引き継いだ猫を生み出せるETHによる売買が可能10
Solidityとはスマートコントラクトを開発するためのプログラミング言語オブジェクト指向静的型付け(≒コンパイルが必要)JavaScript, C++, Pythonにインスパイアされている拡張子は .sol11
Solidityのシンタックス(基礎編)12
Solidityのシンタックス(応用編)ほかにも...abstractで抽象コントラクトを表現modifier hoge(){ }で修飾子を宣言payable address型で送金可能なブロックチェーンアドレスを定義など、言語機能として一通りのシンタックスを網羅13
JavaScriptから入門するブロックチェーンエンジニアリング前提概念の紹介SolidityとNode.jsの関係スマートコントラクト開発の周辺ツールWebアプリエンジニアからみた所感3行まとめ14
Q. foo.solからbar/baz.solという外部ライブラリのファイルをインポートしたいときはどうする?15
A. npm install barしてimport "bar/baz.sol";する16
SolidityはNPMを介してパッケージを管理するSolidityは独自のパッケージ管理ツールを持たず、NPMをそのまま利用しているNPM経由なのでインストールしたパッケージは当然node_modulesに格納されるimport "bar/baz.sol";したときはJSと同様に{project-root}/node_modules/bar/baz.solを参照するTypeScriptのようにインポートした型を利用することも可能17
Q.スマートコントラクトは何を使ってテストする?18
A. JavaScriptでテストする19
スマートコントラクトはMochaでテストできるTruffleというスマートコントラクト開発用フレームワーク(後述)において、標準で Mocha(+ Chai)によるユニットテストが可能設定を変えればJestも使えるっぽいまた、スマートコントラクトはブロックチェーンに書き込んでデプロイとするため、後から修正パッチをリリースすることができない。加えてそもそも決済が絡むセンシティブな処理が多いので、丁寧にテストを書くことが求められているTDDが推奨されている20
Mochaによるテストコードのサンプル21
JavaScriptから入門するブロックチェーンエンジニアリング前提概念の紹介SolidityとNode.jsの関係スマートコントラクト開発の周辺ツールWebアプリエンジニアからみた所感3行まとめ22
Truffleについてユーティリティツール的なフレームワークアプリケーションのコンパイルやテスト、デプロイなどを担うtruffle compileでコンパイルtruffle testでテストtruffle deployでデプロイtruffle developでローカルノードとREPLが立ち上がる他には、 truffle unbox reactでReact用のボイラープレートが出来上がる...など23
本番とSTG一口に Ethereumといっても、そのなかにブロックチェーンネットワークがいくつも存在するメインネットと呼ばれるネットワークがいわゆる本番として扱われているなので、「ETHのレート」と言ったとき、それは暗黙的にはこのメインネットの通貨レートを指している対して、テストネットワークと呼ばれるテスト用のネットワークも複数存在する (eg. Goerli)テスト用なので無償で ETHが配られていたりする24
ローカル開発環境Ganacheというローカルに Ethereumのブロックチェーンを構築するツールが Truffleから提供されている起動するだけであらかじめETHを持つ複数個のアカウントがセットアップされているため、この環境に向けてスマートコントラクトをデプロイすることでローカル開発やデバッグが可能25
JavaScriptから入門するブロックチェーンエンジニアリング前提概念の紹介SolidityとNode.jsの関係スマートコントラクト開発の周辺ツールWebアプリエンジニアからみた所感3行まとめ26
スマートコントラクトの所感サーバーレスなバックエンドとしてスマートコントラクトを使うという選択肢状態とふるまいを持っていて、一度デプロイされたら状態は保持・追加し続けられるので、永続化層として取り回しやすいガス代という手数料がかかってしまったり、修正出来ない(=堅牢なものを作る必要がある)ものの、高可用性であったり、インフラの維持コストがかからない良さがある27
JavaScriptから入門するブロックチェーンエンジニアリング前提概念の紹介SolidityとNode.jsの関係スマートコントラクト開発の周辺ツールWebアプリエンジニアからみた所感3行まとめ28
3行まとめEthereumはブロックチェーン上にスマートコントラクトをデプロイできるよスマートコントラクト開発では JavaScriptが頻繁に登場するよサーバーレスなアプリケーションのバックエンドをスマートコントラクトにお任せするアーキテクチャは引き出しに入れておいてもいいかもしれないね29
参考書籍SolidityとEthereumによる実践スマートコントラクト開発――Truffle Suiteを用いた開発の基礎からデプロイまで(https://www.oreilly.co.jp/books/9784873119342/)30
ご清聴ありがとうございました!31