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

Bitcoin Script

Ara
August 23, 2018

Bitcoin Script

Bitcoin Script の概要説明

参考:
・BIP16 : P2SH の仕組み - Yenom開発者ブログ
 https://developers.yenom.tech/entry/2018/08/18/143918

・ビットコインおけるトランザクションスクリプトの仕組みとその種類
 https://zoom-blc.com/transaction-script

・Script - Bitcoin Wiki
 https://en.bitcoin.it/wiki/Script

・Bitcoinを技術的に理解する
 https://www.slideshare.net/kenjiurushima/20140602-bitcoin1-201406031222

・ブロックチェーン・プログラミング”, 山崎 重一郎ほか
 https://www.amazon.co.jp/dp/4061538314/

・双方向のPayment Channelの仕組み
 https://techmedia-think.hatenablog.com/entry/2016/08/06/212453

Ara

August 23, 2018
Tweet

More Decks by Ara

Other Decks in Technology

Transcript

  1. Bitcoin を使うときの検証の仕組み 参考: https://www.slideshare.net/kenjiurushima/20140602-bitcoin1-201406031222 バージョン 入力数 前の取引ハッシュ 入 力 ①

    前の出力インデックス スクリプトバイト長 scriptSig 署名 公開鍵 シーケンス終端記号 出 力 ① 出力額 出力数 script PubKey ロックタイム 公開鍵の ハッシュ トランザクション0 トランザクション1 バージョン 入力数 前の取引ハッシュ 入 力 ① 前の出力インデックス スクリプトバイト長 scriptSig 署名 公開鍵 シーケンス終端記号 出 力 ① 出力額 出力数 script PubKey ロックタイム 公開鍵の ハッシュ
  2. Bitcoin を使うときの検証の仕組み 参考: https://www.slideshare.net/kenjiurushima/20140602-bitcoin1-201406031222 バージョン 入力数 前の取引ハッシュ 入 力 ①

    前の出力インデックス スクリプトバイト長 scriptSig 署名 公開鍵 シーケンス終端記号 出 力 ① 出力額 出力数 script PubKey ロックタイム 公開鍵の ハッシュ Unlock Script Lock Script
  3. Bitcoin Script はスタックマシン 2 3 * 4 5 * +

    出典:http://ufcpp.net/study/computer/Compiler.html
  4. Bitcoin Script の命令(一部) 命令 Opcode Hex 引数 戻り値 内容 OP_DUP

    118 0x76 x1 x1, x1 1 番上の要素を複製して、スタックに追加 する OP_HASH160 169 0xa9 x1 hash (x1) 1 番上の要素を SHA-256 でハッシュしさ らに RIPEMD-160 でハッシュする OP_EQUAL 135 0x87 x1, x2 1 / 0 2 つの要素が等しければ 1、異なれば 0 を返す OP_VERIFY 105 0x69 1 / 0 nothing / fail 1 番上の要素が 1 のときは取り除く、 0 のときはスクリプトの実行が強制終了 し、実行結果が false となる OP_EQUALVERIFY 136 0x88 x1 x2 nothing / fail OP_EQUAL と OP_VERIFY を連続して 実行する. OP_CHECKSI 172 0xac signature, pubkey 1 / 0 署名の妥当性を検証し、 1 または 0 を返 す
  5. P2PKH (Pay to Public Key Hash) Lock Script OP_DUP OP_HASH160

    <公開鍵Aのハッシュ> OP_EQUALVERIFY OP_CHECKSIG Unlock Script <署名A> <公開鍵A> 検証される スクリプト <署名A> <公開鍵A> OP_DUP OP_HASH160 <公開鍵Aのハッシュ> OP_EQUALVERIFY OP_CHECKSIG 署名A 公開鍵A 署名A 公開鍵A 公開鍵A 署名A 公開鍵A 公開鍵A ハッシュ 署名A 公開鍵A 公開鍵A ハッシュ 公開鍵A ハッシュ 署名A 公開鍵A 署名A 1 ※現在は SegWit に対応したスクリプトが通常送金に使われている
  6. MultiSignature Lock Script 2 <公開鍵A> <公開鍵B> <公開鍵C> 3 OP_CHECKMULTISIG Unlock

    Script OP_0 <署名A> <署名B> 検証される スクリプト OP_0 <署名A> <署名B> 2 <公開鍵A> <公開鍵B> <公開鍵C> 3 OP_CHECKMULTISIG 0 署名A 0 署名A 署名B 0 署名A 署名B 0 署名A 署名B 2 0 署名A 0 1 公開鍵A 2 署名B 2 公開鍵A 公開鍵B 署名A 0 1 署名B 2 公開鍵A 公開鍵B 公開鍵C 署名A 署名B 2 公開鍵A 公開鍵B 公開鍵C 3
  7. Lock Time Lock Script <ブロック高またはUNIXタイム> OP_CHECKLOCKTIMEVERIFY OP_DROP <公開鍵A> OP_CHECKSIG Unlock

    Script <署名A> OP_CHECKLOCKTIMEVERIFY:絶対時刻で指定した時点までロックする Lock Script <ブロック高またはUNIXタイム> OP_CHECKSEQUENCEVERIFY OP_DROP <公開鍵A> OP_CHECKSIG Unlock Script <署名A> OP_CHECKSEQUENCEVERIFY:相対時刻で指定した時点までロックする
  8. Bitcoin と Ethereum の違い • Bitcoin Script と Ethereum スマートコントラクトの命令の違いはわずか

    • Ethereum では OP_LOOP と OP_JUMP が使える → チューリング完全と言われる所以だが、実際は GAS の制限により有限 • 今後、Bitcoin や Bitcoin Cash でスマートコントラクトを開発するための わかりやすい言語やツールが出てくる可能性が高い ◦ Bitcoin Cash は 2018/05 ハードフォークでスマートコントラクト導入 • 実は Ethereum より有望・・・?
  9. Payment Channel • 署名したトランザクションを交換し合うことで、 複数回の支払いを高速に安く行う方法 • ブロックチェーンには途中のやり取りを記録しない = オフチェーン •

    前提となる仕組み: ◦ MultiSignature ◦ Lock Time • 種類: ◦ 単方向 Payment Channel ◦ 双方向 Payment Channel ◦ HTCL によるマルチホップ → この応用が Ligntning Network
  10. 単方向 Payment Channel • オープニング Tx ◦ 自分と相手のマルチシグ宛にデポジットする • 払い戻し用

    Tx ◦ デポジットから払い戻せるように相手から署名をつけてもらう ◦ ロックタイム付き ◦ 何もなければ使わない • コミットメント Tx ◦ 支払いのたびに、自分から相手に署名つき Tx を送る ◦ 最終的なものだけブロードキャストする
  11. オープニング Tx in: アリス(署名済) out: マルチシグ 10 BTC 10 BTC

    払い戻し用 Tx in: マルチシグ out: アリス 10 BTC 10 BTC ロックタイム 払い戻し用 Tx in: マルチシグ   (ボブ署名済) out: アリス 10 BTC 10 BTC ロックタイム アリス ボブ オープニング Tx in: アリス(署名済) out: マルチシグ 10 BTC 10 BTC ブロードキャスト
  12. アリス ボブ 最終的なものに 署名してブロードキャスト コミットメント Tx in: マルチシグ   (アリス署名済)

    out: アリス 10 BTC 9 BTC out: ボブ 1 BTC コミットメント Tx in: マルチシグ   (アリス署名済) out: アリス 10 BTC 8 BTC out: ボブ 2 BTC コミットメント Tx in: マルチシグ   (アリス署名済) out: アリス 10 BTC 7 BTC out: ボブ 3 BTC
  13. 参考 • BIP16 : P2SH の仕組み - Yenom開発者ブログ https://developers.yenom.tech/entry/2018/08/18/143918 •

    ビットコインおけるトランザクションスクリプトの仕組みとその種類 https://zoom-blc.com/transaction-script • Script - Bitcoin Wiki https://en.bitcoin.it/wiki/Script • Bitcoinを技術的に理解する https://www.slideshare.net/kenjiurushima/20140602-bitcoin1-201406031222 • ブロックチェーン・プログラミング”, 山崎 重一郎ほか https://www.amazon.co.jp/dp/4061538314/ • 双方向のPayment Channelの仕組み https://techmedia-think.hatenablog.com/entry/2016/08/06/212453