> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mycryptocasino.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Crashの公平性

> 何がコミットされるか、結果がいつ確定するか、計算式、そしてこの方式の限界。

Crashラウンドの倍率はベットの締め切り前に決まり、その後変更することはできません。バックエンドはベット受付開始前にランダムな秘密の値のSHA-256ハッシュをオンチェーンで公開し、ラウンド開始時にプログラムがSolanaのスロットハッシュを混ぜ合わせます。秘密の値は精算時に公開されるため、誰でもクラッシュポイントを再計算して確認できます。

このページでは、すべての[Crash](/ja/docs/games/crash)ラウンドの背後にある正確な仕組みを説明します。何がコミットされるか、結果がいつ確定するか、正確な式、そしてこの方式の正直な限界です。まだお読みでない場合は、先に[Provably Fairの概要](/ja/docs/provably-fair/overview)をご覧ください。コミット・リビール方式をわかりやすく解説しています。

<h2 id="the-life-of-a-round">
  Crashラウンド中、オンチェーンでは何が起きていますか？
</h2>

すべてのCrashラウンドは、3つのオンチェーントランザクションで次の順に構成されます。

1. **コミット**：ベット受付開始前に、バックエンドがランダムな32バイトの秘密の値を生成し、そのSHA-256ハッシュをオンチェーンで公開します（`start_new_round`命令）。これがコミットメントです。この瞬間から、そのラウンドを精算できるのはまったく同じ秘密の値だけになります。コミットメントはトランザクションの`CrashRoundPrepared`イベントで公開されます。
2. **ベット**：プレイヤーがベットします。秘密の値は隠されたままで、コミットメントによってすり替えができないことが保証されます。
3. **ラウンド開始／エントロピーの取得**：ラウンドが始まると（`start_game`命令）、プログラムはSolanaの`SlotHashes` sysvarから**最新のスロットハッシュ**を読み取り、ラウンドに保存します。アプリではこの値をラウンドの*ブロックハッシュ*と呼んでいます。**この時点でクラッシュポイントは完全に確定します**（保存されたスロットハッシュとコミットされた秘密の値だけで決まる関数です）。ただし、秘密の値を知らない人はまだそれを計算できません。この値は`CrashGameStarted`イベントで公開されます。
4. **ラウンドの進行**：倍率が上昇し、プレイヤーがキャッシュアウトします。
5. **公開**：バックエンドが秘密の値を提出します（`crash`命令）。プログラムは`sha256(secret)`がコミットメントと等しいことを**オンチェーンで検証**し（一致しなければトランザクションは失敗します）、クラッシュポイントを自ら計算してラウンドを確定させます。`CrashRoundFinalized`イベントで秘密の値、スロットハッシュ、最終的なクラッシュポイントが公開されます。

<h2 id="the-exact-formula">
  クラッシュポイントの正確な計算式は？
</h2>

クラッシュポイントは正確に次のように導出されます（これはオンチェーンプログラムが実行する演算そのものです。整数演算なので、丸めによる予期せぬずれはありません）。

```text theme={null}
入力
  blockhash   32バイト   ラウンド開始時に保存されたSolanaのスロットハッシュ
  secret      32バイト   最後に公開される運営者の秘密の値（sha256(secret)としてコミット）
  edge_bps    整数       ベーシスポイント単位のハウスエッジ（「手数料と上限」参照。150 = 1.5%）

導出
  hash  = sha256( blockhash ‖ secret )        // 64バイトの入力：先にblockhash、次にsecret
  X     = u32_be( hash[0..4] )                // ハッシュの先頭4バイトを、ビッグエンディアンの符号なし32ビット整数として読む
  X'    = min( X, 2^32 − 1000 )               // 安全上限：下の分母が1000を下回ることはない

  crash_bps = max( 10000, floor( (10000 − edge_bps) × 2^32 / (2^32 − X') ) )

結果
  クラッシュ倍率 = crash_bps / 10000          // 例：29948 → 2.9948x
```

再計算する際に重要な細かい点：

* 連結の順序は**先にblockhash、次にsecret**です。
* `X`はSHA-256出力の**先頭4バイト**から**ビッグエンディアン**で読み取ります。
* 除算はすべて**切り捨て**（整数）除算です。
* `max(10000, …)`という下限により、倍率が1.00xを下回ることはありません。また`X`の上限によって、分母が極端に小さくなることを防いでいます。

### 計算例

`X = 0xABCD1234`（2,882,343,476）、現在の1.5%のエッジ（`edge_bps = 150`）の場合：

```text theme={null}
分母        = 2^32 − 2882343476 = 1412623820
crash_bps   = floor( 9850 × 2^32 / 1412623820 ) = 29948
クラッシュ  = 2.9948x
```

### 分布の形

この式は一様分布の`X`を、典型的なクラッシュ曲線に対応させます。ラウンドが少なくとも倍率`m`に到達する確率は、おおよそ次のとおりです。

```text theme={null}
P(クラッシュポイント ≥ m) ≈ (1 − エッジ) / m
```

現在の1.5%のエッジでは、約49.25%のラウンドが2.00xに、約9.85%が10xに到達し、約1.5%のラウンドは1.00xで即座にクラッシュします（ハウスエッジはここに含まれています）。各ラウンドに適用されるエッジは、公開時点でオンチェーンに設定されている値です。現在の値は[手数料と上限](/ja/docs/fees-and-limits)に記載しています。

## 保証されること、されないこと

**プログラムによって強制されること：**

* コミットメントがオンチェーンに記録された後は、運営者がラウンドの秘密の値を変更することはできません。ハッシュが一致しない秘密の値では、公開トランザクションが失敗します。
* ラウンドが開始されると（スロットハッシュが保存されると）、**クラッシュポイントは確定します**。早くキャッシュアウトしても、遅くキャッシュアウトしても、大勢がキャッシュアウトしても何も変わりません。結果は倍率が上昇し始める前に決まっています。
* クラッシュポイントはバックエンドが報告するのではなく、プログラムが計算します。誤った値をオンチェーンに書き込むことはできません。
* 検証に必要なすべての情報（コミットメント、スロットハッシュ、秘密の値、最終的なクラッシュポイント）は、オンチェーンイベントで永続的に公開されます。

**正直な注意点**（これはVRFではなく、コミット・リビール方式です）：

* **開始のタイミング。** 運営者はラウンド開始前に秘密の値を知っており、そのバックエンドがラウンド開始トランザクションをいつ送信するかを決めます。直近のスロットハッシュは公開されているため、原理的には候補となるスロットについて倍率を事前に計算し、開始のタイミングを調整して、取得されるスロットハッシュに影響を与えることが可能です。この方式はそれを防ぐものではありませんが、観測可能にします。ラウンド開始のタイミングは公開されており、体系的な偏りがあれば、公開されたクラッシュポイントの統計に表れます。これは誰でも一括で再計算できます。
* **キャンセル。** ラウンド開始後、運営者はプレイヤーより先に結果を知るため、不利なラウンドを公開せずにキャンセルすることが可能です。ただし2つの厳格な制限があります。キャンセルすると**すべての賭け金が全額返金され**（プログラムに没収の手段はありません）、すべてのキャンセルは公開イベントを発行します。キャンセルの頻度こそがオンチェーン上の手がかりです。キャンセルは、秘密の値が失われた場合（たとえばコミットと公開の間にバックエンドがクラッシュした場合）の復旧手段として存在しており、実際にはほぼ使われない想定です。

<h2 id="verify-a-round">
  Crashラウンドはどう検証しますか？
</h2>

アプリでは、終了した各ラウンドの詳細に公開された秘密の値とブロックハッシュが表示され、3つのトランザクションすべてへのリンクと、倍率を再計算してくれる公平性検証ツールが用意されています。クラッシュポイントを自分で再計算するための小さなスクリプトを含む詳しい手順は、[ラウンドを検証する](/ja/docs/provably-fair/verify-a-round)をご覧ください。

ゲーム自体の遊び方（キャッシュアウト、ベット受付時間、上限）については、[Crashゲームガイド](/ja/docs/games/crash)をご覧ください。
