仕組み
このアプリがコントラクト側で何をしているか。
全体像
このアプリは 2 つのスマートコントラクトでできています。互いに呼び出しあうことはなく、それぞれ独立してデプロイされています。
- TicTacToe — 人間同士の対戦。両者の賭け金を預かります
- SoloTicTacToe — コントラクトを相手にした練習。賭け金はありません
サーバもデータベースもありません。盤面も勝敗判定もチェーン上にあり、この Web ページは単にそれを読み書きしているだけです。
お金の流れ
- ゲームを作った人が賭け金を送金します。コントラクトが預かります
- 参加者が同額を送金します。ポットは賭け金の 2 倍になります
- 決着すると、勝者の受取額がコントラクト内に記帳されます
- 勝者が「引き出す」を実行して初めて送金されます
4 段階目が分かれているのは意図的です。決着と同時に自動送金する設計だと、受取側が送金を拒否するコントラクトだった場合に決着処理そのものが失敗し、相手のお金まで永久に取り出せなくなります。記帳と送金を分ければ、受け取れない人がいても他の人は影響を受けません。
引き分けと放置
盤面が埋まって引き分けになった場合、手数料は取らずに両者へ賭け金を返します。
相手が手を指さずに消えた場合は、持ち時間が切れた時点で不戦勝を主張できます。ポットは待っていた側のものになります。この仕組みがないと、負けそうな側が黙って立ち去るだけで両者の資金が永久に凍結します。
CPU 対戦について
まるばつは解けているゲームで、双方が最善を打つと必ず引き分けになります。したがって完璧な CPU に賭けを挑んでも、最良の結果が「引き分け=返金」にしかなりません。だから CPU 戦は賭けなしにしてあります。
強さは 3 段階です。「中」は勝ちと詰みしか見ないので、二重の狙い(フォーク)を作れば人間が勝てます。「強」は定石を完全に実装しており、全探索によるテストで負けないことを検証済みです。
テストネット専用です
このアプリはメインネットに接続しません。ウォレットの接続先一覧にもメインネットを入れていないので、本物の ETH が賭けられることはありません。