Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
RNG是Random Number Generator,也就是随机数生成器。
  O9 {. J7 ~+ ^9 S) O4 `: Q在现实世界中要产生真正的随机数,其实不容易,各个语言的library所提供的随机数,都是伪随机数,是可以预测的,不过在大部分的应用场域,都是可以应付的。区块链的世界,面对的是全世界的人,怎么产生不可预测的随机数,就很重要,不然就可以被有心人所操作。例如EthereumBeacon chain(POS chain)中的validator/attester(产块跟验证的角色),若是可以被预测,那大概就没有人会相信这条链了。而这也是EthereumSerenity(Eth-2.0),所遇到的问题之一。目前随机数的产生,就由RANDOA +VDF所产生,以下就分别介绍:; f' z' ]- B) v( E  {; F8 Z
RANDAO
$ d. i8 `0 ~- _% l! p" hRANDAO是利用经济模式(奖励跟处罚)的方式,促使在公共场域中能产生随机变量; i* u, F: K* O  {9 P* [9 Q
原理很简单,想参加的人把拿钱来抵押,需要产生随机数的人要付钱。所以参加者就可以从中分润,当然不守规矩抵押的钱也就会被没收,利用奖励跟处罚的方式迫使大家都守规矩。详细步骤如下:
" d& N6 t& l7 G( ~" [首先,会有个收集seed的时间,例如6个block的时间。接着,想参与的人,投入某个数量的ETH到RANDAO这个smart contract(作质押),然后附上secret(某个只有你知道的值s,然后作sha3)。
' x4 b  I# T2 w. G1 i0 z, W7 N; C) I: M, F" z, X* l7 ?8 H  c' f
等收集时间结束,就是验证时间。此阶段所有参与着需要把s传入smart contract做验证,smart contract会把s作sha3,去验证是不是跟第一阶段传进来的一致。最终会把验证过的s当作seed去产生随机数。0 h2 d5 ]% q/ y9 q/ q+ X
; j( ^% b1 E8 H! j8 o
最后,就是产生随机数,然后把随机数传给之前有请求过的contract。然后归还质押的ETH跟利润分给参与者。3 H1 k. K/ f7 L6 N5 t
: b4 Y( N% d  n# S7 \5 Y0 k

1 |8 N6 b0 i( s; |2 \( q' ^此外有几个附加条件:5 P- ~+ s, B" x6 |/ k

  L& T( C7 s" F* w第一阶段若收集到数笔一样的secret,只接受第一笔;
) s. g, f  I2 o$ [1 m
. i" P$ Z7 r, g  V3 b' E7 o, r第一阶段会规定基本人数,若结束后未到达人数门坎,则此次的产生就失败;& o& `" ?  J5 z9 Z6 I$ z
& G$ ?, u/ [, \# v1 O1 U
若第二阶段需提供s;
8 U6 p- e% E& w; F9 ~& |  x3.1 若未提供,则质押的ETH会被没收;( f. x  y: e, t! e0 _4 v
3.2 若此阶段有一个以上参与着未提供s,则此次产生失败,并且把没收的 ETH分给有提供s的参与者。且退还请求者所支付的ETH;" |2 k6 M' W( i6 [% v! s
) G/ }4 _* E6 u) w9 H( d. t2 R( b

8 S4 D4 K. v# e' x* F2 ~, r+ s9 LVDF
" j7 S7 M; ]6 t: G+ \VDF 全名为Verifiable delay functions,从字面上有点难懂在干嘛,从运作方面做解释,就是输入一个值,然后运算一段时间(delay),得出一个结果,最后这个结果是可以被轻易验证的。如下列算式,9 H+ z- r8 X$ h, d& r+ O5 q
f(x) =g(g(g(g(….g(x)….))))7 o9 c  Q3 B8 k4 R
where g(x) = xor(x^((p+1)/4), 1) mod p 其反函数为
: F) y! u- x2 j8 Y9 yh(x) = xor(x, 1)? mod p
; C) y- c  H5 r$ D( z  \: N上面提到「运算一段时间」的运算,其实是重复做同一种运算,从数学式看就很清楚,把x带入g(x),然后把算出的结果再带入g(x)。所以同一段时间,如果能迭代的次数比其他人多,那其他人就猜不到结果,也就没办法预测随机数结果。% [% k" Q6 Y1 r) v+ ^$ N# e
最后,介绍一下这两个方法怎么运用在EthereumSerenity中
2 v4 s, {9 e* G6 R首先,RANDAO会在内建在Beacon chain的逻辑中,而不是一个独立的smart contract,但RANDAO有个缺点,就是最后一位可以预测/操纵结果。如下图,因为最后一位可以知道前面的值,所以在最后可以决定要出值或是不出,因此可以操纵结果。(目前epoch是64个slot,而每个slot是6秒,所以epoch约是6.4 minutes)
- F/ k% K+ i; B% n& v0 d3 v' y7 t
& q" _& U: s& r0 x& m$ {; @所以设计上除了RANDAO,还多一层VDF。
- [, S1 X  H* k; s# ?! r, UVDF把RANDAO产生出来的随机数当种子去产生随机数,而且计算时间要够长(至少要一个epoch,目前规划是10个epoch,不过相信还会有变动),如下图
, v6 l' g( u, A# I/ |3 p3 z( L/ ^: p6 T$ ^5 E8 A
实际的lifecycle会像这样,在VDF计算完后,会有一个epoch的缓冲让这个随机数可以上链,然后接着下一个RANDAO mixing。
- W9 q8 o* U- U/ C! G% R% b& N" j3 u) V0 Y. d; X
但问题来了,怎么确保没有人算得比你快??
1 }2 a$ c/ @  D+ N, e. M所以EthereumFoundation计划做硬件,设计新的ASIC芯片来计算VDF,以确保没人可以预测最终的随机数。实际设计当然不是Foundation的researcher们,他们找了学界跟产业的IC design专家做设计,因为硬件研发费用庞大,Filecoin也一起支持这项计划。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

杨小公子君莫邪 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13