主页 > 冷钱包imtoken > 智慧链状态概念入门
智慧链状态概念入门
加入Wisdom Chain社区,共同建设有价值的互联网!
本文由 Wisdom Chain 公链社区投稿
WIsdom Chain 从 UTXO 模型切换到 Account 模型已经有一段时间了。 在之前的一系列文章中,我们描述了 UTXO 和 Account 交易模型的区别。 区别之一是两者在“状态”概念上的区别——UTXO的状态是有上限的,而Account的状态是无限的。 但什么是地位? 不同形式的国家有什么影响? 接下来以太坊世界状态的数据结构及特点,我们就来简单了解一下这两个问题。
什么是状态
虽然自比特币诞生以来,其UTXO就是一种状态表达形式,但是直到以太坊诞生之后,关于状态的讨论才逐渐增多。 “状态”一般是指某个账户或整个网络在一定时期内保留的当前交易情况和交易后结果的数据。
比特币转账
账户中交易状态和交易结果的数据称为账户状态; 全网层面的关于全网交易状态和结果的数据就是世界状态。
比特币状态
在比特币区块链中,状态用UTXO表示,每一个UTXO上的数据(数量、所有者)就是状态的体现。 当用户使用UTXO进行交易时,原有的UTXO被销毁,成为TXO(spent transaction output),UTXO集合被移除; 同时生成一个新的 UTXO 并关联到 TXO。
比特币的UTXO设计使其网络中的状态保持在生成-销毁-生成的循环中,其状态数据不会过度增长且有上限(因为比特币总量为2100万,UTXO与上限有关总量限制)。 换句话说,比特币只为某个代币的状态变化而存在。
比特币的UTXO就是状态,状态的变化用UTXO集合的变化来表示
比特币没有关于整个网络状态变化的世界状态,也没有关于账户资金变化的账户状态。 关于某个令牌的所有权和数量的变化,只有一个 UTXO 状态。
以太坊中的状态
以太坊白皮书将以太坊称为“关于交易的状态机”——世界的状态随着交易的执行而逐渐更新。 它使用树结构来存储状态数据(也称为状态树),世界状态由树中的帐户状态组成(这种结构称为帕特里夏树)。
举个例子来理解以太坊的状态:如果以太坊是一个去中心化的区块链计算机,那么世界状态的所有数据就是计算机的硬盘。 以太坊的状态内容比比特币更复杂。 世界状态由无数个账户状态组成,账户状态数据由以下内容组成:
以太坊使用状态树结构构建世界状态,个人状态是组成的核心
随机数余额存储根哈希值和代码哈希值(存储树根哈希和代码哈希仅与智能合约账户相关)
以太坊中所有状态数据的核心都在账户中。 账户的状态变化引起世界状态的变化,触发状态变化的条件是“交易”。 由于状态树是用来存储状态哈希值的,随着区块的更新,状态树哈希值也会不断更新,所以状态数据的大小是无限的。
Wisdom Chain 中的状态
Wisdom Chain目前采用的是Account交易结构,所以整体状态结构与以太坊类似——状态内容与账户挂钩,引起状态变化的条件是交易(Wisdom Chain中称为“交易”),世界状态由账户状态组件决定。 与以太坊的区别在于单个账户的状态数据。 Wisdom Chain中的状态数据可以用下图表示:
发起交易时,节点会根据当前状态信息和交易内容,在虚拟机中计算出交易后的状态信息,存储在本地,并将状态信息的相关哈希值随交易一起发送。
上图是Wisdom Chain中Patricia树的检索结构示意图
交易被矿工打包进块后,其余节点会根据交易情况更新本地状态树,确保自己节点的状态信息与网络中其他节点的状态信息一致。 为了保证区块数据不会快速膨胀以太坊世界状态的数据结构及特点,Wisdom Chain和其他项目一样,在对状态数据进行哈希处理后,用帕特里夏树结构构建世界状态,在节省存储空间的同时更新全网状态可能的数据。
不同状态结构的区别
类似于交易模型的差异,基于 UTXO 的状态结构和基于 Account 的状态结构各有优缺点。
对于 UTXO 状态结构,我们以比特币为例。 状态数据需要不断占用每个节点的存储空间,而比特币的 UTXO 结构本身就有局限性。 目前比特币状态数据(即所有UTXO数据)的大小只有3G左右,这得益于比特币对区块大小(1M左右)的良好控制以及UTXO结构带来的高压缩性。
状态的历史变化转化为区块交易数据,目前约为300G,也约等于比特币状态数据的上限。 更小的状态数据虽然减轻了节点的存储压力,但是状态数据的主体不在账户中,而是在特定的代币中,因此无法基于账户建立合约,也无法部署一个智能合约。 这就是比特币使用脚本形式和非图灵完备语言的原因。
对于Account结构,我们以以太坊为例。 状态数据分为账户状态和世界状态,并以Patricia树结构不断扩展。 也就是说,所有的历史状态记录都将保存并存储在节点存储空间和区块内容中。
ETH2.0 拉模型(Pull Model)
虽然客户端可以对历史状态记录进行裁剪(因为可以利用区块交易记录从创世块开始回溯,但需要算力),由于Patricia树结构以哈希值作为记录基础,基于在现有数据上不断扩展,因此当前状态数据将不可避免地随着时间的推移而增长。
目前,如果切掉历史状态数据,以太坊当前状态大小约为13G,整个区块大小约为300G。 如果保留所有历史状态数据,那么以太坊的区块+状态数据的大小将达到惊人的4557G,这也让很多开发者担心以太坊未来会出现的“状态爆炸”问题。
ETH2.0中继推送模式
当然,在不断增长的状态数据背后,是基于账户的状态数据结构。 智能合约可以以账户的形式存在,像其他节点一样依赖虚拟机来执行智能合约,为以太坊提供了比特币所没有的灵活性和可靠性。 可扩展性。
所有数据均通过密码学手段获得
WIsdom Chain基于Account模型建立,其优势与以太坊基本相同。 除了可验证的规则编程,与传统智能合约相比,经过限制规则后的交易将提供比以太坊智能合约更高的安全下限。
但是,正如前文所说,Account-based的账户模型必然会面临“状态爆炸”的问题。 虽然依靠 DPoS 共识带来的节点高性能优势和当前的低状态数据,状态爆炸的发生要比以太坊晚很多,但这仍然是一个值得思考的难题。
不过庆幸的是,以太坊社区已经在设计无状态客户端和多项式承诺等状态爆炸的解决方案,也许未来3年我们就不会担心状态爆炸的问题了。