gpt4 book ai didi

blockchain - 我们如何在以太坊中生成多个随机数?

转载 作者:行者123 更新时间:2023-12-03 18:22:15 31 4
gpt4 key购买 nike

我希望我的智能合约返回 7 或 8 唯一 调用合约时从 1 到 100 的随机数。获得这种结果的最佳方法是什么?

最佳答案

可能如果您尝试使用以太坊区 block 链构建轮盘赌、彩票和纸牌游戏,因为以太坊区 block 链是确定性的,它给那些选择编写自己的伪随机数生成器 (PRNG) 的人带来了一定的困难。
目前使用的一些易受攻击的方法
如果您使用 block.coinbase、block.difficulty、block.timestamp 等 block 变量作为熵源,所有这些 block 变量都可以被矿工操纵,因此它们不能用作熵源,因为矿工的激励。由于 block 变量显然在同一个 block 内共享,您可以轻松地使用内部消息来产生相同的结果。
其他方法就像使用当前 block 或过去 block 的 block 哈希
或过去区 block 的区 block 哈希与私有(private)种子相结合。在这些情况下使用 block.blockhash(block.number) 函数。然而,在 EVM 中执行交易的那一刻,由于显而易见的原因,正在创建的区 block 的区 block 哈希尚不清楚,并且 EVM 将始终产生零。如果我们使用前一个 block 的 block 哈希来尝试它,攻击者可以使用相同的代码制作漏洞利用合约,以便通过内部消息调用目标合约。两个契约(Contract)的“随机”数字将是相同的。
即使我们将区 block 哈希与私有(private)种子结合起来,本质上是透明的,区 block 链也不能用于以明文形式存储 secret 。从合约存储中提取私有(private)变量指针的值并将其作为参数提供给漏洞利用是微不足道的。
一些值得探索的领域

  • 外部神谕
  • 信号
  • 提交-显示方法

  • 借助 Oraclize 等外部预言机,智能合约可以从 Web API 请求数据,例如货币汇率、天气预报和股票价格(如 random.org)。这种方法的主要缺点是它是集中式的。 Oraclize 守护进程会篡改结果吗?我们可以信任 random.org 吗?
    除了 Oraclize,我们还可以使用 BTCRelay,它是以太坊和比特币区 block 链之间的桥梁。使用 BTCRelay,以太坊区 block 链中的智能合约可以请求 future 的比特币区 block 哈希并将它们用作熵的来源。
    Signidice是一种基于加密签名的算法,可用于仅涉及两方的智能合约中的随机数生成:玩家和房子。该算法的工作原理如下:
  • 玩家通过调用智能合约进行投注。
  • 房子看到赌注,用它的私钥签名,然后将签名发送给智能合约。
  • 智能合约使用已知的公钥验证签名。
  • 然后使用该签名生成一个随机数。

  • Commit-reveal 方法包括两个阶段:
  • “提交”阶段,当各方将其受密码保护的 secret 提交给智能合约时。
  • 一个“揭示”阶段,当各方公布明文种子时,智能合约验证它们是否正确,种子用于生成随机数。

  • 提交-显示方法的更好实现是 Randao . Commit-reveal 可以与 future 的区 block 哈希相结合,使其更加安全。
    这几乎涵盖了使用以太坊生成随机数的所有方法。

    关于blockchain - 我们如何在以太坊中生成多个随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52467248/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com