Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Let's Write Bitcoin Script #TokyoBitcoinHackathon

74734982ddfd6f6bb1af5ce1ff260091?s=47 Shun Usami
September 22, 2018

Let's Write Bitcoin Script #TokyoBitcoinHackathon

BitcoinKit
- たった10行でウォレットアプリが開発できる!

TokyoBitcoinHackathon
- 日本初の連続ビットコインハッカソン
- ビットコイン開発者を増やす

Yenom
- とびきりやさしいビットコインウォレット
- やさしすぎてお母さんでも使える

Bitcoin Script
- Lock ScriptとUnlock Scriptの二つだけ!
- Anyone Can Spend
- P2PK (Pay To Public Key)
- P2PKH (Pay To Public Key Hash)
- Lock Until (Lock Time)
- P2SH (Pay To Script Hash)

Dappsについて
- デジタルの世界に価値を生み出し、デジタル革命をドライブする

74734982ddfd6f6bb1af5ce1ff260091?s=128

Shun Usami

September 22, 2018
Tweet

Transcript

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

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

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

  4. None
  5. \ 最近リリースしました /

  6. 1⾏でインストール

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

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

  9. なんと 10⾏

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

  11. グラフにするとこうです

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

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

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

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

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

  18. ✅ 完了

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

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

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

    Lock Script を実⾏
  22. コインを送⾦するとは?

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

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

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

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

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

    ・公開鍵 Input ➡ ・メッセージ ・秘密鍵 Input 署名 Output 結果 Output
  28. ちなみに:鍵とアドレスの関係 秘密鍵 公開鍵 アドレス ‑ ‑ ੜ੒Ͱ͖Δ ੜ੒Ͱ͖Δ

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

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

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

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

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

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

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

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

    5 5 3 2 Add 8 2
  37. Ex. 3 20 8 Add 3 8 20 3 28

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

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

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

    Lock Script を実⾏ TRUE が返ってくれば スクリプトの実⾏後 スタックの⼀番上に 残っている値が TRUE であれば =
  41. おさらい Unlock Script Lock Script スタックに TRUE が残ればコインの解錠成功! ① ②

    の順に実⾏し、
  42. 具体例いってみましょう!

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

  44. ? Unlock Script 2 Lock Script 3 Add Equal ①

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

  46. 5 Unlock Script 2 Lock Script 3 Add Equal 5

    3 5 3 2 5 5 5 TRUE 2 Add Equal ① ②
  47. では、おてもとの 演習問題にうつります!

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

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

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

  51. Ex. sig A pubkey A CHECKSIG sig A pubkey A

    sig A TRUE pub key A sig A CHECKSIG OP_CHECKSIGについて
  52. P2PK ( Pay to Public Key ) Unlock Script Lock

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

    sig A sig A pub A ➡ pub A sig A
  54. P2PKH Pay to Public Key Hash P2PKのややこしいやつ

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

  56. DUPについて 1 1 1 DUP ADD DUP ADD 1 1

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

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

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

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

  61. P2PKH ( Pay to Public Key Hash) Unlock Script Lock

    Script sig A pub A DUP HASH160 pubhash A EQUAL_VERIFY CHECKSIG
  62. 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について
  63. 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.
  64. LOCK UNTIL コインをタイムカプセル化し、 ある未来の時点までロックするスクリプト

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

  66. OP_CLTVについて exp_time exp_time CLTV ➡ Fail !! ➡ exp_timeを 過ぎているとき

    ※OP_CHECKLOCKTIMEBERIFY の略です。 例: exp_time = 2018/08/31 exp_timeが まだ来ていないとき 例: exp_time = 2020/09/23
  67. DROP スタックの⼀番上の値 を 取り除くためのオペコード

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

  69. Lock Until について Unlock Script Lock Script sig A pub

    A 2020/01/01 CLTV DROP P2PKH(A) さっきのP2PKHと同じもの
  70. 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 ➡ ➡
  71. 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について
  72. MULTISIG みんなの署名がないと 開かないコインをつくるスクリプト

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

    = 3 , m=2 )
  74. OP_CHECKMULTISIG について CHECKMULTISIG 3 pub C pub B pub A

    2 sig B sig A Unlock Script Lock Script TRUE ➡
  75. P2SH Pay to Script Hash ややこしいLock Scriptを シンプルに⾒せるスクリプト

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

  77. 5 Unlock Script 2 Lock Script 3 Add Equal ①

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

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

    ① ② Add ややこしい Script 5 ややこしい Script HASH160 EQUAL Script hash Lock Script ② Unlock Script ① 「ややこしいScript」のハッシュ
  80. 5 ややこしいScript ➡ 5 5 HASH 160 EQUAL ➡ Script

    hash Script hash 5 TRUE 5 Script hash ➡ Script hash 5 ➡ ややこしいScript 普通はここでアンロック成功して終了
  81. None
  82. None
  83. 5 ややこしいScript ➡ 5 5 HASH 160 EQUALVERIFY ➡ Script

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

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

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

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

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

    Add Equal
  89. の実⾏ 2 3 Add Equal 2 ➡ 5 5 EQUAL

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

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

  92. ? では何が違うのか?

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

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

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

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

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

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

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

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

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

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