BitcoinCashの新しいOP_CODEでオンチェーン上でのチェスゲームを実現

2018.12.27

rei

こんにちは、BCHNews編集部のreiです。

突然ですが、皆さんはBitcoin Cash(BCH)のハードフォークで追加された二つのオペコードに関して覚えていますか?
一つは、OP_CHECKDATASIG、もう一つはOP_CHECKDATASIGVERIFYです。

これらのオペコード追加が、BCHチェーンに新たな可能性をもたらすことの一端について、以前の記事Zero-Conf Forfeits記事でもお話ししています。
【過去記事】
『BCHを洗練された通貨にするためのZero-Conf Forfeits』
https://bchnews.jp/bitcoincashnews-sr/5791

Zero-Conf Forfeitsでは、2つのオペコードにフォーカスした新たな二重支払い抑止の提案についてまとめました。
また別な可能性として、オペコードを使用してコインの使用方法に制限を設けることができることや、オンチェーンでチェスを行うことができることが新たに発表されています。
そこで本日は、このOP_CHECKDATASIGを使用したBCHの新たな可能性に関してまとめようと思います。

OP_CHECKDATASIGについて

本題に入る前にまず、OP_CHECKDATASIGについておさらいしたいと思います。

OP_CHECKDATASIGは、Bitcoinスクリプトで使用されるオペコードです。
Bitcoinスクリプトは、オペコードの組み合わせ次第で支払いの条件などを様々設定することができるものです。
Bitcoinスクリプトは、スタック指向で可読性は低い言語で、計算複雑性を排し予測可能性なチューリング不完全の言語として設計されています。
オペコードはその中で、OP_**で始まる名前でスクリプトの操作が定義されているものです。

中でも、OP_CHECKDATASIGとOP_CHECKDATASIGVERIFYはBCHの11月のハードフォークで追加されたオペコードです。
OP_CHECKDATASIGは、Bitcoinスクリプトで、署名が有効だった場合true(0)を、そうでなかった場合はfalse(1)を返す働きをし、同時に実装されたOP_CHECKDATASIGVERIFYは、同様に署名を検証しますが、署名が有効であった場合は何も返さず、無効であった場合は動作を停止するオペコードです。

OP_CHECKDATASIGを使用した支払いの制限

BCH開発者のPein Sama氏は、OP_CHECKDATASIGを使用してコインの支払い方法を制限可能であることをHonest Cashの記事で主張しています。
記事では、Bitcoinスクリプトの高級言語であるSpednを使用してデモを行なっています。
Spednに関しては本BCHNewsで過去に取り上げていますので、こちらの記事を参考にしてください。

【過去記事】
『Spedn – BCH上にスマートコントラクトを記述するスクリプト言語を紹介します』
https://bchnews.jp/bitcoincashnews-sr/4397


引用元:https://honest.cash/pein_sama/spending-constraints-with-op_checkdatasig-172

この例では、特定のアウトプットに最低額を設けるという制約を加えています。
Sama氏は、これ以外にも特定のスキームで有効なOP_RETURNメタデータが含まれているか、いくつかのパターンに一致するかを調べることができると主張しており、これまでのBitcoinスクリプトは誰が支払いを行うかだけを制限してきましたが、これからはどのように支払いを行うのかという制約を加えることができると述べています。

オンチェーンチェス

開発者のTobias Ruck氏は、Sama氏の発想を元にしてオンチェーンでのチェスのゲームへと発展させています。
チェスは、サイコロを振るなどの確率論的な動作がなく、第三者がその正当性を確認することができるゲームです。
したがって、OP_CHECKDATASIGを使用して、ゲームがルール通りに運用されていることを確認することができます。

Ruck氏はPythonコードを使用して、そのコンセプトの実装を示しています。


引用元:https://tobiasruck.com/content/lets-play-chess-on-bch/

それぞれの関数は、以下のチェスの動作を表しています。

  • apply_move:駒を動かす関数
  • white_has_won:白の勝利
  • black_has_won:黒の勝利
  • is_stalemate:ステイルメイト

ステイルメイトは、自分の手番において相手にチェックされておらず、反則にならずに次に動かせる駒が一つもない状況のことを指します。
ルール上で引き分けとして扱われることが多く、このコードでも引き分けとして扱われています。

詳細は省きますが、このコードは1000satoshisを送り合うことでチェスの手番を進めています。
その証拠にお互いがsurrenderを選択した場合、相手に対して1000の値が送信されていることがわかると思います。
そして、このやり取りを監視する審判としての役割をOP_CHECKDATASIGが果たすことにより、自律的にゲームを行うことが出来るそうです。

また、Ruck氏はこの過程でOP_CHECKDATASIGを使用したスクリプトが、ループを実現しておりチューリング完全であることを示しています。
さらに、コードの最適化が行われればBitcoin仮想マシン(VM)を実現できると主張しています。

一言

本日は、BCHに新しく追加されたオペコードの内の一つOP_CHECKDATASIGにフォーカスし、その可能性に関してまとめました。
Bitcoinスクリプトはあえてチューリング不完全な言語でしたが、OP_CHECKDATASIGの導入によってRuck氏がチューリングマシンの再現に成功、スクリプトのチューリング完全性が示されました。
したがって、OP_CHECKDATASIGは、チェスをはじめとしたスクリプトの新分野開拓に対し、一役買うことはほぼ間違い無いと思われますね。

最新情報はこちら

BCHNewsでは公式のTwitterアカウント(@bchnews_jp)を開設しました。
更新情報を配信しておりますので、よろしければフォローしていただけると嬉しいです。

rei

BCHNews編集部のひとり。
わかりやすく掘り下げた記事を!というモットーで記事を書いています。
好きな食べ物はししゃもです。

関連記事

BitcoinCash関連サービスのニュース3本立て

2018.11.20

by きなこ

BCHに高度なプライバシーを提供するNeutrino Wallet登場

2018.12.04

by きなこ

BitcoinSV、BCHの分割ガイドを公開

2018.12.05

by きなこ

BitcoinCash向けウォレットのMoney Buttonがローンチされる

2018.09.17

by BCHNews編集部