织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 竞争币 > 以太坊

技术解析如何为 Solidity 智能合约生成随机数

时间:2021-02-23 10:47来源:未知 作者:admin 点击:
原文标题:《随机数与区块链》 撰文:Markus Waas 翻译:登链翻译小组 当我们谈论随机数和区块链时,实际上是两个问题: 如何在智能合约中生成随机数? 如何为股权证明(POS)系统产

原文标题:《随机数与区块链》
撰文:Markus Waas
翻译:登链翻译小组

当我们谈论随机数和区块链时,实际上是两个问题:

  1. 如何在智能合约中生成随机数?
  2. 如何为股权证明(POS)系统产生随机数?或者更一般地说,如何在公共分布式系统中产生可信的随机数?

当然这两个问题也有一些重叠的地方,一些用于第一个问题的方法也可能用于第二个问题,反之亦然。但我可以告诉你,这两个问题的最佳解决方案很可能还没有找到。事实上,这些问题真的很重要,用著名的唐纳德的话说就是:「随机数不应该用随机选择的方法生成」。

为什么这么难?嗯,这是由于随机数的性质。人们可以很容易地创造出一个看似随机的数字流,但这个数字流遵循某种已知的逻辑,从使攻击者能够预测到数字。

技术解析如何为 Solidity 智能合约生成随机数

我们可能会天真地提出,每个节点在本地计算出一个随机数。然后在广播出这个随机数。由于每个节点都会做同样的事情,所以可以用一个函数来计算最后的随机数,这个函数将之前本地产生的所有数字作为输入,并产生一个单一的输出结果随机数,例如:v1 ⊕ v2 - - - ⊕ vn。然而,最后一个广播本地随机数的节点可以等待,直到他从其他节点收到随机数。然后,他可以通过选取一个本地随机数 R 以满足 vx = R ⊕ v1 ⊕ v2 - - ⊕ vn 来产生分布式系统的任何最终随机数。显然,这样一个产生随机数的系统是有缺陷的。

我们需要更好的方式。如何解决随机数的这些问题,值得继续关注详细介绍。你也可以看看预测以太坊智能合约中的随机数 [1]。本文是讨论第一个问题(智能合约中生成随机数)的良好开端。而对于第二个问题,现在有一些有趣的想法,也有一些看似疯狂的想法,比如以太坊基金会的新想法,建立成千上万的 ASIC 来验证 VDF。

为 Solidity 智能合约生成随机数

现在,大多数人都知道,当人们试图在智能合约中生成随机数时,会面临一个问题。遗憾的是没有一个万能的解决方案,让我来介绍一下现有的解决方案。

简短的失败方案回顾

技术解析如何为 Solidity 智能合约生成随机数

我们简单的看一下常见的方案,以及它们为什么不好。在这里我就不详细描述,因为已经有其他的文章描述的很好了。

使用区块变量作为随机数

  • block.number: 区块号。

  • block.timestamp: 区块时间戳。

  • block.difficulty (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容