SlideShare a Scribd company logo
1 of 20
Download to read offline
Copyright ©2017 HAW International Inc. all rights reserved.
福岡ブロックチェーンエコノミー勉強会 in 東京
カラードコインの作り方
2017 / 09 / 27
株式会社ハウインターナショナル
安土 茂亨
Copyright ©2017 HAW International Inc. all rights reserved.
ハウインターナショナル
•Blockchainに関する取り組み
‣2nd Layer技術を中心に研究開発
‣Open Assets Protocolの実装の一つである
openassets-rubyを実装
https://github.com/haw-itn/openassets-ruby
‣BitcoinプロトコルのRuby実装(WIP)
https://github.com/haw-itn/bitcoinrb
•製品・サービス開発
‣Congrechain
‣ブロックチェーンPoC
‣Open Assets Explorer
Copyright ©2017 HAW International Inc. all rights reserved.
カラードコインとは?
ブロックチェーン上で任意のアセットを発行し、信頼できる
第三者機関を必要とせず、アセットを転々流通させることが
できる仕組み。Bitcoinとは異なり、発行主体が存在する。
Open Assets Protocol
Elements
Confidential Assets
Copyright ©2017 HAW International Inc. all rights reserved.
カラードコインの設計に必要な技術要素
● アセットの識別子
発行された任意のアセットを識別するためのユニークな
識別子の管理とアセットへのリンク
● アセットの量
トランザクションで任意のアセットの取引を行うことができ、
その総量が保証される
● アセットの発行パターン(追加発行の有無)
● アセットに関するメタデータとのリンク(オプション)
Copyright ©2017 HAW International Inc. all rights reserved.
カラードコインの実装方法
● オーバーレイ型
既存のトランザクションにOP_RETURNでメタデータを埋め込むことでBitcoin
以外のアセットを表現する実装方法。
通常のBitconのノードから見ると、メタデータが付いているだけのBitcoinの
送金に見え、コンセンサスルールではアセットについて関与しないため、仕様上
無効なトランザクションをブロードキャストできてしまう。
● ネイティブ型
Bitcoinと同様、ネイティブにアセットを取り扱い、コンセンサスルールにも組み
込まれる。コンセンサスルールに組み込まれているため、無効なトランザクショ
ンを作ってもトランザクションの検証に失敗し、ブロードキャストはできない。
Copyright ©2017 HAW International Inc. all rights reserved.
Open Assets Protocolの実装パターン
Copyright ©2017 HAW International Inc. all rights reserved.
Asset
Asset
トランザクションをオーバーレイ
Transaction
Version
Inputs
...
Outputs
Output 1
Marker Output
Output 2
Output 3
Locktime
オーバーレイ型の実装では、トランザクションを
カラーリングされたトランザクションとして識別できる
ような仕組みを導入するが、Bitcoinのノードからみる
と、その実体はあくまで普通のBitcoinのトランザクショ
ンになる。
アセットの送付先はBitcoinと同様、トランザクションのア
ウトプット単位で制御する。Bitcoinのアウトプットには必
ず少額のBitcoinもセットされており、そのBitcoinの量と
は別にアセットの量をオーバーレイする。
※ Bitcoinの量が0だとUTXOとして認識されないため
カラーリングされたトランザクションがカラーリングされていることは、
そのプロトコルに対応したノード/ウォレットでしか認識できない。
Copyright ©2017 HAW International Inc. all rights reserved.
オーバーレイに必要なOP_RETURN
BitcoinのトランザクションのアウトプットにはscriptPubkeyと呼ばれる、
コインのロック条件を記述したスクリプトがセットされている。
一般的なBitcoinを送金するP2PKHのスクリプト
OP_RETURNはスクリプトのOPCODEの1つで、この後ろに任意のデータ
(最大80バイト)をプッシュできる。
※基本的にはトランザクションに付き1つまでで、複数あると非標準トランザクションとみなされ大半
のノードはリレーしない。
scriptPubkeyにOP_RETURNを使うとそのアウトプットは無効なアウトプット
(コインを含まない)として解釈され、ブロックチェーンには記録されるが、
UTXOとしては使用できない。
任意のデータを記録できるOP_RETURNを使って拡張レイヤーを構築する
OP_DUP OP_HASH160 公開鍵ハッシュ OP_EQUALVERIFY OP_CHECKSIG
scriptPubKey
OP_RETURN <任意のデータ>
Copyright ©2017 HAW International Inc. all rights reserved.
Open Assets Protocolのトランザクションには必ず
Marker Outputと呼ばれる特殊な出力が1つ含まれ、
Open Assets Payloadが格納されている。
アセットの量の管理
Transaction
Version
Inputs
...
Outputs
Output 1
Marker Output
Output 2
Locktime
OP_RETURN <Open Assets Payload>
フィールド サイズ 内容
OAP Marker 2バイト Open Assets Protocolの出力であることを示すマーカーで、0x4f41を指定
Version 2バイト Open Assets Protocolのバージョン番号(0x0100)
Asset Quantityの数 1-9バイト Asset Quantityリスト内のアイテム数
Asset Quantityリスト 可変 トランザクションで送付されるアセットの量(LEB128でエンコード)
メタデータの長さ 1-9バイト メタデータの長さ
メタデータ 可変 任意のメタデータ(Asset Definition Pointer等を指定)
※OP_RETURNは任意の80バイトのデータを記録できるスクリプト
Open Assets Payloadで、このトランザクションの各アウトプットに割り当てるアセットの数が決まる。
OP_RETURN 4f41010001e80700
このトランザクションで取引されるアセットの数は1000個で
最初のアウトプットにその量が割当られる
(例)
※ 定義されているのは量のみで、そのAsset IDについてはここでは明示的に定義されていない。
Copyright ©2017 HAW International Inc. all rights reserved.
アセットの発行と送付の識別
Transaction
Version
Inputs
...
Outputs
Marker Output
Output 1
Output 2
Locktime
Marker Outputの位置でアセットの発行と送付のアウトプットを制御
Transaction
Version
Inputs
...
Outputs
Output 1
Marker Output
Output 2
Locktime
アセット発行Tx アセット送付Tx
アセット発行用のアウトプット
アセット送付用のアウトプット
あるアセットの新規発行と別のアセットの送付を1トランザクションで行うことも可能
Copyright ©2017 HAW International Inc. all rights reserved.
Asset IDの算出方法
Transaction
Version
Inputs
Input 1
Outputs
Marker Output
Output 1
Output 2
Locktime
Transaction
Version
Inputs
Input 1
Input 2
Outputs
Marker Output
Output 1
Output 2
Output 3
Locktime
Transaction
Version
Inputs
Input 1
Input 2
Outputs
Output 1
Marker Output
Output 2
Locktime
Transaction
Version
Inputs
Input 1
...
Outputs
Output 1
Output 2
Locktime
アセット送付Tx
アセット送付Tx
アセット発行Tx
アセットの識別子となるAsset IDは発行Txまで遡り
その入力が参照するアウトプットのscriptPubkeyから計算される
scriptPubkey
scriptPubkeyをHASH160し、エンコードしたものが Asset ID
Copyright ©2017 HAW International Inc. all rights reserved.
order based coloring
トランザクションの各インプットが保持しているアセットを、Marker Outputに定義
されている数だけ、順番に各アウトプットに割り当てる方法。
Inputs
Input 0
Asset Quantity : 3
Asset ID : A1
Input 1
Asset Quantity : 2
Asset ID : A1
Input 2
Asset Quantity : N/A
Asset ID : N/A
Input 3
Asset Quantity : 3
Asset ID : A1
Input 4
Asset Quantity : 3
Asset ID : A2
Marker Outputに定義されているAsset Quantity:[10, 4, 4, 1, 2]
Outputs
Output 0
Asset Quantity : 10
Asset ID : A3
Output 1 ( Marker )
Asset Quantity : N/A
Asset ID : N/A
Output 2
Asset Quantity : 4
Asset ID : A1
Output 3
Asset Quantity : 4
Asset ID : A1
Output 4
Asset Quantity : 1
Asset ID : A2
Output 4
Asset Quantity : 2
Asset ID : A2
新規発行アセット
Copyright ©2017 HAW International Inc. all rights reserved.
Asset Definition Pointer
OP_RETURN <Open Assets Payload>
トランザクションにはアセットに関するメタデータ(名称、アセットの定義、アイコ
ン、約款など)を十分に定義できるスペースは無いため、アセットのメタデータを
定義したファイルのポインターを、アセットを新規発行するトランザクションの
Open Assets Payloadのメタデータフィールドにセットする。
OP_RETURN 4f410100016417753d68747470733a2f2f676f6f2e676c2f75617043734a
u=https://goo.gl/uapCsJ
各ウォレットやノードは、アセット発行トランザクションの
メタデータをパースして、アセットの情報を表示する。
Copyright ©2017 HAW International Inc. all rights reserved.
Open Assets Protocolの実装方法
Open Assets Protocolでは、取引するアセットの量と各アウトプットへ
の割当をMarker Outputで行い、アセットの識別子は発行Txまで遡って
計算することで、アセットの量と識別子を管理している。
【メリット】
● トランザクションに最大80バイトのMarker Outputを挿入するだけなのでとて
もデータ効率が良い。(OP_RETURNなのでUTXOとしても管理されない)
● シンプルなプロトコルで各アウトプットには任意のBitcoin Scriptを使用でき
るため、BitcoinのScriptで実装できるコントラクトは、そのままセットにも適用
できる(Atomic SwapやPayment Channelなど)。
【デメリット】
● 各アウトプットの割り当てられているAsset IDを知るためには、アセットの発
行トランザクションまで辿る必要があるため、SPVでは実装できない。
● Bitcoinのコンセンサスルールとは関係ないため、アセットにとって無効なトラ
ンザクションもブロードキャストでき、その保護は各ノード/ウォレットが負う。
Copyright ©2017 HAW International Inc. all rights reserved.
ソフトフォークによるネイティブ実装
Copyright ©2017 HAW International Inc. all rights reserved.
ソフトフォークでカラードコインを実装
Johnson Lau氏によるBitcoinをソフトフォークしてカラードコインに対応する提案
https://github.com/jl2012/bips/blob/color/bip-color.mediawiki
【参照実装】
https://github.com/jl2012/bitcoin/commits/color
※ Tweetにあるように、おそらく導入されることはないと思われる。
これからのスライドはその前提でソフトフォークで実装するとした場合の話。
Copyright ©2017 HAW International Inc. all rights reserved.
Color Commitmentとアウトプットの拡張
Transaction
Version = 3
Inputs
...
Outputs
Color commitment
...
Locktime
<header> <color tag> <bit field>
フィールド サイズ 内容
header 4バイト OP_RETURN OP_PUSHDATA2 0x85 0xad
color tag 32バイト このコミットメントの対象となるcolorの識別子
bit field 可変 トランザクション内のどのアウトプットが
カラーリングされたアウトプットか示すビット列
アセットを送付するトランザクションには、必ずcolor識別子
ごとのColor Commitmentアウトプットが含まれる。
Output
value
scriptPubkey
Output
value
scriptPubkey
color
トランザクションのアウトプットの
構造に color 識別子を表す
256 bit のcolorフィールドを追加
既存のアウトプット構造
各アウトプットにアセットの識別子がセットされるため、出力のアセットが何なのかアウトプットのみで判断できる。
結果SPVノードでもアセットを識別できるようになる。
Copyright ©2017 HAW International Inc. all rights reserved.
アセットの発行と識別子
Input
scriptSig
sequence
OutPoint(txid, index)
sequenceフィールドをビット列として扱い、23番目と24番目
のビットでアセットの発行/送付、発行タイプを識別する。
● 23 番目のみビットがセットされている場合
追加発行が可能なアセットの新規発行を意味する。アセットの識別子は
ダブルSHA256(0x00008000 + 入力が参照するUTXOのscriptPubkey)
識別子がscriptPubkeyで構成されるため、同じscriptPubkeyを使えば、
同じ識別子のアセットが発行できる。
● 24 番目のみビットがセットされている場合
追加発行が不可能な不可能なアセットの新規発行を意味する。アセットの識別子
は、
ダブルSHA256(0x00000001 + 入力が参照するUTXOのOutPoint)
識別子がOutPointで構成されるため、一度発行したら、二度と同じ識別子の
アセットは発行できないことが保証される。
● 23番目と24番目両方のビットがセットされている場合
アセットの送付を意味し、この入力のアセットの識別子は、入力が参照する
アウトプットが持つ識別子になる。
"00000001000000000000000000000000"
0x80000000
"00000000100000000000000000000000"
0x00010000
"00000001100000000000000000000000"
0x80010000
Copyright ©2017 HAW International Inc. all rights reserved.
コンセンサスルールの追加
トランザクションのversionが3以上の場合、以下のチェックに引っかかるトランザク
ションは無効なトランザクションとしてブロックチェーンに組み入れられることはない。
● インプットのアセット数よりアウトプットのアセット数多くないか
● color commitmentにアセットが割り当てられていないか
● color commitmentのデータ長やcolor tag、bit fieldの範囲が不正でないか
● 1アウトプットに複数のアセットが割り当てられていないか
● インプットにアセットがないのに、アセットを送付するbitがセットされていないか
● インプットにアセットがあるのに、新規発行のbitがセットされていないか
● コインベースのアセット手数料が、ブロック内のアセット手数料を超えていない
か
( アセットも手数料としてマイナーが収集することも可能)
Copyright ©2017 HAW International Inc. all rights reserved.
ネイティブの実装方法
ネイティブの実装では、トランザクションの各アウトプットのvalueでアセッ
トの量を、アセットの識別子はアウトプットにcolorフィールドを追加して、
それぞれ管理する。
【メリット】
● 各アウトプットにアセットの識別子がセットされるため、SPVノードでもアセッ
トを扱うことができる。
● コンセンサスルールでアセットの検証も行われるため、無効なトランザクショ
ンがブロックチェーンに格納されることなく、ノードレベルで事前にチェックが
できる。
【デメリット】
● 各アウトプットにcolorフィールド(32バイト)が設けられ、データスペースを消
費する。
● アセットのメタデータを定義する仕様は無い。

More Related Content

What's hot

Secrets of Izna
Secrets of IznaSecrets of Izna
Secrets of Izna
nyaxt
 

What's hot (20)

Bitcoinを技術的に理解する
Bitcoinを技術的に理解するBitcoinを技術的に理解する
Bitcoinを技術的に理解する
 
[2020.08.28 銀座Rails #24]Rails で Distributed Tracing をやる
[2020.08.28 銀座Rails #24]Rails で Distributed Tracing をやる[2020.08.28 銀座Rails #24]Rails で Distributed Tracing をやる
[2020.08.28 銀座Rails #24]Rails で Distributed Tracing をやる
 
データベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみたデータベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみた
 
JNSA Bitcoin 勉強会 佐藤 20140602
JNSA Bitcoin 勉強会 佐藤 20140602JNSA Bitcoin 勉強会 佐藤 20140602
JNSA Bitcoin 勉強会 佐藤 20140602
 
ビットコイン~原理からソースまで~
ビットコイン~原理からソースまで~ビットコイン~原理からソースまで~
ビットコイン~原理からソースまで~
 
5分でわかるブロックチェーンの基本的な仕組み
5分でわかるブロックチェーンの基本的な仕組み5分でわかるブロックチェーンの基本的な仕組み
5分でわかるブロックチェーンの基本的な仕組み
 
ブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocolブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocol
 
ブロックチェーンの仕組みと動向(入門編)
ブロックチェーンの仕組みと動向(入門編)ブロックチェーンの仕組みと動向(入門編)
ブロックチェーンの仕組みと動向(入門編)
 
Bitcoin x javascript
Bitcoin x javascriptBitcoin x javascript
Bitcoin x javascript
 
分散型台帳技術Orb DLTの紹介
分散型台帳技術Orb DLTの紹介分散型台帳技術Orb DLTの紹介
分散型台帳技術Orb DLTの紹介
 
ブロックチェーン技術の基本と応用の可能性
ブロックチェーン技術の基本と応用の可能性ブロックチェーン技術の基本と応用の可能性
ブロックチェーン技術の基本と応用の可能性
 
電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)
 
Congre chain説明資料
Congre chain説明資料Congre chain説明資料
Congre chain説明資料
 
Deconstruction of Serverless and blockchain
Deconstruction of Serverless and blockchainDeconstruction of Serverless and blockchain
Deconstruction of Serverless and blockchain
 
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
 
Orb 仮想通貨・地域通貨ソリューション
Orb 仮想通貨・地域通貨ソリューションOrb 仮想通貨・地域通貨ソリューション
Orb 仮想通貨・地域通貨ソリューション
 
ビットコインで使われている暗号の基礎を学ぶ
ビットコインで使われている暗号の基礎を学ぶビットコインで使われている暗号の基礎を学ぶ
ビットコインで使われている暗号の基礎を学ぶ
 
Secrets of Izna
Secrets of IznaSecrets of Izna
Secrets of Izna
 
ブロックチェーンの解説 In.live ppt
ブロックチェーンの解説 In.live pptブロックチェーンの解説 In.live ppt
ブロックチェーンの解説 In.live ppt
 
徹底サーベイ : デジタル通貨の15年
徹底サーベイ : デジタル通貨の15年徹底サーベイ : デジタル通貨の15年
徹底サーベイ : デジタル通貨の15年
 

Similar to 福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」

Similar to 福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」 (20)

201711 OpenStack Summit Sydney Report
201711 OpenStack Summit Sydney Report201711 OpenStack Summit Sydney Report
201711 OpenStack Summit Sydney Report
 
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
AWS SDK for Smalltalk
AWS SDK for SmalltalkAWS SDK for Smalltalk
AWS SDK for Smalltalk
 
.NETの自作ツール公開手段
.NETの自作ツール公開手段.NETの自作ツール公開手段
.NETの自作ツール公開手段
 
金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG
金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG
金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG
 
AnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + αAnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + α
 
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
 
Hyperledger Fabric 1.0 概要
Hyperledger Fabric 1.0 概要Hyperledger Fabric 1.0 概要
Hyperledger Fabric 1.0 概要
 
OSSで作る機械学習を用いたペネトレーションテストツール
OSSで作る機械学習を用いたペネトレーションテストツールOSSで作る機械学習を用いたペネトレーションテストツール
OSSで作る機械学習を用いたペネトレーションテストツール
 
第2回すだちくん勉強会におけるIoT最新動向と題したプレゼン資料
第2回すだちくん勉強会におけるIoT最新動向と題したプレゼン資料第2回すだちくん勉強会におけるIoT最新動向と題したプレゼン資料
第2回すだちくん勉強会におけるIoT最新動向と題したプレゼン資料
 
OpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナー
OpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナーOpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナー
OpenStack Summit Sydney Report (NEC鳥居) - OpenStack最新情報セミナー
 
LoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオンLoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオン
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
OpenStack環境構築入門 - OpenStack最新情報セミナー 2014年6月
OpenStack環境構築入門 - OpenStack最新情報セミナー 2014年6月OpenStack環境構築入門 - OpenStack最新情報セミナー 2014年6月
OpenStack環境構築入門 - OpenStack最新情報セミナー 2014年6月
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
OpenStack API
OpenStack APIOpenStack API
OpenStack API
 
エンタープライズソフトウェア開発とOSS
エンタープライズソフトウェア開発とOSSエンタープライズソフトウェア開発とOSS
エンタープライズソフトウェア開発とOSS
 
IETF96 Update oauth tokbind
IETF96 Update oauth tokbindIETF96 Update oauth tokbind
IETF96 Update oauth tokbind
 
Contiv
ContivContiv
Contiv
 

Recently uploaded

Recently uploaded (7)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」

  • 1. Copyright ©2017 HAW International Inc. all rights reserved. 福岡ブロックチェーンエコノミー勉強会 in 東京 カラードコインの作り方 2017 / 09 / 27 株式会社ハウインターナショナル 安土 茂亨
  • 2. Copyright ©2017 HAW International Inc. all rights reserved. ハウインターナショナル •Blockchainに関する取り組み ‣2nd Layer技術を中心に研究開発 ‣Open Assets Protocolの実装の一つである openassets-rubyを実装 https://github.com/haw-itn/openassets-ruby ‣BitcoinプロトコルのRuby実装(WIP) https://github.com/haw-itn/bitcoinrb •製品・サービス開発 ‣Congrechain ‣ブロックチェーンPoC ‣Open Assets Explorer
  • 3. Copyright ©2017 HAW International Inc. all rights reserved. カラードコインとは? ブロックチェーン上で任意のアセットを発行し、信頼できる 第三者機関を必要とせず、アセットを転々流通させることが できる仕組み。Bitcoinとは異なり、発行主体が存在する。 Open Assets Protocol Elements Confidential Assets
  • 4. Copyright ©2017 HAW International Inc. all rights reserved. カラードコインの設計に必要な技術要素 ● アセットの識別子 発行された任意のアセットを識別するためのユニークな 識別子の管理とアセットへのリンク ● アセットの量 トランザクションで任意のアセットの取引を行うことができ、 その総量が保証される ● アセットの発行パターン(追加発行の有無) ● アセットに関するメタデータとのリンク(オプション)
  • 5. Copyright ©2017 HAW International Inc. all rights reserved. カラードコインの実装方法 ● オーバーレイ型 既存のトランザクションにOP_RETURNでメタデータを埋め込むことでBitcoin 以外のアセットを表現する実装方法。 通常のBitconのノードから見ると、メタデータが付いているだけのBitcoinの 送金に見え、コンセンサスルールではアセットについて関与しないため、仕様上 無効なトランザクションをブロードキャストできてしまう。 ● ネイティブ型 Bitcoinと同様、ネイティブにアセットを取り扱い、コンセンサスルールにも組み 込まれる。コンセンサスルールに組み込まれているため、無効なトランザクショ ンを作ってもトランザクションの検証に失敗し、ブロードキャストはできない。
  • 6. Copyright ©2017 HAW International Inc. all rights reserved. Open Assets Protocolの実装パターン
  • 7. Copyright ©2017 HAW International Inc. all rights reserved. Asset Asset トランザクションをオーバーレイ Transaction Version Inputs ... Outputs Output 1 Marker Output Output 2 Output 3 Locktime オーバーレイ型の実装では、トランザクションを カラーリングされたトランザクションとして識別できる ような仕組みを導入するが、Bitcoinのノードからみる と、その実体はあくまで普通のBitcoinのトランザクショ ンになる。 アセットの送付先はBitcoinと同様、トランザクションのア ウトプット単位で制御する。Bitcoinのアウトプットには必 ず少額のBitcoinもセットされており、そのBitcoinの量と は別にアセットの量をオーバーレイする。 ※ Bitcoinの量が0だとUTXOとして認識されないため カラーリングされたトランザクションがカラーリングされていることは、 そのプロトコルに対応したノード/ウォレットでしか認識できない。
  • 8. Copyright ©2017 HAW International Inc. all rights reserved. オーバーレイに必要なOP_RETURN BitcoinのトランザクションのアウトプットにはscriptPubkeyと呼ばれる、 コインのロック条件を記述したスクリプトがセットされている。 一般的なBitcoinを送金するP2PKHのスクリプト OP_RETURNはスクリプトのOPCODEの1つで、この後ろに任意のデータ (最大80バイト)をプッシュできる。 ※基本的にはトランザクションに付き1つまでで、複数あると非標準トランザクションとみなされ大半 のノードはリレーしない。 scriptPubkeyにOP_RETURNを使うとそのアウトプットは無効なアウトプット (コインを含まない)として解釈され、ブロックチェーンには記録されるが、 UTXOとしては使用できない。 任意のデータを記録できるOP_RETURNを使って拡張レイヤーを構築する OP_DUP OP_HASH160 公開鍵ハッシュ OP_EQUALVERIFY OP_CHECKSIG scriptPubKey OP_RETURN <任意のデータ>
  • 9. Copyright ©2017 HAW International Inc. all rights reserved. Open Assets Protocolのトランザクションには必ず Marker Outputと呼ばれる特殊な出力が1つ含まれ、 Open Assets Payloadが格納されている。 アセットの量の管理 Transaction Version Inputs ... Outputs Output 1 Marker Output Output 2 Locktime OP_RETURN <Open Assets Payload> フィールド サイズ 内容 OAP Marker 2バイト Open Assets Protocolの出力であることを示すマーカーで、0x4f41を指定 Version 2バイト Open Assets Protocolのバージョン番号(0x0100) Asset Quantityの数 1-9バイト Asset Quantityリスト内のアイテム数 Asset Quantityリスト 可変 トランザクションで送付されるアセットの量(LEB128でエンコード) メタデータの長さ 1-9バイト メタデータの長さ メタデータ 可変 任意のメタデータ(Asset Definition Pointer等を指定) ※OP_RETURNは任意の80バイトのデータを記録できるスクリプト Open Assets Payloadで、このトランザクションの各アウトプットに割り当てるアセットの数が決まる。 OP_RETURN 4f41010001e80700 このトランザクションで取引されるアセットの数は1000個で 最初のアウトプットにその量が割当られる (例) ※ 定義されているのは量のみで、そのAsset IDについてはここでは明示的に定義されていない。
  • 10. Copyright ©2017 HAW International Inc. all rights reserved. アセットの発行と送付の識別 Transaction Version Inputs ... Outputs Marker Output Output 1 Output 2 Locktime Marker Outputの位置でアセットの発行と送付のアウトプットを制御 Transaction Version Inputs ... Outputs Output 1 Marker Output Output 2 Locktime アセット発行Tx アセット送付Tx アセット発行用のアウトプット アセット送付用のアウトプット あるアセットの新規発行と別のアセットの送付を1トランザクションで行うことも可能
  • 11. Copyright ©2017 HAW International Inc. all rights reserved. Asset IDの算出方法 Transaction Version Inputs Input 1 Outputs Marker Output Output 1 Output 2 Locktime Transaction Version Inputs Input 1 Input 2 Outputs Marker Output Output 1 Output 2 Output 3 Locktime Transaction Version Inputs Input 1 Input 2 Outputs Output 1 Marker Output Output 2 Locktime Transaction Version Inputs Input 1 ... Outputs Output 1 Output 2 Locktime アセット送付Tx アセット送付Tx アセット発行Tx アセットの識別子となるAsset IDは発行Txまで遡り その入力が参照するアウトプットのscriptPubkeyから計算される scriptPubkey scriptPubkeyをHASH160し、エンコードしたものが Asset ID
  • 12. Copyright ©2017 HAW International Inc. all rights reserved. order based coloring トランザクションの各インプットが保持しているアセットを、Marker Outputに定義 されている数だけ、順番に各アウトプットに割り当てる方法。 Inputs Input 0 Asset Quantity : 3 Asset ID : A1 Input 1 Asset Quantity : 2 Asset ID : A1 Input 2 Asset Quantity : N/A Asset ID : N/A Input 3 Asset Quantity : 3 Asset ID : A1 Input 4 Asset Quantity : 3 Asset ID : A2 Marker Outputに定義されているAsset Quantity:[10, 4, 4, 1, 2] Outputs Output 0 Asset Quantity : 10 Asset ID : A3 Output 1 ( Marker ) Asset Quantity : N/A Asset ID : N/A Output 2 Asset Quantity : 4 Asset ID : A1 Output 3 Asset Quantity : 4 Asset ID : A1 Output 4 Asset Quantity : 1 Asset ID : A2 Output 4 Asset Quantity : 2 Asset ID : A2 新規発行アセット
  • 13. Copyright ©2017 HAW International Inc. all rights reserved. Asset Definition Pointer OP_RETURN <Open Assets Payload> トランザクションにはアセットに関するメタデータ(名称、アセットの定義、アイコ ン、約款など)を十分に定義できるスペースは無いため、アセットのメタデータを 定義したファイルのポインターを、アセットを新規発行するトランザクションの Open Assets Payloadのメタデータフィールドにセットする。 OP_RETURN 4f410100016417753d68747470733a2f2f676f6f2e676c2f75617043734a u=https://goo.gl/uapCsJ 各ウォレットやノードは、アセット発行トランザクションの メタデータをパースして、アセットの情報を表示する。
  • 14. Copyright ©2017 HAW International Inc. all rights reserved. Open Assets Protocolの実装方法 Open Assets Protocolでは、取引するアセットの量と各アウトプットへ の割当をMarker Outputで行い、アセットの識別子は発行Txまで遡って 計算することで、アセットの量と識別子を管理している。 【メリット】 ● トランザクションに最大80バイトのMarker Outputを挿入するだけなのでとて もデータ効率が良い。(OP_RETURNなのでUTXOとしても管理されない) ● シンプルなプロトコルで各アウトプットには任意のBitcoin Scriptを使用でき るため、BitcoinのScriptで実装できるコントラクトは、そのままセットにも適用 できる(Atomic SwapやPayment Channelなど)。 【デメリット】 ● 各アウトプットの割り当てられているAsset IDを知るためには、アセットの発 行トランザクションまで辿る必要があるため、SPVでは実装できない。 ● Bitcoinのコンセンサスルールとは関係ないため、アセットにとって無効なトラ ンザクションもブロードキャストでき、その保護は各ノード/ウォレットが負う。
  • 15. Copyright ©2017 HAW International Inc. all rights reserved. ソフトフォークによるネイティブ実装
  • 16. Copyright ©2017 HAW International Inc. all rights reserved. ソフトフォークでカラードコインを実装 Johnson Lau氏によるBitcoinをソフトフォークしてカラードコインに対応する提案 https://github.com/jl2012/bips/blob/color/bip-color.mediawiki 【参照実装】 https://github.com/jl2012/bitcoin/commits/color ※ Tweetにあるように、おそらく導入されることはないと思われる。 これからのスライドはその前提でソフトフォークで実装するとした場合の話。
  • 17. Copyright ©2017 HAW International Inc. all rights reserved. Color Commitmentとアウトプットの拡張 Transaction Version = 3 Inputs ... Outputs Color commitment ... Locktime <header> <color tag> <bit field> フィールド サイズ 内容 header 4バイト OP_RETURN OP_PUSHDATA2 0x85 0xad color tag 32バイト このコミットメントの対象となるcolorの識別子 bit field 可変 トランザクション内のどのアウトプットが カラーリングされたアウトプットか示すビット列 アセットを送付するトランザクションには、必ずcolor識別子 ごとのColor Commitmentアウトプットが含まれる。 Output value scriptPubkey Output value scriptPubkey color トランザクションのアウトプットの 構造に color 識別子を表す 256 bit のcolorフィールドを追加 既存のアウトプット構造 各アウトプットにアセットの識別子がセットされるため、出力のアセットが何なのかアウトプットのみで判断できる。 結果SPVノードでもアセットを識別できるようになる。
  • 18. Copyright ©2017 HAW International Inc. all rights reserved. アセットの発行と識別子 Input scriptSig sequence OutPoint(txid, index) sequenceフィールドをビット列として扱い、23番目と24番目 のビットでアセットの発行/送付、発行タイプを識別する。 ● 23 番目のみビットがセットされている場合 追加発行が可能なアセットの新規発行を意味する。アセットの識別子は ダブルSHA256(0x00008000 + 入力が参照するUTXOのscriptPubkey) 識別子がscriptPubkeyで構成されるため、同じscriptPubkeyを使えば、 同じ識別子のアセットが発行できる。 ● 24 番目のみビットがセットされている場合 追加発行が不可能な不可能なアセットの新規発行を意味する。アセットの識別子 は、 ダブルSHA256(0x00000001 + 入力が参照するUTXOのOutPoint) 識別子がOutPointで構成されるため、一度発行したら、二度と同じ識別子の アセットは発行できないことが保証される。 ● 23番目と24番目両方のビットがセットされている場合 アセットの送付を意味し、この入力のアセットの識別子は、入力が参照する アウトプットが持つ識別子になる。 "00000001000000000000000000000000" 0x80000000 "00000000100000000000000000000000" 0x00010000 "00000001100000000000000000000000" 0x80010000
  • 19. Copyright ©2017 HAW International Inc. all rights reserved. コンセンサスルールの追加 トランザクションのversionが3以上の場合、以下のチェックに引っかかるトランザク ションは無効なトランザクションとしてブロックチェーンに組み入れられることはない。 ● インプットのアセット数よりアウトプットのアセット数多くないか ● color commitmentにアセットが割り当てられていないか ● color commitmentのデータ長やcolor tag、bit fieldの範囲が不正でないか ● 1アウトプットに複数のアセットが割り当てられていないか ● インプットにアセットがないのに、アセットを送付するbitがセットされていないか ● インプットにアセットがあるのに、新規発行のbitがセットされていないか ● コインベースのアセット手数料が、ブロック内のアセット手数料を超えていない か ( アセットも手数料としてマイナーが収集することも可能)
  • 20. Copyright ©2017 HAW International Inc. all rights reserved. ネイティブの実装方法 ネイティブの実装では、トランザクションの各アウトプットのvalueでアセッ トの量を、アセットの識別子はアウトプットにcolorフィールドを追加して、 それぞれ管理する。 【メリット】 ● 各アウトプットにアセットの識別子がセットされるため、SPVノードでもアセッ トを扱うことができる。 ● コンセンサスルールでアセットの検証も行われるため、無効なトランザクショ ンがブロックチェーンに格納されることなく、ノードレベルで事前にチェックが できる。 【デメリット】 ● 各アウトプットにcolorフィールド(32バイト)が設けられ、データスペースを消 費する。 ● アセットのメタデータを定義する仕様は無い。