Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
WebAssembly in Blockchain
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ryuya Nakamura
December 14, 2018
Programming
730
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WebAssembly in Blockchain
@Emscripten & WebAssembly night !! #6
Ryuya Nakamura
December 14, 2018
More Decks by Ryuya Nakamura
See All by Ryuya Nakamura
本当に「時間がなかった」のか?
nrryuya
0
490
「弁護士バイアス」とその対処法
nrryuya
2
1.7k
AIオンボーディングとAIプロセスマイニング
nrryuya
6
3.5k
アルファを作る人になる
nrryuya
0
580
学生時代のキャリア探索の心がけ
nrryuya
0
400
フィードバックされやすい人になろう
nrryuya
37
25k
間違いが許されなくてもLLMが使えるユースケースとは @GenAI Playground Meetup #01
nrryuya
13
6.5k
20240725 LLMによるDXのビジョンと、今何からやるべきか @Azure OpenAI Service Dev Day
nrryuya
4
2.9k
「知的単純作業」を自動化する、地に足の着いた大規模言語モデル (LLM) の活用
nrryuya
9
13k
Other Decks in Programming
See All in Programming
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
190
phperだってパンチカードでコーディングしたい
o0h
PRO
0
220
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
350
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
160
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
230
SREの越境 / SRE Collaboration
y0hgi
2
300
mrbgem 三角測量 開発
ogom
0
200
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
20
21k
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
390
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
320
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
140
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
330
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
300
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
From π to Pie charts
rasagy
1
390
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
610
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
480
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
420
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The Invisible Side of Design
smashingmag
301
52k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
450
Transcript
ブロックチェーンにおける WebAssembly @veryNR 2018/12/14
自己紹介 中村龍矢(りゅうや) - LayerX Inc. - ブロックチェーンの研究開発 - 東京大学工学部(休学中) -
略歴 - Coubic Inc. (2015/10~) - Gunosy Inc. データ分析部 (2017/2~) - LayerX Inc. R&D (2018/8~) Twitter: @veryNR
研究内容: プログラムの安全性を高める https://github.com/LayerXcom/verified-vyper-contracts コントラクト言語Vyperコントリビュータ - Pythonライクな言語 - 可読性を重視
研究内容: プログラムの安全性を高める https://github.com/LayerXcom/verified-vyper-contracts FVyperプロジェクト - Vyperのライブラリ集 - 形式的検証も行う
研究内容: プロトコルの安全性を高める LayerXのScrapbox(https://scrapbox.io/layerx)に色々書いてるよ - コンセンサスアルゴリズム - オフチェーンプロトコル - Plasma -
State channel
研究内容: ゼロ知識証明 LayerXのScrapbox(https://scrapbox.io/layerx)に色々書いてるよ ブロックチェーン界隈でのニーズにより暗号 学の諸分野が発展 特に非対話的なゼロ知識証明 (zk-S[NT]ARKs) →色々な計算の検証に使える
ブロックチェーンにおけるWebAssembly ▪ そもそもブロックチェーンとは ▪ ブロックチェーンにおけるvirtual machine ▪ WebAssemblyがどのように使われているか
ブロックチェーンにおける バーチャルマシン
ブロックチェーンとは ▪ 冗長なステートマシン – 数千~数万ノードが一定間隔で同じ状態遷移をする ▪ Bitcoinの「状態」 – bitcoinを使った過去の取引一覧 (誰が何BTC持っているか)
▪ Ethereumの「状態」 – 誰が何ether持っているか – ストレージ • 任意のデータ – コード • チューリング完全なプログラム • ether送金やストレージの変更が可能 http://takenobu-hs.github.io/downloads/ethereum_evm_ill ustrated.pdf
コードとストレージの例 Cryptokitties 猫を売買したり繁殖させるゲー ム
コードとストレージの例 猫の実体 分散型アプリと言ってもブロックチェーン上に載せるのは一部のビジネスロジックだけ
トランザクションとブロック ▪ トランザクション: 状態遷移を依頼するチケット – 「Bobに5ETH送金」「transfer関数を実行して猫AをCarolに送る」 – 処理できる状態遷移にはキャパがある • 手数料高いチケットから順に選ばれる
▪ ブロック: 今回の状態遷移で実行するトランザクションが詰め込まれたもの – どのノードがつくったブロックに従うのか? • このルールがコンセンサスアルゴリズム http://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
スマートコントラクトの実行 - トランザクションを送ってプログラムをデプロイ - ステートの一部に書き込まれる - トランザクションを送ってプログラムを実行 - ステートの一部を書き換える http://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
Ethereum Virtual Machine (EVM) ▪ スタックマシン ▪ 各クライアントのネイティブ言語で個別に実装 – go-ethereum
(core/vmディレクトリ) – Parity (ethcoreディレクトリ) – cpp-ethereum (libevm/VM.cpp) ▪ EVMコードと呼ばれるバイトコードを実行する Ethereumのスマートコントラクトの実行環境
Ethereum Virtual Machine (EVM) interpreter.go go-ethereumでの実装(core/vm ディレクトリ) memory.go stack.go
コントラクト開発の流れ 6060604052600080fd00a 165627a7a72305820c30 84ab8aacb65862cf8898f 2e1d6abfe2600746527b1 f067748f83724fa6d68002 9 - プログラムを書く→コンパイル→デプロイする -
トランザクションを発行してデプロイします Tx
実はEVMが WASMに変わろうとしています
EVMの課題 ▪ 遅い ▪ 独自仕様すぎる
©Gunosy Inc. EVMの問題点 その1: ランタイムでのgas計算 interpreter.go Run() のコードの雰囲気 while (停止系の命令が来ていない)
バイトコードから対応する命令を取得 命令のgasコストを取得 if gasが不足 error 命令を実行 gas消費 「0x60」→ PUSH1 PUSH1: 3gas - EVMでは、プログラムの実行に手数料 (gas)がかかる - 命令実行ごとに消費し、使い切ったらリバート
©Gunosy Inc. EVMの問題点 その2: EVM独自の高級な命令 基本演算/実行停止系(0x0~) STOP, ADD, MUL, SUB,
etc. 比較/論理演算系(0x10~) LT, GT, AND, OR, etc. スタックアイテム系( 0x60~) PUSH1, DUP1, SWAP1, etc. 環境情報系(0x30~) ADDRESS, BALANCE, CALLER, GASPRICE, etc. ブロック系(0x40~) BLOCKHASH, COINVASE, TIMESTAMP, etc. メモリ/ストレージ系(0x50~) MSTORE, MLOAD, SSTORE, SLOAD, etc. コントラクト系(0xf0~) CALL, CREATE, SELFDESTRUCT, etc. ハッシュ関数SHA3 (0x20) 一般的な命令 EVM独自の命令
©Gunosy Inc. EVMの問題点 その3: 256ビットのスタックアイテム ▪ 256bitのread/write – 多くの演算では256bitも必要ない ▪
EVMを動かす物理CPUの命令とEVMの命令が対応しない – CPUは大抵64ビット – 実装によって命令ごとの処理の重さが変わる → gasコスト当たりの処理の重さも変わる ▪ EVMの命令セットが複雑に stack top : 1024個 256bits Stack
EVMは遅い ▪ ハッシュ関数・楕円曲線関数などはどうしていたのか? – “precompiled contracts” • 各クライアントにあらかじめ中身が実装されたコントラクト – 追加するにはハードフォークが必要(一種のプロトコル変更のため)
▪ 一方、早いVMが求められている – S[NT]ARKsブーム – Sharding, PoS, etc. → 新しいVMが求められている
eWASM Ethereum flavored WebAssembly
©Gunosy Inc. eWASMとは “Ethereum flavored WebAssembly”: WebAssemblyのサブセット ▪ eWASM ⊂
WASM – WebAssemblyに変更は加えず、Ethereumの仕様に合わせ制約を加えた – eWASM自体は言語で、EVMコードに代わるもの ▪ EVMに代わるのはeWASM VM ▪ LLVM IRなども代案としてあった – 不安定性などが問題 – JVMなどは論外
©Gunosy Inc. eWASMコントラクト eWASMで書かれたスマートコントラクト Ethereumの仕様に合うように制約を加える - 浮動小数点を使わない - EEIのモジュールのみをimport -
他のモジュールはimportしない ※import・exportはWebAssemblyの仕様 mainとmemoryという二つのシンボルをexport - main: - VMが実行する関数 - memory: - EEIのモジュールが書き込むメモリスペース
©Gunosy Inc. Ethereum Environment Interface (EEI) eWASMコントラクトがEthereumにアクセスするためのAPI ▪ EVMで高級な命令として用意されていたものは当然 WebAssemblyの命令にはない
▪ WebAssemblyのModuleとして実装し、eWASMコントラクトのコード中で import – ex: useGas, getAddress, call, storageStore, create, etc.
©Gunosy Inc. eWASM開発状況 数年後のEthereumの大規模アップデートのためテスト中 ▪ 数年後のEthereumの大規模アップデート(Eth2.0, Serenity)で導入予定 ▪ 現在はeWASMはテストネットで動いている ▪
現状はgo-ethereumというGoクライアントでC++製のeWASM VMを利用 – WASMバックエンドはBinaryenをサポート – wabtとWAVMは”limited support”
©Gunosy Inc. その他のブロックチェーンでのWASM ▪ 独自VM系 – Bitcoin (Bitcoin script) –
Ethereum (EVM) – NEO ▪ WebAssembly – Ethereum (eWASM) (アップデート予定) – EOS – Ontology ▪ LLVM – Cardano (IELE)
おしまい Twitter: @veryNR