> ## 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.

# Verifikasi ronde

> Contoh lengkap verifikasi ronde yang sudah selesai dari data publik, beserta pemeriksaan singkat untuk Dice dan Mines.

Anda dapat memverifikasi sendiri setiap ronde yang sudah selesai dari data on-chain publik, tanpa akun dan tanpa akses khusus. Ada tiga hal yang perlu diperiksa: bahwa hash commitment dipublikasikan sebelum ronde dimulai, bahwa rahasia yang diungkap menghasilkan hash yang sama dengan commitment tersebut, dan bahwa menghitung ulang formula publik menghasilkan hasil yang menjadi dasar pembayaran ronde itu.

Panduan ini mengambil satu ronde [Crash](/id/docs/games/crash) yang sudah selesai dan memverifikasinya dari awal hingga akhir: bahwa rahasia operator sudah di-commit **sebelum** ronde, dan bahwa titik crash persis sama dengan hasil [formula publik](/id/docs/provably-fair/crash). Anda tidak memerlukan akses khusus: semuanya berasal dari data on-chain publik. Bagian singkat di akhir membahas [Dice](#dice-and-mines) dan Mines, yang masing-masing diverifikasi dari satu transaksi.

## Apa yang Anda buktikan

1. **Commitment datang lebih dulu.** Hash dari rahasia sudah ada on-chain sebelum ronde dimulai, sehingga hasilnya tidak mungkin dipilih setelah taruhan Anda.
2. **Rahasia cocok dengan commitment.** `sha256(secret)` sama dengan hash yang di-commit.
3. **Pengalinya jujur.** Menghitung ulang formula dari rahasia dan block hash menghasilkan persis titik crash yang menjadi dasar pembayaran ronde.

## Langkah 1: Buka data keadilan ronde di aplikasi

Buka riwayat taruhan Anda (atau riwayat ronde) lalu klik ronde yang sudah selesai untuk membuka detailnya. Di samping hasil ronde, Anda akan menemukan:

* **Crashed at**: pengali akhir yang akan diverifikasi.
* **Game secret hash**: rahasia 32 byte yang telah diungkap. Tautannya mengarah ke **transaksi commit** di Solana explorer.
* **Block hash**: slot hash Solana yang dipakai sebagai entropi chain. Tautannya mengarah ke **transaksi awal ronde**.
* **"Is this game fair? Use fairness tool"**: membuka alat verifikasi keadilan dengan data ronde ini yang sudah terisi. Alat ini mengambil tiga tanda tangan transaksi ronde (commit, block hash, reveal) beserta jaringannya, lalu menghitung ulang semua yang dijelaskan di bawah untuk Anda dalam satu klik.

Alat verifikasi keadilan adalah jalan yang praktis. Bagian selanjutnya dari halaman ini adalah jalan yang sepenuhnya independen, tanpa memercayai apa pun selain chain dan komputer Anda sendiri.

## Langkah 2: Tiga transaksi dalam satu ronde

| Data keadilan | Instruksi on-chain | Apa yang dipublikasikan |
| - | - | - |
| Transaksi commit | `start_new_round` | Commitment `sha256(secret)`, dalam event `CrashRoundPrepared`, sebelum taruhan dibuka |
| Transaksi block hash | `start_game` | Slot hash Solana yang ditangkap, dalam event `CrashGameStarted`; hasilnya terkunci sejak saat ini |
| Transaksi reveal | `crash` | Rahasia yang diungkap dan titik crash akhir, dalam event `CrashRoundFinalized` |

## Langkah 3: Baca nilainya dari Solana explorer

Buka setiap transaksi di explorer pilihan Anda (Solscan, Solana Explorer, SolanaFM…), pada jaringan tempat aplikasi berjalan. Di halaman transaksi, cari **event** program yang sudah didekode (kadang berada di bawah "Logs" atau "Instruction data"; explorer yang mengenal IDL program akan mendekode field event berdasarkan namanya).

Kumpulkan empat nilai:

* `commit_hash`: 32 byte, dari transaksi commit.
* `blockhash`: 32 byte, dari transaksi block hash.
* `local_e`: rahasia 32 byte, dari transaksi reveal.
* `crash_point_bps`: titik crash akhir dalam basis poin, dari transaksi reveal (29948 berarti 2.9948x).

<Tip>
  **Encoding**

  Explorer menampilkan nilai 32 byte sebagai hex, base58, atau array byte, tergantung situsnya. Skrip di bawah mengharapkan **hex**; lakukan konversi jika explorer Anda menampilkan base58 (decoder base58 apa pun bisa dipakai; yang penting adalah nilai byte-nya, bukan notasinya).
</Tip>

## Langkah 4: Periksa urutannya

Di explorer, bandingkan **slot** (atau block time) transaksi commit dan transaksi block hash. Commit harus lebih awal. Inilah inti dari skema ini: rahasia sudah disegel sebelum entropi yang akan digabungkan dengannya bahkan ada.

## Langkah 5: Hitung ulang titik crash

Jalankan ini dengan Node.js (tanpa dependensi), isi tiga string hex dari Langkah 3:

```js theme={null}
const { createHash } = require("node:crypto");
const sha256 = (buf) => createHash("sha256").update(buf).digest();

// ── Isi dari event on-chain ronde (hex, masing-masing 32 byte) ──
const commit = Buffer.from("<commit_hash hex>", "hex"); // dari tx commit
const blockhash = Buffer.from("<blockhash hex>", "hex"); // dari tx block hash
const secret = Buffer.from("<local_e hex>", "hex"); // dari tx reveal
const edgeBps = 150n; // house edge dalam bps pada saat ronde; lihat Biaya & batas

// 1. Rahasia yang diungkap harus cocok dengan commitment
console.log("commitment ok:", sha256(secret).equals(commit));

// 2. Hitung ulang titik crash: matematika integer yang sama dengan yang dijalankan program
const hash = sha256(Buffer.concat([blockhash, secret])); // blockhash dulu, lalu secret
const X = BigInt(hash.readUInt32BE(0)); // 4 byte pertama, big-endian
const TWO32 = 1n << 32n;
const cappedX = X < TWO32 - 1000n ? X : TWO32 - 1000n;
const raw = ((10000n - edgeBps) * TWO32) / (TWO32 - cappedX); // pembagian BigInt dibulatkan ke bawah
const crashBps = raw > 10000n ? raw : 10000n;

console.log("crash point:", `${Number(crashBps) / 10000}x`, `(${crashBps} bps)`);
```

Kedua pemeriksaan harus lolos: `commitment ok: true`, dan titik crash yang dicetak harus sama dengan pengali **Crashed at** ronde tersebut (dan dengan `crash_point_bps` di event reveal). Jika demikian, Anda telah membuktikan, tanpa memercayai siapa pun, bahwa hasil ronde ini sudah terkunci sebelum ronde dimulai dan dihitung persis dengan formula publik.

<h2 id="dice-and-mines">
  Dice dan Mines
</h2>

Game instan diverifikasi dengan cara yang sama, dari lebih sedikit transaksi:

* **Dice**: satu transaksi per taruhan. Event `DiceBetSettled`-nya berisi semua input penurunan (`slothash`, `user`, `nonce`) serta `roll` dan pembayarannya. Hitung ulang dengan formula di [Keadilan Dice](/id/docs/provably-fair/dice).
* **Mines**: dua transaksi per game. Transaksi awal memublikasikan commitment papan dan slot hash; transaksi penyelesaian mengungkap seed dan seluruh papan. Hitung ulang dengan formula di [Keadilan Mines](/id/docs/provably-fair/mines).

## Jika ada yang tidak cocok

Pertama, singkirkan penyebab yang biasa: nilai base58 yang ditempel di tempat yang seharusnya hex, transaksi yang salah (setiap ronde punya tiga), atau house edge yang berbeda dari yang berlaku saat ronde (edge disimpan di konfigurasi on-chain, dan setiap perubahannya sendiri merupakan transaksi on-chain).

Jika Anda masih mendapati ketidakcocokan yang nyata, justru itulah yang ingin diungkap oleh sistem ini: datanya publik dan permanen, sehingga siapa pun dapat menjalankan ulang pemeriksaan Anda. Hubungi tim dukungan dengan menyertakan nomor ronde, dan perlu diingat bahwa tidak ada penjelasan jujur untuk ketidakcocokan commitment atau formula yang nyata, dan justru karena itulah skema ini membuatnya mustahil disembunyikan.
