本文中,我们将谈及随机数(randomnumbers)以及如何在以太坊2.0中实现随机性。什么是RANDAO?什么是VDF(可验证延迟函数)?它们又是如何一起运作的?
信标链(beaconchain)如何决定轮到哪些验证者(validator)来提议区块,以及哪些验证者应该对该提议进行证明(attest)?在以太坊2.0系统中的1,024条分片链和成千上万名活跃验证者之间,信标链是如何在任何特定时间做出这一决定的呢?
信标链需要的是随机性(randomness)!
计算机中的随机性
计算机是无法生成真正的随机数的。
你可以这么来理解:计算机(computer)是一种机器,给定相同的输入,总是会生成相同的输出。它们就是计算的机器,就好像一台计算器不能让2与2相加得到5一样(除非是恶作剧或机器受到严重损坏)。
为了生成一个合理的随机数,计算机将依赖于seed(种子):即计算的起点,用于获取输出的输入(input)。种子可以是屏幕上鼠标光标的移动,也可以是维基百科数据库的所有内容。在种子之上,计算机将执行数学运算并最终得出一个人类无法预测的数字。
DCG CEO:不支持任何以太坊PoW分叉,矿工应将算力转移至ETC:金色财经消息,Digital Currency Group创始人兼首席执行官Barry Silbert发推特称,“我们全力支持ETH PoS,除了ETC,我们也不打算支持任何ETH PoW分叉。ETH矿工应该将算力转移到ETC,以实现长期收入最大化。”
据悉,DCG现有的业务包括资产管理公司Grayscale、交易业务Genesis Global和新闻网站CoinDesk。[2022/8/8 12:08:53]
即使现在,如果你访问BitAddress(开源JavaScript比特币钱包工具)网站(https://www.bitaddress.org/),当你移动鼠标时,你会注意到“seed”将相应地发生变化,这是网站正在通过你的鼠标不规则移动中“搜集随机性”,见下图:
备注:继续移动鼠标,当图中的百分百达到100%时,就可以生成一个比特币钱包
如果我们在生成种子时总是应用相同的数学方法处理,那我们如何能将之称为随机的呢?最重要的是,当足够多的难以重复的种子放在一起时,得到的随机数就会是相当随机的。人们是无法在一个500万像素屏幕区域重复完全一样的鼠标运动轨迹的,因此这在某种程度上是可靠的。
以太坊预计将于7月27日进行第10次影子分叉:7月21日消息,以太坊预计将于7月27日进行第10次影子分叉。影子分叉是指在网络中添加与合并相关的字段进行分叉以实现模拟在现有的网络环境下进行压力测试。[2022/7/21 2:29:25]
如果再加上一些其他的数值,比如一天中的时间,或者像Cloudflare那样使用熔岩灯产生伪随机数(见下图),也许还有某个运动队当年进球的次数,这样你就得到了一个相当随机的种子(seed)。
备注:Cloudflare是一家提供安全服务的云服务商,向客户提供了免费的SSL服务。因为要处理海量的加密流量,它需要使用到大量的随机数。这些随机数都是伪随机数生成器(PRNG)产生的。伪随机数生成器产生的随机数能被预测和破解。那么如何减少随机数的可预测性?Cloudflare披露了它的方法——使用熔岩灯。熔岩灯的名字源于内部不定形状的蜡滴的缓慢流动,让人联想到熔岩的流动。Cloudflare利用摄像头监视熔岩灯,拍摄视频和照片,然后将其转变成无法预测的随机比特流,再用它生成密钥。
区块链中的随机性
但是区块链中没有鼠标、传感器或者运动比赛结果预测。更重要的是,即使一个节点到达某个随机数,但该随机数必须与区块链的所有其他节点的随机数相同,否则该条链将分裂。在同一条区块链中,如果同一个区块的随机数不同,这将导致分叉。那么区块链是如何来处理随机性的呢?
以太坊伦敦升级已确定所有纳入的EIP,共包括EIP-1559等5个EIP:以太坊开发者Tim Beiko发文概述以太坊伦敦升级。虽然目前还未确定各网络的升级区块,但已最终确定纳入的所有EIP。根据升级规范,它们是:
EIP-1559:改变ETH 1.0链的费用市场;
EIP-3198:BASEFEE操作码;
EIP-3529:减少退款;
EIP-3541:拒绝以0xEF字节开头的新合约;
EIP-3554:难度炸弹延迟至2021年12月1日。
此前消息,对于以太坊测试网进行伦敦升级的时间,Ropsten定于区块高度10399301(6月9日),Goerli定于区块高度4979794(6月16日),Rinkeby定于区块高度8813188(6月23日),主网仍定于7月14日进行升级,在第一个测试网成功分叉后,再确定主网客户端升级区块。[2021/6/14 23:35:11]
一些区块链依赖区块哈希(blockhash)来处理随机性。因为哈希值是未知的、随机的,但在所有节点上都是相同的,所以对于基本的可证明公平的来说,哈希值可以作为随机性的来源。
然而,如果区块奖励少于矿工操纵区块哈希所能获得的奖励(当前的以太坊区块奖励是2ETH),那矿工就完全有经济动力进行恶意行为。更严重的是,在权益证明(PoS)系统中,由于生成一个区块几乎不需要计算时间或能量,矿工(验证者)可以很容易地继续生成数千个区块,直到获得一个他们喜欢的哈希值,并将这个哈希值进行提交。
以太坊重回2500美元/枚,日内涨幅2.34%:行情显示,以太坊重回2500美元/枚,日内涨幅2.34% 。[2021/5/20 22:24:12]
这也适用于验证者的选择。如果当前负责生产某个区块的验证者能够通过某种方式进行操纵,使得该区块哈希成为一个能够再次选中该验证者(或者由该验证控制的另一个验证者客户端)的种子,使该验证者继续成为提议区块的验证者,那么该验证者就可以一直提议区块,将其他的验证者挡在主要的利润之外!
显然,我们需要更强劲的区块链随机性,以太坊2.0系统更是如此!
简单概述RANDAO
想象一下,如果房间里面有很多人,每个人都在脑海中想象一个数字。为了得到一个随机数,我们要求这些人一个接一个地大声说出他们的数字。所有这些数相加之和就是我们想要的随机数。
这就是RANDAO的本质。RANDAO机制就是,当用户通过储存(质押)32ETH成为验证者之后,该用户将选择一个由自己选择的随机数。当需要为某个区块公布其随机数时,将系统中所有随机数加起来就可以得到一个全新的随机数。
备注:上面的过程只是简化过程,本文将不详细论述。如果需要关于以太坊2.0RANDAO这方面的专门文章,请通过Twitter告知作者(@bitfalls)。
动态 | 以太坊未确认交易8423笔:Etherscan.io数据显示,当前以太坊未确认交易8423笔,与昨日相比未确认笔数有所增加,网络拥堵程度较为严重。[2019/4/19]
但即使在这种情况下,最后公布的数字对最终的随机数也会有一定程度的影响。最后一个人可以选择保持沉默,以这样或那样的方式改变这个最终的随机数。房间里的最后一个人会记住之前每个人公布的数字,如此一来,就可以知道加上(以及不加上)他提供的数字之后的最终随机数结果。如果相对于其他数字,某个数字对最后一个人更有利,那最后一个人就有动机去进行某种程度的操纵,不管程度高低。
对于这一问题,以太坊2.0将通过VDF(可验证延迟函数)来解决!
RANDAOVDF
VDF全称为VerifiableDelayFunction(可验证延迟函数)。
其言外之意就是需要花很长时间来进行计算。
如果我们有某个数字X,之后假设这个数字X的6倍二次方VDF函数是:((((((X^2)^2)^2)^2)^2)^2)^2。这种情况下,如果X=5,那最终的结果就是:
随着计算的继续,计算的结果将越来越大。一个复杂的VDF将需要花费很长的时间才能计算出来,因为对于任何计算机来说,其计算过程都是非常复杂的。
那么这有什么意义呢?
首先,在计算最终数字时的延迟(delay)是可以验证的,我们知道哪些计算机操作是达到结果所必需的,并且能够以合理的精确度确定机器达到结果所需要的时间。
其次,如果要计算出第三级结果,那计算机就必须先计算出第一级而第二级的结果--我们无法在多台计算机上并行地进行此计算,因为每个新的输入都依赖于之前的输出,而且每个输出都需要预先确定的计算时间。
如果现在我们用RANDAO中的随机数来代替上方VDF例子中的数字X,且如果函数的指数不是6而是好几千,并且函数不是使用平方根(^2)而是更复杂的函数,那么我们将得到一个完全不同的函数,这个函数将使RANDAO的结果完全不一样,而且要计算出这个结果将需要花上一段时间,不管你拥有多少台电脑。
通过引入这种延迟,并使计算的时间要长于验证者可以通过影响某个随机数而获得利益的时间,我们就可以消除最后一级的随机性偏差--即消除验证者可以对RANDAO生成产生的最后一点影响。
在以太坊2.0阶段,这个VDF被定义为102分钟时长--超过了一个半小时。当前以太坊基金会正与Filecoin等区块链项目合作,资助开发一种针对此计算优化的开源ASIC--这是一种专门用来进行这种计算的微型计算机。该机器将有爱好者、加密货币项目和其他区块链平台甚至验证者来运行,它具有一个小优势,可以第一时间响应VDF检查,而且不需要比典型的微型计算机全节点更高的电力成本。
这样一台高度专业化的机器确保了任何其他试图开发一种更好的ASIC来重获最后一点影响的人,都必须使其在效率方面提升100倍才能发挥作用。开发这种设备将耗资巨大,除非存在某种可能完全摧毁以太坊的重大利润,而我们知道这是不可能成功的。
在以太坊2.0阶段,每生成64个区块(大约需要6.4分钟,这称为一个时间段(epoch)),信标链(BeaconChain)将打乱验证者并将他们重新分配到所有的分片链中。
每个时间段(epoch)都会公布一个RANDAO,这意味着我们可以在每个时间段(epoch)运行一个新的VDF函数。这就意味着,每个小时将会有16个VDF函数,也就有16个随机数。之后,这一随机性将成为选择下一个验证者集合的种子(seed),这就确保了公平性。
Nimbus中的随机性
在Nimbus客户端中,我们与以太坊2.0规范保持一致。我们的RANDAO实现已经符合以太坊2.0规范的0.5.1版本。我们需要确保我们的测试与官方测试相匹配。
现在谈论VDF还为时过早。VDF还处于研究阶段,一旦它被添加到规范中,客户端将需要一段时间才能赶上它。必须设计出与远程VDF设备通信的方法,对staking(质押)奖励进行轻微修改,使其更倾向于运行VDF的区块生产者,以及其他方面等等。现在,鉴于RANDAO对于以太坊的早期需求是足够随机的,它将作为打乱验证者和提供其他随机性的基础层。
结语
以太坊2.0将每隔6.4分钟生成一个合理的随机数,该随机数的随机性足以确保巨额价值的安全。
只有当某人搭建的VDFASIC的效率比以太坊社区提供的任何ASIC都高100倍,或者当全球所有的VDFASIC都离线时,以太坊的VDF才会失败。即便这发生了,底层的RANDAO所带来安全性也能将影响降到最小,使以太坊也足以保证链上财富的安全。
参考链接:
https://our.status.im/two-point-oh-randomness/
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。