主页 > imtoken转账怎么取消 > UTXO 和账户模型比较

UTXO 和账户模型比较

imtoken转账怎么取消 2024-01-15 05:14:43

目前的区块链世界,主要有两种记账方式,UTXO方式(Unspent Transaction Output)和Account方式。 比特币采用UTXO模型,以太坊采用Account模型,CITA也采用Account模型。

比特币的初衷是一个点对点的电子现金系统。 在比特币中,每笔交易都会消耗上一笔交易产生的UTXO,然后产生新的UTXO。 账户余额是该地址所有未花费的 UTXO 的集合。 比特币的全局状态是所有当前未使用的 UTXO 的集合。 以太坊打算创建一个更通用的协议,支持图灵完备的编程语言,用户可以在其上编写智能合约并创建各种去中心化应用程序。 由于 UTXO 模型在状态保存和可编程性方面的不足,以太坊引入了 Account 模型。 下面我们进一步展开两种模式的优缺点。

UTXO模型

在 UTXO 模型中,交易只代表 UTXO 集合的变化。 账户和余额的概念是对UTXO集合的更高抽象,账户和余额的概念只存在于钱包中。

这里写图片描述

优势

计算是链下的,交易本身既是结果又是证明。 节点只需要做验证,交易不需要额外的计算,也不需要额外的状态存储。 交易本身输出UTXO的计算在钱包中完成,使得交易的计算负担完全由钱包承担比特币UTXO模型特点,一定程度上减轻了链的负担。 除了 Coinbase 交易之外,交易的输入总是链接在 UTXO 后面。 交易不可重放,交易的顺序和依赖关系容易验证,也容易证明交易是否被消费。 UTXO模型是无状态的,更容易并发处理。 对于P2SH类型的交易,具有更好的隐私性。 交易中的 Input 之间互不相关,可以利用 CoinJoin 等技术增加一定的隐私性。

缺点

一些更复杂的逻辑无法实现,可编程性差。 对于复杂的逻辑或者需要状态保存的合约,实现起来比较困难,状态空间利用率比较低。 Input越多,witness scripts的数量也会越多。 签名本身会消耗更多的 CPU 和存储空间。 账户模型

对于Account模型,Account模型保存了世界的状态,链的状态一般以StateRoot和ReceiptRoot的形式在区块中约定。 交易只是事件本身,不包含结果。 交易的共识和状态的共识在本质上是可以隔离的。

这里写图片描述

优势

合约以代码的形式存储在Account中,Account有自己的状态。 该模型具有更好的可编程性,更易于开发者理解,适用场景更广。 批量交易成本较低。 想象一下,矿池向矿工支付费用。 在 UTXO 中,由于每个 Input 和 Out 都需要单独的 Witness 脚本或 Locking 脚本,因此交易本身会非常庞大​​,签名验证和交易存储会消耗宝贵的链上资源。 Account 模型可以通过合约大大降低成本。

缺点

Account模型交易之间没有依赖关系,需要解决replay问题。 对于Lightning Network/Raiden Network、Plasma等的实现,用户需要更复杂的Proof证明机制进行证明,从子链到主链的状态迁移需要更复杂的协议。 UTXO VS 账户

针对以上优缺点,我们将做一些分析比较。

第一,关于计算问题。

UTXO 交易本身并没有对区块链进行复杂的计算,所以用简单的方式并不完全准确。 有两个原因。 一是比特币自身交易多为P2SH,Witness脚本不图灵完备,不存在。 循环语句。 对于Account模型,比如以太坊,由于大部分计算都在链上,并且是图灵完备的,所以计算一般都比较复杂,合约安全很可能会成为一个比较大的问题。 当然,图灵完备与否与是不是账户模型没有直接关系。 但引入账户模型后,合约可以作为一个独立的实体存在,不受任何人控制,意义重大。

第二,关于UTXO更容易并发。

在 UTXO 模型中,世界状态是 UTXO 的集合。 为了更快地验证交易,节点需要将所有 UTXO 索引存储在内存中,因此 UTXO 非常昂贵。 对于长时间不被消费的UTXO,它会一直占用节点的内存。 因此,对于这个模型,理论上应该鼓励用户少生产UTXO,多消费UTXO。 但是如果要使用UTXO进行并行交易,就需要更多的UTXO作为输入,同时需要产生更多的UTXO来保证并发,本质上是对网络的粉尘攻击。 由于交易是在钱包内构建的,因此需要更复杂的钱包设计。 相对于Account模型,每个账户都可以看作是一个独立的状态机,互不影响,账户之间通过消息进行通信。 所以理论上,当一个用户发起多笔交易时比特币UTXO模型特点,当这些交易不在同一个Account上互相调用时,这些交易是可以并发执行的。

第三,关于Account模型的事务重放问题。

以太坊采用增加Account中nonce的方式,每笔交易对应一个nonce,每次增加nonce。 这种方式虽然是为了解决replay的问题,但是也引入了顺序问题,使得事务无法并行化。 比如在以太坊中,一个用户发送多笔交易,如果第一笔交易打包失败,会导致后续多笔交易打包不成功。 在 CITA 中,我们采用随机 nonce 方案,使得用户交易之间没有顺序依赖,不会造成串行故障,同时也让交易并行处理成为可能。

第四,存储问题。

因为在 UTXO 模型中,状态只能保存在交易中。 Account模型的状态保存在节点中,在以太坊中保存在MPT方法中,Block中只需要共识StateRoot。 这样,对于链上的数据,Account模型其实更小,网络传输量更小。 同时,状态使用MPT方式保存在节点本地,在空间利用上更加高效。 例如A给B转钱,如果UTXO中有2个Inputs和2个Outputs,则需要2个Witness脚本和2个Locking脚本; 在Account模型中,只需要一个签名,交易内容只包含金额。 最新的隔离见证实施后,比特币的交易数据量也大大减少,但实际上验证节点和全节点仍然需要传输和验证Witness脚本。

第五,对于轻节点获取某个地址状态,UTXO更为复杂。

例如,在一个钱包中,需要向全节点请求某个地址的所有UTXO,全节点可以发送部分UTXO。 钱包很难验证 UTXO 是否已经被消费,钱包也很难证明 UTXO 是完整集合而不是部分集合。 对于Account模型,就简单多了。 根据地址在State中找到对应的状态,当前状态的State Proof可以证明合约数据的真实性。 当然,对于UTXO,也可以在每个区块中验证UTXO的根,这与比特币目前的实现方式有关,并不是UTXO的特性。

综上所述

综上所述,Account模型在可编程性和灵活性方面更具优势; UTXO在简单业务和跨链方面有其非常独特和突破性的优势。 至于选择哪种模式,需要从具体的业务场景出发。

参考

Vitalik Buterin 的“关于 UTXO 的思考”

“以太坊余额与 UTXO 的优缺点是什么?”

《精通比特币第2版——开放区块链编程》

“为什么 EVM-on-Plasma 很难?”

关于作者

张亚宁,Cryptape 架构师,前 EthFans.org 核心开发者。

Github:u2(张亚宁)

- - - - - 结尾 - - - -

我们正在招聘

如果您有志于创造未来的加密经济,并对自己的能力充满信心,欢迎将简历发送至join@cryptape.com,加入我们:

Appchain Team - Appchain 是 Nervos Network 的 Layer 2 解决方案之一,以 CITA 为核心,包括 Neuron 钱包和 Microscope 浏览器。 无论您是移动应用达人、Web应用达人,还是身怀绝技的产品王子,Appchain团队都欢迎您!

CITA 核心团队 - CITA 是全球首个采用微服务架构的许可链项目,使用 Rust 实现,追求高性能和高稳定性。 与大多数许可链不同,CITA 不是以太坊或 Fabric 的分叉,而是一个从零开始设计的项目,它给我们带来了很多挑战,也带来了很多乐趣。 这里有很多隐藏的boss~

CKB 核心团队 - CKB 是 Nervos 网络的第 1 层。 是一条公链,用Rust实现,追求安全稳定。 这里有很多隐藏的boss~

密码研究