チャネルアプリ
チェーン上では、ゲームの各手に 1 つのトランザクションと、ブロックを待つ時間がかかります。チャネルアプリは 2 人のプレイヤーについてそのコストを取り除きます。プレイヤーは賭け金をチェーン上で支払い、署名付きのバウチャーとして手を直接やり取りし、最後に 1 つの決済をチェーンに載せます。その後、すべてのノードが、オンチェーンのプレイを判定するのと同じルールエンジンで署名付きの手を再生します。
チャネルを開く
チャネルゲームは、channel フラグを 1 にした CreateApp で作られます。ちょうど 2 つの席が必要で、両方の賭け金は通常どおりチェーン上で支払われます。それ以降、手はチェーン外でやり取りされます。チャネルゲームに対して送られた AppMove、ResignApp、ClaimAppTimeout は有料の空操作です。
署名付きの手
各手は、その手を指す席が次のダイジェストに署名したバウチャーです。
SHA3-256(app id (LE8) ‖ seq (LE4) ‖ SHA3-256(state before) ‖ move)
署名は、そのプレイヤーのアカウントタイプに従って確認されます(鍵とアカウントタイプ)。ダイジェストはアプリの ID、手の通し番号、手の前の状態を対象にしているため、署名付きの手を別のゲームや別の局面で再利用することはできません。公式ウォレットでは、バウチャーは通話を運ぶのと同じサービスであるリレーを通じて、2 人のプレイヤーの間を行き来します(リレー)。
決済
どちらのプレイヤーも SettleApp(タイプ 39)を提出できます。その本体はアプリの ID と、バウチャーの数に等しくなければならない final_seq を持ち、その後に各バウチャー(席、手の長さ、手、64 バイトの署名)が続きます。1 つの決済が運べるバウチャーは最大 1,024 です。
すべてのノードが、ゲームの状態からバウチャーを同じエンジンで再生し、すべての署名とすべての手番を確認して、結果を記録します。解析できない、アプリを取り違えている、席についていない者から来た、または不正なバウチャーを含むといった理由で失敗する SettleApp は、無料の空操作です。何も課金されません。提出できるのは、席についた 2 人のプレイヤーだけです。
異議申し立て期間
決済は主張であり、240 ブロック後の期限とともに記録されます。その期間中、どちらのプレイヤーも、より大きい final_seq、つまりより長い有効な手の連鎖を持つ SettleApp を提出できます。受け入れられた上書きはそれぞれ主張を置き換え、240 ブロックをやり直させます。期間が終わると、最後の主張が適用されます。
- ゲームに勝者がいた場合:勝者はポットから 1 % のレーキを引いた額を受け取ります。
- ゲームが引き分けだった場合:両方の賭け金が返金されます。
- ゲームがまだ続いていた場合:手番の時計が動いている席が負けとなり、ポットからレーキを引いた額がもう一方のプレイヤーに渡ります。
安全に遊ぶために
- 受け取った署名付きの手はすべて保管してください。最新の署名付きの局面が、途中で止まった決済からあなたを守ります。
- 自分のゲームの決済がないかチェーンを見守ってください。240 ブロック以内に誰も答えない主張は確定します。
- プライバシーも割引も期待しないでください。チャネルはちょうど 2 席のためのもので、結果は決済されれば公開され、勝敗のついたゲームはオンチェーンのプレイと同じ 1 % のレーキを支払います。