区块链的状态爆炸困境

2019-04-12 16:05 稿源:链捕手公众号  0条评论

区块链 未来2

图片来源图虫:已授站长之家使用

声明:本文来自于微信公众号链捕手(ID:iqklbs),作者:Jan,授权站长之家转载发布。

区块链发展至今已有近 10 年历史,随着公链的百花齐放以及越来越多新锐技术方案的提出,我们正在面临一个越来越复杂混乱的行业状况。

为了更深入地探讨那些重要且硬核的技术与思想难题,链捕手(ID:iqklbs)将邀请公链、交易所等一系列领域中具有相当建树的企业家、学者、技术大牛等,分享他们在自己专业领域经过大量实践的行业判断与思考,以帮助各位读者进一步加深对区块链的理解。

经链捕手(ID:iqklbs)从Talk论坛转载,Nervos首席架构师Jan撰写了本文,他所在的Nervos Network,是一个专门为Layer 2 打造的Layer  1 底层公链,致力于为未来加密经济构建基础设施。相信Jan精彩的分享,应该能给你带来启发。

01

Layer1 应该关注状态

如果我们认为区块链分层是未来的发展方向,我们应该从一开始就考虑到上层协议和分层网络的需求,在分层的大框架下去设计区块链协议。

换句话说,从分层的角度来看,现有的区块链设计方式都是过时的。现有的区块链在设计时考虑的是特定的功能(例如支付,或者是运行DApp),并希望在运行一段时间后让上层协议来适应自己。然而如果我们阅读互联网的历史就知道,今天互联网的协议分层不是这样打补丁打出来的,相反是在吸收过去经验之后。这是为什么区块链并不天然是Layer 1,Layer  1 是需要设计的。

要弄清Layer  1 应该关注什么,先要弄清楚它和上层协议的区别。Layer  2 起源与我们发现公有链(这里指permissionless blockchain)的性能不足,很难扩容到满足整个加密经济体需求的水平,同时我们又非常迷恋公有链提供的可用性和极大的服务范围,因此慢慢演化出了一系列可以由区块链来保证安全的Layer  2 协议,例如支付通道(payment channel)、 plasma,etc.

这些协议的共同特点是牺牲共识范围来换取性能。公有链最让人惊艳的地方是通过开放网络提供不间断的覆盖全球的服务,这意味着全球共识,也意味着性能底下。

解决这个问题的最好方式是将大部分交易转移到共识范围更小但是性能更好的上层协议中,并且保证上层协议的参与者总是可以在不满意的时候退回到区块链上来解决问题,代价仅仅是一些时间成本。

因此作为Layer  1 的区块链,关注点显然不应该是性能,因为Layer  2 会承担这个职责。Layer  1 是保障上层协议参与者的最后防线,它的关注点应该是安全和去中心化。如果我们观察Layer  2 协议与Layer  1 交互的模式,我们还会发现,Layer  1 负责的是状态共识(存储),Layer  2 负责的是状态生成(计算)。

02

状态是什么

如果Layer  1 的关注点应该是状态而不是计算 , 在设计Layer1 区块链的时候,我们就需要先理解什么是区块链的状态。理解了状态是什么,我们才能理解状态爆炸是什么。

区块链网络中的每一个全节点,在网络中运行一段时间之后都会在本地存储上留下一些数据,我们可以按照历史和现在把它们分为两类:

历史:区块数据和交易数据都是历史,历史是从Genesis到达当前状态的路径。

状态(即现在):节点在处理完从Genesis到当前高度的所有区块和交易后形成的最终结果。状态随着区块的增加一直处于变化之中,交易是造成变化的原因。

共识协议的作用是通过一系列的消息交换,保证每一个节点看到的当前状态是相同的,而实现这个目标的方式是保证每一个节点看到的历史是相同的。只要历史相同(即所有交易的排序相同),处理交易的方式相同(把交易放在相同的确定性虚拟机里面执行),最后看到的当前状态就是相同的。当我们说「区块链具有不可篡改性」的时候,指的是区块链历史不可篡改,相反状态是一直在变化的。

有趣的是,不同的区块链保存历史和状态的方式不同的,其中的差异使得不同的区块链形成了各自的特点。由于这篇文章讨论的话题是状态,而影响状态的历史数据主要是交易(而不是区块头),接下来的讨论历史的时候会侧重交易,忽略区块头。

03

举个例子:Bitcoin的历史和状态

Bitcoin的状态,指的是Bitcoin账本当前的样子。Bitcoin的状态是由一个个UTXO(尚未花费的交易输出)构成的,每个UTXO代表了一定数量的Bitcoin,每个UTXO上面写了一个名字(scriptPubkey),记录这个UTXO的所有者是谁。如果要做一个比喻的话,Bitcoin的当前状态是一个装满了金币的袋子,每个金币上刻着所有者的名字。

Bitcoin的历史由一连串的交易构成,交易内部的主要结构是输入和输出。交易更改状态的方法是,把当前状态中包含的一些UTXO(交易输入引用的那些)标记为已花费,从UTXO集合中移出,然后把一些新的UTXO(这个交易的输出)添加到UTXO集合里面去。

可以看出,Bitcoin交易的输出(TXO,Transaction Output)正是上面说的UTXO,UTXO只不过是一种处于特殊阶段(尚未花费)的TXO。因为构成Bitcoin状态的组件(UTXO),同时也是构成交易的组件(TXO)。

由此,Bitcoin有一个奇妙的性质:任意时刻的状态都是历史的一个子集,历史和状态包含的数据类型是同一维度的。交易的历史(所有被打包的交易的集合,即所有产生过的TXO的集合)即状态的历史(每个区块对应的UTXO集合的集合,也是所有产生过的TXO的集合),Bitcoin的历史只包含交易。

在Bitcoin网络中,每一个区块,每一个UTXO都要持续占用节点的存储空间。目前Bitcoin整个历史的大小(所有区块加起来的大小)大约是200G,而状态的大小只有大约3G(由大约 5000 万个UTXO组成)。Bitcoin通过对区块大小的限制很好的管理了历史的增长速度,由于其历史和状态之间的子集关系,状态数据大小必然远小于历史数据大小,因此状态增长也间接的受到区块大小的管理。

声明:本文转载自第三方媒体,如需转载,请联系版权方授权转载。协助申请

相关文章

相关热点

查看更多