主页 > imtoken钱包苹果版怎么用 > 深入剖析比特币和以太坊,比较UTXO和Account模型的优缺点

深入剖析比特币和以太坊,比较UTXO和Account模型的优缺点

imtoken钱包苹果版怎么用 2023-05-12 07:46:24

摘要:加密经济网络中的底层公链是一个比比特币更像比特币的价值存储平台。 这一点在经济模型设计中会提到,敬请期待。 在技​​术实现上,我们也充分比较了比特币模型和以太坊模型的优缺点,以核心状态继承了比特币协议的优秀架构。

Nervos 加密经济网络中的底层公链 CKB 是比比特币更像比特币的价值存储平台。(这一点将会在经济模型设计中讲到,敬请期待~)在技术实现上,我们也充分对比了比特币 UTXO 模型和以太坊 Account 模型的优劣,从中继承了比特币协议对状态为核心的优秀架构。我们称 CKB 是一个通用验证网络,Cell 是对 UTXO 的一般化版本。并且,发展出了 CKB 模型的优势,在 CKB 当前状态中存储的是任意的共同知识,而不再仅仅是某一种单一数字货币。在深入了解 CKB 公链中的 Cell 模型前,我们来谈一谈前置概念:UTXO 和 Account 模型!

秘猿科技区块链第17期

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

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

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模型,每个账户都可以看作是一个多波段的独立状态机,账户之间通过消息进行通信。 所以理论上,当一个用户发起多笔交易时,当这些交易不在同一个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 的思考:

@ConsenSys...

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

精通比特币第 2 版 - 开放区块链编程:

账户而非 UTXO:

nonce在交易中的作用是什么? :

为什么 EVM-on-Plasma 很难?:@kelvinfic ...