在当前区块链世界中,主要有两种记录保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式。Bitcoin 采用的是 UTXO 模型,Ethereum 采用的 Account 模型。
Bitcoin 的设计初衷是点对点的电子现金系统,在比特币中,每个交易消耗之前交易生成的 UTXO 然后生成新的 UTXO,账户的余额即所有属于该地址的未花费 UTXO 集合,Bitcoin 的全局状态即当前所有未花费的 UTXO 集合。Ethereum 意图创建一个更为通用的协议,该协议支持图灵完备的编程语言,在此协议上用户可以编写智能合约,创建各种去中心化的应用。由于 UTXO 模型在状态保存以及可编程性方面的缺陷,Ethereum 引入了 Account 模型。
1.什么是 UTXO
在比特币中,一笔交易“在黑盒子里”实际运作的方式是:花费一种东西的集合,这种东西被称为 “未被花费的交易输出”(即 “UTXO” ),这些输出由一个或多个之前的交易所创造,并在其后制造出一笔或多笔新的 UTXO ,可以在未来的交易中花费。每一笔 UTXO 可以被理解为一个 “coin(币)”:它有面额、有一个所有者。
一笔交易若要有效,必须满足的两个规则是:
1)该交易必须包含一个有效的签名,来自它所花费的 UTXO 的拥有者;
2)被花费的 UTXO 的总面额必须等于或者大于该交易产生的 UTXO 的总面额。
一个用户的余额因此并不是作为一个数字储存起来的;而是用他占有的 UTXO 的总和计算出来的。
如果一个用户想要发送一笔交易,发送 X 个币到一个特定的地址,有时候,他们拥有的 UTXO 的一些子集组合起来面值恰好是 X,在这种情况下,他们可以创造一个交易:花费他们的 UTXO 并创造出一笔新的、价值 X 的 UTXO ,由目标地址占有。当这种完美的配对不可能的时候,用户就必须打包其和值大于X 的 UTXO 输入集合,并添加一笔拥有第二个目标地址的 UTXO ,称为“零钱输出”,分配剩下的币到一个由他们自己控制的地址。
除了"比特币的网络效应",我们可以为 UTXO 模型提出一些技术上的主张;一个特别的主张是:它允许交易的并行化处理,正如一个交易发送者发送两笔独立的交易时,