Skip to main content
Một lần tung Dice hoàn toàn không dùng giá trị bí mật nào của nhà vận hành. Kết quả được dẫn xuất on-chain từ một slot hash của Solana ghi nhận lúc lượt cược của bạn được thực thi, địa chỉ tài khoản của bạn và bộ đếm lượt cược cá nhân của bạn, rồi được tất toán ngay trong chính giao dịch đặt cược. Không có seed nào để nhà vận hành chọn, và cũng không có gì cần công bố sau đó. Trang này trình bày cơ chế chính xác đằng sau mỗi lần tung Dice. Dice là trường hợp đơn giản nhất của cơ chế công bằng có thể kiểm chứng (Provably Fair): hoàn toàn không có giá trị bí mật nào của nhà vận hành. Kết quả tung được dẫn xuất từ các đầu vào công khai và tất toán on-chain trong cùng giao dịch đặt cược.

Vì sao Dice không có bước cam kết?

Crash cần một giá trị bí mật đã cam kết vì kết quả của nó phải cố định nhưng được giấu kín trong suốt ván chơi. Một lần tung xúc xắc không có giai đoạn như vậy: kết quả được sử dụng ngay trong chính lệnh tạo ra nó. Vì thế, thay vì cam kết một giá trị bí mật, phép dẫn xuất đơn giản là không dùng bất kỳ đầu vào nào từ nhà vận hành: không có gì để cam kết, không có gì để công bố, và không có seed nào mà nhà vận hành có thể chọn cho có lợi. Nguồn ngẫu nhiên đến từ chính mạng Solana, được trộn với các giá trị định danh lượt cược của bạn:
  • slothash: mục mới nhất trong sysvar SlotHashes của Solana tại thời điểm giao dịch cược của bạn được thực thi. Đây là nguồn ngẫu nhiên do mạng tạo ra, chưa được biết khi giao dịch được tạo (người gửi không thể biết chính xác giao dịch sẽ rơi vào slot nào).
  • user: địa chỉ 32 byte của tài khoản người dùng on-chain của bạn (tài khoản mà chương trình dẫn xuất từ ví của bạn). Điều này khiến kết quả tung giữa các người chơi độc lập với nhau: hai lượt cược rơi vào cùng một slot sẽ có kết quả khác nhau.
  • nonce: bộ đếm lượt cược cá nhân của bạn, lưu on-chain và tăng lên sau mỗi lần chơi. Điều này khiến các lượt cược liên tiếp của chính bạn độc lập với nhau, kể cả trong cùng một slot, đồng thời chống gửi trùng.

Công thức chính xác của một lần tung Dice là gì?

Những chi tiết quan trọng khi bạn tính lại:
  • Đầu vào của hàm hash là phép nối theo đúng thứ tự này: thẻ ASCII "dice", slot hash, địa chỉ tài khoản người dùng, rồi đến nonce được mã hóa thành 8 byte little-endian.
  • Mẫu là 16 byte đầu của đầu ra SHA-256, đọc như một số nguyên không dấu 128-bit big-endian, rồi lấy modulo 10,000.
  • Việc lấy modulo 10,000 một mẫu 128-bit có độ lệch lý thuyết dưới 2⁻¹¹⁴, nhỏ hơn lợi thế nhà cái hàng chục bậc độ lớn, nên nó được ghi rõ trong tài liệu thay vì được hiệu chỉnh.

Điều kiện thắng và tiền trả thưởng

Tỷ lệ thắng bạn chọn phải nằm trong khoảng 2% đến 98%. Với lợi thế nhà cái hiện tại là 1.5% (edge_bps = 150): Mức hoàn trả kỳ vọng là như nhau với mọi mục tiêu: tỷ lệ thắng × hệ số nhân ≈ 98.5% tiền cược (việc làm tròn xuống có lợi cho nhà cái tối đa một điểm cơ bản). Lợi thế nhà cái và các giới hạn hiện tại được liệt kê trong Phí và giới hạn.

Điều gì được bảo đảm, điều gì không

Được chương trình thực thi:
  • Kết quả tung được dẫn xuất và tất toán trong một lệnh on-chain duy nhất, từ các đầu vào mà chương trình tự đọc. Backend không cung cấp kết quả tung và không thể báo sai nó.
  • Nhà vận hành không đóng góp đầu vào nào vào phép dẫn xuất: không có server seed nào để dò tìm kết quả có lợi.
  • Nonce của bạn phải được gửi lại chính xác, nên cùng một lượt cược không thể vô tình (hay cố ý) bị chơi hai lần.
  • Mỗi lần chơi đều công bố toàn bộ đầu vào dẫn xuất và kết quả, nên bất kỳ ai cũng có thể tính lại mọi lần tung trong lịch sử.
Lưu ý thẳng thắn: thời điểm gửi giao dịch. Cược Dice không tốn phí gas: backend của MCC ký và gửi giao dịch thay bạn, nên nhà vận hành kiểm soát thời điểm giao dịch được gửi. Hash của slot N−1 trở nên công khai khi slot N bắt đầu, nên một nhà vận hành có độ trễ rất thấp có thể ước tính kết quả tung mà một lượt cược sẽ nhận được nếu nó rơi vào slot hiện tại, và trì hoãn việc gửi để rút lại kết quả. Cơ chế này chấp nhận điều đó thay vì giả vờ không có (loại bỏ nó sẽ cần một oracle VRF có chi phí mỗi lượt cược vượt quá giá trị kỳ vọng của nhà cái với các lượt cược nhỏ). Những gì giới hạn nó:
  • Việc đưa vào khối không hoàn toàn kiểm soát được: chính mạng, không phải người gửi, quyết định chính xác slot mà giao dịch rơi vào.
  • Mọi đầu vào đều được công bố, nên các mẫu trì hoãn gửi và mọi sai lệch của tỷ lệ thắng tổng thể so với tỷ lệ niêm yết đều có thể được bất kỳ ai đo lường từ dữ liệu công khai. Việc lạm dụng có hệ thống không thể bị che giấu.

Làm thế nào để xác minh một lần tung Dice?

Mỗi lần chơi phát ra một sự kiện DiceBetSettled ngay trong giao dịch của lượt cược, chứa mọi thứ bạn cần: slothash, user, nonce, target_bps, direction, win_chance_bps, roll, multiplier_bps và is_win, cùng toàn bộ chi tiết tất toán. Để xác minh:
  1. Mở giao dịch của lượt cược trên một trình khám phá Solana và đọc các trường của sự kiện (màn hình Dice trong ứng dụng hiển thị các đầu vào công bằng trong phiên của bạn, và lịch sử cược của bạn có liên kết tới giao dịch).
  2. Tính lại sha256("dice" ‖ slothash ‖ user ‖ nonce), lấy 16 byte đầu theo big-endian modulo 10,000, rồi so sánh với roll của sự kiện.
  3. Kiểm tra kết luận thắng/thua (roll < target với Under, roll > target với Over) và hệ số nhân theo công thức ở trên.
Xem Xác minh một ván để biết các mẹo chung về cách đọc dữ liệu sự kiện từ trình khám phá. Để biết cách chơi game này, xem hướng dẫn game Dice.