时间:2022-02-14|浏览:509
什么是分片(Sharding)
分片技术不是一个创新的概念。早在区块链技术出现之前,它就在传统数据库中运行,主要用于优化大型商业数据库。
概念是将数据库中的数据切割成许多数据片,然后将这些片分配到不同的伺服器中存储。这样,单个伺服器的压力就不会太大,因为短时间内有大量的数据访问请求。
在传统的区块链网络中,交易必须有网络中的每个节点进行确认,以保证交易的安全,然而这也是导致交易速度难以提升的主因之一。
分片技术-pow
将分片技术应用到区块链网络中的方法是将区块链网络划分为几个子网络(或分片,shard),每个子网络都将包含一些节点,网络中的数据存储和交易将随机分配到每个片段进行处理。
这样,每个节点只需要处理一小部分工作,不同片段的交易可以并行处理,从而提高网络的交易速度。
分片技术-分片
此外,大多数传统的区块链都是单链结构,所有矿工都将竞争下一个区块的会计权。
而且大多数区块链产生的平均时间都是固定的,比如比特币平均每10分钟产生一个区块。
即使越来越多的矿工加入了采矿行列,区块链也会自动增加采矿难度,以确保每10分钟固定一个区块。
简单地说,区块链网络中计算能力的提高并不能提高交易速度,这就是为什么区块链不能扩展。
如果你想用一个简单的例子来就像把车换成车一样V8台马力发动机,但汽车电脑设置了速度限制,不能超过60台。
区块链计算能力的提高意味着分片数量的提高。
也就是说,网络投入的计算能力越多,能同时并行处理的交易就越多,整个网络的交易速度也会线性提高。
区块链上使用的分片技术可分为三种:
网络分片(network sharding)、交易分片(transaction sharding)、状态分片(state sharding)。
网络分片(network sharding)
由于区块链的区块与区块之间有很强的连接,也就是说,每次增加区块,矿工都需要相互沟通,以确认新区块的有效性。
虽然这可以保证链上交易记录的正确性,但区块链结构存在不可扩展的缺点。
因此,分片的第一步是将区块链网络分片,然后在尽可能减少相互通信的前提下,对链上交易进行处理。
简单来说,矿工随机分组,然后分配给各组矿工独立验证。
网络分片涉及的问题是如何保证分片后链上交易的安全性。
随机分配
矿工分组后,网络分片的第一个问题是攻击者的攻击成本会大大降低。
要防范攻击者最好的做法,就是建立随机性。
区块链底层Layer1扩容方案
在区块链领域建立随机性的主要方法是使用可验证随机函数(VRF,Verifiable Random Function),利用这种算法,网络可以随机抽取节点分组形成分片。
这种随机抽样可以防止恶意节点控制单片。
分片共识机制
矿工分组问题解决后,要面对的问题是矿工分组后如何达成共识。
达成共识的算法可以选择我们熟悉的算法PoW、PoS、PBFT等待共识机制。
简单地说,网络分片是矿工的挖掘规则。为了在不失去集中特性的情况下,开发人员需要尽可能地在安全和效率之间取得良好的平衡。
例如,需要仔细考虑网络中分片的数量和每个分片中节点的数量。
交易分片(transaction sharding)
网络分割是针对矿工的游戏规则,交易分割是针对哪些交易应该分配到哪些分割。但区块链账本模型的差异会影响交易分割的发展。
UTXO帐本模型
UTXO比特币等账本系统的交易记录由多个账本系统组成input和多个output构成,没有账户概念,也没有余额记录,我们无法根据地址有效地避免双花问题。
UTXO更直观的交易分割方式是根据交易hash最后几个值进行分片。
例如,“如果哈希值的最后一个值是0的话,那麽交易将被分配给分片1,否则它被分配给分片2(假设只有两个分片)。”
然而,我们说过,UTXO的交易是由input和output构成,假设A哈希值的最后一个值是0,被分配到第一部分进行验证。
此时,A又发起一笔input相同但output不同(发送给不同的人)的交易被分配到第二部分。如果不采取任何措施,两笔交易将同时处理和验证,导致双花攻击。
在UTXO在账本系统的交易分片中,解决双花攻击的方法是分片1和分片2相互通信,以确保同一笔钱没有重复花费。
但在实际过程中,有大量的分片和交易hash值是随机的,交易会随机分配到每个片段,这意味着每个片段必须相互沟通。
显然,这种方法不起作用,因为如果这样做,就意味着分片不能独立验证,分片毫无意义。UTXO先天分片难以实现。
Account帐本模型
由于UTXO账本模型很难实现交易分片。因此,大多数使用分片技术的区块链都像以太坊Account帐簿系统。
有了帐户,每一笔交易将会包含发送者的地址与余额。
因此,我们只需要根据发送人的地址对交易进行分割,以确保同一账户发送的多笔交易将在同一分割中处理,从而有效地检测双花交易。
但是,一旦涉及到跨片交易,例如,如果分片1的账户想要与分片10的账户进行交易,就必然需要跨片沟通来验证交易的有效性。
但与UTXO至少不需要和所有的分片沟通,只需要分片1和分片10沟通。
状态分片(state sharding)
状态分片可以简单地理解为储在不同分片中的区块链数据分配。
它涉及链上数据的分片,即链上数据和交易记录的分片存储,从而减轻节点的存储负担。
与其他两种分片机制相比,状态分片是最棘手的问题。
有三个问题需要解决。
1)跨片交易通信的效益平衡
在过去,区块链的状态,如账户余额存储在整个网络中,由整个网络节点共同更新和维护。
然而,在分割机制下,交易将根据地址分配到不同的分割处理中,即状态只存储在地址所在的分割中。此时面临的一个问题是,交易不仅在一个分割中进行,而且经常涉及跨分割交易。
因此,如果交易双方的账户分配在不同的部分,则必须在部分和部分之间进行沟通,以确保交易的有效性。频繁的跨部分互动很容易导致整体网络效率的下降。
例如:
A分片1分配地址,分片1也存储交易记录。
B分片2分配地址,分片2存储交易记录。
一但A要打币给B,跨片交易将形成,过去的交易记录将以确认交易的有效性,A频繁打币B,分片2必须不断与分片1互动,从而降低交易的处理效率。
2)分片动态刷新与节点状态更新之间的平衡
随着时间的推移,区块链节点会增加,如果节点长时间不重新分配,会导致交易状态过度集中,降低攻击弹性。
因此,网络需要每隔一段时间重新调整一次网络节点,即所谓的动态分片,新节点也会更新和同步其分片状态。
然而,每次节点调整都必须在分割完成网络同步后才能开始处理交易,这将导致一些延迟。因此,在设计过程中,必须掌握节点调整的数量和时间,否则很可能导致分割瘫痪。
3)全网数据备份与集中风险的平衡
另一个问题是,如果一些特定的片段受到攻击,其验证将失去有效性。由于片段没有复制系统的所有状态,网络无法验证依赖片段的交易。
解决这个问题的方法是维护存档或备份节点,以帮助系统修复故障和恢复不可用的数据。
然而,这意味着系统的状态只存储在少数节点中,这将导致一些集中的风险。
链金研究员总结
与其他解决方案相比,分片技术虽然复杂且难以实现,但目前仍备受期待Layer1扩容方案。
著名的分片项目Zilliqa主网于2019年1月31日正式上线,过去在测试网上表现不错,实际效率还有待确认。
我们熟悉的以太坊将从以太坊1慢慢开始进化.0进化到以太坊2.0除了将共识机制从PoW改成PoS还会加入Beacon Chain在以太坊实现分片技术。
分片技术的发展,或许将成为区块链迈向落地应用的一项重要决定性因素。
用戶喜愛的交易所
已有账号登陆后会弹出下载