Copyright ©2016 HAW International Inc. all rights reserved.
e-ZUKA Tech Night
Bitcoinのブロックチェーンで
できるコントラクト
2016/08/10
株式会社ハウインターナショナル
安土茂亨
Copyright ©2016 HAW International Inc. all rights reserved.
株式会社ハウインターナショナル
Blockchainに関する取り組み
•共同研究
‣カラードコインの電子投票などへの応用
‣Open Assets Protocolの実装の一つである
openassets-rubyを独自開発しGithubで公開
‣共同研究者
- 近畿大学 産業理工学部 山崎重一郎 教授
● 専門分野:暗号技術など
•製品・サービス開発
‣Congrechain
‣ブロックチェーン実証環境Chaintope
‣Open Assets Explorer
Copyright ©2016 HAW International Inc. all rights reserved.
Blockchainのデータ構造
Block
Transaction Input
Output
Block Block Block
Transaction
Transaction
Input
Output
Output
Output
Output
10 min 10 min 10 min
Copyright ©2016 HAW International Inc. all rights reserved.
Blockchainのデータ構造
Transaction
Input
Output
Input
Output
Output
Transaction
Input
Output
Output
Transaction
Input
Output
Input
Output
Output
Transaction
Input
Input
…
入力は必ず既存のトランザク
ションの出力と1対1になる
入力に使われていない出力(UTXO)が
使用可能なBitcoinの量
Copyright ©2016 HAW International Inc. all rights reserved.
通常のBitcoinの送付
Transaction
Output (3 BTC)Input (5 BTC)
Output (2 BTC)
【Address】
1Kci5….iNbt
【Address】
19XW….VpA
アリス
ボブ
アリスからボブに3 BTCを送付
②署名
③ブロードキャスト
①トランザクションを作成
Copyright ©2016 HAW International Inc. all rights reserved.
アドレスの種類
● P2PKH(Pay to PubKey Hash)
”1”から始まる一般的に利用されるアドレスで、
相手の公開鍵ハッシュへ支払う。
BTCを受け取ったユーザは、公開鍵ハッシュに対応する
秘密鍵を使えばBTCを使用できる。
● P2SH(Pay to Script Hash)
”3”から始まるアドレスで、公開鍵に代わって任意の
スクリプトのハッシュへ支払う。
このBTCを利用するには元のScript(redeem script)を
知り、その解除条件を満たす必要がある。
Copyright ©2016 HAW International Inc. all rights reserved.
Bitcoinで使えるScript
BitcoinにはTransaction内にスタック型のScriptが記述でき、
このScriptを使ってBitcoinの取引を行っている。
P2PKHを使った送金であれば ↓
このロックを解除するのが
● 署名と公開鍵をスタックにPUSH
● OP_DUPでスタックの一番上のアイテム(公開鍵)をコピー
● OP_HASH160で一番上のアイテム(公開鍵)の
RIPMED160(SHA256×2)のハッシュ値を返却
● OP_EQUALVERIFYでさっき計算したハッシュ値とトランザクションの
公開鍵のハッシュが一致するかチェック
● OP_CHECKSIGで署名が公開鍵に対応したものかチェック
OP_DUP OP_HASH160 公開鍵ハッシュ OP_EQUALVERIFY OP_CHECKSIG
公開鍵に対応した秘密鍵による署名 公開鍵
Copyright ©2016 HAW International Inc. all rights reserved.
マルチシグ
Bitcoinを使用する際に複数個の署名を必要とする仕組み。
3人のうち2人の署名があればBitcoinを使用できる
アリス ボブ キャロル
2 アリスの公開鍵 ボブの公開鍵 キャロルの公開鍵 3 CHECKMULTISIG
2-of-3のマルチシグScript
Copyright ©2016 HAW International Inc. all rights reserved.
タイムロック
将来のある時点までBitcoinをロックする仕組み
● OP_CLTV(Check Locktime Verify)
絶対時刻でロックする方法
この出力を指定ブロック高 or 指定時刻までロックする
● OP_CSV(Check Sequence Verify)
相対時間でロックする方法
この出力を持つトランザクションがBlockに含まれてから
○○ブロック経過するまでロックする
Copyright ©2016 HAW International Inc. all rights reserved.
Scriptを組み合わせて作るコントラクト
● 有効期限のあるエスクロー
アリスとボブとエスクローのうち2つの署名があれば、
いつでもBitcoinを利用可能だが、30日経過すると
アリスの署名だけでBitcoinを利用可能になる。
IF
2 <アリスの公開鍵> <ボブの公開鍵> <エスクローの公開鍵> 3 CHECKMULTISIGVERIFY
ELSE
"30d" CHECKSEQUENCEVERIFY DROP
<アリスの公開鍵> CHECKSIGVERIFY
ENDIF
Copyright ©2016 HAW International Inc. all rights reserved.
Scriptを組み合わせて作るコントラクト
● 資金の凍結
● 期間限定クーポン
Open Assets等のアセットと組み合わせて
期間を限定したクーポンアセットを表現
IF
<アリスの公開鍵> CHECKSIGVERIFY
ELSE
"30d" CHECKSEQUENCEVERIFY DROP
<管理者の公開鍵> CHECKSIGVERIFY
ENDIF
<凍結時間> CHECKLOCKTIMEVERIFY DROP DUP HASH160 <所有者の公開
鍵> EQUALVERIFY CHECKSIG
Copyright ©2016 HAW International Inc. all rights reserved.
P2SH(Pay to Script Hash)
<凍結時間> CHECKLOCKTIMEVERIFY DROP DUP HASH160 <所有者の公開
鍵> EQUALVERIFY CHECKSIG
03883e0db1752103e39299dcced3f711fd5042bb491d6351ec38b1e05140817
9ca579f1d7b4ac80bac
c367b99a86f207d6345ff37a32b7001a64fc70f4
シリアライズ
ハッシュ生成
HASH160 c367b99a86f207d6345ff37a32b7001a64fc70f4 EQUAL
P2SHスクリプト作成
3NB4S1dZew1kYzxyikM2T6qEsF2mZ3zCzLk
P2SHアドレス
Copyright ©2016 HAW International Inc. all rights reserved.
Bitcoin 2.0と呼ばれるプロダクトの一種。
Bitcoinに色付けをすることで株式、証券、ユーザ独自通貨等のあらゆる資産
を表現し、Blockchain上でアセットの発行や送付を可能にするプロトコル。
Bitcoinと異なり、発行主体が存在するため債権債務関係などを構成できる。
第三者機関による
オーソリティが必要
Open Assets Protocol
従来の権利の移転
Blockchainにおける権利の移転
Block Block Block
Transaction
Output
Input
第三者機関
ブロードキャスト
署名
Copyright ©2016 HAW International Inc. all rights reserved.
Asset IDによる色付け
色を識別するID = Asset ID(発行者の秘密鍵から生成)
“AJk2Gx5V67S2wNuwTK5hef3TpHunfbjcmX”
Asset Quantity
Asset QuantityでBitcoinとは別にアセットの量を定義
Metadata
アセットに関する定義をJSONで定義
※約款のような位置付け
Open Assets Protocolに登場する概念
Copyright ©2016 HAW International Inc. all rights reserved.
BitcoinのBlockchainの上位Protocol
Transaction
Input
Output
Input
Output
Output
通常のBitcoinのトランザクションにMarker Outputと呼ばれる特殊な出力を
1つ加えることでOpen Assetsのトランザクションになる
OP_RETURN 4f41010001904e00...
Marker Output
OAP Marker 4f41
Version number 0100
Asset quantity count 1
Asset quantity list [ 2000 ]
Metadata length 16
Metadata u=http://goo.gl/fS4mEj
Bitcoinの上位Protocolであるため
Bitcoinの制約を受けるが、
BitcoinのScriptなど機能は
そのまま利用可能
Copyright ©2016 HAW International Inc. all rights reserved.
Bitcoinで作るコントラクト
Bitcoinではコインのロック及びその解除条件を
Scriptとして記述し、コントラクトを表現する。
● マルチシグ
● タイムロック(OP_CLTV、OP_CSV)
● SIGHASH_TYPEによる部分的な署名
● etc...

e-ZUKA Tech Night in 博多! -fin tech特集- Bitcoinのブロックチェーンでできるコントラクト

  • 1.
    Copyright ©2016 HAWInternational Inc. all rights reserved. e-ZUKA Tech Night Bitcoinのブロックチェーンで できるコントラクト 2016/08/10 株式会社ハウインターナショナル 安土茂亨
  • 2.
    Copyright ©2016 HAWInternational Inc. all rights reserved. 株式会社ハウインターナショナル Blockchainに関する取り組み •共同研究 ‣カラードコインの電子投票などへの応用 ‣Open Assets Protocolの実装の一つである openassets-rubyを独自開発しGithubで公開 ‣共同研究者 - 近畿大学 産業理工学部 山崎重一郎 教授 ● 専門分野:暗号技術など •製品・サービス開発 ‣Congrechain ‣ブロックチェーン実証環境Chaintope ‣Open Assets Explorer
  • 3.
    Copyright ©2016 HAWInternational Inc. all rights reserved. Blockchainのデータ構造 Block Transaction Input Output Block Block Block Transaction Transaction Input Output Output Output Output 10 min 10 min 10 min
  • 4.
    Copyright ©2016 HAWInternational Inc. all rights reserved. Blockchainのデータ構造 Transaction Input Output Input Output Output Transaction Input Output Output Transaction Input Output Input Output Output Transaction Input Input … 入力は必ず既存のトランザク ションの出力と1対1になる 入力に使われていない出力(UTXO)が 使用可能なBitcoinの量
  • 5.
    Copyright ©2016 HAWInternational Inc. all rights reserved. 通常のBitcoinの送付 Transaction Output (3 BTC)Input (5 BTC) Output (2 BTC) 【Address】 1Kci5….iNbt 【Address】 19XW….VpA アリス ボブ アリスからボブに3 BTCを送付 ②署名 ③ブロードキャスト ①トランザクションを作成
  • 6.
    Copyright ©2016 HAWInternational Inc. all rights reserved. アドレスの種類 ● P2PKH(Pay to PubKey Hash) ”1”から始まる一般的に利用されるアドレスで、 相手の公開鍵ハッシュへ支払う。 BTCを受け取ったユーザは、公開鍵ハッシュに対応する 秘密鍵を使えばBTCを使用できる。 ● P2SH(Pay to Script Hash) ”3”から始まるアドレスで、公開鍵に代わって任意の スクリプトのハッシュへ支払う。 このBTCを利用するには元のScript(redeem script)を 知り、その解除条件を満たす必要がある。
  • 7.
    Copyright ©2016 HAWInternational Inc. all rights reserved. Bitcoinで使えるScript BitcoinにはTransaction内にスタック型のScriptが記述でき、 このScriptを使ってBitcoinの取引を行っている。 P2PKHを使った送金であれば ↓ このロックを解除するのが ● 署名と公開鍵をスタックにPUSH ● OP_DUPでスタックの一番上のアイテム(公開鍵)をコピー ● OP_HASH160で一番上のアイテム(公開鍵)の RIPMED160(SHA256×2)のハッシュ値を返却 ● OP_EQUALVERIFYでさっき計算したハッシュ値とトランザクションの 公開鍵のハッシュが一致するかチェック ● OP_CHECKSIGで署名が公開鍵に対応したものかチェック OP_DUP OP_HASH160 公開鍵ハッシュ OP_EQUALVERIFY OP_CHECKSIG 公開鍵に対応した秘密鍵による署名 公開鍵
  • 8.
    Copyright ©2016 HAWInternational Inc. all rights reserved. マルチシグ Bitcoinを使用する際に複数個の署名を必要とする仕組み。 3人のうち2人の署名があればBitcoinを使用できる アリス ボブ キャロル 2 アリスの公開鍵 ボブの公開鍵 キャロルの公開鍵 3 CHECKMULTISIG 2-of-3のマルチシグScript
  • 9.
    Copyright ©2016 HAWInternational Inc. all rights reserved. タイムロック 将来のある時点までBitcoinをロックする仕組み ● OP_CLTV(Check Locktime Verify) 絶対時刻でロックする方法 この出力を指定ブロック高 or 指定時刻までロックする ● OP_CSV(Check Sequence Verify) 相対時間でロックする方法 この出力を持つトランザクションがBlockに含まれてから ○○ブロック経過するまでロックする
  • 10.
    Copyright ©2016 HAWInternational Inc. all rights reserved. Scriptを組み合わせて作るコントラクト ● 有効期限のあるエスクロー アリスとボブとエスクローのうち2つの署名があれば、 いつでもBitcoinを利用可能だが、30日経過すると アリスの署名だけでBitcoinを利用可能になる。 IF 2 <アリスの公開鍵> <ボブの公開鍵> <エスクローの公開鍵> 3 CHECKMULTISIGVERIFY ELSE "30d" CHECKSEQUENCEVERIFY DROP <アリスの公開鍵> CHECKSIGVERIFY ENDIF
  • 11.
    Copyright ©2016 HAWInternational Inc. all rights reserved. Scriptを組み合わせて作るコントラクト ● 資金の凍結 ● 期間限定クーポン Open Assets等のアセットと組み合わせて 期間を限定したクーポンアセットを表現 IF <アリスの公開鍵> CHECKSIGVERIFY ELSE "30d" CHECKSEQUENCEVERIFY DROP <管理者の公開鍵> CHECKSIGVERIFY ENDIF <凍結時間> CHECKLOCKTIMEVERIFY DROP DUP HASH160 <所有者の公開 鍵> EQUALVERIFY CHECKSIG
  • 12.
    Copyright ©2016 HAWInternational Inc. all rights reserved. P2SH(Pay to Script Hash) <凍結時間> CHECKLOCKTIMEVERIFY DROP DUP HASH160 <所有者の公開 鍵> EQUALVERIFY CHECKSIG 03883e0db1752103e39299dcced3f711fd5042bb491d6351ec38b1e05140817 9ca579f1d7b4ac80bac c367b99a86f207d6345ff37a32b7001a64fc70f4 シリアライズ ハッシュ生成 HASH160 c367b99a86f207d6345ff37a32b7001a64fc70f4 EQUAL P2SHスクリプト作成 3NB4S1dZew1kYzxyikM2T6qEsF2mZ3zCzLk P2SHアドレス
  • 13.
    Copyright ©2016 HAWInternational Inc. all rights reserved. Bitcoin 2.0と呼ばれるプロダクトの一種。 Bitcoinに色付けをすることで株式、証券、ユーザ独自通貨等のあらゆる資産 を表現し、Blockchain上でアセットの発行や送付を可能にするプロトコル。 Bitcoinと異なり、発行主体が存在するため債権債務関係などを構成できる。 第三者機関による オーソリティが必要 Open Assets Protocol 従来の権利の移転 Blockchainにおける権利の移転 Block Block Block Transaction Output Input 第三者機関 ブロードキャスト 署名
  • 14.
    Copyright ©2016 HAWInternational Inc. all rights reserved. Asset IDによる色付け 色を識別するID = Asset ID(発行者の秘密鍵から生成) “AJk2Gx5V67S2wNuwTK5hef3TpHunfbjcmX” Asset Quantity Asset QuantityでBitcoinとは別にアセットの量を定義 Metadata アセットに関する定義をJSONで定義 ※約款のような位置付け Open Assets Protocolに登場する概念
  • 15.
    Copyright ©2016 HAWInternational Inc. all rights reserved. BitcoinのBlockchainの上位Protocol Transaction Input Output Input Output Output 通常のBitcoinのトランザクションにMarker Outputと呼ばれる特殊な出力を 1つ加えることでOpen Assetsのトランザクションになる OP_RETURN 4f41010001904e00... Marker Output OAP Marker 4f41 Version number 0100 Asset quantity count 1 Asset quantity list [ 2000 ] Metadata length 16 Metadata u=http://goo.gl/fS4mEj Bitcoinの上位Protocolであるため Bitcoinの制約を受けるが、 BitcoinのScriptなど機能は そのまま利用可能
  • 16.
    Copyright ©2016 HAWInternational Inc. all rights reserved. Bitcoinで作るコントラクト Bitcoinではコインのロック及びその解除条件を Scriptとして記述し、コントラクトを表現する。 ● マルチシグ ● タイムロック(OP_CLTV、OP_CSV) ● SIGHASH_TYPEによる部分的な署名 ● etc...