$30 off During Our Annual Pro Sale. View Details »

JavaScript から入門するブロックチェーンエンジニアリング

JavaScript から入門するブロックチェーンエンジニアリング

Saitama.js vol.0 で発表した資料です
https://saitamajs.connpass.com/event/222401/

Makoto Nakagawa

October 14, 2021
Tweet

Other Decks in Programming

Transcript

  1. JavaScript
    から入門する
    ブロックチェーンエンジニアリング
    Makoto Nakagawa(@let_mkt)
    1

    View Slide

  2. About me
    Makoto Nakagawa (@let_mkt)
    JavaScript
    好きで、Vue.js
    をよく書
    いていました
    Vue 3
    リファレンスの日本語翻訳
    などもお手伝いしていました
    4
    月に埼玉県新座市に引っ越してき
    ました
    趣味はゲームと日本語ヒップホップ
    2

    View Slide

  3. この
    LT
    で話すこと
    JavaScript
    と Ethereum
    がどう関係しているか
    Ethereum,
    ブロックチェーン,
    スマートコントラクトなどの概念
    スマートコントラクトを開発する方法
    どんな言語で、どうやってテストして、どこにデプロイする?
    スマートコントラクトを触り始めたWeb
    エンジニアの所感
    3

    View Slide

  4. Caution
    発表者は最近スマートコントラクトを作り始めた一般的なWeb
    アプリ
    ケーション開発者です。

    自分の理解度が浅いため、大きく間違ったことを書いていたらぜひご
    指摘ください
    4

    View Slide

  5. JavaScript
    から入門するブロックチェーンエン
    ジニアリング
    前提概念の紹介
    Solidity
    とNode.js
    の関係
    スマートコントラクト開発の周辺ツール
    Web
    アプリエンジニアからみた所感
    3
    行まとめ
    5

    View Slide

  6. ブロックチェーンとは
    ブロックを連結したリスト(

    チェーン)状のデータ構造のこと
    各ブロックは1
    つ前のブロックを指しており、ブロック自体はトラ
    ンザクションのリストで構成されている
    つまりリストのリスト(
    二次元配列)
    の形をとる
    『Solidity
    とEthereum
    による実践スマートコントラクト開発』P3
    の図1-1
    より転載 6

    View Slide

  7. Ethereum
    とは
    ブロックチェーンの実装
    仮想通貨
    通貨単位は Ether(ETH)
    スマートコントラクト機能を備えた分散型アプリケーションプラッ
    トフォーム
    ここが送金・受領機能しか持たないビットコインとの決定的な違

    7

    View Slide

  8. スマートコントラクトとは
    Ethereum
    のブロックチェーン上にデプロイするコードのことを指
    し、他から呼び出されて利用される
    厳密にはトランザクション(TX)
    としてブロックに保持される
    一意なアドレスが割り振られる
    『Solidity
    とEthereum
    による実践スマートコントラクト開発』P3
    の図1-1
    より転載 8

    View Slide

  9. スマートコントラクトとは
    スマートコントラクトを使ったアプリケーションは Dapp
    (分散型
    アプリケーション) と呼ばれる
    9

    View Slide

  10. Dapp
    の一例
    :
    CryptoKitties
    ユニークな組み合わせの特
    性を持つ仮想の猫を集める
    ゲーム
    交配を通して親の特性を引
    き継いだ猫を生み出せる
    ETH
    による売買が可能
    10

    View Slide

  11. Solidity
    とは
    スマートコントラクトを開発するためのプログラミング言語
    オブジェクト指向
    静的型付け(

    コンパイルが必要)
    JavaScript, C++, Python
    にインスパイアされている
    拡張子は .sol
    11

    View Slide

  12. Solidity
    のシンタックス
    (
    基礎編
    )
    12

    View Slide

  13. Solidity
    のシンタックス
    (
    応用編
    )
    ほかにも...
    abstract
    で抽象コントラクトを表現
    modifier hoge(){ }
    で修飾子を宣言
    payable address
    型で送金可能なブロックチェーンアドレスを定義
    など、言語機能として一通りのシンタックスを網羅
    13

    View Slide

  14. JavaScript
    から入門するブロックチェーンエン
    ジニアリング
    前提概念の紹介
    Solidity

    Node.js
    の関係
    スマートコントラクト開発の周辺ツール
    Web
    アプリエンジニアからみた所感
    3
    行まとめ
    14

    View Slide

  15. Q. foo.sol
    から
    bar/baz.sol
    という外
    部ライブラリのファイルをインポート
    したいときはどうする?
    15

    View Slide

  16. A. npm install bar
    して
    import "bar/baz.sol";
    する
    16

    View Slide

  17. Solidity

    NPM
    を介してパッケージを管理する
    Solidity
    は独自のパッケージ管理ツールを持たず、NPM
    をそのまま
    利用している
    NPM
    経由なのでインストールしたパッケージは当然node_modules
    に格納される
    import "bar/baz.sol";
    したときはJS
    と同様に
    {project-root}/node_modules/bar/baz.sol
    を参照する
    TypeScript
    のようにインポートした型を利用することも可能
    17

    View Slide

  18. Q.
    スマートコントラクトは何を使って
    テストする?
    18

    View Slide

  19. A. JavaScript
    でテストする
    19

    View Slide

  20. スマートコントラクトは
    Mocha
    でテストできる
    Truffle
    というスマートコントラクト開発用フレームワーク(後述)
    において、標準で Mocha(+ Chai)
    によるユニットテストが可能
    設定を変えればJest
    も使えるっぽい
    また、スマートコントラクトはブロックチェーンに書き込んでデプ
    ロイとするため、後から修正パッチをリリースすることができな
    い。加えてそもそも決済が絡むセンシティブな処理が多いので、丁
    寧にテストを書くことが求められている
    TDD
    が推奨されている
    20

    View Slide

  21. Mocha
    によるテストコードのサンプル
    21

    View Slide

  22. JavaScript
    から入門するブロックチェーンエン
    ジニアリング
    前提概念の紹介
    Solidity
    とNode.js
    の関係
    スマートコントラクト開発の周辺ツール
    Web
    アプリエンジニアからみた所感
    3
    行まとめ
    22

    View Slide

  23. Truffle
    について
    ユーティリティツール的なフレームワーク
    アプリケーションのコンパイルやテスト、デプロイなどを担う
    truffle compile
    でコンパイル
    truffle test
    でテスト
    truffle deploy
    でデプロイ
    truffle develop
    でローカルノードとREPL
    が立ち上がる
    他には、 truffle unbox react
    でReact
    用のボイラープレートが出
    来上がる...
    など
    23

    View Slide

  24. 本番と
    STG
    一口に Ethereum
    といっても、そのなかにブロックチェーンネット
    ワークがいくつも存在する
    メインネットと呼ばれるネットワークがいわゆる本番として扱わ
    れている
    なので、「ETH
    のレート」と言ったとき、それは暗黙的には
    このメインネットの通貨レートを指している
    対して、テストネットワークと呼ばれるテスト用のネットワーク
    も複数存在する (eg. Goerli)
    テスト用なので無償で ETH
    が配られていたりする
    24

    View Slide

  25. ローカル開発環境
    Ganache
    というローカルに Ethereum
    のブロックチェーンを構築す
    るツールが Truffle
    から提供されている
    起動するだけであらかじめETH
    を持つ複数個のアカウントがセット
    アップされているため、この環境に向けてスマートコントラクトを
    デプロイすることでローカル開発やデバッグが可能
    25

    View Slide

  26. JavaScript
    から入門するブロックチェーンエン
    ジニアリング
    前提概念の紹介
    Solidity
    とNode.js
    の関係
    スマートコントラクト開発の周辺ツール
    Web
    アプリエンジニアからみた所感
    3
    行まとめ
    26

    View Slide

  27. スマートコントラクトの所感
    サーバーレスなバックエンドとしてスマートコントラクトを使うと
    いう選択肢
    状態とふるまいを持っていて、一度デプロイされたら状態は保
    持・追加し続けられるので、永続化層として取り回しやすい
    ガス代という手数料がかかってしまったり、修正出来ない(=堅
    牢なものを作る必要がある)ものの、高可用性であったり、イン
    フラの維持コストがかからない良さがある
    27

    View Slide

  28. JavaScript
    から入門するブロックチェーンエン
    ジニアリング
    前提概念の紹介
    Solidity
    とNode.js
    の関係
    スマートコントラクト開発の周辺ツール
    Web
    アプリエンジニアからみた所感
    3
    行まとめ
    28

    View Slide

  29. 3
    行まとめ
    Ethereum
    はブロックチェーン上にスマートコントラクトをデプロ
    イできるよ
    スマートコントラクト開発では JavaScript
    が頻繁に登場するよ
    サーバーレスなアプリケーションのバックエンドをスマートコント
    ラクトにお任せするアーキテクチャは引き出しに入れておいてもい
    いかもしれないね
    29

    View Slide

  30. 参考書籍
    Solidity
    とEthereum
    による実
    践スマートコントラクト開発

    ――Truffle Suite
    を用いた開発
    の基礎からデプロイまで
    (https://www.oreilly.co.jp/boo
    ks/9784873119342/)
    30

    View Slide

  31. ご清聴ありがとうございました!
    31

    View Slide