链资讯 链资讯
Ctrl+D收藏链资讯
首页 > SOL > 正文

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

作者:

时间:

使用区块哈希作为随机源在很多场景下都能很好地发挥作用,但当涉及到很大利益的时候可能会让矿工作弊。

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

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

如何在智能合约中生成随机数?如何为股权证明系统产生随机数?或者更一般地说,如何在公共分布式系统中产生可信的随机数?当然这两个问题也有一些重叠的地方,一些用于第一个问题的方法也可能用于第二个问题,反之亦然。但我可以告诉你,这两个问题的最佳解决方案很可能还没有找到。事实上,这些问题真的很重要,用著名的唐纳德的话说就是:「随机数不应该用随机选择的方法生成」。

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

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

BBKX平台ETF专区每日行情资讯:据BBKX行情显示,BBKX交易平台ETF专区多个币对持续上涨,截至今日9:05(UTC+8),

BTC3L /USDT当前净值0.2401美元,日内涨幅17.52%,

BCH3L /USDT当前净值0.2736美元,日内涨幅11.99%,

QTUM3L /USDT当前净值1.9724美元,日内涨幅11.61%。

杠杆ETF是一种锚定标的资产价格变化的指数基金。BBKX平台目前已经上线BTC、ETH、EOS多个主流币种以及HT、BNB、OKB等平台币。

BBKX成立于2019年6月,专注衍生品交易,已获得节点资本与链上基金联合投资。[2020/6/2]

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

为Solidity智能合约生成随机数

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

BitSG币星杠杆ETF每日行情播报:截至5月29日10:00(GMT+8),杠杆ETF专区BTC3L/USDT当前净值0.203美元,涨幅0.19%;

ETH3L/USDT当前净值0.081美元,涨幅10.09%;

EOS3L/USDT当前净值0.017美元,涨幅5.52%;

XRP3L/USDT当前净值0.030美元,涨幅3.36%;

BCH3L/USDT当前净值0.024美元,涨幅6%;

ETC3L/USDT当前净值0.043美元,涨幅12.53%;

XTZ3L/USDT当前净值0.076美元,涨幅6.1%。

ETF全称为Exchange Traded Fund,目前BitSG币星已经上线BTC、ETH、EOS、XRP、BCH、BSV、LTC、ETC等多个币种。[2020/5/29]

简短的失败方案回顾

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

使用区块变量作为随机数

block

uint256randomNumber=uint256(blockhash(blockHashesToBeUsed));blockHashesToBeUsed=0;gameWeiValues=0;if(randomNumber!=0||randomNumber%2==0){uint256winningAmount=gameWeiValues*2;msg

BitSG币星杠杆ETF每日行情播报:截至5月25日10:00(GMT+8),杠杆ETF专区BTC3S/USDT当前净值0.29美元,涨幅9.75%;

ETH3S/USDT当前净值0.33美元,涨幅5.87%;

TRX3S/USDT当前净值0.11美元,涨幅8.74%;

XTZ3S/USDT当前净值0.04美元,涨幅8.01%;

LTC3S/USDT当前净值0.60美元,涨幅5.93%;

LINK3S/USDT当前净值0.02美元,涨幅5.33%;

DASH3S/USDT当前净值1.11美元,涨幅6.02%;

ETF全称为Exchange Traded Fund,目前BitSG币星已经上线BTC、ETH、EOS、XRP、BCH、BSV、LTC、ETC等多个币种。[2020/5/25]

}

randomNumber!=0的检查是必不可少的,因为Solidity只能回溯256个块。因此,如果玩家等待的时间超过256个区块,会强制为0。例如,这已经被用于黑客SmartBillions。

所以,使用未来的区块哈希,就很好吗?

BitSG币星杠杆ETF每日行情播报:截至4月29日10:00(GMT+8),杠杆ETF专区BTC3L/USDT当前净值0.145美元,涨幅1.82%;

ETH3L/USDT当前净值0.076美元,涨幅3.53%;

XTZ3L/USDT当前净值0.066美元,涨幅2.48%;

EOS3L/USDT当前净值0.026美元,涨幅4.28%;

XPR3L/USDT当前净值0.055美元,涨幅12.60%;

LTC3L/USDT当前净值0.046美元,涨幅9.36%;

BCH3L/USDT当前净值0.039美元,涨幅5.02%。

ETF全称为Exchange Traded Fund,目前BitSG币星已经上线BTC、ETH、EOS、XRP、BCH、BSV、LTC、ETC等多个币种。[2020/4/29]

这要看情况!你是否允许中奖金额高于区块奖励的注?那么就要注意矿工的操作。如果我们假设区块奖励为3个ETH,任何超过6个ETH的注实际上都会给矿工提供作弊的动机。虽然矿工不能自由选择区块的哈希值,但他可以选择不发布新发现的区块哈希值来影响随机数。

承诺模式

哈佛医学院利用区块链技术解决基因数据所有者与需求者间买卖脱节问题:近日,哈佛大学医学院教授George M.Church博士与其学生Dennis Grishin,和前谷歌项目经理Kanmal Obbad联合创立了Nebula Genomics公司,该公司将基于区块链技术解决基因数据所有者和数据购买者之间存在的脱节问题,加速有用基因组数据之间的交换。具体而言:个人对自己的基因组数据拥有完全所有权和控制权;生物和制药公司以更低成本、更短的时间采集基因数据信息,并可通过与数据所有者即时沟通对基因数据进行静态分析。[2018/3/5]

自1981年以来,承诺模式的第一个版本已经存在。看一下MichaelBlum的电话里翻硬币。这是一个有趣的阅读。我们可以简单地在Solidity中使用哈希来实现,这是怎样的呢?

我们用开头所说的天真想法:

每个节点在本地计算一个随机数。它进一步广播这个随机数。由于每个节点都会做同样的事情,所以可以使用一个函数计算最终的随机数,该函数将之前本地产生的数字作为输入,并产生一个单一的输出,例如,v?⊕v?---⊕v?。

现在,在承诺模式下,一个节点将不广播随机数,而是先计算该数的哈希值。这个哈希将是随机数值的承诺。然后它就会广播承诺哈希。这有什么用?

承诺,顾名思义,一个节点之后再提交原始随机数值,因为不可能找到碰撞。因此,在揭示阶段,一个节点不能再改变其秘密原始随机数值。当然,每个节点只有在收到所有其他节点的承诺后,才开始揭示阶段。程序是这样的:

所有参与者,P1...Pn,每人产生一个秘密随机值Vi。Pi计算其秘密随机值的承诺哈希值:Ci=H(Vi)。每个Pi先发送Ci。在收到所有的Ci后,每个Pi发送Vi。所有参与者可以通过检查Ci==H(Vi)来验证接收的秘密随机值。当所有的Vi都被揭示和验证后,随机数生成的结果将是R=V1⊕V2⊕...⊕Vn。(XOR)如果有一个参与者没有透露他的Vi,他就自动输了。

听起来好得不像真的?你是对的。这只适用于两个节点,例如,在一个有银行和单个玩家的中。我已经在Solidity和AWSLambda中实现了一个概念验证的原型。

让我们看看为什么这只对两个节点有效。

我们面临最后一个节点Pi揭示随机数值的问题,因为它可以比其他人更早地用它秘密值计算最后的R,这就是最后揭示者问题。它揭示的Vi可能无法再影响R,然而,它可能选择不揭示该值,使所有其他各方除了中止随机数生成外没有其他选择。如在两个用户的情况下,不揭示的节点可能会输掉这场局。不过,在东方参与情况下是不够的。由于多个用户参与,只有一个不暴露方会有损失,所以攻击者可能会做以下事情:

创建很多数量的实体,并与所有实体一起参与注。在揭示阶段,保留他最后一个实体的秘密随机值。等到其他每个实体都揭示出它们的随机值,然后计算出最终结果。如果计算出一个积极的结果,则选择揭示最后一个实体的秘密值。否则,就不透露最后的数值。必须中止,玩家将获得退款。攻击者只输了一个实体的注。多方参与承诺模式

多方环境的修改相当简单,但也有一些重大的缺点。

修改:除承诺外,每个参与者还附上抵押品。揭晓阶段结束后,将向每一个揭晓实体退还抵押款。如果参与者不披露自己的秘密值,他们不仅输掉了局,还输掉了自己的抵押品。在这种情况下,所有不披露实体的质押物被所有披露的实体瓜分,或者选择销毁。

影响:不幸的是,所需的抵押规模可能高得离谱。给定1万名参与者的抽奖,每人票费4美元,参与者在退还参与者的抵押金总额近4亿美元。

另外,也可以将质押物烧掉。对于我们的彩票例子来说,燃烧抵押品将必要的抵押规模降低到39992美元,这对于大多数实际使用案例来说还是太高了。

有一个类似的实现,但迄今尚未在实践中使用。在ETH2.0中,Randao也将作为基础随机信标,上面有VDF。我们可以在后面的文章中详细讨论ETH2.0中的用法。

结论

我们已经研究了Solidity中多方随机数的两种方法。虽然blockhash如果使用得当,在很多场景下都能很好地发挥作用,但当涉及到很大利益的时候,它的表现就不尽如人意了,这会让矿工作弊。其次,承诺模式对于双人方案非常有用。不幸的是,对于大多数现实世界使用案例的多人情况来说,承诺模式是不够的。那我们能做什么?一种选择可能是使用预言机,我们可以在后面相关博文中讨论。

参考链接

预测以太坊智能合约中的随机数:https://blog.positive.com/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620

黑客SmartBillions:https://www.reddit.com/r/ethereum/comments/74d3dc/smartbillions_lottery_contract_just_got_hacked/

电话里翻硬币:https://www.cs.cmu.edu/~mblum/research/pdf/coin/

类似的实现:https://github.com/randao/randao

来源链接:soliditydeveloper.com

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

以太坊

以太坊

开放的分布式区块链应用平台,通过其专属加密货币Ether以太币提供去中心化的虚拟机,处理点对点合约。允许任何人建立和使用通过区块链技术运行的去中心化应用,没有任何欺诈、审查、第三方监管。以太坊的概念首次在2013至2014年由维塔利克·布特林VitalikButerin受比特币启发后提出,旨在共同构建一个更全球化、更自由、更可靠的互联网。以太坊EthereumETHERC20ERC-20ERC20ERC721ERC-721以太坊2.0查看更多

标签:THELOABIKILOANEthereum Yieldcloak币价格biking网络意思LOAN币

SOL热门资讯
COI:币虎关于暂停ETH及其相关通道代币提现的公告_INT

尊敬的用户: 因现时ETH网络十分拥堵,币虎暂时中止ETH和ERC20通道中其他网络代币的提现功能。请用户放心,币虎保障每位用户的资产安全。对于所造成的不便,我们万分抱歉,感谢您的谅解.

BTC:席幕枫:2.23比特币破位加剧,反弹依旧开空时_MAC

多言不可与谋,多动不可与久处,交易与其冲动,还不如一动不动!大家好,我是席幕枫。心存阳光必有诗与远方,认识老席何惧再遇荒凉?席幕枫:2.23BTC行情分析大饼,昨晚探低之后反弹修补,早盘继续偏弱.

BTC:每日行情解读 | 比特币滞涨,加密市场回调风险加大_比特币

加密市场情绪依然高涨,但BTC已出现滞涨,回调风险加大。今日恐慌与贪婪指数为94,百度搜索指数仍然处于高位,“比特币和黄金谁更有长期投资价值”登上微博热搜榜,央视和新华社报道比特币并提示风险.

BTC:开启BTC-BCH流动池挖矿奖励的公告_ASW

亲爱的安银小伙伴, ASwap流动池将于2021年02月23日15:00开放BTC-BCH挖矿奖励流动池.

:《王者圣域》2.23上线链游玩家|放置塔防、趣味竞技_

导语:王者圣域游戏是一款画风萌动的卡牌对战手游,集合了塔防对战模式和趣味的闯关内容让玩家畅享全新的冒险之旅,趣味十足的竞技场对战和丰富的战斗模式等待玩家自由体验,多样的英雄等待玩家自由选择.