Plasmaを使ってポーカーをしてみよう!「Plasma Poker」

Megan
Cryptoeconomics Lab
9 min readDec 14, 2018

本日はCryptoeconomics Labが開発しているイーサリアムのスケーリングソリューションPlasmaを使ったポーカー、「Plasma Poker」についてご紹介します。

Cryptoeconomics Labはこれまでにも、イーサリアム上の処理速度を向上させるためのサイドチェーンによる解決策「Plasma」の実装に取り組んできました。各社が様々なPlasmaを提供している中で、Cryptoeconomics Labでは現在Dappsを開発している人がオリジナルのPlasmaを簡単に生成し、メインチェーンと同様の高セキュリティでPlasmaを扱えるようになるためのPlasma兼フレームワーク「Plasma Chamber」を提唱してきました。

今回はPlasma Chamberが依拠しているPlasma Primeを使用したポーカーゲーム「Plasma Poker」の仕様について解説します。現在まだ開発中で正式リリースはしていないものの、トランプゲームのプロトコルを提案し、より手軽にPlasmaを扱うことができるような仕様になっています。

Githubはこちらになります。

ギャンブルゲームをPlasmaで開発している理由

そもそもギャンブルはイーサリアムのスマートコントラクトと非常に相性が良いです。これはギャンブルが一定の期待値のもと透明性を確保せねばならない点を鑑みると、他チェーンと異なりイーサリアムはノードの結託による不正を分散性によって回避できるためです。その上でわざわざメインチェーンを使ってギャンブルをするにはコストがかかりすぎるため、メインチェーンのセキュリティを引き継いで不正を防げるPlasmaを利用した子チェーン上でのギャンブルゲームを実施しよう、というのが我々の意図になります。

しかもPlasmaはPlasmaに準拠していれば当該チェーンの中で誰かを信用する必要はありません。ゆえに信用にかかるコストが下がり、お金を預けることとの相性が良いです。これはルートチェーンの中のコントラクトアドレスはコードとして全世界に公開されているため、コードの完全な動きを信頼できるということを意味しています。

もちろん賭博の開帳は日本国内の法律による規制がなさされており、メインネットで法人として公開するには特定のライセンスを取得できる国で行う必要がありますが、上記のような技術的理由から、我々はPlasmaを利用したギャンブルゲーム実装に取り組んでいます。

Plasmaでポーカーをどう実装しているのか?

以下具体的にPlasma Pokerの仕様について見ていきましょう。

まずPlasma Pokerのゲームのルールとしては、現開発段階においては以下のような手順を踏むことにしています。

  1. プレイヤー2人がお互いに賭け金をステークします。
  2. RANDAOによってカードの絵柄という乱数を擬似的に生成し、「スペルカードを記録→カードを引く」という行為を3回行います。
  3. 自分の手札の役をハッシュとして一つのトランザクションにまとめます。互いのプレイヤーはハッシュを記録したタイミングで手札そのものをUTXOに保存、記録します。
  4. 2.で揃えた5枚の手札の役を片方のプレイヤーから順番に公開し、Plasmaが勝敗を計算、役がより強い方のプレイヤーを勝者として確定させます。
  5. 勝利したプレイヤーにはPlasmaチェーン上で送金され、賭け金を手にすることができます。

より具体的な仕様については以下のSpeaker Deckにて公開しています。

さて、このPlasma Pokerには不正がされかねないポイントが何点かあります。

まず互いのプレイヤーが手札を公開する際に、先に公開したプレイヤーのカードの役柄を見てから後に公開するプレイヤーが役柄を書き換えたりする可能性があります。このようなズルを防ぐため、UTXOに保存されていたハッシュと公開時の手札が異なる場合には反則負けとなるようにコントラクトが強制執行されます。

続いてPlasma上で勝敗の情報と勝者への送金を実施され、メインチェーンにはデポジットに関する情報のみが残されるわけですが、この際に通常のユーザーは不正を働くことができなくともPlasmaの子チェーンを監視しているオペレータが不正をする危険があります。その際には通常のPlasmaと同様にChallengeを行うことで処理します。

このようにPlasmaの特性を活用してPokerにおける不正を防ぐことに注力したのがPlasma Pokerになります。

Plasmaとゲームとしての今後の展望

さてこの現在開発中のPlasma Pokerですが課題もあります。

まずポーカーとしてはもっとも人気のTexas Holdemに必要なHighCard序列などの機能を全て実装していません。加えて引いたカードが「ダブる」可能性もあります。これは相手の手札が見えていないため、自分の役しか記録できないことで自分が引いたカードが相手のカードと重複しているのかの検証ができないためです。通常囲碁、将棋などの完全情報ゲームであれば互いのプレイヤーには平等に情報が共有されますが、トランプゲームは秘匿情報がないと成り立たないため、このようにやや実装においては難点が生じているのです。

もっともこの重複検査については「役の計算時にカードの重複が発生した場合、後攻がカードをもう一度引き直す」「先攻のカードを無効にする」などの変則ルールを設けることで解決できるでしょう。

我々Cryptoeconomics Labでは「手札を隠す」「自分が持っているトランプの役を公開する」といったトランプゲーム全体に共通するプロトコルを作成・共有することで、Plasmaを利用したさらなる不完全情報ゲームの開発が進むことを期待しています。

またもう一つの課題として、現在Plasma自体のGasが高い状態が続いていることがあげられます。特に現在のPlasma Poker開発段階ではどのブロックでもExit=子チェーンからメインチェーンに資産を逃すことができることを保証するために、子チェーンで毎ブロック毎に41000Gasほどsubmitblockを実行しないといけません。このときブロック生成時間を15秒と仮定すると年に200万回submitblockが実行されることになり、これは一ヶ月分のGasコストに換算すると約100万円です。すなわち現段階では一ヶ月ポーカーを運用するためのコストが100万円以上かかってしまいます。

より具体的な計算式はCryptoeconomics Labのscrapboxに上がっています。

もっとも、イーサリアムは今後開発のフェーズとして”Serenity”に移行しますので、いくつものトランザクションをまとめることができるcommit aggregationと同時に実行されれば現在は月に100万近くかかるPlasmaの維持費は月に3000円ほどにまで抑えることができます。

このように我々はPlasmaの維持費を抑えつつ、Heroku Buttonのように、今後は誰でもPlasmaを利用可能にするPlasma Generator Buttonを生成することを目標に開発していきます

オープンソースの開発

最後に、Plasmaおよびブロックチェーンエコシステムの発展のために、我々は全てのチャレンジについて公開し、オープンソースでの開発が進むことを望んでいます。

Cryptoeconomics LabのGithubおよびIssuehuntから、我々にPlasmaについてのフィードバックをどんどんお寄せください!

Cryptoeconomics LabのPlasma Pokerに関するGithubはこちらです:

Cryptoeconomics LabのPlasma Chamberに関するIssuehuntはこちらです:

現在鋭意開発中のPlasma Pokerの今後に乞うご期待!

--

--