如何使用智能合约生成随机数

NGD West 5月前 162

非对称熵 (Asymmentropy)

非对称熵可用于运行去中心化的博彩应用。非对称化的博彩与其他博彩系统不同,因为它是不可能被操纵的。这是因为没有人知道能中彩票的号码,这就防止了人们通过操纵结果来选择中奖号码。这可以通过把彩票分成两部分来实现。第一部分用户选择一个数字,并使用非对称加密算法将这个数字的哈希值和其他一些数据一起提交到区块链。其次,他们选择的数字会被不加密地提交到区块链中,然后使用开源算法和从用户输入中衍生出来的随机性来生成获奖的数字。这个过程被称为“非对称熵”,因为它使用了“非对称加密”和用户输入的“熵”来随机生成数据并去中心化地选择获奖数字。下面详细介绍了这个过程。

摘要

传统上,去中心化的应用程序(Dapps)依赖于未来的区块哈希值来实现随机性。 这种方法已经受到质疑,因为区块链的记账员可以在生成新的区块时通过过滤或重新排序交易来确定随机结果而不会破坏任何规则。这个问题在NEO中尤其明显,因为我们现在只有四个记账节点。这个游戏提供了产生真正随机性的机制。我们将博彩作为这种系统概念的证明,并希望它能为其他NEO开发者提供一些灵感。该系统将分两轮进行,确保获胜者是完全随机选择出来的。步骤是:

设置

要玩彩票,用户需要有一个包含NEO和GAS的钱包。

第一轮

用户将填写一份包含3条数据的表格:

  1. 选择4个字节的号码(0 – 4,294,967,296)。
  2. 他们希望购买的彩票入场券总数所需的GAS数量
  3. 公钥

完成后,用户点击“提交”,然后需要在他们的NEO钱包客户端批准用于购买彩票的GAS数量的交易。然后,GAS将通过智能合约被发送到一个去中心化的地址。

(例如,1 GAS = 1张票)

一旦交易获得批准,用户的计算机将通过我们的客户端生成一个随机数。这个数字将通过散列(选择的数字,公钥,系统时间)生成与用户选择的数字相同范围内的随机数。

生成的随机数称为“隐藏号码”。系统现在将使用开源算法对隐藏号码进行散列,并生成称为“隐藏号码的哈希值”的方法

以下5条信息会被提交到区块链。

  1. 游戏ID
  2. 玩家的公钥(PK)
  3. 玩家所选择的号码     
  4. 支付的GAS数量=购买的彩票数   
  5. 隐藏号码的哈希值     

第一轮完成后,系统将关闭向区块链提交任何新项。此时系统不会再出售彩票。

第二轮

所有隐藏的号码会和以下的数据一起从用户的钱包中发布到区块链上:

  1. 游戏ID
  2. 隐藏号码

确定获胜者

这可以确保用户保持匿名。 然后使用所有隐藏号码的平均值,将隐藏号码的平均值与用户选中的中奖号码相匹配来确定彩票的中奖者。

为了使号码与用户匹配,通过开放算法对中奖号码进行散列,如果用户的隐藏号码的哈希值与获奖号码相匹配,彩票的收益就会和原始项一起提交给他们的公钥。

Check(游戏ID, 玩家地址, 匹配所选的号码)

结论

这个彩票应用的目标是运行一个完全去中心化的系统,它基于用户的提交创建随机性。 通过利用提交的彩票号码的匿名性,系统可以对这些数字进行计算并无偏地确定获胜者。

感谢

感谢Neunity @ https://github.com/norchain/Neunity 提供运行博彩智能合约的测试环境。没有您的框架,我们无法完成智能合约的开发。 还要感谢dprat0821一起熬夜讨论才会有非对称熵的产生。特此授权他将“Asymmentropy”一词翻译成中文“非对称熵”。

原文链接:https://github.com/generalkim00/neogame

翻译:包子

更多翻译技术文章:http://neofans.org/category/docs/

最新回复 (0)
全部楼主
返回