当前位置:首页 > 区块链新闻 > 正文

探讨:区块链的分片和扩容

来源: 互联网时间:2019-09-23 15:50:51

本文主要讨论跨分片交易,无效交易以及恶意行为。

此前曾讨论过基本分片类型并不是一种非常实用的分片方法,因为其分片之间无法互相通信,这使得它们与单条区块链并无二致。

让我们举一个简单支付的例子。如果用户A和用户B位于同一个分片上,那么分片中的验证者将能够轻松处理交易,但倘若他们位于不同分片,并拥有不同帐户呢?

用户A在分片1上,用户B在分片2上。各个分片上的验证者都无法记入或扣除用户帐户中的资金,因为他们没有相关权限。

然而,这个问题也有解决方案,来看下详细说明:

同步(同时)跨分片交易

在这种情况下,当分片1的用户A需要向分片2的用户B发送资金时,每个分片中包含相关交易所涉状态的区块将同时生成,并且每个分片上的验证者都会协同确认交易。早在2018年初,Vitalik Buterin就提出用这种解决方案来合并区块。

异步跨分片交易

这种操作较为简单,也更易于协调,因此它比同步交易更受欢迎。

同样地,我们还是假设分片1的用户A要向分片2的用户B汇款。

在这种情况下,负责向B账户记入资金的分片一旦获取了足够的证据,证明负责从A帐户扣除资金的分片已经完成了自己的那部分工作(即已将资金从A账户中扣除),则记入资金的分片才会完成自己的那部分工作(即将资金记入B账户中)。

不过这种方法并不完美,某个分片中的某个区块成为孤块的可能性仍然非零。而一个非零的可能性,无论概率多小,仍然是个不容小觑的漏洞。

来看看以下图表,分析下原因:

这条区块链有两个分片,而纯粹出于巧合,它们都在交易并入分片1中的区块A和分片2中的区块X'时进行分叉。当这样的分叉发生时,各个分片必须孤立其中一条链,接纳另一条链。在这种情况下,如果链A、B成为分片1所接纳的链,且链W'、X'成为分片2所接纳的链,那么交易就可成功执行,皆大欢喜。

如果分片1接纳了链A'、B',且分片2接纳了链W、X,则交易失败,不过这个结果也是可接受的,因为交易可以重新发送。

但如果分片1接纳了链A、B,且分片2接纳了链W、X,那么结果会如何?这会造成部分交易被成功执行(链A、B上的),而另一部分交易则被废弃(链W、X上的)。

考虑因素

现在你应该已经对分片及其工作原理掌握得差不多了,也许你会觉得此解释清晰明了,又或许你产生了诸多的疑问,但此外,别忘了还有一个因素需要考虑:恶意参与者。

恶意节点

不论何种系统,当有大量资金往来时,就会有人想方设法对系统进行攻击,这种情况简直是屡见不鲜了。

批准无效区块

恶意参与节点可能会通过创建能够更改网络的区块来攻击网络。以用户1和用户2为例,假设用户1拥有10个币,用户2拥有0个币。当用户1将这10个币发送给用户2时,网络上的恶意节点可以尝试创建区块,使得最终用户1拥有0个币,而用户2拥有1000个币。

在无分片的常规区块链中,攻击者想要发起这种攻击是不可能的,因为每个节点都会对每个区块进行验证,如果发现了无效区块,所有节点(无论是否为矿工)都会拒绝该区块。

对于传统的区块链来说,不管恶意节点创建了多少区块,也不管他们的创建速度有多快,网络的诚实参与者始终会忽略这些区块,并继续构建诚实链。

而对于一条分叉为两条的区块链来说,恶意节点会构建无效区块,并用一大堆币来填充他们的帐户。在这种情况下,恶意节点的数量甚至可能超过诚实节点。此时,较短的链才是诚实链,较长的链则是无效链。在一条常规非分片的区块链中,每个参与者负责验证他们所收到的所有区块并确认状态,因此,在区块链中拥有既得利益(并扩展其完整性)的任意参与者都会立即识别出无效链并将其忽略,从而继续构建较短的链(根据本例情况)。

分片链稍微复杂一些,因为参与者无法验证每个分片上的每笔交易,因此我们必须弄清楚如何确认分片的整个历史记录中没有无效区块。

由于信标链(在上一篇文章中讨论过)通常无法验证每个分片中的每个区块,因此我们需要另一种解决方案来确保每条链的完整性。

假设某网络中的每个分片都具有拜占庭容错机制,且分片中的恶意节点数量控制在66.667%以下,这时就能够构建一种机制,此机制能够在恶意节点尝试生成无效区块时向系统发出警报,然后由一个或多个诚实节点证明区块是否有效。若66.667%以上的分片由恶意节点控制,那么从理论上来说,他们最终能够生成区块,但只要分片中有一个节点是诚实的,就可以构建机制,让诚实节点与恶意节点对抗。

原文来源Hackernoon,翻译由头等仓(First.VIP)提供,转载请保留文末信息。

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。