2018.10.15

Wormhole — BCH smart contract


次世代システム研究室のL.Wです。今回は、ビットコインキャッシュのブロックチェーンをベースに、ICOやスマートコントラクトを実現できるワームホール(Wormhole)プロトコールについて詳しく紹介させて頂きます。

アウトライン

  • 専門用語の説明
  • Wormholeプロジェクトの背景
  • 基本原理と実装方法
  • セキュリティとコンセンサス
  • 基本通貨Wormhole Cash(WHC)
  • Wormholeプロトコールの規範
  • WHCの発行
  • トークンの発行
  • トークンの送金
  • Wormholeのロードマップ
  • Wormholeの現状と展望
  • まとめ

専門用語の説明

  1. OP_RETURN:Bitcoin Cashプロトコールの一つのオペコードとなり、このオペコードのトランザクションのアウトプットは永遠に払われていない(Unspendable)。ビットコインキャッシュのノードはこの種のトランザクションのアウトプットを検知し、UTXOリストから除外できるので、UTXOが膨らむ恐れがないです。2018年5月にBCHバージョンアップは実施されてから220バイトの長さの拡張に至りました。
  2. Wormholeプロトコール:Omni Layerのもとで実現できたBitcoin Cashブロックチェーンでトークン発行(ICO)、スマートコントラクトのプラットフォームです。
  3. Wormhole Cash:Wormholeプロトコールでの基本通貨となり、略称は”WHC”です。

Wormholeプロジェクトの背景

EthereumでいうERC20トークンプロトコールのような、各自がトークン発行できる仕組みをBitcoin Cashのチェーンでも作ろうと多くの開発者たちが取り組んでいます。例えば、Colored-Coinsの案とAndrew StoneのEnable representative tokens via OP_GROUP on Bitcoin Cashの案がありました。Andrew Stoneさんの案では、新規にOP_GROUPというオペコードを追加しトークン発行機能を実現することですが、この1次レイヤーでの変更はコンセンサス自体のアップグレードを必要とするので、どうしても論争になりがちでなかなか実現しません。
もちろん、この論争のおかげでセキュリティやプロトコールの安全性は担保されているのですが、イノベーションのあるプロトコールを現実に落とすには極めて困難となります。

ということでBitmain社が率いるWormhole が着目したのが、Omni Layerという、OP_RETURNを通じてトークン発行を実現するプロトコールです。Omni Layerの活用事例だとUSDTがありますが、時価総額は27億ドル位と流行っていますね。WormholeはこのOmni LayerをフォークしBitcoindに統合して実装されるので、コンセンサスのアップグレードは意識する必要はありません。

HKで開かれたScaling for Consensus会議(2018/08/01)で、Bitmain社の開発者により初プレゼン。(Wormhole Protocalの中国語訳は”虫洞协议”)


基本原理と実装方法

WormholeプロトコールはBitcoin Cashのチェーンで実装されたが、既存のBCHコンセンサスを一切を変更なしのままで、トークンの発行、送金、燃焼(burn)という機能を実現できます。Wormholeのトランザクション情報をOP_RETURNに書き込まれています。Wormholeのトークンの発行、送金、燃焼(burn)はBCHのトランザクションに依頼する。

つまり、WormholeトランザクションはBCHのを流用し、BCHのトランザクション、アドレスを検知した上で、OP_RETURNにも解析する。BCHプロトコールはOP_RETURNの中身を解析しない、解析する必要もないでしょう。簡単に言えば、Wormholeのトランザクションは特殊なBCHトランザクションとなります。


WormholeをBitcoindに実装する。WormholeのBitcoindクライアントはWormholeクライアントとして、OP_RETURNの中身の解析を行います。BCHモジュール+WormHoleモジュールで構成されます。

BCHバージョンアップとともに、Wormholeもバージョンアップする必要がある。Wormholeの開発チームは常にBCHの動向に注目することを保証しました。

WormholeのトランザクションはBitcoindでの処理流れ:
  • BCHモジュールは該当トランザクションはBCHルールに遵守するかどうかチェックする。ルール違反なら、廃棄。ルール遵守なら、WormHoleモジュールへ
  • WormHoleモジュールはWormHoleトランザクションはWormHoleルールに遵守するかどうかチェックする。ルール違反なら、廃棄。ルール遵守なら、解析する。

WormHoleプロトコールはBCHアドレスアカウントを流用し、一つのアカウントには複数種類のトークンを取り扱える。

セキュリティとコンセンサス

WormHoleは二重セキュリティがあります。

第一重セキュリティはBCHのノードで保証されています。POWアルゴリズムベースなので、10年の安定的な稼働実績があります。そしてUTXOモデルの採用には以下のメリットがあります。
  1. UTXOには残高管理の手間がなし
  2. UTXOは独立の帳簿データ単位として、トランザクションの検証には時間がかからない
  3. UTXOはロールバックなどにとらわれてない、ロックスクリプトとアンロックスクリプトだけに拘る
  4. UTXOは性能優先
WormHoleプロトコールはBCHのUTXOモデルを丸ごとで流用しています。

第二重セキュリティはWormHoleプロトコールのノードです。BCHルールに合わないトランザクションをWormHoleノードは解析しない。WormHoleルールに合わないトランザクションを廃棄できる。WormHoleトランザクションの状態を常に把握できる。

基本通貨Wormhole Cash(WHC)

Wormhole protocolで使われる基本通貨が Wormhole Cash= WHC で、このWHCトークンはProof-of-Burnで生成されます。流れとしては、ユーザーがバーンアドレス (burn address)bitcoincash:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqu08dsyxz98whc に少なくとも1BCHを送り、1000 confirmation つくと 1BCH = 100WCH のレートで 送り元のアドレスに対して送金分のWCHが生成される。 ここでの 1000 confirmationは BCHのチェーンがロールバックする際のリスクを考慮して1000とされています。

WHCまだ分割できる。
  • 1 BCH = 100 WHC; 1 WHC = 100,000,000 C ;
bitcoincash:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqu08dsyxz98whc っていうアドレスを使う経緯としては、wormhole-burn-addrという論文に参照して以下のことが分かります。
  • Wormhole開発チームもこのアドレスのプライベートキーを持っていない
  • このアドレスからプライベートキーの導きは事実上不可能
  • もしプライベートキーが作成させる方法があれば、BCHプロトコールはこのアドレスの転送を禁止するようです。
WHCを導入する理由としては、以下のユースケースが想定されている。
  • ネットワーク乱用防止
  • 新しいトークン作成時の手数料(1WHC)
  • 1対多でのトークン送信時(Airdropなど)
  • スマートコントラクト(Smart Contract)のGAS

Wormholeプロトコールの規範

OP_RETURNに書き込まれている中身を以下のようなプロトコール規範としてまとめてされました。

フィールド長さ(byte)データ型値の範囲備考
Transaction version2uint16_t0から増えるバージョン
Transaction type2uint16_t0: token送金(Simple Send)
1: クラウドファンディング参加(Participate a Crowdsale)
3: tokenの一対多ばらまき(Send To Owners)
4: tokenの使い切り(Send All)
50: 一定数量のtokenの生成(Create a Property with fixed number of tokens)
51: クラウドファンディング機能のtokenの生成(Property via Crowdsale with Variable number of Tokens)
53: 強制的にクラウドファンディングを閉じる(Close a Crowdsale Manually)
54: 管理できるtokenの生成(Create a Managed Property with Grants and Revocations)
55: tokenの追加(Grant Property Tokens)
56: tokenの廃棄(Revoke Property Tokens)
68: WHCの発行(WHC's issuance)
70: token発行者の変更(Change Property Issuer on Record)
WormHoleプロトコール提供している
トランザクションタイプ
Ecosystem1uint8_t1エコーシステム(1に固定)
Number of coins8int64_t1-9,223,372,036,854,775,807該当Tokenのアカウント
Currency identifier4uint32_t1, 3-2,147,483,647tokenID、例えば
0:BCH;
1:WHC;
[3, 2,147,483,647]新規作成したトークンのID
Property Precision2uint16_t[0, 8]小数点の精度
0: 少数点なし
1: 小数点後の精度は1
.....
8: 小数点後の精度は8
Integer-one byte1uint8_t0-255パラメータ
UTC Datetime8uint64_tUnixのタイムスタンプ


WHCの発行すべてのフィールドを埋める必要がないが、トランザクションタイプにより異なります。

そして、Wormholeプロトコールはトランザクションのインプットとアウトプットの順序は以下の条件を満たす必要がある。

 
Categorytxintxout
WHCの発行(トランザクションタイプ68)第一番目のインプット(インデックス0)はSender第一番目のアウトプット(インデックス0)は固定burnアドレス,第二番目のアウトプット(インデックス1)はOP_RETURNアウトプット
トランザクションタイプ68以外第一番目のインプット(インデックス0)はSender最後のアウトプットは(一番大きいインデックス)Receiver

WHCの発行

順序以外にはWormholeトランザクションは以下の要件も満たす必要があります。
1.ユーザーがバーンアドレス bitcoincash:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqu08dsyxz98whc に燃やすBCHの数は少なくとも1BCHを送るべき。

2.OP_RETURNの中身

FiledTypeExample
バージョン(Transaction version)Transaction version0
タイプ(Transaction type)Transaction type0x44 (68)


有効なOP_RETURNデータ: 0877686300000044


有効なトランザクションの例は、以下の図に参照してください。(ソースリンク)


WormholeのエクスプローラーでWormholeのトランザクションは以下のようにとなります。(ソースリンク


※以上の条件のどちらか満たさない場合、無効のトランザクションとなり、ただBCHを失うだけなので、要注意。

トークンの発行

Wormholeを通して、誰でも独自のトークンを作成できます。トークンの作成には1WHCの手数料が掛かります。トークン発行は3種類があります。
  1. 固定トークン(Fixed token)
  2. クラウドファンディング用トークン(Token supports crowdfunding)
  3. 管理可能トークン(Manageable token)
固定トークンとは、作成時数量固定(増やしたり、バーンは不可)、作成後は作成者が保持、クラウドファンディングは不可というものです。

これも一番多く使われているトークンですので、今回はこれだけ紹介させて頂きます。

クラウドファンディング用トークンと管理可能トークンの詳しく紹介は今度にさせて頂きますが、気が早い方はこのwhite paperyellow paperに参照して頂ければと思います。

最近は大手プールのViaBTCは独自のプールトークンVIATの発行には話題となりましたので、このVIATを交えて文中に説明させて頂きます。

Wormholeのプロトコールで、OP_RETURNの中身は以下のようになります。

FiledTypeNoteExample
バージョン(Transaction version)Transaction version0
トランザクションのタイプ(Transaction type)Transaction type0x32 (50)
エコーシステム(Ecosystem)Ecosystem1に固定、1以外は無効1
token精度(Property precision)Property Precision許容範囲外無効1
前tokenID(Previous Property ID)Currency identifier0
tokenカテゴリー(Property Category)String null-terminated""
tokenサブカテゴリ(Property Subcategory)String null-terminated""
token名称(Property Name)String null-terminatedNULLの場合、無効"GMO token"
token URL(Property URL)String null-terminated""
token説明(Property Data)String null-terminated""
tokenの数量(Number Properties)Number of coins許容範囲外無効100000000


有効なOP_RETURNデータ例:
08776863000000320100080000000000005649415400706f6f6c2e7669616274632e636f6d0056696142544320546f6b656e0002c68af0bb140000


 

ViaBTCのプールトークンVIATについて、BCHエクスプローラーで以下のようとなります。(ソースリンク


Wormholeエクスプローラーで以下のようなります。(ソースリンク

20億のVIATトークンが発行されたことを確認できます。


トークンVIATの情報は、以下の図に参照してください。(ソースリンク

トークンの送金

あるBCHアカウントから他のBCHアカウントにトークンを送金できます。1対1の送金に対して、BCHのトランザクション手数料以外には、トークンの手数料が掛からないです。勿論、BCH手数料はBCHプロトコールに準ずる。

但し、1対多の送金(ばらまき送金、英語でSend to All)に対して、BCHのトランザクション手数料以外、別途WHCの手数料が掛かります。請求したWHC手数料は直接に燃やされる(burn)。

今回はトランザクションのタイプ0のトークンの送金(Simple Send)に説明させて頂きます。

送金するときには、以下に二点を注意しなければならないです。
  • 第一番目のアウトプット(インデックス0)はトークンのReceiverにすべき,且つ第一番目のインプット(インデックス0)はトークンのSenderにすべき。
  • WHCの送金の場合には、単位はCとなること。(例えば、1WHCを送金したい場合には、100000000に入力)
Wormholeのプロトコールで、OP_RETURNの中身は以下のようになります。

FiledTypeNoteExample
バージョン(Transaction version)Transaction version0
トランザクションのタイプ(Transaction type)Transaction type0
TokenID(Property ID)Currency identifier存在しないIDの場合、無効
0の場合は、無効(BCHの送金をサポートしない)
1(WHC)
送金金額(Amount to transfer)Number of Coins残高超える場合、無効100000000(1WHC)

有効なOP_RETURNデータ例:0877686300000000000000c000071afd498d0000


 

BCHエクスプローラーで見たトークンの送金の例。(ソースリンク


Wormholeエクスプローラーで見たトークンの送金の例。(ソースリンク

Wormholeのロードマップ

4フェーズに分かれています。

 
PhaseTasks
Earth (beginning)Wormhole Coreの実装
BitcoinABCにトークン発行を追加
Wormholeプロトコールのホワイトペーパーリリース
TroposWHプロトコールベースの分散型取引所テストネット
各種ウォレット(アンドロイド、IOS、PC)リリース
IonizeERC721の実装
多言語SDKの開発
WHC用コールドウォレットの開発
Exophere無許可でのスマートコントラクト使用を認める
プラズマプロトコールの実装、スケーリングの改善
新世代のスマートコントラクト仮想マシーン(Solidityのような言語を含め開発をする)


Wormholeの現状と展望

8月1日にWHCがCoinEx で上場以来、今まではすでに2726BCHを燃やしてWHCに移しました。Wormholeプロトコールベースに発行されたトークンも200種類に至りました。発行されたトークンの説明情報からすると、英語、中国語、日本語のユーザに使われています。より多くの支持を集めている象徴でしょう。

トークンの大部分はイーサリアム・ネットワーク上に構築されている。ICOウォッチリストから入手したデータによると、そうしたトークンはトークン市場全体の83%近くを占めている。Wormholeプロトコールは仮想通貨トークンの世界に君臨するERC-20に対抗する可能性があるか。BCHのエコーシステムは今後どのように展開するか。期待ですね。

まとめ

今回はWormholeの白書とプロトコール規範をベースにWormholeプロトコールとWHCを紹介させて頂きました。クラウドファンディング用トークンと管理可能トークンに関わる部分も面白いですが、今回は割愛させて頂きます。

2018年8月17にてWormholeのクライアントEarth-0.1.0が正式にリリースされました。ソースをダウンロードして、手順に従って、インストールとコンパイルして、自分のトークンを作ることが可能です。

そして、ビットボックス(BitBox)と呼ばれるオープンソースのBCHソフトウェア開発者キット (SDK) を作成した開発者であるガブリエル・カルドナは、ワームホールの初心者ガイドをBitcoin.comで発表した。この初心者ガイドでは、Bitcoin.comの開発者ツールを利用してトークンを作成し、ワームホール・プロトコールを使用してICOを立ち上げるための方法が説明されている。興味がある方はWormhole SDKをダウンロードして自分の手でWormholeを触ってみてください。

 

最後に

次世代システム研究室では、アプリケーション開発や設計を行うアーキテクト、またはブロックチェーンのエンジニアを募集しています。次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。

皆さんのご応募をお待ちしています。