マルチプレイヤーアプリ
ZooBC のボードゲームとサイコロゲームは 2 人から 4 人で遊ばれ、すべての手は、すべてのノードが同じルールに照らして確認するトランザクションです。賭け金はポットを形作り、ゲームが終わるとプロトコルがそれを支払います。ゲームが引き分けで終わらない限り、そこから アプリプール のための 1 % のレーキが差し引かれます。
開設と参加
プレイヤーは CreateApp でゲームを開き、タイプと 2 から 4 の席を選び(バトルシップは常にちょうど 2)、最初の賭け金を支払います。ゲームは Open になります。各 JoinApp は等しい賭け金を支払い、最後の席が埋まるとゲームは Active になります。任意で相手を指定すると、そのアカウントだけが参加できる直接の挑戦になります。
席には、ネイティブの ZooBC アカウントのような 36 バイトのアカウントが必要です。24 バイトのアドレスを持つアカウント、つまり Ethereum と Bitcoin のハッシュのタイプは、エラーメッセージが "multiplayer apps require a ZBC account" と言うにもかかわらず、席につくことはできません(鍵とアカウントタイプ)。ソロベットはどのアカウントでも受け付けます。
誰が最初に指すか
誰が最初に指すかは重要になりうるため、誰もそれを前もって知ったり操作したりできないようになっています。最後の席が埋まった時点では手番は保留中です。誰の時計も動いておらず、すべての手は空操作です。2 ブロック後に、リゾルバーが最初の席を、そのブロックのシードとアプリの ID のハッシュを席の数で割った余りとして抽選します。最後の参加を含むブロックの生成者は自分のシードは知っていますが、2 ブロック後のシードは知らないため、誰が最初になるかに応じて参加を取り込んだり除外したりすることはできません。ルールによって作成者や最後の参加者が最初に指すこともありません。バトルシップは例外で、参加者が自分の盤面をコミットすることで最初に指します。
4 つのサイコロゲーム(ルドー、ピッグ、レース、モノポリー・ライト)では、手はそれを取り込んだブロックでは適用されません。保留中として保存され、次のブロックで、そのブロックのシードを使い、手のトランザクション ID をキーとして適用されるため、手を取り込んだ生成者がサイコロの目を見ることは決してありません。保留中の手は一度に 1 つまでで、その間に不正になった手は捨てられます。
手番の時計
最後の席が参加したとき、そして受け入れられた手の後ごとに、期限が 240 ブロック先、約 1 時間後に設定されます。手番のプレイヤーは、それまでに手を指すか、空の手を持つ AppMove を送らなければなりません。後者は有料のキープアライブで、期限をさらに 240 ブロック先に延ばします。時計が動いていないプレイヤーからの手や不正な手は、送信時に拒否されます。それがブロックに届いた場合は、手数料のかからない空操作になります。
ゲームの終わり方
| 結末 | 方法 | 配当 |
|---|---|---|
| 勝ち | ある手がゲームに勝つ | ポットから 1 % のレーキを引いた額を勝者へ |
| 引き分け | ある手がゲームを引き分けで終わらせる | すべての席が賭け金を取り戻す。レーキなし |
| 投了 | プレイヤーが ResignApp を送る | ポットからレーキを引いた額を他の席で均等に分け、端数は最初の席へ |
| 時間切れ | 時計が動いていない、席についたプレイヤーが、期限 + 1 から ClaimAppTimeout を送る | ポットからレーキを引いた額を、時計が動いている席以外のすべての席で分ける |
レーキは floor(pot × 100 ÷ 10,000)、つまりポットの 1 % です。2 人のプレイヤーがそれぞれ 1 ZBC を賭けるとポットは 2 ZBC になり、勝者は勝ちの手のブロックで 1.98 ZBC を受け取ります。ブロックの生成者はポットから何も取りません。何も自動的には終わりません。期限を過ぎた後、ゲームはプレイヤーが請求を送ると決めるまで待ち、ZooBC Foundation を含め、誰もゲームを取り消すことはできません。
エンジン
各ゲームのエンジンはノードの一部で、知っておくべきいくつかの簡略化があります。
- チェスにはキャスリングもアンパッサンもなく、ポーンは常にクイーンに昇格します。
- チェッカーは駒を取ることを強制し、連続ジャンプを続けます。
- リバーシは、合法手のない席をパスさせます。
- ドット・アンド・ボックスは、箱を完成させると続けてもう 1 手指せます。
- ピッグは 100 で勝ちとなり、すごろくのゲームであるレースは 49 でゴールします。
- ルドーは席ごとに 4 つの駒を動かします。
- モノポリー・ライトは各席を 1,500 で始め、GO を通過すると 200 を支払います。
バトルシップ:公開のチェーン上の秘密
バトルシップには、すべてが公開されているチェーン上で隠された情報が必要で、それをコミット・リビールで実現しています。プレイの前に、各プレイヤーは 10 × 10 の盤面の 100 マスそれぞれについて秘密の 32 バイトのソルトを選び、すべてのマスについて SHA3-256(is_ship ‖ salt) を公開します。100 個のハッシュで、合計 3,200 バイトです。作成者は CreateApp でコミットメントを送り、参加者は最初の手として自分のコミットメントを送ります。どのソルトもランダムなので、ハッシュは何も明かしません。
プレイヤーは [0, cell] という手で撃ちます。その盤面の持ち主は、保留中のマスを [1, is_ship, salt] で明かさなければならず、すべてのノードがそれらをハッシュしてコミットされた値になることを確認します。嘘をつけば異なるハッシュになって拒否されるため、持ち主は真実を言うか、時間切れになって ClaimAppTimeout で負けるかしかありません。最初に 17 の船のマスに当てたプレイヤーが勝ちます。船のマスを少なくコミットしても何も得られません。撃つ側が 100 発すべてを撃ち、明かされた船のマスが 17 未満であれば、撃つ側の勝ちです。