为了更好地介绍UTXO模型和账户余额模型,我们首先要了解它们两者甚至是所有区块链应用中最重要的概念和数据结构,即区块(Block)。区块链实际上是由一个不断增长的链表组成,其中包含了很多记录,也就是区块。
在上图中的区块链网络中,实线的区块都被包含在主链中,所有虚线的区块都是孤块(Orphan Block),它们没有被主链所接受。每个区块链网络只能有一条主链,即最长的有效链,这也是当前区块链网络中所有节点达成的共识。
比特币最初的设计目的是建立一个点对点的电子现金系统。在比特币世界中,每笔交易都是基于消耗之前交易产生的UTXO,并生成新的UTXO。账户的余额实际上就是该地址所有未花费的UTXO集合。而以太坊的目标是建立一个更通用的协议,该协议支持图灵完备的编程语言,用户可以在此协议上编写智能合约,创建各种去中心化应用,因此以太坊引入了Account模型。
图灵完备意味着你的语言可以做到与图灵机能做到的所有事情,并解决所有可计算问题,但也意味着潜在风险。
UTXO模型中,交易只表示UTXO集合的变更。而账户和余额的概念是在UTXO集合上的更高抽象,账户和余额的概念只存在于钱包中。让我们看一些例子来理解其中的差异。
首先,比特币的UTXO不能被部分使用。如果一个用户想使用0.5比特币,但他的UTXO集合中有1比特币,他必须同时发送0.5比特币给别人,并发送0.5比特币给自己那么他将支付0.5比特币给矿工。
其次,比特币本身不存储账户余额。用户只需使用私钥对这些UTXO进行签名以花费比特币。数字钱包使比特币区块链看起来像具有用户账户余额等功能,但事实并非如此。
比特币的UTXO系统表现良好,部分原因是数字钱包能够帮助完成与交易相关的大部分工作,包括但不限于处理UTXO、存储密钥、设定交易费用、提供找零地址,以及聚合UTXO(显示可用、待定和总余额)。
在UTXO模型中,交易类似于纸币。每个账户通过计算钱包(对应钱包地址)中所有纸币(UTXO)的和来表示其拥有的总金额。当我们想要支付时,需要使用一个或多个包含足够费用的UTXO,并可能收到找零(新的UTXO)。每个UTXO只能花费一次,一旦被使用,就会从UTXO池中删除。
总的来说,我们可以得出以下结论:
- 比特币区块链不存储账户余额- 比特币钱包持有私钥- 如果包含在交易中,将会花费整个UTXO(在某些情况下,找零以全新UTXO形式存在)
WisdomChain采用了与以太坊相同的Account交易结构。不同于以太坊的是,以太坊中存在两种截然不同的数据:永久数据和临时数据。永久数据的例子是已完全确认的交易,将被记录在transaction trie中,不会再改变。临时数据的例子是特定以太坊账户地址上的余额。账户地址的余额存储在state trie中,并在该账户的交易发生变化时进行修改。在以太坊中,永久数据(如已被挖矿的交易)和临时数据(如账户余额)被单独存储,以太坊使用trie数据结构来管理这些数据。
而在WisdomChain中,当交易发起时,节点将根据当前状态信息和交易内容在虚拟机中计算交易后的状态信息,并将其存储在本地,同时将状态信息的相关哈希值与交易一同发送。当交易被矿工打包入区块后,其他节点会将数据存储在Merkle trees上,以确保节点和网络中其他节点的状态信息保持一致。
因此,WisdomChain的记录保存类似于银行的工作方式。类似于使用ATM/借记卡,银行会记录每张借记卡的金额。当我们需要花钱时,银行会检查记录以确保我们在确认交易前有足够的余额。
当然,WisdomChain采用Account交易结构也带来了一些问题。首先,Account模型中的交易之间没有依赖性,需要解决重放攻击的问题。其次,对于实现闪电网络、Plasma等需要更复杂的证明机制,以及子链向主链进行状态迁移时需要更复杂的协议。
本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://czxurui.com/zx/42414.html
发表回复
评论列表(0条)