LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > WisdomChain状态概念入门.

WisdomChain状态概念入门.

2020-07-28 WisdomChain中文社区 来源:区块链网络

加入Wisdom Chain社区,共建价值互联网!

本文来自Wisdom Chain公链社区投稿

WIsdom Chain由UTXO切换为Account模型已经有一段时间了,在之前的一系列文章中我们对UTXO和Account交易模型的差别进行了叙述,差异之一便是二者对于“状态”概念的不同——UTXO的状态存在上限,而Account状态则是无限的。不过什么是状态?不同形式的状态又会带来哪些影响?接下来我们就对这两个问题进行简单的理解。

么是状态

虽然从比特币诞生伊始,其UTXO便是一种状态的表现形式,但关于状态的讨论直到以太坊诞生之后才逐渐多起来。“状态”,一般而言指在某一个时间段内,一个账户或者整个网络运行时所留存下的关于当前交易情况与交易后结果的数据。

BTC转账

在一个账户内的关于交易情况与交易结果的数据称为账户状态;在整个网络层面上的关于全网交易情况和结果的数据则是世界状态。

比特币中的状态

在比特币区块链中状态表现为UTXO,每一个UTXO上的数据(数量、所有者)都是状态的体现。当用户使用UTXO进行交易后,原本的UTXO被消灭成为TXO(已花费的交易输出),移除出UTXO集合;同时又生成新的UTXO,关联上TXO。

比特币的UTXO设计让其网络中的状态处于生成-消灭-生成的循环,其状态数据不会过度增长并存在上限(因为比特币总量为2100万枚,而UTXO与总量上限有关)。换句话说,比特币只存在关于某一代币的状态变更。

比特币的UTXO即为状态,状态变更表现为UTXO集合的变化

比特币不存在关于全网状态变更的世界状态,也不存在关于某个账户资金变化的账户状态,只存在关于某一份代币所有权变更和金额变化的UTXO状态。

以太坊中的状态

以太坊白皮书称以太坊为“关于交易的状态机”——世界状态会随着交易执行而逐渐更新。其采用了树状结构来储存状态数据(也被称作状态树),世界状态由账户状态以树状组合而成(这种结构被称为帕特里夏树)。

举个例子来理解以太坊的状态:如果说以太坊是一个去中心化的区块链计算机,那么世界状态的所有数据就是计算机的硬盘。以太坊的状态内容相比比特币更复杂,世界状态由无数的账户状态组成,而账户状态数据又由以下内容组成:

以太坊采用状态树结构构建世界状态,个人状态是组成核心

随机数

余额

储存树根哈希值以及代码哈希值(储存树根哈希与代码哈希只与智能合约账户有关)

以太坊中的所有状态数据的核心在于账户,账户的状态变更引起世界状态的变更,触发状态变更的条件即是"交易"。由于采用了状态树来储存状态哈希值,随着区块的更新,状态树哈希值也将不断更新,因此其状态数据大小是无上限的。

Wisdom Chain中的状态

Wisdom Chain目前使用的是Account交易结构,因此整体状态结构也和以太坊类似——状态内容与账户挂钩,引起状态变更的条件为交易(在Wisdom Chain中称为“事务”),且世界状态由账户状态组成。和以太坊的区别在于单个账户的状态数据,Wisdom Chain中的状态数据可以表现为如下图:

当交易发起时,节点将会在虚拟机中根据目前状态信息和交易内容计算交易后状态信息,储存在本地的同时将状态信息的相关哈希值随交易一同发出。

上图为Wisdom Chain中帕特里夏树的检索结构示意图

当交易被矿工打包入区块以后,其余节点将会根据交易情况更新本地状态树,确保自身节点和网络中其他节点的状态信息一致。为了确保区块数据不会迅速膨胀,Wisdom Chain和其他项目一样,对于状态数据进行哈希计算后,以帕特里夏树结构构建世界状态,在尽可能节约储存空间的前提下更新全网状态数据。

不同状态结构的差别

和交易模型的差别类似,基于UTXO的状态结构和基于Account的状态结构有着各自的优势和劣势。

对于UTXO状态结构而言,我们以比特币作为例子。状态数据需要持续占用每个节点的储存空间,而比特币的UTXO结构天生有着上限限制。目前比特币状态数据(也就是所有UTXO数据)的大小仅3G左右,这得益于比特币对区块大小的良好控制(1M左右),以及UTXO结构带来的高压缩性。

状态的历史变化情况转化为了区块交易数据,目前大约在300G,而这也约等于比特币的状态数据上限。尽管较小的状态数据减少了节点储存压力,但状态数据主体不在账户而在某一特定代币中,无法根据账户建立合约,也就无法部署智能合约。这也是为何比特币采用了脚本形式和非图灵完备语言的原因。

对于Account结构而言,我们以以太坊为例。状态数据分为账户状态和世界状态,并以帕特里夏树结构不断延伸,换句话说,所有的历史状态记录都会被保存下来,并且是保存在节点储存空间和区块内容中。

ETH2.0拉取模式(Pull Model)

虽然可以通过客户端裁剪掉历史状态记录(因为可通过区块交易记录从创世块倒退,但需要消耗算力),但由于帕特里夏树结构以哈希值作为记录基础,基于已有数据不断延伸,因此当前状态数据将不可避免的随着时间增长而增长。

目前如果裁剪掉历史状态数据,以太坊的当前状态大小大约为13G,而整个区块大小大约为300G,如果保留所有的历史状态数据,那么以太坊的区块+状态数据大小将达到惊人的4557G,这也让许多开发者担忧以太坊未来会出现的“状态爆炸”问题。

ETH2.0中继推送模式

当然,不断增长的状态数据背后是基于账户的状态数据结构,智能合约可以以账户形式存在,像其他节点一样依托虚拟机执行智能合约,为以太坊提供了比特币所不具备的灵活性和可拓展性。

全部数据来通过密码学手段得到

WIsdom Chain基于Account模型建立,其优势基本同以太坊一致,加上可验证的规则编程,相比传统智能合约,限定规则后的事务将能比以太坊智能合约提供更高的安全下限。

但如前文所说,基于Account的账户模型将不可避免的面临“状态爆炸”问题。虽然依托DPoS共识带来的节点高性能优势,以及目前较低的状态数据,状态爆炸的出现时间远迟于以太坊,但这仍是一个值得思考的难题。

不过开心一点,以太坊社区已经在设计无状态客户端和多项式承诺等状态爆炸解决方案,也许在未来3年我们就不会忧虑状态爆炸这个问题了。

—-

编译者/作者:WisdomChain中文社区

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...