[dev] magic dice 공평함을 입증하다 ?! 에 대한 이야기 ...

in #nodejs6 years ago (edited)

스크린샷 2019-01-22 오전 12.08.27.png

https://magic-dice.com/provably-fair

위 링크를 클릭하시면 좀 더 자세한 정보를 확인하실 수 있습니다.


한글로 짧게 요약하면 정말 공평합니다 입니다.

  • Random Number : 서버시드, 클라이언트 시드 2개를 사용한 랜덤 수로 생성
  • Transparency : 투명성, 모든 내역은 블록체인에 공개됨
  • Verify Dice Roll : 위 정보 기반으로 검증또한 가능

그렇다면 공평할까요 ?

결과론 적으론, 프로그램적으로는 정말 공평 합니다. 위에서 이야기 한 방식으로 모든 내용은 블록체인에 기록되며 2개의 시드를 사용하여 수정 없이 투명하게 운영이 됩니다.

숨은 진실 under !

under 는 숫자를 포함하지 않습니다.

스크린샷 2019-01-22 오전 12.14.11.png

  • 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();

맺음말


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

RC가 부족해서 채굴이 안되는데 어떻하죠
스파를 늘려야 RC가 채워지나요?

네 스파업을 하셔야 ㅜㅜ

아니면 기다리셔야 되네요...

Posted using Partiko Android

20190122_003253.png

와 나 진짜 방금전에...또ㅠㅠ
요즘 소심해 져서 무서워서 못해먹겠어요ㅋㅋㅋ
순간 또 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) :

You made more than 10000 upvotes. Your next target is to reach 11000 upvotes.

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Support SteemitBoard's project! Vote for its witness and get one more award!

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:
  • You're on the right track, try to gather more followers.
  • The readers like your work!
  • Good user engagement!

Feel free to join our @steem-ua Discord server

Coin Marketplace

STEEM 0.16
TRX 0.16
JST 0.030
BTC 58474.85
ETH 2500.10
USDT 1.00
SBD 2.39