主页 > imtoken官方下载最新版 > 以太坊账户VS比特币UTXO,谁能为你的交易保驾护航?
以太坊账户VS比特币UTXO,谁能为你的交易保驾护航?
编译:陈一万峰
众所周知,比特币和以太坊在很多方面都不同。例如,在跟踪用户拥有多少代币时,比特币和以太坊以两种完全不同的方式进行。比特币使用基于未使用交易输出 (UTXO) 的模型,而以太坊使用基于账户的方法。
比特币:未使用的交易输出 UTXO
比特币交易主要由几部分组成,之前在UTXO中只用到了两点:
1、交易输入为什么以太坊比比特币交易快,即我们将花费的代币;
2、交易输出,即谁将收到我们的代币。
一笔交易必须至少有一个输入和至少一个输出,即一个交易的输出成为另一个交易的输入。通过这种方式,硬币的历史可以追溯到它被开采的区块。
理解这个系统如何运作的一个很好的类比是想象我们正在用现金购买产品。 50 美元的钞票。付款时,您可能会遇到以下情况之一:
1、产品售价 10 美元
您可以选择用 10 美元的钞票支付,这样交易只有一个输入(10 美元的钞票)和一个输出(收银员收到 10 美元的钞票)。
2、产品售价 30 美元
您仍然可以选择付款,但这次您需要两张不同的账单(10 美元和 20 美元)。在这种情况下,交易有多个输入(10 美元和 20 美元的钞票)和一个输出(收银员收到 30 美元的钞票)。
3、产品价格 $45
您可以选择使用 50 美元的账单付款,这样收银员将退还您 5 美元。这种情况相当于一个输入(50 美元的钞票)和多个输出(收银员 45 美元,退货 5 美元)。
4、产品价格 $55
您支付 10 美元和 50 美元,即 60 美元。收银员退还你 5 美元。这种情况相当于多输入(10 美元和 50 美元的钞票)和多输出(收银员 55 美元,退货 5 美元)。
如您所见,您给收银员的账单(以及您收到的账单)将来会用于其他付款。同样,比特币交易的输出成为未来交易的输入。它们在使用之前是未使用的,因此称为未使用的交易输出 (UTXO)。
如果您想知道自己有多少现金,则需要将钱包中所有纸币和硬币的价值相加。而在比特币的情况下,钱包会跟踪与用户密钥相关的 UTXO。这样他们就知道用户拥有多少代币。
以太坊:账户模型
理解以太坊基于账户的模型的一个很好的类比是假设一个银行账户。客户的账户中有一定数量的资金。如果客户 A 向客户 B 转账 5 美元,假设客户 A 至少有 5 美元,客户 A 的账户将扣除 5 美元,客户 B 的账户将扣除 5 美元。简而言之,这就是以太坊帐户的运作方式。
此外,还有两种账户:
外部拥有的账户 (EOA):它们由用户通过私钥控制。
合约账户:这些账户由智能合约代码控制。由于它们不受私钥控制,因此无法启动交易。发送到智能合约的交易可能会导致该合约调用其他合约的函数。
所有帐户都有以下字段:
1、Balance:账户拥有的ETH余额;
2、Nonce : 账户生成的已确认交易的数量。
3、存储:仅用于智能合约的永久数据存储(不适用于 EOA);
4、代码:仅用于智能合约(EOA 没有任何代码)。
以太坊中的所有交易都是由EOA发起的,EOA和合约账户都可以接收和发送ETH:
1、如果收款账户是EOA,余额会增加;
2、如果接收账户是合约账户,则执行其代码。反过来,这个智能合约可以调用另一个智能合约。例如,将 ETH 发送到另一个智能合约,或者将 ETH 发送到 EOA 等。
合约仅在账户调用时运行。它们可以从 EOA 或其他智能合约中调用,但归根结底,一切都源于 EOA 创建的交易。
双花攻击
当同一个令牌被多次使用时,就会发生双花攻击。如果你有一张 10 美元的钞票,你不能花两次,因为一旦你付了钱给别人,那它就不受你的控制了。但是数字货币如何保证不同的交易不使用同一个代币呢?
比特币如何解决双花攻击
当在交易中使用代币时,该代币会从 UTXO 集中移除。同样,随着新交易的出现,它们的输出将被添加到 UTXO 集中。因此,避免双重花费攻击就像检查您尝试花费的令牌是否是 UTXO 集合和的一部分一样简单。如果是,您可以放心使用它。否则,它已经用完了。并且每个全节点都维护着一个所有UTXO的列表,这使得验证非常快。
重放攻击
由于您无法在以太坊中跟踪单个代币,因此双花攻击的概念不适用于以太坊。在以太坊中要防止的最重要的事情是重放攻击。
以太坊如何防止重放攻击
想象一下你想买一辆车,你给dealer寄了10个ETH,你收到了车,dealer收到了10个ETH,你们都很开心。在这个有效的交易中,如果经销商通过一次又一次地向以太坊网络发送相同的交易来有效地耗尽你的账户,那么这就是所谓的重放攻击。
以太坊使用 Nonce 的概念来解决这个问题。在密码学中,Nonce 是一个只能在密码通信中使用一次的数字。在以太坊中,Nonce 是与账户相关联的数字,表示从该账户发送的交易数量。如果是合约账户,则表示该合约已经创建(未调用)的合约数量。
Nonce 的工作原理
在交易时为什么以太坊比比特币交易快,您的交易将包含一个 Nonce 值,使其独一无二。如果攻击者试图重放同一笔交易,该节点将看到从您的地址到具有该 Nonce 的交易商地址的交易已经处理了该数量的 ETH,然后该交易被视为重复。
请务必注意,攻击者只能尝试创建完全相同数量的事务。如果攻击者要更改数量,这将使签名无效,使其成为节点将拒绝的无效交易。此外,无论您将 ETH 发送到哪个地址,您的下一笔交易都会增加 Nonce。
这种机制不仅可以防止重放攻击,还可以让交易以特定的顺序执行。如果你发送了一系列 Nonce 3、4 和 5 的交易,即使先收到 Nonce 4 和 5 的交易,它们也会保留在内存池中,直到 Nonce 3 的交易被确认。除非您正在编写代码来发送交易,否则您无需担心这一点。一切都将由您的钱包处理。
UTXO 模型和账户模型的优缺点
UTXO 模型
优点:
1、很容易检查输出是否已经被花费,从而避免双重花费攻击;
2、事务可以轻松并行化,从而获得更好的可扩展性;
3、隐私性好,用户每次交易都可以使用新地址。
缺点:
1、新用户很难掌握;
2、智能合约更难实现,因为 UTXO 不跟踪任何状态。
帐户模型
优点:
1、易于实施的智能合约;
2、清除事务并节省空间。
缺点:
1、实现并发事务很棘手,因为存在一个受不同事务影响的全局状态;
2、隐私性低,交易绑定在一个账户;
3、依靠 Nonce 来防止重放攻击。
结论
从以上内容可以看出,UTXO模型使用起来会比较复杂,而以太坊的账户模型相对简单。但实际上,UTXO的模型会让整个账本变得非常“轻”,因为UTXO的数据不会因为账户的增加而膨胀,也不会因为每笔交易的更新而更新大家的余额信息。这大大减少了比特币网络需要更新和保存的数据量。另一方面,以太坊网络保存了大量无用的数据,导致空间内存不足,导致交易速度慢。
但在验证交易方面,以太坊账户模型更有效。因为在UTXO模型中,如果交易中有多个输入,每个输入都需要单独签名,而且每次查询都需要遍历相关的UTXO,效率相对较低。以太坊账户模型不需要对过去的UTXO进行签名,因此区块链状态可以从任意时间点更新,使得轻节点的验证更加容易和可行。