Dice에는 왜 커밋 단계가 없나요?
Crash는 라운드가 진행되는 동안 결과가 확정되어 있으면서도 숨겨져 있어야 하므로 비밀값을 커밋해야 합니다. Dice에는 그런 단계가 없습니다. 결과는 그 결과를 뽑는 명령어 안에서 바로 사용됩니다. 그래서 비밀값을 커밋하는 대신, 도출 과정에 운영자 입력을 전혀 사용하지 않습니다. 커밋할 것도, 공개할 것도 없으며, 운영자가 유리하게 고를 수 있는 시드도 없습니다. 엔트로피는 Solana 네트워크 자체에서 나오며, 여기에 베팅을 식별하는 값이 섞입니다.slothash: 베팅 트랜잭션이 실행되는 순간 SolanaSlotHashessysvar의 가장 최근 항목입니다. 네트워크가 생성하는 엔트로피로, 트랜잭션을 만드는 시점에는 알 수 없습니다(보내는 쪽은 트랜잭션이 정확히 어느 슬롯에 포함될지 알 수 없습니다).user: 온체인 사용자 계정(프로그램이 지갑으로부터 도출하는 계정)의 32바이트 주소입니다. 덕분에 플레이어마다 결과가 독립적이며, 같은 슬롯에 들어간 두 베팅도 서로 다른 결과를 받습니다.nonce: 온체인에 저장되고 플레이할 때마다 증가하는 개인 베팅 카운터입니다. 같은 슬롯 안에서도 본인의 연속 베팅이 서로 독립적이 되며, 중복 제출 방지 역할도 합니다.
Dice 결과의 정확한 공식은 무엇인가요?
- 해시 입력은 정확히 이 순서대로 이어 붙인 값입니다. ASCII 태그
"dice", 슬롯 해시, 사용자 계정 주소, 그리고 8바이트 리틀엔디언으로 인코딩한 논스(nonce)입니다. - 샘플은 SHA-256 출력의 처음 16바이트를 빅엔디언 부호 없는 128비트 정수로 읽은 뒤, 10,000으로 나눈 나머지입니다.
- 128비트 샘플을 10,000으로 나눈 나머지에는 이론적으로 2⁻¹¹⁴ 미만의 편향이 있습니다. 이는 하우스 엣지보다 수십 자릿수나 작은 값이므로, 보정하지 않고 문서로 명시합니다.
승리 조건과 지급액
edge_bps = 150) 기준:
기대 수익률은 모든 목표에서 동일하게 베팅액 대비
승률 × 배수 ≈ 98.5%입니다(내림 처리로 인한 차이는 하우스에 유리하게 최대 1 베이시스 포인트입니다). 현재 하우스 엣지와 한도는 수수료 및 한도에 나와 있습니다.
보장되는 것과 보장되지 않는 것
프로그램이 강제하는 사항:- 결과는 프로그램이 직접 읽는 입력값으로부터, 하나의 온체인 명령어 안에서 도출되고 정산됩니다. 백엔드는 결과를 제공하지 않으며, 잘못 보고할 수도 없습니다.
- 운영자는 도출 과정에 아무 입력도 제공하지 않습니다. 유리한 결과를 얻기 위해 반복 시도할 서버 시드가 없습니다.
- 논스는 정확히 일치해야 하므로, 같은 베팅이 실수로(또는 악의적으로) 두 번 플레이될 수 없습니다.
- 모든 플레이가 도출 입력값과 결과를 모두 게시하므로, 과거의 모든 결과를 누구나 다시 계산할 수 있습니다.
N−1의 해시는 슬롯 N이 시작될 때 공개되므로, 지연 시간이 매우 짧은 운영자라면 베팅이 현재 슬롯에 포함될 경우 받을 결과를 추정하고, 제출을 늦춰 다시 뽑을 수도 있습니다. 이 방식은 그렇지 않은 척하기보다 이 점을 인정합니다(이를 없애려면 VRF 오라클이 필요한데, 베팅당 비용이 소액 베팅에서 하우스의 기댓값을 넘어섭니다). 이를 제한하는 요소는 다음과 같습니다.
- 포함 시점을 완전히 통제할 수 없습니다. 트랜잭션이 들어갈 정확한 슬롯은 보내는 쪽이 아니라 네트워크가 결정합니다.
- 모든 입력값이 게시되므로, 제출 지연 패턴이나 전체 승률이 표시된 확률에서 벗어나는 정도를 공개 데이터로 누구나 측정할 수 있습니다. 체계적인 악용은 숨겨질 수 없습니다.
Dice 결과는 어떻게 검증하나요?
모든 플레이는 해당 베팅의 트랜잭션 안에서DiceBetSettled 이벤트를 발생시키며, 여기에 필요한 모든 값이 담겨 있습니다. slothash, user, nonce, target_bps, direction, win_chance_bps, roll, multiplier_bps, is_win, 그리고 전체 정산 내역입니다. 검증 방법:
- Solana 익스플로러에서 베팅 트랜잭션을 열고 이벤트 필드를 읽습니다(앱의 Dice 화면에 현재 세션의 공정성 입력값이 표시되며, 베팅 기록에서 해당 트랜잭션으로 이동할 수 있습니다).
sha256("dice" ‖ slothash ‖ user ‖ nonce)를 다시 계산하고, 처음 16바이트를 빅엔디언으로 읽어 10,000으로 나눈 나머지를 이벤트의roll과 비교합니다.- 승패 판정(언더는
roll < target, 오버는roll > target)과 배수를 위 공식과 대조합니다.