主页 > 苹果手机imtoken怎么下载 > EIP-3074 将如何改善以太坊用户体验的技术解读

EIP-3074 将如何改善以太坊用户体验的技术解读

苹果手机imtoken怎么下载 2023-01-18 12:09:25

原标题:《科普 | EIP-3074:提升以太坊的用户体验》

如果你是以太坊的活跃用户,你很有可能会持有一些(ERC 20) 代币)来与以太坊生态中的各种 DeFi 项目进行交互。但是,这样做的前提是你必须持有 ETH以太坊哈希值进度查询,因为 ERC 20 代币不能用于支付以太坊费用。另外,在向智能合约发送代币时,您通常需要执行两笔交易:一是_允许_目标合约使用您的代币,另一笔用于_转移_代币到目标合约。

EIP-3074 通过使智能合约能够代表外部账户(即常规的以太坊地址)发送交易来解决这些问题以及更多问题。

EIP 3074 引入了两个 EVM 指令,AUTH 和 AUTHCALL。第一个指令根据 ECDSA 签名设置授权的环境变量,第二个指令按照授权发送调用。这实质上授予了外部账户的智能合约控制权。

技术层面解读 EIP-3074 将如何提升以太坊用户体验

通过 AUTH 和 AUTHCALL EVM 指令(又名操作码),智能合约可以根据签名消息从外部账户获得授权,并代表他们发送交易。这开辟了许多可能性,例如:

*赞助交易**(又名元交易):为来自另一个账户的交易支付gas。这允许不持有 ETH 的地址发送代币。

*批量交易**:通过一次调用发送多个交易。这确保了两个或多个交易在同一个区块中执行,并且还降低了交易费用。

*改善用户体验**:例如,您可以在单个事务中调用approve 和transferFrom。

与现有解决方案不同,EIP 3074 不需要智能合约钱包。您可以将事务直接发送给负责执行事务的调用者。调用者是一个无状态的去信任智能合约,不需要你事先将余额发送到智能合约。EIP 3074 也没有引入新的交易类型。从技术角度来看,EIP 3074 应该更容易实现,因为只引入了两条新的 EVM 指令。

遗憾的是,EIP 3074 仍在审核中,由于各种(安全)问题,何时启用尚不清楚。如果您现在想尝试,可以使用浦西测试网。在本文中,我将详细介绍 EIP 3074 的工作原理。

如果您想查看 EIP 3074 的实际运行情况,我编写了一个(批量)交易调用者合约作为示例。点击以下链接访问:

请注意,此合同未经审计,只是概念证明。不要在生产环境中使用。

AUTH 和 AUTHCALL 操作码

EIP 3074 定义了两个可以被智能合约调用的新操作码:

确认外部帐户的授权需要来自该外部帐户的签名消息。调用 AUTH 的智能合约可以通过消息签名恢复签名者,然后将其设置为授权的 EVM 环境变量。这样,每次智能合约调用AUTHCALL,调用者都会被设置为授权地址。当被调用的智能合约调用 CALLER(例如,通过 Solidity 的 msg.sender)时,调用将由授权外部账户的地址执行,而不是调用者的地址(智能合约)。

发送一笔或多笔交易的基本流程如下图所示:

技术层面解读 EIP-3074 将如何提升以太坊用户体验

- 上图显示了 EIP 3074 的基本流程,调用者合约发送多个交易 -

外部账户签署授权消息;外部账户或其他 Gas 支付者向调用者合约发送交易数据和授权消息;调用者合约使用 AUTH 操作码进行授权,并使用 AUTHCALL 操作码发送交易。

谁将交易发送给合约无关紧要,只要外部账户的签名有效即可。因此,其他人(或帐户)也可以发送交易。

请注意,目前无法使用 EIP 3074 通过外部账户发送 ETH。这样做会极大地改变当前的一些重要假设,例如检查交易是否有效。调用者需要使用他们的 ETH 余额来发送 ETH。但是,您可以将 ETH 发送给调用者,调用者将代表他们发送。目前,AUTHCALL 操作码中包含的 valueExt 字段必须硬编码为 0。将来,如果找到合适的解决方案,我们可以更改此字段以允许调用方外部帐户发送 ETH。

授权消息和提交

为了执行授权,外部帐户必须签署特定格式的消息:

````*

0x03 || ||

(注意:|| 用作字节连接运算符。)

该消息包含三个部分:一个魔术字节(`0x03`)、填充到 32 个字节的调用者地址(执行授权的智能合约的地址)和一个 32 字节的提交。![科学| EIP-3074: 提升以太坊用户体验]()_\- 授权消息格式,包括一个commit示例-_commit描述了外部账户提交的数据,可以根据调用的一些属性进行计算,例如,地址、值和随机数的哈希值。调用者合约可以根据属性重新计算提交,如果这些字段正确,将执行授权。假设我们要发送以下交易(JSON 格式): [ { "to": "0x6b175474e89094c44da98b954eedeac495271d0f", "value": 123, "nonce": 0 }, { "to": "

我们可以散列这些字段(例如,确定性地加入它们,或使用 EIP 712 之类的规范)并将生成的散列用作提交。

我们可以在智能合约中提供要发送的交易和授权消息的签名,如 JSON 数据所示。合约函数如下例所示: ```` *function sendTransactions(Transaction[] calldata transactions, Signature calldata signature) external;

智能合约根据交易重新计算提交,并将该提交(连同签名)提供给 AUTH 调用。此举的目的是检索签名者的地址。如果计算出的提交无效,那么根据签名检索到的地址就会出错,也就意味着事务会失败。

调用者对提交的安全性负全部责任。您可以使用 0x0 签署消息作为提交,并授予智能合约对外部帐户的完全访问权限。早期版本的 EIP-3074 对提交有更严格的格式要求,包括重放保护,但后来为了更大的灵活性而被删除。这要求您在与调用者交互时信任调用者。

限制和安全隐患

EIP 3074 能够根据签名更改 CALLER,从而彻底改变了 EVM 的运行方式。这为新的和现有的合约引入了潜在的漏洞。因此,EIP 3074 已通过正式审核。

下面解释了一些安全隐患。出于各种原因,EIP 3074 建议仅与受信任的调用者交互。MyCrypto 等钱包接口提供了可信调用者的白名单。使用此功能的用户只能为白名单内的呼叫者签署授权消息。

弱提交和重放攻击

如上所述,EIP 3074 没有定义提交的标准格式。调用者可以以任何方式生成提交。这意味着调用者有责任确保提交的安全性,例如防止重放攻击。

如果提交不包含某种随机数,攻击者可以轻松获取签名消息并将其再次发送给调用者。恶意调用者根本不需要验证提交即可获得对外部帐户的控制权。每次签名时请小心。

EIP 3074 通过在授权消息中包含调用者的地址来提供针对重放攻击的最基本保护。这样,恶意调用者就无法重放其他调用者的授权消息。

可升级的来电者

EIP 3074 明确声明调用程序不可升级。如果调用程序是可升级的,则攻击者可以部署另一个版本的调用程序,该版本授予合约对外部帐户的控制权,而无需验证提交。

重入攻击

目前,智能合约可以使用 require(tx.origin == msg.sender) 来验证交易是否来自外部账户(而不是另一个合约)。这在一定程度上防止了重入攻击,因为它阻止了合约调用该函数。

EIP 3074 还允许 tx.origin 成为授权消息的签名者。调用者执行的任何 AUTHCALL 都会导致 tx.origin == msg.sender 变为真,即使调用是由智能合约执行的,因此容易受到重入攻击。EIP 3074 指出:“……尽管没有进行详尽的搜索,但该 EIP 的作者没有发现任何此类重入攻击的示例。”

综上所述

EIP 3074 为以太坊带来了许多新的可能性。AUTH 和 AUTHCALL 使外部账户能够将账户的控制权委托给智能合约调用者,从而启用新的交易类型,例如批量交易和赞助交易。然而,这个 EIP 也极大地改变了以太坊上的交易方式,因此在主网上激活这个 EIP 之前以太坊哈希值进度查询,我们需要更深入地考虑它的安全性。