보안
누가 무엇을 바꿀 수 있는지, 난수는 어디서 오는지, 어떤 위험이 남는지 설명합니다. 위의 표는 손으로 그린 것이 아니라 네트워크에서 직접 읽어 옵니다.
지금 네트워크에 기록된 것
데이터를 읽는 중…
오픈 소스, 익명성, 프라이버시
오픈 소스
프로젝트 전체(컨트랙트, 사이트, 배포 스크립트, 테스트)가 MIT 라이선스로 공개되어 있습니다. 코드를 읽을 수 있습니다. anchor build 명령으로 하는 컨트랙트 빌드는 아직 검증되지 않았습니다('상태' 참고). 출시 후에는 프로그램을 직접 빌드해 네트워크에서 동작하는 것과 비교할 수 있습니다. 확인 방법
저장소 링크는 공개 직후 이곳과 사이트 하단에 나타납니다.
익명 프로젝트
이름과 법인은 공개하지 않으며, 플레이어에게도 이름, 이메일, 전화번호, 여권이 필요 없습니다. 지갑이면 충분합니다. 규칙은 컨트랙트에 기록되어 있어 읽어 볼 수 있습니다. 익명성의 이면
투명하고 익명적인 사이트: 로그인과 계정 없음, 쿠키·분석·카운터·광고 스크립트 없음. 글꼴과 스크립트는 사이트 자체에서 제공되고, 설정(테마, 이 기기의 스핀 기록)은 브라우저에만 저장되며, 사이트 코드가 공개되어 있어 전부 확인할 수 있습니다. 브라우저 주소창의 주소를 대조하세요. 한 글자라도 다르면 공식 사이트가 아닙니다.
사이트가 아는 것과 내 행동을 보는 사람
| 항목 | 구조 |
|---|---|
| 이름, 이메일, 전화번호, 서류 | 필요하지 않으며 어디서도 요구하지 않습니다. 등록할 때도, 출금할 때도요. |
| 쿠키, 분석, 카운터, 광고 | 없습니다. 사이트 코드에 없으며, 외부 스크립트나 글꼴도 불러오지 않습니다. |
| 브라우저에 저장되는 것 | 테마, 휠 표시 방식, 소리와 효과(켰다면), 이 기기의 스핀 기록, 연결했던 지갑, 난수용 보조 계정 주소. 전부 이 기기에만 남고 어디로도 전송되지 않습니다. |
| 사이트가 통신하는 곳 | Solana 네트워크 노드(RPC)와 통신합니다. 게임 데이터를 읽고 트랜잭션을 받습니다. 스핀 동안에는 Switchboard 오라클과도 통신합니다. 이 서비스들은 네트워크의 모든 노드와 마찬가지로 IP 주소와 지갑 주소를 봅니다. |
| 블록체인에 공개되는 것 | 내 주소, 플레이어 번호, 잔액, 스핀, 당첨, 출금: 누구나 볼 수 있습니다. 주소는 가명으로 남지만 완전한 익명은 아닙니다. 주소가 신원과 연결되어 있다면(예: 신원 확인을 거친 거래소에서 SOL이 들어온 경우) 그 연결을 추적할 수 있습니다. |
프로젝트와 플레이어의 익명성은 절대적이지 않으며 이면이 있습니다. 프로젝트에는 청구를 제기할 법인이 없습니다. 이에 대해서는 '위험'에 설명되어 있습니다.
키와 그 권한
| 키 | 할 수 있는 것 | 할 수 없는 것 |
|---|---|---|
| 프로그램 업데이트 권한 | 컨트랙트 코드의 새 버전을 올릴 수 있습니다. | 토큰을 직접 가져갈 수는 없지만, 새 버전의 코드는 원칙적으로 그렇게 할 수 있습니다. 그래서 출시 계획에 따라 키는 먼저 지연이 걸린 멀티시그로 넘어가고 그 후 회수됩니다. 현재 상태는 이 표에 표시됩니다. |
| 토큰 발행(mint) | 없음: 출시 계획에 따라 발행 직후 회수됩니다. | 새 토큰을 만드는 것. |
| 동결(freeze) | 없음: 발급되지 않았습니다. | 누군가의 토큰을 동결하는 것. |
관리자(dev_authority) | 스핀의 10%로 쌓인 몫을 가져가기(claim_dev). | 규칙 변경, 플레이어 잔액·상금·잭팟·활동 기금 가져가기. |
홍보(promo_authority) | 홍보 기금에서 지급하기(promo_pay). | 그 외 전부. |
1) 출시 시점에는 디플로이어가 보유; 2) 메인넷 가동 전에 모든 업데이트에 지연이 걸리는 멀티시그(Squads)로 이전되어 플레이어가 변경을 미리 볼 수 있음; 3) 프로젝트가 안정되면 권한이 영구 회수되고 코드가 동결됨. 현재 단계는 위 표에 표시됩니다.
난수의 출처
컨트랙트는 난수를 스스로 만들지 않고 프로젝트에서 받지도 않습니다. Switchboard On-Demand를 사용합니다. 베팅은 한 트랜잭션에 고정되고(컨트랙트가 블록 번호를 기억), 값은 나중에 오라클이 공개하며 베팅 시점에는 아직 존재하지 않았던 블록의 해시에 연결됩니다. 오라클이 정직하게 동작하는 한 이 값을 미리 고르거나 예측할 수 없습니다. 다만 Switchboard에 대한 신뢰는 남습니다. 외부 의존성이기 때문입니다.
컨트랙트는 하나의 32바이트 값에서 sha256으로 필요한 만큼의 숫자를 만들어 내며, 플레이어는 이에 영향을 줄 수 없습니다. 컨트랙트는 Switchboard 프로그램이 소유한 난수 계정만 받아들입니다(이 검사가 없다면 누구나 원하는 값이 든 자기 계정을 끼워 넣을 수 있습니다).
오라클이 동작하지 않으면 스핀이 멈추며, 3,000 블록이 지난 뒤 닫힌 스핀의 베팅 금액은 돌려받지 못합니다.
컨트랙트가 아예 할 수 없는 것
확률 바꾸기
모든 수치는 코드의 상수입니다. 새 수치는 프로그램의 새 버전으로만 가능하며, 이는 업데이트 트랜잭션으로 드러납니다.
게임 잔액 가져가기
'플레이어에게서 가져가기' 명령은 없습니다. 잔액은 출금 시 본인에게, 스핀 시 베팅으로만 나갑니다.
토큰 발행
출시 계획에 따라 발행 권한은 회수됩니다. 그 후 총 발행량 100B는 소각으로 줄어들 수만 있습니다.
이중 지급
스핀은 한 번만 정산됩니다. 토큰 보존(풀과 잔액의 합이 보관소 보유량을 넘지 않음)은 다수 플레이어와 1000회 스핀 묶음 시나리오의 자동 테스트로 검증됩니다.
남아 있는 위험
- 코드 오류. 컨트랙트는 테스트로 검증되었지만 독립 감사는 받지 않았습니다('프로젝트 상태' 참고). 발견되지 않은 오류로 자금을 잃을 수 있습니다.
- 프로그램 업데이트. 업데이트 권한이 회수되기 전까지는 관리자(또는 멀티시그)가 이론상 다른 규칙의 버전을 배포할 수 있습니다. 위 표를 지켜보세요.
- 오라클과 네트워크. Switchboard 장애나 Solana 혼잡은 스핀을 지연시키며, 긴 장애(약 20분 초과) 시 베팅 금액은 반환 없이 사라집니다. 반환이 없는 것은 의도된 설계입니다. 그렇지 않으면 결과를 미리 보고 진 베팅을 무를 수 있기 때문입니다.
- 컨트랙트 밖의 관리자 토큰. 마케팅과 예비금(합쳐서 발행량의 약 30%)은 컨트랙트에 잠겨 있지 않고, 개발자 몫(10%)은 외부 서비스의 베스팅에 있습니다. 베스팅: 링크 미기재; 유동성 잠금: 링크 미기재; 관리자 멀티시그: 링크 미기재. 링크가 없다면 아직 확인할 수 없다고 보세요.
- 홍보 기금.
promo_authority키는 기금에 쌓인 것을 아무 주소로나 보낼 수 있습니다. 모든 지급은 공개되지만(PromoPaid이벤트) 컨트랙트는 돈이 어디에 쓰였는지 검사하지 않습니다. - 무료 스핀과 다중 계정. '사람인지' 확인하는 장치는 게임에 없고 있을 수도 없습니다. 한 사람이 여러 지갑을 등록해 각각 무료 스핀을 받을 수 있습니다. 지출은 활동 기금 규모로 제한되지만, 상당한 몫을 빼 갈 수 있습니다.
- 큰 적립금. 잭팟 적립금이 평소보다 클수록 스핀당 기대 환원이 높아지며, 아주 크면 100%를 넘을 수 있습니다. 모든 프로그레시브 잭팟이 이렇게 동작하며, 노련한 플레이어는 큰 적립금을 노리고 옵니다.
- 네트워크 속도. 모든 스핀이 컨트랙트의 공용 계정 하나를 거치므로 피크 시간에는 대기열이 길어질 수 있습니다. 게임이 느려질 뿐 결과는 달라지지 않습니다.
- 사이트는 컨트랙트가 아닙니다. 사이트 주소는 바뀌거나 사라질 수 있습니다. 그래도 컨트랙트는 네트워크에 남으며, 호환되는 아무 클라이언트로나 직접 다룰 수 있습니다.
- 익명의 관리자. 이름과 법인은 공개되지 않습니다. 문제가 생겨도 청구를 제기하거나 소송·고객 지원으로 돈을 돌려받을 수 없습니다. 보호 장치는 컨트랙트에 기록되어 있고 스스로 검증할 수 있는 것뿐입니다.
- 법. 많은 나라에서 도박은 제한되거나 금지되어 있습니다. 이는 본인의 책임입니다.
- 이것은 운에 좌우되는 게임입니다. 플레이어는 평균적으로 베팅의 일부를 잃습니다.
직접 확인하는 법
- 익스플로러(Solscan, Solana Explorer)에서 프로그램 주소를 열고 Upgrade Authority 필드를 찾으세요. 비어 있다면 코드는 동결된 것입니다.
- 토큰을 열어 보세요. Mint Authority와 Freeze Authority 필드가 비어 있어야 합니다.
- 프로그램의 config 계정을 열어 적립금 액수, 스핀 수, 소각량을 '경제 구조' 페이지와 대조하세요.
- 공개 코드로 컨트랙트를 빌드하고(
anchor build --verifiable) 해시를 네트워크의 것과 비교하세요(solana-verify).