Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScript から入門するブロックチェーンエンジニアリング
Search
Makoto Nakagawa
October 14, 2021
Programming
2
2k
JavaScript から入門するブロックチェーンエンジニアリング
Saitama.js vol.0 で発表した資料です
https://saitamajs.connpass.com/event/222401/
Makoto Nakagawa
October 14, 2021
Tweet
Share
Other Decks in Programming
See All in Programming
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
410
AIコーディングエージェント(skywork)
kondai24
0
190
Deno Tunnel を使ってみた話
kamekyame
0
210
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
110
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
1
300
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
430
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
180
AIコーディングエージェント(NotebookLM)
kondai24
0
220
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
450
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
250
開発に寄りそう自動テストの実現
goyoki
2
1.3k
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
0
1.9k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
140
Joys of Absence: A Defence of Solitary Play
codingconduct
1
250
Six Lessons from altMBA
skipperchong
29
4.1k
How to Ace a Technical Interview
jacobian
281
24k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
78
Git: the NoSQL Database
bkeepers
PRO
432
66k
How STYLIGHT went responsive
nonsquared
100
6k
Designing for humans not robots
tammielis
254
26k
Agile that works and the tools we love
rasmusluckow
331
21k
Transcript
JavaScript から入門する ブロックチェーンエンジニアリング Makoto Nakagawa(@let_mkt) 1
About me Makoto 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
にインスパイアされている 拡張子は .sol 11
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/boo
ks/9784873119342/) 30
ご清聴ありがとうございました! 31