Filecoin:使用时间戳来达成共识如何?
在没有实现VDF(Verifiable Delay Function)的情况下,还处于开发期间的 Filecoin 网络0.2.2版本很快被找出可以快速出块的方法。当然,这个问题的发现是意料之中的。在VDF的整体实现还需要一段时间的情况下, 开发社区同意采用时间戳方案还重启开发网络,以实现早期测试的目的。
那么,时间戳方案到底是怎么一回事呢?它是不是可以用于区块链的共识机制。本文进行简单探讨。
5月20日前后,Filecoin用于社区测试的开发网络遭到个别矿工的攻击和控制。具体的攻击方法我已经在对Filecoin-0.2.2开发网络的攻击手法的分析?一文中进行了详细的说明,这里不再赘述。只列出攻击者所做的关键几点如下:
不遵循现在版本中30秒一个区块的规则,大大降低自己产生区块的时间,以实现比他人更快地出块;(这是利用当前版本没有严格进行时间戳检查的漏洞)
过滤掉与自己无关的消息,只接受与自己有关的消息。(这个相当恶劣,使得其他人没有增加算力的机会。)
不断地利用空块来变化 ticket 值,以保证下一个有效区块的 ticket 能够保证自己能够再次出块;(仍然是利用没有验证delay 和 VDF没有实现的漏洞)
有意思的是,当本人对攻击方法的分析与协议实验室讨论并(在达成共识后)公之于众,很多人也慢慢学会了,随后产生了更多的攻击。直至当前,网络仍处于不可用状态。
协议实验室经过慎重考虑,在本着希望更多的人参与社区,参与测试的情况下, 决定在VDF完全实现之前,采用时间戳的方案来部分解决这个问题。
从前面的分析可以看出,攻击的关键在于不遵守30秒出块的规则。但是区块链本身的规则靠共识来维护,也就是说不能靠个人的自觉性。如果有矿工出块时打破30秒出块规则,那么其出块就应该被其他矿工拒绝,这样的话,这种攻击就不成立。
这对于非区块链专业人士来说,答案非常简单。那就是,每一个区块上加一个时间戳,这样,只需要比较两个相邻高度的区块的时间差就好了,如果时间差小于30秒,那么就违规了,那么这两个区块就不能同时存在于链当中。
简单吗?很简单。但是问题来了,矿工都是趋利的,我们的设计要求在多数矿工遵守规则(共识)的情况下,作恶矿工不能得逞。那么作恶矿工为了让自己的区块能够被认可,他可以设定自己出块的时间戳的值,也就是说,不一定要遵循网络时间。避免这种情况其实也不难,验证区块的矿工采用如下规则就可以了:
主动跟随网络标准时间;
如果收到的区块的时间戳所表示的是一个将来的时间,不合规,直接丢弃;
如果收到的区块的时间戳与其父区块的时间戳相差不到30秒,不合规,丢弃
注:由于 Filecoin目前实际上是 tipset链,每一个tipset里可以有多个区块,不同高度间也可能有空块,因此,上面的最后一条要稍作改动,改为:每个区块的时间戳与其父tipset中区块时间戳中最小者的差值要不小于 30秒 * 区块高度差。
看起来,似乎完美地解决了问题,两个区块之间的时间间隔要不小于30秒,而且,矿工很难在时间上进行欺诈。那么接下来问题又来了,既然如此,时间戳可以很好地解决这个问题,为什么鲜有区块链项目采用时间戳的比较的方式来实现共识呢?尤其是PoS共识,这不是很好吗?设计VDF干什么?
问题出在前面的第一条规则:主动跟随网络标准时间。这在一个去信任的区块链环境中是一个大大的问题。什么是网络标准时间?到底谁是标准?世界上有很多时间服务器,他们最终都跟随世界协调时间,有专门的组织负责维护和校准。
但是,在整个世界里,网络时间的跟随并不容易,不同的服务器有不同的时钟级别,精度也不一样,误差有时候可以以秒计。在这样的精度之下,可想而知,有些时候可能会被误判。
但这并不是时间戳不能被采用的根本原因。其真正原因其实不言而喻:这是一个中心化的系统。对于任何一个矿工而言,可以去跟随一个自认为可信的网络时钟,但是,这是不能用于共识的基础的,因为这是可以被控制的,当利益足够大的时候,也是完全有可能被利用的。
根据上面的分析,我们知道,利用时间戳来达成共识不会是正式的方式,但Filecoin开发网络在下一版本中,仍然会采用这种方式来实现共识,以备大家运行和测试网络。
这样做,在网络的开发和测试阶段,基本上不会有什么问题,一方面是绝大多数网络服务器都是可信的,而且已经几乎被现在的所有中心化服务器广泛使用。其二,在开发和测试网络中,没有直接的经济激励,而改变网络时间的成本太高,不值得去做,因此可以被看成一个自然标准,不受认为控制。
区块链的激励机制的最本质的原则就是,相信大多数人不会不计成本、不顾利益地去破坏网络。在这种情况下,采用时间戳可以是一个暂行的办法。采用时间戳,并不是为了测试区块产生的规则是否被遵守,而是利用时间戳的检查暂时代替VDF,而使得其他已经完成的部分能够得到充分测试,这些重要的部分包括:
性能改进的复制证明
正在实现中的时空证明
矿工的抵押和惩罚机制
链同步的效率和收敛性
接发单和数据存取效率
......
当然 VDF 还是共识机制中特别重要的部分,整个工作还在进行之中。等这一部分完成,整个网路的完整测试就可以开始,并可以准备迎接主网上线了。