继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

『学概念找员外』分片技术(三)

刘员外_
关注TA
已关注
手记 66
粉丝 8381
获赞 109

【本文由“币嗨Bihi内容合伙人计划赞助”】

接下来我们就该写写这几种分片技术,在技术上的一些难点以及解决办法了。

网络分片

分片的第一个也是最重要的一个技术点就是开发者应该如何创建碎片,因为这会涉及到整个网络中数据的安全性。为什么这么说呢?如果开发者按照某种规律在网络中抽取节点来形成碎片的话,这样不法者就有可能控制某一部分记录交易的碎片,而且所控制的这部分碎片的体量足够大,那么他是可以对网络发起攻击的。

所以开发者在创建的时候,就要做好防止这种攻击的准备,那么最佳的解决办法就是在创建碎片的时候,加上随机性。这样一种随机抽样的方式可以防止恶意节点过度填充单个碎片。

现在问题就又来了,这个随机性该如何来创建?因为这涉及到公平公正公开的问题,要做到足够的透明还要防止不法分子的攻击。大家还记得前段时间币乎协同EOS佳能给大家发放EOS吗?就是需要达到这样的效果,不管是谁来运行这个随机抽奖活动,最后的结果都是一样的,经得起验证才能确保真正的公平。

网络中的每一个区块是最容易获得公共随机性的来源,比如交易的默克尔树根(Merkle tree root 这个我们下下篇来讲)。这样就能保证在区块中所提供的随机性是可被公开验证的,并且可以通过随机提取器来提取统一的随机比特。

到这儿只是解决了简单的随机性,但是还没有确保网络中某个碎片是否还可以跟其他碎片保持一致。问题真的是一环接一环啊,这个问题可以通过向POW工作量证明共识协议来解决。


640

交易分片

如果是在一个类似于比特币的交易系统中引入交易分片(没有智能合约)的话,系统的状态是用UTXOs来进行定义的。假如这个系统已经由碎片组成,用户发送一笔交易,每一笔交易有两个输入和一个输出,那么这笔交易将该如何分配给一个碎片来处理呢?

最直接的方法就是根据交易哈希值的最后几位数来决定存放到哪个碎片。举个栗子,如果一笔交易哈希值的最后两位数是00的话,那么把这笔交易会被分配给第00的碎片。这样的话,这笔交易必须可以在这个碎片中被验证交易。如果有人在发起第一次交易后,再发起了一次一模一样的交易,那这笔交易的哈希值的最后两位有很大可能是不同的,因为最后两位的哈希值不同,这第二笔交易会被分配到另一个碎片中,然后被这个碎片给单独验证成功。因为碎片之间还没有互相通信,所以这两笔交易会同时被不同的碎片验证成功。到这儿,反映过来了吗?这就是一次双花交易。

为了防止双花的问题,碎片在验证交易的时候,不同的碎片之间就必须建立通信。如果要相互之间建立通信的话,那这就有可能破坏交易分片的最初目的。

这条路行不通,只能另想办法了,后来就有人提出,能不能建立一个基于用户账户的系统,就是每一笔交易都通过用户的账户地址,来确定这个用户的交易应该分配到哪个碎片上。有了这个办法,恶意者就无法发起双花的攻击了,因为他自己的每一笔交易都在相同的碎片中存储,是很容易来识别到每个用户交易信息的,还不需要进行任何跨碎片的通信,在一定程度上提高了交易的效率。



打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP