可公开的eos竞猜游戏随机算法(二)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39842528/article/details/84025368

c++的:

合约参数类型:

signature sig

//游戏随机数hash

checksum256 random_num_hash;
sha256( (char *)&sig, sizeof(sig), &random_num_hash );



//计算出随机的骰子点数

const uint64_t random_roll = ((random_num_hash.hash[0] + random_num_hash.hash[1] + random_num_hash.hash[2] + random_num_hash.hash[3] + random_num_hash.hash[4] + random_num_hash.hash[5] + random_num_hash.hash[6] + random_num_hash.hash[7]) % 100) + 1;

解释:

sig :为开奖的参数之一,私钥签名消息/交易之后的字符串

 js的:

tempSig = sig.substring(7);
bytes = bs58.decode(tempSig);
bytes_str = bytes.toString('hex');
bytes_str = bytes_str.substring(0, bytes_str.length - 8);
bytes_str = '00' + bytes_str;

hash = eosecc.sha256(Buffer.from(bytes_str, 'hex'));

// now get random number of this hash
// rand = parseInt(hash.substring(0,2)) + parseInt(hash.substring(2,4)) + parseInt(hash.substring(4,6)) + parseInt(hash.substring(6,8)) + parseInt(hash.substring(8,10)) + parseInt(hash.substring(10,12)) + parseInt(hash.substring(12,14)) + parseInt(hash.substring(14,16));

var rand = 0;
for (var j = 0; j <= 14; j += 2){
rand += parseInt(hash.substring(j, j + 2), 16);
}

rand = (rand % 100) + 1

console.log("Your random number is: ", rand);


 

解释:

sig :为开奖的参数之一,私钥签名消息之后的字符串  

如果感兴趣欢迎添加博主微信交流:

展开阅读全文

没有更多推荐了,返回首页