比特币的 UTXO 模型?以太坊的余额模型?都得懂!

金马

——

2019-09-16 12:23
今天给大家科普一下比特币的 UTXO 模型和以太坊的余额模型。这两个模型,你都得懂。

假想你现在要设计一个记账系统,你想记录你每个月赚了多少钱,花了多少钱;你可以使用代码来写一个系统,也可以用 Excel 来设计一下,你打算怎么设计?

大部分人都会想到如下的数据结构:

  • 余额

  • 收入情况、收入细节

  • 支出情况、支出细节



为什么你会这么设计你的数据结构?因为你平常使用的银行账户或者微信、支付宝账户都是余额模型,而你最在乎的也是余额,所以,余额模型是最符合人性的。

其实在区块链里面,ETH 的账户就是余额模型,而比特币却是 UTXO 模型,而 UTXO 模型其实是没有余额的。

为什么比特币的 UTXO 模型没有余额?

其实,从过现在比特币钱包或者比特币浏览器去看,你就会发现,明明是看得到余额的呀,为什么说没有余额呢?比如,我们打开一个大鲸鱼的地址:https://btc.com/35hK24tcLEWcgNA4JxpvbkNkoAcDGqQPsP



明显这是有余额的呀,为什么说比特币的 UTXO 模型没有余额呢?

其实,这个余额是比特币钱包或者比特币浏览器帮你自动计算出来的,这个余额不是来自于比特币的账本中,而是通过交易情况最终计算出来的,举个例子你就明白了。

假设有两个人,一个小A,一个小B。小A给你转了 5 个比特币,收到币后,你再给小 B 转了2个比特币,问,你账户余额中有多少比特币?

答案是没有。哈哈,不是说你没有币,而是说比特币根本就没有账户余额这个数据(需要间接计算出来)。

有些人可能不太理解,比特币没有账户余额,那是怎么记录金额的呢?是怎么知道小 A 有多少钱,我有多少钱?怎么验证我是不是足够支付呢?

再次思考一下我们文章开头记账的例子,也想想支付宝或是银行,都是记录的账户余额,然后每花出去一笔,便在账户余额上减去一笔的钱,收到一笔进账,就在账户里加上一笔的钱。这个模型是符合我们所理解的记账模型。

但实际上,在比特币当中,不是这样记账的。

什么是 UTXO

这里就要说的就是比特币的天才模型——UTXO(Unspent Transaction Output)。UTXO 的意思是未花费的交易输出。没花出去、可以使用的交易输出。

以上面例子为例,小 A 给我转了 5 个比特币,这 5 个比特币的交易一旦成功,就会变成我的 UTXO ,未花费交易输出。

如果小 B 再给我转了3个比特币,我又将获得一笔新的 UTXO。

不知道你能不能够理解,对我来说,这 8 枚比特币不是我的余额,我拥有的是这两笔未花费的交易输出,也就是 2 笔值为 8 的 UTXO。

在我需要支付比特币的时候,就把我地址里的 UTXO,拿来作为交易输入使用。而比特币中,每一笔交易的输入和输出都会记录在区块上,被比特币网络识别并使用。

看完例子,不知道你对 UTXO 有没有个简单的认识?

在 UTXO 的模型中,拥有的比特币是一笔笔 UTXO 上的值体现的。就像纸币一样,我的钱,是由一张张纸币去体现的,而每张纸币都是一个独立的 UTXO。我需要花钱的时候,不是去检查我的余额是不是大于我要购买的价格,而是直接去拼凑纸币,看够不够支付。

所以为什么说“ 实际上,没有什么比特币,只有 UTXO ”,就是因为用户拥有的比特币数就是指用户地址中所有可用的 UTXO 的集合。

UTXO 中非整的支付情况

1、每笔 UTXO 都是独立的个体,虽然他的值可以说任意数(单位为聪)。但只要它被创建出来了,在交易中就是不能分割的。就像前面说的纸币,每张纸币都不可以被撕开,只能作为整体使用。

所以,如果这笔 UTXO 的值过大,例如小 A 转给我的 5 个比特币,我需要转 3 个给小 B。这笔 UTXO 仍然需要以一个整体去支付,多余的 2 个比特币,会找零给我,作为新的 UTXO。

也就是产生两笔交易输出 3BTC→小 B,2BTC→ 我。

如果这笔 UTXO 的值过小,那就多拿几笔以凑足交易的金额。

2、正常情况下,交易输入不会完全等于交易输出,会稍大一些,而多出来就是支付给矿工的交易手续费。

UTXO 模型与账户模型的区别

UTXO (比特币)模型的优点


看完上面的对 UTXO 的解释,你可能会觉得 UTXO 使用起来很复杂。但实际上 UTXO 的模型会让整个账本非常“轻”。UTXO 的数据不会因为账户的增加而膨胀,也不会因为每笔交易的更新而更新所有人的余额信息。这在很大程度上,减少了比特币网络需要更新和保存的数据。

第二个优点是安全和隐私更强。每次交易都可以生成一个新找零地址(之前文章里有讲过),这无疑是提高了安全和隐私性。

第三个优点是 UTXO 能够解决双重支付的问题。因为比特币的点对点性质,无法同时更新所有人的账本,它需要大量的节点去进行确认,一旦余额表确认过慢,来不及更新,就极有可能出现双重支付的问题。

第四个优点是,UTXO 模型中交易可以并发进行。比如在账户模型中,我要分别给小 A 和小 B 转钱,一定会有个先后,因为系统需要验证余额是否足够,才能进行下一笔,而在 UTXO 中,只要我有可用的 UTXO,理论上交易就能同时进行。

账户模型(以太坊)的优点


在以太坊当中,采用的就是账户模型,账户模型的记账模式我前面也有讲到,每个账户中记录的是用户自己的余额。(一个以太坊的账户就相当一个用户的地址,对应着一对公钥与私钥)

相比起 UTXO 模型,账户最大的一个好处就是可以编写状态,而且是复杂状态。在 UTXO 中,每笔交易输出只存在两种状态,已花费和未花费。而以太坊允许在账户中储存代码,可以编写有状态的合约。具有编程性的以太坊,就如我们现在所见,多了非常多的想象空间了。

第二个优点,进行交易时,因为不用对过去的 UTXO 进行签名,所以可以从任何一个时间点开始更新区块链状态,让轻节点的验证更简单可行。

第三个优点,使用账户模型能节省更大的字节空间(区块中),因为每笔交易只需要一个输入、一个输出、和一个签名。而 UTXO 模型输入和输出都有可能存在多个,而且每个单独的输入还需要单独签名。并且,矿工打包交易的手续费还和交易字节的大小直接挂钩。

第四,验证时,账户模型效率更高。因为UTXO模型中,如果交易中存在多个输入,每个输入需要分别签名,每次查询需要也要遍历相关的 UTXO,效率相对会低一些。

关于比特币的 UTXO 模型和以太坊的余额模型,你学会了吗?

声明: 鸵鸟区块链所有发布内容均为原创或授权发布,如需转载,请务必注明文章作者以及来源:鸵鸟区块链(微信公众号:MyTuoniao),任何不尊重原创的行为鸵鸟区块链都将进行责任追究!鸵鸟区块链报道和发布内容,不构成任何投资建议。
相关文章
快讯