主页 > imtoken市场打不开 > 最新:以太坊账户VS比特币UTXO,谁为你的交易保驾护航

最新:以太坊账户VS比特币UTXO,谁为你的交易保驾护航

imtoken市场打不开 2023-09-08 05:12:14

编译:陈一万峰

我们都知道比特币和以太坊在很多方面是不同的。 例如,在跟踪用户拥有多少代币方面,比特币和以太坊以两种完全不同的方式进行。 比特币使用基于未花费交易输出 UTXO (UTO) 的模型,而以太坊采用基于账户的方法。

比特币:未花费的交易输出UTXO

比特币交易主要由几部分组成。 之前应用于UTXO的只有两点:

1. 交易输入,也就是我们要花费的token;

2. 交易输出,谁将收到我们的代币。

一笔交易必须至少有一个输入和至少一个输出,即一笔交易的输出成为另一笔交易的输入。 通过这种方式,令牌的历史可以追溯到它被开采的区块。

理解这个系统如何运作的一个很好的类比是想象我们正在用现金购买产品。 50 美元的钞票。 在付款时,您可能会遇到以下情况之一:

1. 产品售价 10 美元

您可以选择用 10 美元的钞票付款以太坊账户模型,因此交易只有一个输入(10 美元的钞票)和一个输出(收银员收到 10 美元的钞票)。

2.产品价格为$0

您仍然可以选择支付,但这次需要两张不同的账单(10 美元和 20 美元)。 在这种情况下,交易有多个输入(10 美元和 20 美元的钞票)和一个输出(收银员收到 0 美元的钞票)。

, 产品售价 $45

您可以选择用 50 美元的钞票付款,收银员会退还您 5 美元。 这种情况对应于一个输入(50 美元的账单)和多个输出(收银员 45 美元,退回 5 美元)。

4. 产品售价 55 美元

您支付 10 美元和 50 美元,即 60 美元。 收银员退还你 5 美元。 这种情况相当于多个输入(10 美元和 50 美元的钞票)和多个输出(收银员 55 美元,返还 5 美元)。

如您所见,您交给收银员的账单(以及您收到的账单)将用于以后的其他付款。 同样,比特币交易的输出成为未来交易的输入。 在它们被花费之前,它们是未花费的,因此被称为未花费的交易输出(UTXO)。

如果你想知道你有多少现金,你需要把你钱包里所有纸币和硬币的价值加起来。 而就比特币而言,钱包会跟踪与用户密钥关联的 UTXO。 这样他们就知道用户拥有多少代币。

以太坊:账户模型

理解以太坊基于账户的模型的一个很好的类比是假设一个银行账户。 客户账户中有一定的资金。 如果客户A转账5美元给客户B,假设客户A至少有5美元,客户A的账户将被扣除5美元,客户B的账户将被记入5美元。 简而言之,这就是以太坊账户的运作方式。

此外,还有两种类型的帐户:

外部拥有账户(EOA):这些由用户通过私钥控制。

合约账户:这些账户由智能合约代码控制。 由于它们不受私钥控制,因此无法发起交易。 发送到智能合约的交易可能会导致该合约调用其他合约的功能。

所有帐户都有以下字段:

1.余额:账户拥有的ETH余额;

2. N?:账户产生的确认交易数。

, Storage:永久数据存储,仅适用于智能合约(不适用于EOA);

4.代码:仅针对智能合约(EOA没有任何代码)。

以太坊中的所有交易均由 EOA 发起,EOA 和合约账户都可以接收和发送 ETH:

1.如果收款账户是EOA,其余额会增加;

2. 如果收款账户是合约账户,则执行其代码。 反过来,这个智能合约可以调用另一个智能合约。 例如,将 ETH 发送到另一个智能合约,或者将 ETH 发送到 EOA 等。

合约仅在被账户调用时运行。 它们可以从 EOA 或其他智能合约中调用,但最终,一切都源于 EOA 创建的交易。

双花攻击

当多次使用同一个令牌时,就会发生双花攻击。 如果你有一张 10 美元的钞票,你不能花两次,因为一旦你支付并把它交给别人,那么它就不在你的控制之下。但是你如何确保相同的令牌不用于数字货币的不同交易?

比特币如何解决双花攻击

当在交易中使用令牌时,该令牌将从 UTXO 集中删除。 同样,随着新交易的到来,它们的输出被添加到 UTXO 集中。 因此,避免双花攻击就像检查您尝试花费的代币是 UTXO 总和的一部分一样简单。 如果是,您可以放心使用。 否则,它已经被花掉了。 并且每个全节点维护一个所有UTXO的列表,这使得验证速度非常快。

重放攻击

由于您无法在以太坊中跟踪单个代币,因此双花攻击的概念不适用于以太坊。 以太坊中最重要的防范是重放攻击(RA)。

以太坊如何防止重放攻击

想象一下,假设你想买一辆车,你发送 10 ETH 给经销商,你收到了车,经销商收到 10 ETH,你们都很高兴。 在这个有效的交易中,如果经销商一遍又一遍地向以太坊网络发送相同的交易,有效地耗尽你的账户,那么这就是所谓的重放攻击。

以太坊使用 N 的概念来解决这个问题。 在密码学中,N 是一个在密码通信中只能使用一次的数字 ?。 在以太坊中,N 是与账户关联的数字,代表从该账户发送的交易数量。 如果是合约账户,则代表该合约已经创建(未调用)的合约数量。

N 的工作原理

在交易的时候,你的交易会包含一个N值,使其独一无二。 如果攻击者试图重放同一笔交易,该节点将看到从您的地址到具有该 N 的经销商地址的该数量 ETH 的交易已经被处理,然后该交易被认为是重复的。

重要的是要注意,攻击者只能尝试创建完全相同数量的交易 ?。 如果攻击者要更改金额,这将使签名无效,使其成为节点将拒绝的有效交易。 此外,无论您将 ETH 发送到哪个地址,您的下一笔交易都会增加 N。

这种机制不仅可以防止重放攻击,还可以让交易按照特定的顺序执行。 如果您发送一系列 N 为 4 和 5 的交易,即使先收到 N 为 4 和 5 的交易,它们也会留在内存池中,直到确认 N 的交易。 除非您正在编写代码来发送交易,否则您不必担心这一点。 一切都将由您的钱包处理。

UTXO模型账户模型优缺点

UTXO模型

优势:

1. 很容易检查输出是否已经花费,从而避免双花攻击;

2. 交易可以很容易地并行处理,带来更好的可扩展性;

, 隐私性好,用户每次交易都可以使用新地址。

缺点:

1、新用户难以掌握;

2. 智能合约更难实现,因为UTXO不跟踪任何状态。

帐户模型

优势:

1. 易于实施智能合约;

2、交易更紧凑,节省空间。 ?

缺点:

1. 查找并发事务比较棘手,因为存在受不同事务影响的全局状态;

2、隐私性低,交易绑定在一个账户;

,依靠 N 来防止重放攻击。

综上所述

从以上内容可以看出,UTXO模型使用起来非常复杂,而以太坊的账户模型相对简单。 但实际上,UTXO模型会让整个账本变得很“轻”,因为UTXO数据不会因为账户的增加而膨胀,也不会因为每笔交易的更新而更新每个人的余额信息。 这大大减少了比特币网络需要更新和保存的数据量。 然而,以太坊网络由于存储大量数据而导致空间和内存不足,导致交易速度缓慢。

但在验证交易时,以太坊账户模型似乎更有效。 因为在UTXO模型中,如果交易有多个输入,需要对每个输入分别进行签名,每次查询都需要遍历相关的UTXO,效率相对较低。 以太坊账户模型不需要签署过去的 UTXO,因此区块链状态可以从任何时间点更新以太坊账户模型,使轻节点的验证变得更加容易和可行。

那么在比较了比特币UTXO模型和以太坊账户模型之后,你更喜欢哪一个呢?