主页 > imtoken冷钱包安全吗 > 了解以太坊账户与比特币 UTXO

了解以太坊账户与比特币 UTXO

imtoken冷钱包安全吗 2023-11-28 05:14:00

编译:陈一万峰

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

比特币:未使用的交易输出 UTXO

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

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

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、N?:账户产生的已确认交易的数量。

3、Storage:长期数据存储,仅适用于智能合约(不适用于EOA);

4、代码:仅用于智能合约(EOA 没有任何代码)。

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

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

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

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

双花攻击

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

比特币如何解决双花攻击

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

重放攻击

双花攻击的概念不适用于以太坊,因为你可以在以太坊中追踪单个硬币。在以太坊中,需要防止的是重放攻击(RA)。

以太坊如何防止重放攻击

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

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

N 的工作原理

在交易时,您的交易将包含 N 值,使其唯一。如果攻击者试图重放同一笔交易,节点将看到从您的地址到交易商地址的交易已经处理了 N 对应数量的 ETH以太坊合约交易技巧,然后该交易被视为重复交易。

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

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

UTXO 模型账户模型缺点

UTXO 模型

观点:

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

2、事务可以轻松并行化,从而获得更好的可扩展性;

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

缺点:

1、新用户难以掌握;

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

账户模型

观点:

1、易于实施的智能合约;

2、清除事务并节省空间。?

缺点:

1、 发现并发事务很棘手,因为存在一个受不同事务影响的全局状态;

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

3、依靠N来防止重放攻击。

综上所述

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

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

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