区块链共识分析的简单框架

Ethereum 2.0 是 RANDAO + VDF 我记得?VDF 单独是无法工作的,必须指定输入,不同的输入其实会影响实际效果。

指定输入是指什么?详细说说?

VDF 是一个函数 f : \mathcal{X} \to \mathcal{Y} 。尽管它的性质要求它对于任意 x \in \mathcal{X} 都必须有唯一一个合法的 y \in \mathcal{Y} ,并且计算这个函数需要一个给定的时间,但是它还是必须要有输入 x 。不平凡的是,这个输入 x 在 Distributed Randomness Beacon (以下简称 DRB) 的场景下,最终必须是每一个节点间的公共知识,这样才能保证 DRB 输出的结果对于诚实节点是唯一的;并且这样的 x 应具有一定的熵 (反例如选择块高度作为 x ,攻击者可以轻易通过提前计算来预知 DRB) 且 \mathcal{X} 需要足够大(否则可以穷举 x ,也叫 Offline Attack)。因此,当 VDF 作为一个工具去构建 DRB 的时候,确定 VDF 的输入源是什么并不是一个平凡的问题。

Dan 在他的论文中提到,我们可以使用股票价格,PoW 区块链中的 nonce 和 Merkle Tree root 以及 “commit-and-reveal” 协议的输出 (例如 RANDAO) 作为 VDF 的输入 x

1 Like

对于使用随机方式出块的区块链中随机数生成的分析: 区块链上的随机性(二)项目分析

1 Like

Eth 2.0 为什么不简单地用 block hash 做 VDF 的输入呢?跟它的 PoS 共识有关吗?

没有太大的关系。参见 Justin Drake 的 Minimal VDF randomness beacon,里面提到,这样的设计是为了保证 VDF 的时间屏障被攻破之后仍能保证一定的随机数安全性(这个时候回落到只有 RANDAO 的情况)。

1 Like

对 Honey Badger(HBBFT) 的分析

应用 Jan 的分析框架分析一个异步共识协议 HBBFT:

  1. 从进入方式来看,和 Tendermint 一样,通过抵押代币的方式。
  2. 从出块选择上看,它不是轮流出块,而是所有的节点从自己的交易池中随机选出 1/N 的交易用门限签名的方式进行签名,并广播。
  3. 从共识方式看,HBBFT 通过一个可靠网络传输协议传输是用门限签名加密的交易,每个节点通过 BA 协议(与 Algorand 中的 BA 协议几乎相同)形成一致的列表。每个节点对列表中的值(交易)进行解密并广播,在收到 f + 1 个解密消息之后,即可解密整个共识的交易。对所有的交易进行排序以去除重复的交易。
  4. 从退出方式看解除抵押即可退出。
  5. 一致性和活性的要求上与 Tendermint 相同,攻击者 < 33% 的代币。
  6. 从效率上看延迟较低。
  7. HBBFT 的带宽效率很高,在收到交易的时候节点会将交易平均分成 N - 1 份,发送给其他节点,其他节点再互相转发,提高了整体带宽的利用率。
  8. HBBFT 因为采用门限签名,在不使用第三方的情况下,门限签名需要分布式秘钥生成,这个是比较消耗时间的。并且每一次更换共识列表都需要重新进行秘钥生成,所以这也限制了进出共识的灵活性。
  9. 从节点数量上来看,节点数量较高。因为是纯异步的共识协议,在延迟上要高于 Tendermint,但是其节点数量要高于 Tendermint,在不同节点数量下的表现参见下图:
3 Likes

你好,我认为讨论共识,需要考虑出块权和验证权。
DPOS的设计里,其实是把非BP的验证权给剥夺了,才能拥有如此高的性能,这也是DPOS的中心化的最大问题。
而在POW中,验证权还是在所有节点手中的,当出现作恶时,可以自动通过验证权的行使,把作恶者分叉出去。
POS中我不清楚验证权的归属。

验证权在“进入方式”里涵盖了,出块权在“出块选择”里涵盖了。

在上面表格里,进入方式和出块选择,都是针对有“出块权”的主体,比如矿工。忽视了有验证权但是不参与出块过程的节点。比如运行全节点但是不挖矿的。
而在EOS里,只有21个节点有出块权同时有验证权,其他的全节点是没有验证权的。
所以上述表格实际上忽视了只有验证权的这部分群体。而这部分群体,我认为也是有必要纳入考虑的,他们的数量可能并不小,而且他们的存在对于账本的安全性很重要。

能够“把作恶者分叉出去”是什么情况,能不能举个例子说明一下?

比如BTC里,假设有几个节点占据了大量算力,发表了一个新的块,这个块里有问题,这时候接收到块的诚实节点会抛弃这个块,继续等待正确的块出现。于是作恶节点即使能挖出更长的链,也不会被诚实节点所接受,所以作恶节点的链和诚实节点的链会出现分叉。作恶者能够被诚实节点们分叉排除出去。不过一般来讲,作恶者即使作恶,也不会直接发布有问题的块。
我举这个例子主要是想说明验证权是重要的。进而说明EOS中因为验证权只掌握在21个BP手中,所以当BP们想要联合作恶时,其他节点们是没有办法的。即我上面说的这种作恶,在EOS里,是有出现的可能的。

EOS 可以验证啊,按照你说的这个例子,BTC 里面最后的结局是恶意矿工一条链,诚实节点一条链,如果矿工都是恶意矿工,那么诚实节点的链永远不会增长。同样,EOS 里面,非超级节点当然可以扔掉他们觉得不合法的区块,没有机制可以阻止他们这么做吧?因为 EOS 是轮流出块,所以他们可以等到诚实的超级节点出块的时候再接受,同样,如果 BP 全是恶意节点,其他节点的链也不会增长。

我认为这个性质更多取决于参数的设定而不是共识算法本身。如果共识参数设置使得系统的资源消耗过大,例如为存储状态和历史需要付出的空间,为了处理每秒钟1000000000个交易需要的CPU,这个系统中的验证节点就会由于无法跟上共识节点的脚步而失去“验证权”。EOS节点确实会失去验证权,这是由于系统设计一昧追求性能导致的。但是使用DPoS的系统并不一定会剥夺节点的”验证权“,反过来,在PoW系统中的节点也不一定有验证权。因此虽然“验证权”很重要,但是我倾向于不把它加到上面的表格中。

BTC里,如果矿工都是恶意矿工,没有诚实矿工,确实诚实节点的链永远不会增长。这种情况下可以认为BTC已经“死了”。
EOS里,如果超级节点联合作恶,出了一个非法块,并且其他超级节点都签名支持了该块,让该块进入不可逆。此时非超级节点虽然可以本地抛弃这个块,但这时候它本地的链就应该不会再增长了,因为后面的块都接不上前面的块了。即它无法再继续同步区块。所以,结论就是非超级节点无权利审查区块。
你说的情况应该是一个BP(超级节点)出了个非法块,下一个BP不认可该块,可以跳过该块自己出一个块,再后面的超级节点会自己来判断哪个块合法从而投票给认为是合法的,即EOS也可能出现微分叉。但是有投票权(即块审核权)的前提是,你得是BP。

你看懂了我说的话,但没理解我的意图。
你比较了 BTC 和 EOS。然而,你原先例子里讨论的 BTC 是不全是恶意矿工的 BTC;EOS 是 全是恶意 BP 的 EOS,这样的比较不公平,结论当然也是错的。要比较就要公平地比较:

  1. 如果 BTC 和 EOS 都面临所有矿工/所有 BP 全是恶意的。那么 BTC 任何类型的诚实节点和 EOS 任何类型的诚实节点都不会增长链。
  2. 如果 BTC 和 EOS 都有诚实矿工/诚实 BP 的存在,BTC 的诚实节点会只接受诚实矿工的区块,链会增长,EOS 的诚实节点也会只接受诚实 BP 的区块,链也会增长。

在EOS里,只要恶意BP大于等于15个就会出现我说的问题,不需要全都是恶意的。因为一个块只要15个BP投票认同,就可以变成不可逆了。
而BTC里如果有1/3的矿工是诚实的,那么恶意链和诚实链都会增长,只不过其算力不同而已。

是我上一个回复表述没有清楚,EOS 实际上是 permissionless 的,可以通过投票换 bp,实际上的阈值不是按即节点数量算的。如果就把它彻底当作 permissioned 来算的话,这个差异是有的,就是在大多数恶意矿工发不合法区块的时候, bitcoin 中诚实节点始终能 keep liveness,但是 eos 并不可以。当然,我们都假设是同步网络。但这个的根源在于活性和一致性的关系,我觉得和验证没有什么关系。