Slide 1

Slide 1 text

BitcoinͷscriptΛ ॻ͍ͯΈΑ͏ @usatie Yenom, Inc.

Slide 2

Slide 2 text

今⽇はなすこと 3. Dappsについて 1. Yenomの取り組み 2. BitcoinのScript

Slide 3

Slide 3 text

今⽇はなすこと 3. Dappsについて 1. Yenomの取り組み 2. BitcoinのScript

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

\ 最近リリースしました /

Slide 6

Slide 6 text

1⾏でインストール

Slide 7

Slide 7 text

Yenomの開発には 7895⾏のコードが 必要でした。 (その他⾊々含む。Bitcoin関連は2000〜3000⾏。)

Slide 8

Slide 8 text

BitcoinKitを使って ウォレットアプリを 開発するならば、、、

Slide 9

Slide 9 text

なんと 10⾏

Slide 10

Slide 10 text

10⾏でウォレットアプリが作れる

Slide 11

Slide 11 text

グラフにするとこうです

Slide 12

Slide 12 text

     ίʔυߦ਺ #*UDPJO,JU :FOPN

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

ビットコインの楽しさを 体験してもらい ビットコインで遊ぶ⼈を増やす

Slide 15

Slide 15 text

カンタンすぎて お⺟さんでも使える ビットコインウォレット!

Slide 16

Slide 16 text

どれくらいカンタンなの? DL後のフローを説明します。

Slide 17

Slide 17 text

1. 「同意して続ける」をタップ

Slide 18

Slide 18 text

✅ 完了

Slide 19

Slide 19 text

今⽇はなすこと 3. なぜDappsが重要なのか 1. Yenomの取り組み 2. BitcoinのScript

Slide 20

Slide 20 text

BitcoinのScript Lock Script この2つだけ!✌ Unlock Script :コインに錠をかけるための  スクリプト :コインの錠を外すための  スクリプト

Slide 21

Slide 21 text

Bitcoinのアンロック 1. Unlock Script を実⾏ 結果、TRUE が返ってくれば そのコインはアンロック成功 ! 2. Lock Script を実⾏

Slide 22

Slide 22 text

コインを送⾦するとは?

Slide 23

Slide 23 text

コインの送⾦とは① 2 そもそもBitcoinとは? =改ざんできないDB 何を保存してる? 錠がかかったコイン 2 " " +

Slide 24

Slide 24 text

・コインに所有権は存在しない ・コイン と その鍵 は公開されている ・誰でもアンロックに挑戦できる コインの送⾦とは②

Slide 25

Slide 25 text

・コインに所有権は存在しない ・コイン と その鍵 は公開されている ・誰でもアンロックに挑戦できる ➡ ウサミにしかアンロックできない錠があれば、 実質 ウサミが所有していると⾔える コインの送⾦とは②

Slide 26

Slide 26 text

つまり、コインの送⾦とは あるコインに 「@Yenom にしか開けられない錠 」 をセット = これで送⾦したことになる

Slide 27

Slide 27 text

本⼈しか開けられない鍵 ・秘密鍵 / 公開鍵 を利⽤すると実現できる! ・署名: ➡ ・検証: ・メッセージ ・署名 ・公開鍵 Input ➡ ・メッセージ ・秘密鍵 Input 署名 Output 結果 Output

Slide 28

Slide 28 text

ちなみに:鍵とアドレスの関係 秘密鍵 公開鍵 アドレス ‑ ‑ ੜ੒Ͱ͖Δ ੜ੒Ͱ͖Δ

Slide 29

Slide 29 text

秘密鍵 公開鍵 アドレス ‑ ‑ ٯ͸ແཧ ٯ͸ແཧ ちなみに:鍵とアドレスの関係

Slide 30

Slide 30 text

Bitcoinはスタックマシン (Ethereumも)

Slide 31

Slide 31 text

スタックマシンとは 1. 左から順番にコードを実⾏する 2 3 5 add

Slide 32

Slide 32 text

スタックマシンとは 2. スタックという、バケツのようなものに  値を⼊れたり出したりする 2 3 2 3 2

Slide 33

Slide 33 text

Ex. 2 3 5 Add 2 3 2 5 Add

Slide 34

Slide 34 text

Ex. 2 3 5 Add 2 3 2 3 2 5 Add

Slide 35

Slide 35 text

Ex. 2 3 5 Add 2 3 2 3 2 5 5 3 2 Add

Slide 36

Slide 36 text

Ex. 2 3 5 Add 2 3 2 3 2 5 5 3 2 Add 8 2

Slide 37

Slide 37 text

Ex. 3 20 8 Add 3 8 20 3 28 3 Mul 84 Mul 20 8 Add

Slide 38

Slide 38 text

おさらい:Bitcoinのアンロック 1. Unlock Script を実⾏ 結果、TRUE が返ってくれば そのコインはアンロック成功 ! 2. Lock Script を実⾏

Slide 39

Slide 39 text

Bitcoinのアンロック 1. Unlock Script を実⾏ 結果、TRUE が返ってくれば そのコインはアンロック成功 ! 2. Lock Script を実⾏ TRUE が返ってくれば

Slide 40

Slide 40 text

Bitcoinのアンロック 1. Unlock Script を実⾏ 結果、TRUE が返ってくれば そのコインはアンロック成功 ! 2. Lock Script を実⾏ TRUE が返ってくれば スクリプトの実⾏後 スタックの⼀番上に 残っている値が TRUE であれば =

Slide 41

Slide 41 text

おさらい Unlock Script Lock Script スタックに TRUE が残ればコインの解錠成功! ① ② の順に実⾏し、

Slide 42

Slide 42 text

具体例いってみましょう!

Slide 43

Slide 43 text

Anyone Can Spend 頑張れば誰でも使える

Slide 44

Slide 44 text

? Unlock Script 2 Lock Script 3 Add Equal ① ② ⬅何が⼊るでしょう?

Slide 45

Slide 45 text

5 Unlock Script 2 Lock Script 3 Add Equal ① ②

Slide 46

Slide 46 text

5 Unlock Script 2 Lock Script 3 Add Equal 5 3 5 3 2 5 5 5 TRUE 2 Add Equal ① ②

Slide 47

Slide 47 text

では、おてもとの 演習問題にうつります!

Slide 48

Slide 48 text

実際に使われる 主要なスクリプトを⾒ていきましょう!

Slide 49

Slide 49 text

P2PK Pay to Public Key 誰かの公開鍵に送⾦するスクリプト

Slide 50

Slide 50 text

OP_CHECKSIG P2PK 署名と公開鍵のセットを検証して TRUE / FALSEを返すためのオペコード

Slide 51

Slide 51 text

Ex. sig A pubkey A CHECKSIG sig A pubkey A sig A TRUE pub key A sig A CHECKSIG OP_CHECKSIGについて

Slide 52

Slide 52 text

P2PK ( Pay to Public Key ) Unlock Script Lock Script sig A pub A CHECKSIG

Slide 53

Slide 53 text

CHECKSIG TRUE ➡ sig A pub A CHECKSIG Ex. P2PKについて sig A sig A pub A ➡ pub A sig A

Slide 54

Slide 54 text

P2PKH Pay to Public Key Hash P2PKのややこしいやつ

Slide 55

Slide 55 text

DUP スタックの⼀番上の値を コピーするオペコード P2PKH

Slide 56

Slide 56 text

DUPについて 1 1 1 DUP ADD DUP ADD 1 1 DUP 2 ADD 2 2 DUP 4 ADD

Slide 57

Slide 57 text

VERIFY スタックの⼀番上の値が TRUEであることを保証するためのオペコード P2PKH

Slide 58

Slide 58 text

VERIFYについて TRUE VERIFY FALSE VERIFY ➡ ➡ Fail !! Success !!

Slide 59

Slide 59 text

HASH 160 P2PKH スタックの⼀番上の値 x を ハッシュ化するためのオペコード RIPEM160 ( SHA256(x) )

Slide 60

Slide 60 text

HASH160について “hello” “hello” e8c47…874 HASH160 ➡ ハッシュ化された “hello”

Slide 61

Slide 61 text

P2PKH ( Pay to Public Key Hash) Unlock Script Lock Script sig A pub A DUP HASH160 pubhash A EQUAL_VERIFY CHECKSIG

Slide 62

Slide 62 text

DUP Hash160 sig A sig A pub A DUP HASH160 EQUALVERIFY CHECKSIG pubhash A Ex. ➡ ➡ pub A sig A pub A pub A sig A pubhash A pub A sig A pub A P2PKHについて

Slide 63

Slide 63 text

CHECKSIG pubhash A pubhash A pub A sig A HASH160 ➡ pub A sig A TRUE EQUALVERIFY ➡ P2PKHについて sig A pub A DUP HASH160 EQUALVERIFY CHECKSIG pubhash A Ex.

Slide 64

Slide 64 text

LOCK UNTIL コインをタイムカプセル化し、 ある未来の時点までロックするスクリプト

Slide 65

Slide 65 text

OP_CLTV ある⽇時(exp-time)が来るまでは 使えないようにするオペコード Check Lock Time Verify

Slide 66

Slide 66 text

OP_CLTVについて exp_time exp_time CLTV ➡ Fail !! ➡ exp_timeを 過ぎているとき ※OP_CHECKLOCKTIMEBERIFY の略です。 例: exp_time = 2018/08/31 exp_timeが まだ来ていないとき 例: exp_time = 2020/09/23

Slide 67

Slide 67 text

DROP スタックの⼀番上の値 を 取り除くためのオペコード

Slide 68

Slide 68 text

OP_DROP について 10 5 3 DROP 5 3 DROP 3

Slide 69

Slide 69 text

Lock Until について Unlock Script Lock Script sig A pub A 2020/01/01 CLTV DROP P2PKH(A) さっきのP2PKHと同じもの

Slide 70

Slide 70 text

2020/01/01 CLTV sig A sig A pub A 2020/01/01 CLTV P2PKH(A) DROP Ex. ➡ pub A sig A 2020/01/01 pub A sig A 2020/01/01 pub A sig A pub A CLTVについて DROP pub A sig A ➡ ➡

Slide 71

Slide 71 text

sig A pub A 2020/01/01 CLTV P2PKH(A) DROP Ex. DUP Hash160 ➡ pub A pub A sig A pubhash A pub A sig A pubhash A CHECKSIG ➡ pub A sig A TRUE EQUALVERIFY ➡ pubhash A pubhash A pub A sig A ➡ CLTVについて

Slide 72

Slide 72 text

MULTISIG みんなの署名がないと 開かないコインをつくるスクリプト

Slide 73

Slide 73 text

OP_CHECKMULTISIG mコの署名 / nコの公開鍵の セットを検証するためのオペコード 例: 3⼈中 2⼈の署名で開く ( n = 3 , m=2 )

Slide 74

Slide 74 text

OP_CHECKMULTISIG について CHECKMULTISIG 3 pub C pub B pub A 2 sig B sig A Unlock Script Lock Script TRUE ➡

Slide 75

Slide 75 text

P2SH Pay to Script Hash ややこしいLock Scriptを シンプルに⾒せるスクリプト

Slide 76

Slide 76 text

P2SH には 2つのフェーズがある フェーズ 1: ハッシュが等しいことを検証 フェーズ 2: ややこしいScriptを実⾏

Slide 77

Slide 77 text

5 Unlock Script 2 Lock Script 3 Add Equal ① ② 先ほどやった、これのP2SHをみていきましょう!

Slide 78

Slide 78 text

5 Unlock Script 2 3 Add Equal ① Lock Script ② 先ほどやった、これのP2SHをみていきましょう! Add ややこしい Script

Slide 79

Slide 79 text

のP2SH 5 Unlock Script 2 Lock Script 3 Add Equal ① ② Add ややこしい Script 5 ややこしい Script HASH160 EQUAL Script hash Lock Script ② Unlock Script ① 「ややこしいScript」のハッシュ

Slide 80

Slide 80 text

5 ややこしいScript ➡ 5 5 HASH 160 EQUAL ➡ Script hash Script hash 5 TRUE 5 Script hash ➡ Script hash 5 ➡ ややこしいScript 普通はここでアンロック成功して終了

Slide 81

Slide 81 text

No content

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

5 ややこしいScript ➡ 5 5 HASH 160 EQUALVERIFY ➡ Script hash Script hash 5 TRUE 5 Script hash ➡ Script hash 5 ➡ ややこしいScript 普通はここでアンロック成功して終了 EQUAL TRUE 5 フェーズ 1 終了時点 ➡

Slide 84

Slide 84 text

5 ややこしいScript ➡ 5 5 HASH 160 EQUALVERIFY ➡ Script hash Script hash 5 TRUE 5 Script hash ➡ Script hash 5 ➡ ややこしいScript 普通はここでアンロック成功して終了 EQUAL TRUE 5 左上へ移動 ⬅

Slide 85

Slide 85 text

EQUAL TRUE 5

Slide 86

Slide 86 text

EQUAL TRUE 5 ➡ 5 ⼀番上を取り除く

Slide 87

Slide 87 text

EQUAL TRUE 5 ➡ 5 ⼀番上を取り除く この後、 ややこしい Script を実⾏する

Slide 88

Slide 88 text

EQUAL TRUE 5 ➡ 5 ⼀番上を取り除く この後、 を実⾏する 2 3 Add Equal

Slide 89

Slide 89 text

の実⾏ 2 3 Add Equal 2 ➡ 5 5 EQUAL ➡ 5 5 TRUE ➡ 3 2 5 ➡ 2 3 ADD

Slide 90

Slide 90 text

P2SH のまとめ フェーズ 1: Scriptのハッシュが等しいことを検証 フェーズ 2: 本来のScriptを実⾏

Slide 91

Slide 91 text

Bitcoin と Ethereum は どちらも似たようなスタックマシン 最後に

Slide 92

Slide 92 text

? では何が違うのか?

Slide 93

Slide 93 text

ϧʔϓ × ○ ՝ۚ هड़ྔ ܭࢉྔ උߟ 課⾦さえすれば、 任意のコードを実⾏できる。 Ethereum Bitcoin

Slide 94

Slide 94 text

今⽇はなすこと 3. Dappsについて 1. Yenomの取り組み 2. BitcoinのScript

Slide 95

Slide 95 text

現在は デジタル⾰命の真っ最中!

Slide 96

Slide 96 text

デジタルの価値がどんどん⼤きくなり、 リアルの価値を⼤きく上回るようになる デジタル⾰命

Slide 97

Slide 97 text

「リアルがデジタルを解釈する」時代 「デジタルがリアルを解釈する」時代 ⬇ デジタル⾰命

Slide 98

Slide 98 text

今は 「 デジタル = リアルのミラー 」 リアルに価値の⽐重が⼤きいため。 ϦΞϧ σδλϧ 8IZ

Slide 99

Slide 99 text

σδλϧ ϦΞϧ デジタルに価値の⽐重が⼤きくなった時は、 「 リアル = デジタルのミラー 」となる

Slide 100

Slide 100 text

ビットコイン デジタルデータがもったはじめての価値 =

Slide 101

Slide 101 text

ビットコインをはじめとするDappsは デジタルの世界に価値を⽣み出し、 デジタル⾰命をドライブするもの。

Slide 102

Slide 102 text

ありがとうございました。 # ビットコインしろ @usatie