[dev] magic dice 공평함을 입증하다 ?! 에 대한 이야기 ...
https://magic-dice.com/provably-fair
위 링크를 클릭하시면 좀 더 자세한 정보를 확인하실 수 있습니다.
한글로 짧게 요약하면 정말 공평합니다 입니다.
- Random Number : 서버시드, 클라이언트 시드 2개를 사용한 랜덤 수로 생성
- Transparency : 투명성, 모든 내역은 블록체인에 공개됨
- Verify Dice Roll : 위 정보 기반으로 검증또한 가능
그렇다면 공평할까요 ?
결과론 적으론, 프로그램적으로는 정말 공평 합니다. 위에서 이야기 한 방식으로 모든 내용은 블록체인에 기록되며 2개의 시드를 사용하여 수정 없이 투명하게 운영이 됩니다.
숨은 진실 under !
under 는 숫자를 포함하지 않습니다.
- 50 미만(이하가 아니라 미만이죠... 1~49)의 숫자가 나오면 2배를 주겠다 라는 이야기 ! ( 49%의 확률 )
그렇습니다. 49% 입니다. ( 하우스도 먹고 살아야 되니까요 ... )
시뮬레이션 결과 입니다.
프로그램 부터 나오면 머리 아파 하시는 분들을 고려하여 결과부터 :)
- 따는 경우도 있지만 평균 적으로 약간 잃게 됩니다. 왜냐면 under 50이 50%가 아니라 49% 이니깐 -_-/
[주의] 랜덤이므로 그때 그때 마다 결과는 달라 질 수 있으며 참조만 바랍니다.
- 100 스팀, under 50 으로 100번 돌린 결과
try : 1, remain : 106.047
try : 2, remain : 114.043
try : 3, remain : 96.052
try : 4, remain : 98.051
try : 5, remain : 84.058
try : 6, remain : 84.058
try : 7, remain : 106.047
try : 8, remain : 108.046
try : 9, remain : 98.051
try : 10, remain : 80.06
- 100 스팀, under 95 으로 100번 돌린 결과
try : 1, remain : 95.559
try : 2, remain : 100.804
try : 3, remain : 100.804
try : 4, remain : 95.559
try : 5, remain : 99.755
try : 6, remain : 97.657
try : 7, remain : 98.706
try : 8, remain : 98.706
try : 9, remain : 96.608
try : 10, remain : 93.461
- 100 스팀, under 2 로 100번 돌린 결과
try : 1, remain : 0.1
try : 2, remain : 50.099
try : 3, remain : 50.099
try : 4, remain : 0.1
try : 5, remain : 50.099
try : 6, remain : 150.097
try : 7, remain : 0.1
try : 8, remain : 0.1
try : 9, remain : 50.099
try : 10, remain : 50.099
자 그렇다면 진짜 함 위 공식대로 만들어 봐야겠죠 ?!
궁금하면 아래 소스를 참조 하여 테스트 해보시면 됩니다. 아래 소스는 nodejs로 구성한 소스 입니다.
const crypto = require('crypto');
/*
*
* 서버 시드(server_seed)와 클라이언트 시드(client_seed)는 변형(지정) 가능
* 단 중복지정 방지를 위해 클라이언트 시드 값은 거래정보(TX ID)를 조합하여 사용
* 매직다이스 같은 경우 server_seed : 랜덤값, client_seed : `랜덤값-블록번호` 사용하며, 랜덤값 이라 명시한 부분을 변경 할 수 있음
*
* @param server_seed 서버 시드
* @param client_seed 클라이언트 시드
* @param div_num 생성 수 범위(나머지 수)
*
* @return 매직넘버 생성기 (1~100) 사이의 숫자를 생성한다
*/
function run_magic_dice(server_seed=Math.random().toString(), client_seed=`${Math.random().toString()}-123456`, div_num=100){
// #1 : (server_seed) 값을 가지고 sha256 기반 해쉬 메시지 인증 코드 생성
let cryptoHmac = crypto.createHmac('sha256', server_seed);
// #2 : 생성된 cryptoHmac(인증코드)를 가지고 client_seed 정보를 변형
let clientHash = cryptoHmac.update(client_seed);
// #3 : clientHash 정보를 hex (16진수) 형태로 변형
let clientHex = clientHash.digest('hex');
// #4 : clientHex(16진수)를 10진수로 변형, 길이가 너무 길기 때문에 10자리로 자른 후 변형
let result_seed = parseInt(clientHex.substr(0,10),16);
// #5 : 게임 형태에 맞게 값 조절 : 다이스 같은 경우 100으로 나눈 나머지 값 사용
return result_seed%div_num+1;
}
/*
* under x 는 less 다
* ( 이 말인 즉슨 under 50은 50을 포함하지 않는다 !! under 50의 확률은 49% 이며 이때 배당은 2배 )
* @param money 배팅금액
* @param num 배팅 숫자
* @return 결과 금액
*/
function under_x(money, num){
let result = run_magic_dice();
let isWin = result<num;
let rate = Number(( 100 / num ).toFixed(2));
let prize = Number((rate*money).toFixed(3));
return {
result:result,
isWin:isWin,
rate:rate,
prize:isWin?prize:0,
remain:isWin?Number((prize-money).toFixed(3)):Number((-money+0.001).toFixed(3))
};
}
/*
* 시뮬레이션
* 100 스팀 가지고 under 50 으로 100번 돌리기
*/
function test(){
for(let t=0;t<10;t++){
let remain = 100;
for(let i=0;i<100;i++){
let res = under_x(1, 50);
remain = Number((remain + res.remain).toFixed(3));
// console.log(`try : ${i+1}, rate : ${res.rate}, isWin: ${res.isWin}, prize: ${res.prize}, remain : ${remain} `);
}
console.log(`try : ${t+1}, remain : ${remain} `);
}
}
test();
맺음말
- 매직다이스 판단은 여러분께 맡기겠습니다 :)

RC가 부족해서 채굴이 안되는데 어떻하죠
스파를 늘려야 RC가 채워지나요?
네 스파업을 하셔야 ㅜㅜ
아니면 기다리셔야 되네요...
Posted using Partiko Android
감사해여
와 나 진짜 방금전에...또ㅠㅠ
요즘 소심해 져서 무서워서 못해먹겠어요ㅋㅋㅋ
순간 또 128개 빨릴뻔 했네요ㅠㅠ 어우 무셔
욕심없이 1개씩 벌려고 하는데 이것도 몇판 연속지면 후덜덜해짐ㅋㅋ
마틴은 뚝배기 지름길이죠 ㅝ
Posted using Partiko Android
49% 일때부터 우린 승률을 접고 시작하는거죠 ㅎㅎ
그래서 손 땠습니다 ㅎㅎㅎㅎ
1%의 소중함...흑흑
도박은 99%의 노력과 1%의 영감을 가지고 해야하는데,,, 이 1%의 영감을 포기했기 때문에 망하는듯요ㅎㅎ
1%가 소중한지 이제 깨닫네요
저도 1스팀 벌려다가 1,2,4,8...결국 300하고 오링나서 ㅋㅋㅋㅋㅋㅠㅠ
Congratulations @wonsama! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word
STOPTo support your work, I also upvoted your post!
Provably vs Probably
Posted using Partiko Android
넹 입증하다가 맞네요 :) 알려주셔서 감사요~~
Posted using Partiko Android
내가 감사해요
Posted using Partiko Android
Under 95로 몇 게임만 했는데 모두 이겼어요.
Posted using Partiko Android
under 95는 확률이 높은 대신 배당이 적은지라 :)
Posted using Partiko Android
그래도 토큰을 분배받을 기회는 훨씬 많아지는 것 같던데요.
Posted using Partiko Android
넹 수익은 줄지만 에어드랍 토큰은 늘지요 상대적으로 :)
추후 매직토큰의 수익 배분이 중요할 것 같아요
Posted using Partiko Android
매직다이스는 「수익의 100%」를 매직다이스 토큰 보유자들에게 「2019년 2월 SMT 발행 전까지」 「토큰 보유 비율에 비례」하여 「배당」을 한다네요.
'If you hold 1% of the total supply, you will receive 1% of the profits. Magic Dice will distribute 70% of the tokens to players.'
0이나 100도 나올 수 있게 프로그램되어 있나요?
Posted using Partiko Android
아래 프로그램은 1-100 숫자가 나와요 :)
Posted using Partiko Android
매직 다이스는 정직하네요.
그래도 확률적으로 플레이어가 돈 벌긴 어렵겠습니다. ㅋ
블록체인 기반 게임은 다 저 방식(클라이언트/서버시드) 으로 넘버를 생성해 체인에 기록하여 공평함을 입증하네요 :)
물론 확률상 하우스엣지 가 늘 따라다녀서 조금씩 손실이 나죠 훗...
Posted using Partiko Android
역시 도박은 이런거죠ㅎㅎㅎㅎ
Hi @wonsama!
Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 3.778 which ranks you at #4797 across all Steem accounts.
Your rank has improved 8 places in the last three days (old rank 4805).
In our last Algorithmic Curation Round, consisting of 214 contributions, your post is ranked at #114.
Evaluation of your UA score:
Feel free to join our @steem-ua Discord server