2018.10.15
Wormhole — BCH smart contract
次世代システム研究室のL.Wです。今回は、ビットコインキャッシュのブロックチェーンをベースに、ICOやスマートコントラクトを実現できるワームホール(Wormhole)プロトコールについて詳しく紹介させて頂きます。
アウトライン
- 専門用語の説明
- Wormholeプロジェクトの背景
- 基本原理と実装方法
- セキュリティとコンセンサス
- 基本通貨Wormhole Cash(WHC)
- Wormholeプロトコールの規範
- WHCの発行
- トークンの発行
- トークンの送金
- Wormholeのロードマップ
- Wormholeの現状と展望
- まとめ
専門用語の説明
- OP_RETURN:Bitcoin Cashプロトコールの一つのオペコードとなり、このオペコードのトランザクションのアウトプットは永遠に払われていない(Unspendable)。ビットコインキャッシュのノードはこの種のトランザクションのアウトプットを検知し、UTXOリストから除外できるので、UTXOが膨らむ恐れがないです。2018年5月にBCHバージョンアップは実施されてから220バイトの長さの拡張に至りました。
- Wormholeプロトコール:Omni Layerのもとで実現できたBitcoin Cashブロックチェーンでトークン発行(ICO)、スマートコントラクトのプラットフォームです。
- 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モデルの採用には以下のメリットがあります。
- UTXOには残高管理の手間がなし
- UTXOは独立の帳簿データ単位として、トランザクションの検証には時間がかからない
- UTXOはロールバックなどにとらわれてない、ロックスクリプトとアンロックスクリプトだけに拘る
- 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に書き込まれている中身を以下のようなプロトコール規範としてまとめてされました。
[table id=29 /]
WHCの発行すべてのフィールドを埋める必要がないが、トランザクションタイプにより異なります。
そして、Wormholeプロトコールはトランザクションのインプットとアウトプットの順序は以下の条件を満たす必要がある。
[table id=30 /]
WHCの発行
順序以外にはWormholeトランザクションは以下の要件も満たす必要があります。
1.ユーザーがバーンアドレス bitcoincash:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqu08dsyxz98whc に燃やすBCHの数は少なくとも1BCHを送るべき。
2.OP_RETURNの中身
[table id=31 /]
有効なOP_RETURNデータ: 0877686300000044
有効なトランザクションの例は、以下の図に参照してください。(ソースリンク)
WormholeのエクスプローラーでWormholeのトランザクションは以下のようにとなります。(ソースリンク)
※以上の条件のどちらか満たさない場合、無効のトランザクションとなり、ただBCHを失うだけなので、要注意。
トークンの発行
Wormholeを通して、誰でも独自のトークンを作成できます。トークンの作成には1WHCの手数料が掛かります。トークン発行は3種類があります。
- 固定トークン(Fixed token)
- クラウドファンディング用トークン(Token supports crowdfunding)
- 管理可能トークン(Manageable token)
固定トークンとは、作成時数量固定(増やしたり、バーンは不可)、作成後は作成者が保持、クラウドファンディングは不可というものです。
これも一番多く使われているトークンですので、今回はこれだけ紹介させて頂きます。
クラウドファンディング用トークンと管理可能トークンの詳しく紹介は今度にさせて頂きますが、気が早い方はこのwhite paperとyellow paperに参照して頂ければと思います。
最近は大手プールのViaBTCは独自のプールトークンVIATの発行には話題となりましたので、このVIATを交えて文中に説明させて頂きます。
Wormholeのプロトコールで、OP_RETURNの中身は以下のようになります。
[table id=32 /]
有効な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の中身は以下のようになります。
[table id=33 /]
有効なOP_RETURNデータ例:0877686300000000000000c000071afd498d0000
BCHエクスプローラーで見たトークンの送金の例。(ソースリンク)
Wormholeエクスプローラーで見たトークンの送金の例。(ソースリンク)
Wormholeのロードマップ
4フェーズに分かれています。
[table id=34 /]
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を触ってみてください。
最後に
次世代システム研究室では、アプリケーション開発や設計を行うアーキテクト、またはブロックチェーンのエンジニアを募集しています。次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。
皆さんのご応募をお待ちしています。
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD