Slide 1

Slide 1 text

Bitcoinだけで スマートコントラクト 23卒内定者 たかやま

Slide 2

Slide 2 text

高山 柊 crimeth.ink/profile しゅう

Slide 3

Slide 3 text

誤解 ● Bitcoinはデジタルゴールド ● Bitcoinは送金しかできない ● スマートコントラクト = Ethereum上で動くプログラム

Slide 4

Slide 4 text

誤解 ● Bitcoinはデジタルゴールド Bitcoinは通貨 ● Bitcoinは送金しかできない BitcoinにはScriptという機能がある ● スマートコントラクト = Ethereum上で動くプログラム 原義は「当事者が契約を実行するためのプロトコルを含む、デジタル形式で指定された 一連の契約(contract)」(1996、ザボ)

Slide 5

Slide 5 text

BitcoinのScript

Slide 6

Slide 6 text

BitcoinのScript = コインを引き出せる者を定義するミニプログラム 例:入力を電子署名として解釈し、公開鍵Pに対応していたら引き出せる →Pの秘密鍵を持つ者がコインを引き出せる

Slide 7

Slide 7 text

BitcoinのScriptで可能なこと ● ハッシュ演算 例:ハッシュ値0x1234……efに対応する原像を提出すると引き出せる ● タイムロック 例:24時間後までは誰も引き出せない、24時間後からAliceが引き出せる ● 条件分岐 例:0を入力するとAliceが、1を入力するとBobが引き出せる

Slide 8

Slide 8 text

BitcoinのScriptで不可能なこと ● 前方ジャンプやループ 計算量 = O(スクリプト長) 特に停止性が保証される ● ブロックハッシュなどの環境値の取得 信頼できる第三者を使えば可能

Slide 9

Slide 9 text

Bitcoinだけでギャンブルコントラクト

Slide 10

Slide 10 text

Bitcoinだけでギャンブルコントラクト 2人参加のコイントス型ギャンブル契約 1. AliceとBobはそれぞれ秘密の文字列c A ,c B を決める 2. c A ,c B を同時に言う 3. c A ,c B がどちらも20文字以下またはどちらも20文字以上ならばAliceの勝ち、 そう でなければBobの勝ち 4. 勝者が掛け金を得る ↑これをBitcoinで実装

Slide 11

Slide 11 text

Bitcoinだけでギャンブルコントラクト 1. 秘密の文字列c A ,c B を決める 2. Hash(c A ),Hash(c B )を公開する 3. 掛け金を引き出せる者を次のようなScriptで定義: 入力1がHash(c A )の原像でなければエラー 入力2がHash(c B )の原像でなければエラー 入力がどちらも20文字以下またはどちらも20文字以上ならばAliceが、そうでなければBobが 引き出せる 4. c A ,c B を公開する 5. c A ,c B を用いて掛け金を引き出す

Slide 12

Slide 12 text

Bitcoinだけでギャンブルコントラクト Q. Aliceがサボってc A を公開しない場合は? A. 保証金を預けることとし、保証金を引き出せる者を次のようなScriptで定義: 入力がHash(c A )の原像であればAliceが引き出せる 入力がHash(c A )の原像でなくとも24時間後ならばBobが引き出せる →c A を公開しないと保証金が没収される

Slide 13

Slide 13 text

Bitcoinだけでギャンブルコントラクト Alice Bob

Slide 14

Slide 14 text

Bitcoinだけでギャンブルコントラクト Bob Alice