Asch系统的共识机制与容错性

技术文章网友2017-11-21 12:54:12  阅读 -评论 0

0 前言

我曾在这个项目里(大概在5月份)分析了DPOS算法的漏洞并且模拟了一个简单的攻击的方法,然后实现了一个简化的PBFT算法模型试图去修复该漏洞,并且对比了效果。
6月底,我们在正式的产品中实现了完整版的算法,并且部署了10台机器进行了测试。测试的结果在安全性方面完全符合预期,即经过频繁的重启、不按常规的广播区块、少数受托人联合作弊的情况下,整个系统依然不会分叉;但是在性能方面,不太理想,在没有任何交易的情况下,网路流量的峰值(广播区块的瞬间)达到了1.5Mbps。
其实这个流量也不算离谱,为了安全性,付出一些带宽的代价也算合理,但我们认为还有很大的优化空间,而且asch作为一个开发平台,平台底层的效率和稳定性是很重要的,带宽方面的优化是很有必要的,我们立刻着手去做了。截止到8月9号,系统已升级到0.9.5版本,在49个节点组成的testnet中,带宽的峰值在600kbps左右。

Asch系统的共识机制与容错性

下面我们会对比下这几个版本共识算法的差异和基本原理。为了方便起见,我们把最初实现的dpos with pbft算法称为AC0.5(AC即asch consensus),优化后的版本称为AC1.0。

1 AC0.5与DPOS

我们之前分析过,DPOS的主要问题在于受托人的权力过高,而其他节点对区块的有效性验证过于简单,这就很容造成一个局面,即不同内容、但相同高度的区块共存于网络中的不同节点,也就是所谓的分叉,进而造成双重支付。
PBFT算法的本质则是让每一个节点都尽可能知道其他节点的决策,并以此来确定自己的决策。
因此,PBFT带来额外的流量消耗就可以理解了,其根源也找到了。在AC0.5算法中,这个额外的流量或者说"其他节点的决策"指的就是每个节点对下一个区块的投票信息,投票信息主要内容有4个部分,即区块高度、区块ID、签名、公钥,其中区块高度和区块ID的长度可以忽略不计,签名的长度为64字节,公钥的长度为32字节,一个区块达成共识需要全部受托人总数的2/3的投票,在asch系统中受托人总数为101人,也就是说需要至少67个投票。一个区块的大小大约是200字节,相当于2个投票的大小,因此AC0.5中流量消耗是原始DPOS的30多倍(在没有交易的空block情况下,如果有交易则交易不会消耗额外的流量)。

2 AC1.0做了哪些改进 2.1 序列化方法

AC0.5中服务器之间的消息传递使用json格式,二进制字段则是转化为hex编码后再进行传输,投票中的二进制字段包括公钥和签名,之前我们算的是100字节,转化为hex编码后则翻1倍,变成200字节了。
另外json的字段信息和冗余的分隔符所占的字节数也不少。
AC1.0对这一点做了改进,使用了protobuf作为序列化方法,效果很不错,带宽降为原来的60%左右。

Asch系统的共识机制与容错性

2.2 算法流程

AC0.5的流程为

  1. 广播一个待确认区块
  2. 收集选票(以广播的形式)
  3. 收集确认信息(以广播的形式)
  4. 确认区块

AC1.0的流程为

  1. propose (广播一个区块的元信息及当前generator的ip信息)
  2. collect votes (其他节点采用一对一的方式直接将选票发送给当前generator)
  3. commit and broadcast(广播一个已经确认的区块并携带投票信息)

通过对比可以发现,AC0.5需要三次广播,AC1.0仅需要两次广播,并且在propose环节,只广播了区块的元信息,不包括交易信息,只广播元信息有个好处,可以防止在区块无法达成共识的情况下白白浪费流量,因为如果连元信息都无法通过,那就没必要广播交易信息了。

2.3 广播协议

AC0.5使用的广播协议为最朴素也最粗暴的gossip算法,即随机选取一定数量的相邻节点然后将消息广播给它们,
这个一定数量固定为100.
任何一个节点在收到一条信息后,会计算这个消息的hash,如果发现没有收到过,就会继续广播给它的相邻节点。也就是说一轮广播需要进行100 *
N次通讯,在N小于100的情况下,相当于复杂度为O(N^2), 在这里N为整个网络的节点个数。

AC1.0把这个固定数量改为sqrt(N), 也就是说假如有100个节点,每个节点只需要广播给10个相邻节点。
这个改动很小,但是参数的设置却是非常需要经验的,我们做过了大量的测试后,认为sqrt(N)可以达到比较理想的效果,一次广播需要的通讯次数略高于N * sqrt(N)。

除此之外,我们还实现了一个基于一致性哈希的广播算法,性能达到了极致,算法复杂度降低到了O(N), 但是这个算法需要更多的测试,其稳定性和可靠性也不如更简单的随机算法。
算法的demo版本在这里,有兴趣的可以研究下。

Asch系统的共识机制与容错性

3 容错性

关于容错性,我认为可以从内因和外因两个方面来说。

从内因的角度来说,系统应该能容忍正常节点出错,这些错误主要是指服务器宕机、硬件错误、网络拥塞等。Asch系统能够容忍最多1/3的受托人节点同时出错,假如某个受托人的节点出错了,那轮到该受托人生产区块的时候,就会缺失一个,并顺延到下一个10秒。假如超过1/3节点同时出错,那么系统将暂停工作,等到足够的节点恢复正常后,系统就可以立即恢复正常。
假如1/3以上的节点永远无法恢复(这种情况是存在的,比如他们的密钥丢了),那么系统必须要通过一次软件升级来恢复,并且这个升级不强制所有节点执行,只要部分节点升级,区块生产恢复正常后,通过受托人投票把那些不正常的节点撤销掉,系统就恢复如常了。

从外因的角度来说,系统应该能够容忍黑客攻击、受托人作弊的情况。这里的黑客攻击不是说DDOS,DDOS造成的后果最多是部分服务器宕机,我们已经归到内因里去了,这里的黑客攻击主要是指通过入侵拿到部分受托人密钥并获取权限,然后利用这些权限获利。获利的手段无非是广播多个版本的区块,在短时间内造成分叉,然后进行双重支付。在asch系统中,黑客必须要同时获得1/3以上节点的密钥,才能够发动连续攻击,使网络的分叉持续下去,否则系统将通过最长链同步算法迅速消除分叉,分叉之间的差距不会超过1个区块高度,也就是说2次确认以上的交易基本上不可能被回滚了。

从现有的使用DPOS算法的系统来看,包括bitshares、crypti、lisk在内,这些系统出现的分叉都是内因造成的,甚至大多数是算法实现上的bug所导致的。黑客攻击DPOS的案例还没有听说过,虽然存在理论上的漏洞,但要想真正的攻击,需要高超的技术和昂贵的资源,成本和收益不对等,因此也不会有人去攻击,当一个DPOS系统的市值慢慢增大,我们可以继续提高受托人节点的数量,进一步提高攻击的成本,因此外因的风险基本可以忽略。

最后,我想解释一下分叉这个词,分叉来源于英文的fork,fork根据上下文的不同,我认为可以翻译成两种意思,一个是分叉,另一个是分裂。
分叉指的是在社区成员团结一致的情况下系统因为bug或被攻击造成的不一致性,而分裂是指社区成员因观念分化造成软件走向不同的方向。
分叉强调的是系统的bug和不一致性,强调了物的因素,分叉后系统可能还是一个系统,并且是很可能被复原的;而分裂则是强调了人为的因素,一旦社区分裂,则系统一分为二,变成两个系统。
从这个角度来说,asch对于分叉可以做到事前的预防和事后的修复,但无法应对社区的分裂,任何一个区块链系统也无法解决分裂的问题,包括比特币和任何一个声称可以避免分叉的PBFT系统。

声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们100@7234.cn

    参与讨论 (0 人参与讨论)

    相关推荐

    比特币有什么缺点?

    1.交易平台的脆弱性。比特币网络很健壮,但比特币交易平台很脆弱。交易平台通常是一个网站,而网站会遭到黑客攻击,或者遭到主管部门的关闭。2.交易确认时间长。比特币钱包初次安装时,会消耗大量时间下载历史交易数据块。而比特币交易时,为了确认数据准确性,会消耗一些时间,与p2p网络进行交互,得到全网确认后,交易才算完成。3.价格波动极大。由于大量炒家介入,导致比特币兑换现金的价格如过山车一般起伏。使得比

    业务中使用区块链的四种方式

    业务中使用区块链的四种方式

    暴走时评:区块链是一种支持像比特币这样的数字货币的公共分类帐本,并且正改变着我们的业务方式。一旦那些对匿名交易,甚至是秘密交易感兴趣的人接纳了这样一种鲜为人知的工具,加密货币就会日趋成为主流。 区块链是一种支持像比特币这样的数字货币的公共分类帐本,并且正改变着我们的业务方式。一旦那些对匿名交易,甚至是秘密交易感兴趣的人接纳了这样一种鲜为人知的工具,加密货币就会日趋成为主流。越来越多的个人和企

    区块链:法定数字货币技术路线的必然选择

    区块链:法定数字货币技术路线的必然选择

    在人类发展史上,货币的进化从未停止。从物物交换,到金属铸币,再到纸质货币,以及当前正在发展的数字货币正在向着越来越便捷的方向进化。 比特币的出世起初并未带来轰动,但是最近几年其价格惊人的爬高创造出了一个个造富神话,引起各国政府及监管机构的关注。虽然金融专家普遍认为它只是一种资产,而非货币,但是,其背后的区块链(Blockchain)技术引起了包括各大金融机构、政府、企业及学术界的浓厚兴趣,未

    用区块链记录证书,证明真伪,墨尔本大学迈出了第一步

    用区块链记录证书,证明真伪,墨尔本大学迈出了第一步

    墨尔本大学宣布发起区块链认证和审核计划,允许通过一种隐私、安全且持久的方式验证学生的证书。 墨尔本大学正在试验一个区块链记录维护项目,允许接收者(即学生)存储他们的证书,出于核验目的,第三方也能访问这个系统。Learning Machine是这个发布系统的开发者,他们采用的是麻省理工媒体实验室(MIT Media Lab)在2016年提交的Blockcerts开源代码。 墨尔本大学副校长格雷

    日本IT巨头富士通联合日本“三大行”开发区块链p2p资金转移系统

    日本IT巨头富士通(Fujitsu)与三家大型银行已经宣布计划试点一项基于区块链创建的点对点资金转移系统。 通过与日本三大行——瑞穗金融集团,三井住友金融集团和三菱UFJ金融集团——的合作,富士通将现场试验一种基于云的区块链平台,用于在个体之间发送资金,并开发一款智能手机APP来提高这个系统的可用性。 从理论上讲,这个平台将把三大行的客户法定货币账户与这个区块链系统相连接。客户然后将能够使用这

    动画科普:什么是比特币?

    动画科普:什么是比特币?

    比特币(Bitcoin,简写BTC)概念由中本聪(化名)提出,是一种点对点、去中心化的数字资产;2009年,中本聪打包了第一个区块,并获得50枚比特币的挖矿奖励,挖矿奖励每4年减半一次,按此计算,比特币预计2140年发行完毕,总量为2100万枚。 随着比特币的发展,比特币逐渐受到认可:德国为全球首个接受比特币支付的国家;微软、戴尔等知名企业也纷纷接受比特币支付。 举个栗子,你能直接用比特币买到

    3分钟理解什么是公有链、私有链、联盟链、许可链

    不同的区块链有着不同的内涵和功能,在区块链领域经常出现的公有链、私有链、联盟链、许可链,这些又都代表什么意思呢? 公有链 公有链是指全世界任何人都可以随时进入系统中读取数据、发送可确认交易、竞争记账的区块链。公有链通常被认为是完全去中心化的,因为没有任何人或机构可以控制或篡改其中数据的读写。公有链一般会通过代币机制鼓励参与者竞争记账,来确保数据的安全性。比特币、以太坊都是典型的公有链。 私

    区块链是比特币的底层技术,但似乎两者已走上不同的道路

    区块链是比特币的底层技术,但似乎两者已走上不同的道路

    比特币的出现带来了一项新的技术——区块链,不过区块链和比特币似乎已走上了两条不一样道路,作为技术的区块链被越来越多的人所看好,而性质偏向于投资的比特币似乎被更多人看衰。 成也萧何败也萧何 比特币火爆的原因是其拥有去中心化、全世界流通、专属所有权、低交易费用、无隐藏成本、跨平台挖掘的特性,这些特性促使比特币成为了很多人关注的焦点。之后众多庄家的入局让比特币一瞬间成为了热门投资产业,但这几大特

    麦妖榜
    更新日期 2018-12-11
    排名用户贡献值
    1BitettFan23626
    2等待的宿命23411
    3六叶树20309
    4天下无双15845
    5lizhen00214635
    6让时间淡忘14198
    7区块大康14009
    8冷风大q11188
    9momo11174
    10Butterfly10433
    返回顶部 ↑