主页 > imtokendapp授权 > 一文看懂比特币的UTXO模型

一文看懂比特币的UTXO模型

imtokendapp授权 2023-02-19 06:12:46

1、目前的连锁店使用的是什么模式?

以太坊、EOS、Solana 等知名链均采用账户模型。 甚至可以说,90%以上的项目都采用了账户模型,而只有一些老牌项目采用了UTXO模型,比如BTC、DOGE、LTC,当然一些较新的项目也采用了这种模型,比如作为 FUEL 使用 Layer2 中的 OP 方案。

2. 什么是账户模型

简单理解,银行账户系统,比如银行间转账、支付宝、微信转账等,都属于账户模型。 我举个栗子:

如果A有100,B有100

此时A转50元给B

在系统中的表示是

甲 -50,乙 +50

所以他们的余额

一个 50,乙 150

这是转移。

假设,A还有100,他想转1元给100个新账户。

此时A需要同时转1元给100个人

我09年挖过比特币忘了账户_比特币账户500币截图_比特币账户模型

第一笔交易

A -1,第一人称+1

所以他们的余额

A 99,第1人1

第二笔

A -1,第二人称+1

所以他们的余额

A 98,第2人1

第三笔

A -1,第三人称+1

所以他们的余额

A 97,第3人1

比特币账户模型_我09年挖过比特币忘了账户_比特币账户500币截图

等等

……

第100人

A -1,第100个人+1

所以他们的余额

一个0,第100个人1

理论上需要100笔转账,必须先完成下一笔转账比特币账户模型,否则无法保证账户余额一致,会出现混乱,是否转账多了,余额够不够转出等等。

从理论上讲,随着交易数量的增加,执行所需的时间也会增加。

3.什么是UTXO模型

前面说了,很多老牌主流品牌都是用UTXO的,这个圈子的鼻祖比特币也是用的UTXO模型。 对了,我国发行的法定数字货币DCEP也是基于UTXO模型的,所以这个模型肯定有其独特之处。

UTXO的全称是Unspent Transaction Output,意思是“未花费的交易输出”。 简单来说,它的模式有点像日常生活中的现金系统。 例如:

A有一个钱包(现实中的钱包),面额为1元,面额为10元,面额为100元。

比特币账户500币截图_比特币账户模型_我09年挖过比特币忘了账户

A想给B、C、D各1元钱。

A 三种方式

第一种:取出1元面值钱给B

第二种方式:取出面值10元给C,取回9元

第三种方式:取出面值100元给D,取回99元

这三种方式都可以完成交易。

回到链上,想象这里的每一笔面值的钱其实都是链上的一个UTXO。 具体来说,使用过程中的UTXO并没有转移,而是不断销毁和重建比特币账户模型,例如:

A使用第二种方式给C转账,面值10元的UTXO会被销毁,系统会重新打印一个面值1元的UTXO和一个面值9元的UTXO。 一种。

第三种方法也是如此。 当100元被销毁时,印出1元面值的UTXO和99元面值的UTXO,将1元给D,99元还给A。

这就是UTXO和账户模型转账方式的区别。 更重要的是,UTXO 模型可以并行传输。 因为余额是通过去中心化的 UTXO 存在的,所以每个面额实际上可以同时转移给不同的人。 以上三种方式可以在一笔交易中同时完成,因为不会涉及到账户一致性问题,而且每笔UTXO都是独立计算的。

我们在对比上面的账户模型,每笔交易都要依赖上一笔交易的完成,性能差距可想而知。 这样我们就可以理解为什么央行数字货币采用UTXO模型了。 不然深圳怎么可能给5万个钱包发1000万数字人民币?

让我们回到上面的例子:

我09年挖过比特币忘了账户_比特币账户500币截图_比特币账户模型

A有100,他想转1元给100个新账户。

一个面值为100的UTXO可以拆分成100个面值为1元的UTXO,然后一笔交易直接分发给100个人,瞬间完成。

总之,把UTXO的面值想象成更灵活的现金,在链上不断销毁和重建。

如果你想知道这个钱包地址里有多少钱,你需要统计有多少个UTXO余额,然后加起来。

4. 账户模型与UTXO的优缺点

账户模型优势:

合约以代码的形式存储在Account中,Account有自己的状态。 该模型具有更好的可编程性,更易于开发者理解,适用场景更广。

批量交易成本较低。 想象一下,矿池向矿工支付费用。 在 UTXO 中,由于每个 Input 和 Out 都需要单独的 Witness 脚本或 Locking 脚本,因此交易本身会非常庞大​​,签名验证和交易存储会消耗宝贵的链上资源。 Account 模型可以通过合约大大降低成本。

帐户模型缺点:

Account模型交易之间没有依赖关系,需要解决replay问题。 以太坊是如何解决的? 我们知道,以太坊采用了独特的 Nonce 取值方式。 每笔交易 Tx 中都有一个 Nonce 字段。 对于每个用户,这个Nonce不能重复,从而避免了重放攻击。

对于Lightning Network/Raiden Network、Plasma等的实现,用户需要更复杂的Proof证明机制进行证明,从子链到主链的状态迁移需要更复杂的协议。

UTXO的优点:

比特币账户500币截图_比特币账户模型_我09年挖过比特币忘了账户

计算是链下的,交易本身既是结果又是证明。 节点只需要做验证,交易不需要额外的计算,也不需要额外的状态存储。 交易本身输出UTXO的计算在钱包中完成,使得交易的计算负担完全由钱包承担,一定程度上减轻了链的负担。

除 Coinbase 交易外,一笔交易的 Input 总是链接在某个 UTXO 后面。 交易不可重放,交易的顺序和依赖关系容易验证,也容易证明交易是否被消费。

UTXO模型是无状态的,更容易并发处理。

对于P2SH类型的交易,具有更好的隐私性。 交易中的 Input 之间互不相关,可以利用 CoinJoin 等技术增加一定的隐私性。

UTXO 的缺点:

一些更复杂的逻辑无法实现,可编程性差。 对于复杂的逻辑或者需要状态保存的合约,实现起来比较困难,状态空间利用率比较低。

Input越多,witness scripts的数量也会越多。 签名本身会消耗更多的 CPU 和存储空间。

5. 账户模型与UTXO的简要区别是什么

账户模型:可以简单明了的看到账户下有多少钱。

UTXO模型:统计该地址下的UTXO数量,汇总后的结果就是余额。

账户模型:会越来越难。

UTXO模型:天然支持高并发。

账户模型符合开发者的逻辑习惯,编写逻辑相对容易

UTXO脚本编程比较复杂