TL;DR

  • ExactOdds는 베팅 전에 결과를 고정하는 커밋-공개 시드(commit-reveal seeds)와 여러 실행 환경에서 게임 프로그램의 출력이 바이트 단위로 동일해야 하는 정확성 법칙(exactness law)을 결합해, 게임 결과와 규칙을 모두 검증하는 프로토콜임.
  • 기존의 ‘검증 가능한 공정성’이 결과만 증명하는 데 비해, ExactOdds는 감사 대상 프로그램만 실행을 통과할 수 있도록 해 운영 중 다른 규칙이 적용되지 않음을 검증함.
  • 저장소에는 주사위·동전 던지기·룰렛 참조 게임, 정확성 게이트 실행기, 테스트 기준값, 실행 환경별 보고서와 검증 실행에서 나온 소스 해시 영수증이 포함됨.
  • 플레이어는 소스 해시, 공개된 서버 시드, 게임 결과와 검증 영수증을 확인해 라운드를 재현할 수 있으며, 감사자와 운영자는 게이트를 실행해 다섯 실행 환경의 결과가 일치하는지 확인할 수 있음.
  • ExactOdds는 카지노나 게임 라이선스, 자금 보관 서비스 또는 난수 생성기가 아니며, AGPL-3.0 또는 Slid Phi Labs 상용 라이선스로 제공됨.

ExactOdds

  • ExactOdds의 원칙은 증명 가능한 공정한 결과, 증명 가능한 규칙, 둘 다 아니면 어느 쪽도 아님임.
  • ExactOdds는 두 요소로 구성된 검증 가능한 공정 게임 프로토콜임. 하나는 베팅 전에 결과가 정해졌음을 보이는 커밋-공개 시드이며, 다른 하나는 게임 프로그램이 Python, JavaScript, TypeScript, C, C++의 각 실행 환경에서 바이트 단위로 동일한 출력을 내도록 요구하는 정확성 법칙임. 이를 충족하지 못하는 프로그램은 거부됨.
  • 오늘날의 ‘검증 가능한 공정성’은 결과만 증명하지만, ExactOdds는 규칙도 증명함. 감사자가 승인한 프로그램만 게이트를 통과할 수 있으므로 운영자가 감사자에게 보여준 것과 다른 규칙을 실제 운영에 적용할 수 없음.

저장소 구성

  • games/: 검증 가능한 주사위 게임 provably-fair-dice.cuni, 검증 가능한 동전 던지기 게임 provably-fair-coin-flip.cuni, 검증 가능한 룰렛 게임 provably-fair-roulette.cuni로 구성된 세 가지 참조 게임임. 짧고 읽기 쉬우며 결정론적이고, 시드를 입력받아 결과를 출력함.
  • gate/: 정확성 게이트 실행기 run-gate.sh, 기준 테스트 데이터(fixtures/), 실행 환경별 게이트 보고서 GATE_REPORT.md로 구성됨.
  • receipts/: 2026-09-26 검증 실행에서 나온 소스 해시 영수증이 포함됨.
  • paper/: 전체 프로토콜 문서 PAPER.md, PAPER.pdf, 카지노 운영자를 위한 한 페이지 요약 OPERATOR_ONEPAGER.md가 포함됨.

플레이어를 위한 게임 검증 5단계

  • 게임 소스, SHA-256 도구, 그리고 Python 3, node, gcc 중 하나가 필요함.
  • 1. 소스를 확보함. 저장소의 games/provably-fair-coin-flip.cuni 또는 카지노가 공개한 사본을 사용함.
  • 2. 소스 해시를 확인함. sha256sum games/provably-fair-coin-flip.cuni 결과가 receipts/provably-fair-coin-flip.receipt.json의 source_hash와 일치해야 함. 일치하지 않으면 다른 게임이므로 진행을 중단해야 함.
  • 3. 공개된 시드를 확인함. 라운드가 끝난 뒤 카지노가 공개한 server_seed에 echo -n "$server_seed" | sha256sum을 실행한 결과가 베팅 전에 공개된 커밋 값과 일치해야 함.
  • 4. 라운드를 다시 실행함. 공개된 서버 시드, 플레이어의 클라이언트 시드, 라운드 번호를 프로그램의 동전 던지기 함수에 입력해 실행함. 게이트가 모든 실행 환경의 결과 일치를 보장하므로 어느 환경에서든 실행할 수 있으며, 출력은 카지노가 해당 라운드에 보고한 결과와 일치해야 함.
  • 5. 영수증을 확인함. receipts/에 게이트 판정이 있으며, 감사자는 ./gate/run-gate.sh를 다시 실행해 PASS 결과를 재현할 수 있음.

감사자와 운영자를 위한 게이트 실행

  • ./gate/run-gate.sh를 실행함.
  • ExactOdds 참조 컴파일러가 필요하며, 빌드 경로를 PROVABLY_COMPILER=/path/to/cuni ./gate/run-gate.sh 형태로 지정함.
  • 기본 경로는 ../cuni-langs/target/debug/cuni이며, 다음으로 ~/workspace/cuni-langs/target/debug/cuni, 그다음 PATH의 cuni를 확인함.
  • 게이트는 각 게임에 대해 다섯 가지 네이티브 실행 환경의 프로그램을 생성하고 실행한 뒤, 표준 출력이 바이트 단위로 동일한지 요구함. 새 소스 해시 영수증을 receipts/에 기록하고 출력을 기준 테스트 데이터와 대조함.
  • 종료 코드 0은 모든 게임이 검증을 통과하고 기준 테스트 데이터에 변경이 없음을 의미함.

참고 자료

  • 전체 프로토콜: paper/PAPER.md 및 paper/PAPER.pdf
  • 운영자 요약: paper/OPERATOR_ONEPAGER.md
  • 실행 환경별 증거: gate/GATE_REPORT.md

라이선스

  • 이중 라이선스 적용 대상임: AGPL-3.0(LICENSE.AGPL-3.0) 또는 Slid Phi Labs 상용 라이선스(LICENSE.COMMERCIAL)로 제공됨. 자세한 내용은 LICENSE와 NOTICE 참조 대상임.
  • 저작권 표기: © 2026 Slid Phi Labs / Corey Tasz.

해당하지 않는 것

  • 카지노, 게임 라이선스, 자금 보관 서비스 또는 난수 생성기가 아님. 자세한 내용은 논문 §5에 있음.