• 黄金指数 $3327.11 0.0%
  • 美元指数 $99.130 0.01%
  • 交易所比特币钱包余额 181.0万 0.06%
  • 全网合约持仓量 $1005.0亿 1.65%
  • 全网24小时合约成交量 $1561.0亿 23.6%
  • 24小时爆仓总量 $1.2亿 43.96%
  • 24小时多空比 50.4600%/49.5400%
60.00% 40.00%
看涨
看跌

破解政府机构臃肿难题

2023-10-24 09:00:02

区块链状态与历史:理解核心概念

在本质上,区块链是复制的确定性状态机,其中“状态”指的是节点必须持有的数据,以便能够处理新传入的区块和交易。对于初学者来说,状态机是一个计算机科学概念,指的是管理有效条件之间转换的抽象机器,并且在任何给定时间只能处于有限数量的状态之一。在区块链中,有一个“状态”来描述账本的当前状态,以及触发状态转换的交易。

状态与历史的区别

从一开始就需要明确的最重要概念之一是状态与历史的区别。即,状态仅指当前使用的数据,或节点处理从第一个(创世)区块到最新区块的所有区块和交易后的最终结果。区块链的“不可变性”仅在于其历史或已经挖出的区块中存储的数据无法更改。因此,状态可以与历史进行对比,历史代表关于过去事件的信息,节点可以保存这些信息以备日后重新广播或存档用途,但不一定需要这些信息来验证区块和交易或继续处理链。

因此,区块链的状态不是不可变的,而是不断变化的。每当向区块链添加一个新块时,网络中的每个节点都会更新其账本副本以反映这一变化,并且共识协议确保每个节点看到的当前状态始终一致。为了实现这一点,区块链必须确保每个节点看到相同的历史记录并根据相同的规则处理交易。每当一个节点偏离规则或试图通过提出欺诈性或无效交易来欺骗系统时,系统中的诚实节点将拒绝这些交易,而不诚实的节点将受到惩罚,例如被削减(在权益证明系统中)或无法获得区块奖励并留下巨额电费(在工作量证明系统中)。

不同区块链的状态和历史管理方式

不同的区块链以不同的方式管理状态和历史。例如,在比特币中,状态指的是所有未花费的交易输出(UTXO),其中每个UTXO代表分配给特定所有者或公共地址的指定数量的比特币。另一方面,历史由一系列带有输入和输出的交易组成。当广播交易时,交易输入引用的UTXO被标记为已花费,从UTXO集合中移除,并将新的UTXO(来自交易输出)添加到集合中。

人们可以将比特币网络想象为一本带有便签(UTXO)的书(交易)。每当有人花费或接收比特币时,他们会在书中写一个条目。每个条目就像书中的一页,一旦写下一页或条目,它就成为书的永久部分。另一方面,便签是附加在页面上的特殊注释,指示仅尚未花费的比特币。随着比特币被花费,一些便签被移除,而新的便签则添加到后续页面中。便签共同代表不断变化的状态,而书代表不可变的历史。

历史与状态的关系

这里需要理解的关键点是,书页中的文本(TXO)代表所有曾经发生过的交易,无论涉及的硬币是否已被再次花费,而便签(UTXO)仅代表尚未花费的硬币。换句话说,比特币的历史是每笔交易的详细记录,而当前状态只是尚未花费的比特币的快照,意味着后者是前者的子集。而正是由于历史与状态之间的这种子集关系(历史和状态中的数据类型相同),状态的大小始终显著小于历史数据的大小。

在以太坊中,最大的基于账户的区块链,状态可以想象为一个巨大的账本或电子表格,其中每行代表一个账户。每个账户都有详细信息,如余额(持有多少代币)和随机数,或者如果是智能合约,则有一些与该合约相关的附加数据,包括合约代码和存储。每当以太坊中发生交易时,节点都会更新电子表格中相应账户的余额或数据。在这种情况下,以太坊的状态代表了电子表格中当前信息的快照,而其历史由修改目标账户状态的交易构成。

以太坊与比特币的数据管理差异

从上面的例子可以看出,以太坊与比特币的数据管理方式大不相同。以太坊的状态由账户构建(不像比特币中的UTXO),而交易包括触发账户修改的信息。状态和交易各自记录完全不同的数据类型,因此它们之间没有子集关系。这意味着历史与状态指的是不同维度的数据,交易历史大小和状态大小没有因果关系。

当交易修改状态时,会创建新状态,而旧状态则作为历史状态存储。因此,以太坊的区块头(和历史)有两个不同的Merkle根(一种有效验证大型数据结构内容的加密方法),一个包含交易,一个包含状态。以太坊节点的磁盘空间需求高于比特币。

以太坊全节点与存档节点的区别

在讨论节点需求时,一个常见的话题是区分以太坊全节点和存档节点。即,两者都可以处理链(验证交易并保护链),但只有后者存储以太坊的完整交易和状态历史。因此,运行一个以太坊全节点所需的磁盘空间——修剪历史状态数据并仅存储历史交易数据和当前状态——大约为1.2 TB,而存档节点则需要大约15 TB。

由于丢弃历史状态不会对以太坊全节点在链处理方面造成任何问题,因为只要知道创世区块和交易历史,所有历史状态都可以重新计算(尽管计算成本很高),因此比较的有意义的数字是全节点必须存储的数据量:比特币大约500 GB,以太坊大约1 TB。考虑到以太坊比比特币年轻六岁,很明显其历史和状态的增长率显著更高。

区块链状态爆炸问题

一旦将数据管理与传统(集中式)云计算和存储服务(如AWS的S3服务)进行对比,理解区块链中的状态爆炸问题就变得相当直观。

即,要使用AWS S3服务,用户需要为存储持续支付费用(通常按每GB占用的固定月费),因为存储的数据继续占据亚马逊服务器上的稀缺磁盘空间,并且每次他们想要从服务器读取或写入服务器时都需要支付少量费用,因为这需要一些计算。这些数据由一家公司(在本例中为亚马逊)管理,通常存储在充满强大计算机的巨型数据中心中。这使得亚马逊能够利用规模经济,为存储和计算提供极具竞争力的价格。

另一方面,区块链通过复制而不是分布来实现去中心化。这意味着分散在世界各地的数百或数千个节点存储和计算区块链数据。正如已经指出的,这些数据并没有分布在许多节点上,每个节点处理不同的数据片段,而是在多个节点上复制,意味着每个节点存储和处理相同的数据。这种区块链的典型架构确保了健壮性,以及无许可性和抗审查性等功能,但这也是一种极其低效的数据管理方式。

这意味着,区块链不会随着新节点加入网络而扩展,这与随着每台新计算机的加入而线性扩展的集中式数据中心不同。相反,整个网络的存储和计算能力始终等于单个节点的能力。这意味着在基础层扩展区块链的唯一方法是提高处理链的全节点的资源要求,从而提高运营成本。然而,这样做意味着更少的人能够负担得起运行全节点,从而对区块链的去中心化产生负面影响。这显然是不可接受的,因为去中心化是区块链的全部意义所在。

状态爆炸问题的根源

这就是状态爆炸开始成为一个明显问题的地方。随着区块链交易、账户和智能合约数量的增长,区块链的状态也在增长,对全节点施加了越来越大的负担。区块链越大,全节点处理链的计算、存储和成本要求就越大,这意味着处理时间更慢、节点更少、去中心化更弱。虽然目前比特币和以太坊的全节点存储需求分别为500 GB和1 TB,但目前看起来并不荒谬,这只是因为这些链尚未解决可扩展性问题并实现真正的广泛采用。

考虑到上述情况,很快就会发现大多数主要区块链系统的设计中存在显著的不平衡。即,每个全节点操作员都必须通过获得适当的硬件和资源来支付这种状态大小增加的成本,以维护和保持其运行。如果用户像支付集中式数据中心一样,适当地补偿矿工或验证者存储他们的数据,这就不会成为问题,但事实并非如此。相反,区块链用户只支付一次性交易费用,作为回报,他们获得了分布在无数节点上的健壮存储系统的永久使用权,这些节点共同承担永久存储这些数据的成本。

用户支付与接收的经济不匹配

前面指出的设计不平衡体现在用户支付与接收之间的经济不匹配上。即,区块链节点使用三种类型的资源来处理交易:CPU、网络带宽和磁盘空间。CPU和带宽是间歇性资源,这意味着每次节点必须计算或验证一个区块并将其广播到网络时,它们都会被扩展。对于这种可补充的资源,用一次性交易费用来补偿节点是合理的,其价值基于它消耗的计算和带宽资源的成本。

然而,磁盘空间是一种长期占用的资源,意味着它被一个用户的交易或智能合约永久占用,不能被另一个用户使用,除非被前一个所有者释放。这意味着用户的数据永久占据节点的磁盘空间,而只通过一次性交易费用补偿他们。这导致了一种称为“公地悲剧”的现象,它指的是人们无限制地访问共享资源时,往往会过度使用并耗尽它,从而损害每个人,包括他们自己。

区块链状态爆炸的解决方案

从上面可以清楚地看出,旨在去中心化、可持续和面向未来的区块链需要在设计时考虑解决状态爆炸问题。话虽如此,已经提出了许多理论上的区块链膨胀问题的解决方案,但只有少数在实践中实施。

其中之一是Nervos的第一层,通用知识库(CKB),它通过限制区块链状态的大小并实施有针对性的状态租金来解决区块链膨胀问题。

CKB从一开始就设计为模块化,这意味着它从未打算在第一层扩展,而是利用多层架构并将交易执行卸载到链外。这确保第一层可以优化为价值保存而不是交易执行,这显著减少了CKB全节点本地必须存储的数据量。

CKB通过将数据存储与其原生代币CKByte(CKB)绑定,对状态增长进行了严格限制。CKBytes代表扩展全球状态的权利,其中1 CKByte等于区块链上的1字节空间。这意味着区块链的状态受到代币供应的限制,使其成为一种稀缺资源。截至2023年10月,CKByte的总供应量约为432亿,这意味着链的存储容量上限约为43.2 GB。在第一次减半(2023年11月)后的四年中,通货膨胀率约为34.44亿CKB,这意味着区块链的大小每年只能扩展约3.444 GB。未来的减半(每4年)将进一步降低增长率,最终达到每年13.44亿CKB的尾排放。

CKB的状态由用户直接拥有和控制,实际上是私有化的。状态存储在单元中——类似于比特币中的UTXO的一等公民。CKB上的存储空间实际上变得像土地;其总大小有限,用户必须拥有并锁定CKB以占据它。理解如何在CKB上实施状态租金需要了解CKB的发行。

虽然CKB有一个“主要发行”机制,该机制经历减半并直接面向矿工,但还有一个“次要发行”,每年13.44亿CKB(永久),在矿工、协议级智能合约(NervosDAO)中的存款人和国库基金(目前被销毁)之间分配。当用户选择利用他们的CKB在链上存储数据时,发行的一小部分(按比例)会定向到矿工。CKB不是强制状态占据者定期支付租金以补偿矿工,而是通过有针对性的通货膨胀来实施租金。这种轻微的稀释代表了“通货膨胀税”或状态占据者为矿工的持续服务支付的持续租金。

长期CKB持有者(不在链上存储数据)可以将他们的CKB锁定在NervosDAO中,以接收这部分次要发行(抵消稀释)。当“状态租户”不再需要利用稀缺的状态空间时,他们可以消耗占据它的单元(状态修剪),释放锁定的CKB代币,并将它们存入NervosDAO以停止支付状态租金。

总结

总之,CKB通过以下方式解决了状态膨胀问题:(i)采用多层架构,通过将交易执行移至链外来减少链上存储的数据,(ii)通过将其与原生代币绑定来限制状态增长,(iii)使状态成为区块链上的一等公民,有效地将其私有化,实现状态修剪和围绕状态的经济,(iv)通过有针对性的通货膨胀实施状态租金,这解决了用户支付一次性费用以永久占据链上状态的常见经济失调问题。

要了解更多关于CKB的信息,请访问nervos.org。

更多新闻