AOS官方主办的全球黑客马拉松创新大赛已完美落幕,大量优秀的参赛作品已经被AOS钱包DAPP中心上架,其中由美国团队开发的概率游戏Dice便是其中之一。Dice作品在此次大赛中获得了二等奖,经过层层评选最终进入获奖名单的Dice来头不小,其通过智能合约的方式与传统的摇骰子游戏相结合,通过区块链就书的不可篡改和透明特性,实现了游戏的公平性。
那么Dice是如何借助AOS公链平台去实现公平的呢?在技术上又是如何一步步实现的呢?
首先,服务器提交随机数hash到区块链的hashseedques表备用,id表页摇骰子的id,hashServer表示随机数的hash,createTime表示提交的时间戳
二、玩家端通过memo(游戏id | 赢率 | 客户端随机数),提交随机数,如下图为绿色的99,填充到区块链的workingdices表的randomNumber
三、服务器提交hash对应的随机数到区块链的workingdices表的seedServer
四、区块链算出随机数,并决定输赢
resultRandom=randomNumber+seedServer
8=(18+1388789)%100+1
附录一、1个随机数由三步产生区块链交易的附图
附录二,随机数和hash的关系
seedServer=genSeedServer(uuid)
public static Long genSeedServer(uuid) {
int nLen = uuid.length();
Long nSeed = 0l;
for (int i = 0; i < nLen; i++) {
nSeed += uuid.charAt(i)*uuid.charAt(i)*uuid.charAt(i);
nSeed = nSeed;
}
return nSeed%100+1;
}
附录三、算法描述
aos dice,真随机数生成方法
简要描述:
首先整个随机数生成过程是由玩家和服务器区块链,双方共同参与决定
同时服务器先提交随机数hash,客户端后提交随机数,服务器再提交hash对应的随机数,因此服务器无法操控随机数,是真随机数
具体步骤:
1.中心化服务器生成一个32位私钥级随机数PirvateLevelRandomX
2.中心话服务器,提前将sha256(PirvateLevelRandomX)提交给区块链
3.玩家摇一次骰子时,玩家端随机生成ClientRandomY,并将ClientRandomY提交给区块链
4.区块链会将ClientRandomY和sha256(PirvateLevelRandomX)组合到此次摇骰子游戏
5.服务器端提交genSeedServer(PirvateLevelRandomX)的随机数给区块链
6.区块链根据(genSeedServer(PirvateLevelRandomX)+ClientRandomY)%100+1
附录:
public static Long genSeedServer(PirvateLevelRandomX) {
int nLen = PirvateLevelRandomX.length();
Long nSeed = 0l;
for (int i = 0; i < nLen; i++) {
nSeed += PirvateLevelRandomX.charAt(i)*PirvateLevelRandomX.charAt(i)*PirvateLevelRandomX.charAt(i);
nSeed = nSeed;
}
return nSeed%100+1;
}