原文标题:《科普 | EIP-3074:进步以太坊用户体验》

假如你是以太坊上的活泼用户,那么你大概率会持有一些 (ERC 20)代币,用来与以太坊生态中的各种 DeFi 项目进行交互。但是,这么做的条件是你有必要持有 ETH,因为 ERC 20 代币无法用来支付以太坊的手续费。别的,在向智能合约发送代币时,你通常需求履行两个业务:一个用来_答应_方针合约运用你的代币,另一个用来将代币_搬运_到方针合约中。

EIP-3074 可以让智能合约_代表_外部账户(便是普通的以太坊地址)发送业务,从而解决了上述乃至更多问题。

EIP 3074 引进了 AUTH 和 AUTHCALL 这两个 EVM 指令。第一个指令依据 ECDSA 签名设置环境变量 authorized,第二个指令则作为 authorized 发送调用。这本质上便是向智能合约颁发外部账户的控制权。

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

经过 AUTH 和 AUTHCALL EVM 指令(又称操作码),智能合约可以依据已签署音讯取得一个外部账户的授权,并替代该外部账户发送业务。这带来了许多或许性,如:

*资助业务**(又称元业务):支付来自另一个账户的买卖的 gas。这样一来,不持有 ETH 的地址也能发送代币。

*批量业务**:经过单个调用发送多个业务。这样可以保证两个或以上的业务在同一个区块中履行,还可以降低买卖费。

*进步用户体验**:例如,你可以在单个业务中调用 approve 和 transferFrom

不同于现有的解决方案,EIP 3074 不需求智能合约钱包。你可以直接将业务发送给负责履行业务的调用者(invoker)。调用者是无状况的免信任型智能合约,并且不需求你事先将余额发送到智能合约。EIP 3074 也没有引进新的业务类型。从技能层面上来看,因为只引进了两种新的 EVM 指令,EIP 3074 完成起来理应更容易。

只可惜 EIP 3074 依然在检查中,并且因为种种(安全方面的)担忧,现在还不知道将于何时启用。假如你现在想要体验一把,可以运用 Puxi 测验网。在本文中,我将具体介绍 EIP 3074 的工作原理。

假如你想看一下 EIP 3074 的实践运转作用,我编写了一个(批量)业务调用者合约作为示例。点击下方链接,即可拜访:

https://github.com/Mrtenz/transaction-invoker

请注意,这个合约没有经过审计,并且仅仅概念证明。请勿在出产环境中运用。

AUTH 和 AUTHCALL 操作码

EIP 3074 界说了两个新的操作码,可由智能合约调用:

  • AUTH0xf6)—— 依据签名和 commit (提交)提出授权的外部账户。共有 4 个输入参数:commit 以及签名的 yParityr 和 s

  • AUTHCALL0xf7) —— 替代已授权的外部账户发送调用(业务) 。共有 8 个输入参数:gasaddrvaluevalueExtargsOffsetargsLengthretOffset 和 retLength。与现有的 CALL 操作码相似。

确认外部账户的授权需求来自该外部账户的签名音讯。调用 AUTH 的智能合约可以经过音讯签名复原出签名者,然后将其设置成 authorized EVM 环境变量。这样一来,该智能合约每次调用 AUTHCALL 时,调用者都会被设置成 authorized 地址。当被调用的智能合约调用 CALLER(例如,经过 Solidity 的 msg.sender)时,将由已授权的外部账户的地址而非调用者地址(智能合约)履行调用。

发送一个或多个业务的根本流程如下图所示:

技术层面解读 EIP-3074 将如何提升以太坊用户体验- 上图显现了 EIP 3074 的根本流程,其间调用者合约发送多个业务 -

  1. 外部账户签署授权音讯;

  2. 外部账户或其他 gas 支付方将业务数据和授权音讯发送给调用者合约;

  3. 调用者合约运用 AUTH 操作码履行授权,并运用 AUTHCALL 操作码发送业务。

将业务发送到合约的是谁并不重要,只要外部账户的签名是有效的即可。因而,其他人(或账户)也可以发送业务。

请注意,现在无法运用 EIP 3074 经过外部账户发送 ETH。这样做会极大地改变当时的一些重要假定,例如,检查业务是否有效。调用者需求运用自己的 ETH 余额来发送 ETH。但是,你可以将 ETH 发送给调用者,并由调用者代为发送。现在,AUTHCALL 操作码所包括的 valueExt 字段有必要被硬编码成 0。将来,假如找到恰当的解决方案,咱们可以更改这个字段,允许调用者外部账户发送 ETH。

授权音讯和 commit

为了履行授权,外部账户有必要签署特定格局的音讯:
``` *

 0x03 || ||

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

这个音讯包括三个部分:一个魔术字节(`0x03`)、填充成 32 字节的调用者地址(履行 authorize 的智能合约的地址)以及一个 32 字节的 commit。 ![科普 | EIP-3074:进步以太坊用户体验](https://img.chainnews.com/material/images/57c919fe36183af8e3caef553ca635e3.jpg)_\- 授权音讯格局,包括一个 commit 示例 -_ 该 commit 描绘了外部账户提交的数据,并且可以依据调用的某些特点核算得出,例如,地址、值和 nonce 的哈希值。调用者合约可以依据特点重新核算出 commit,假如这些字段都正确的话,就会履行授权。 假定咱们想要发送以下业务(JSON 格局):
 [ https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg "to": "0x6b175474e89094c44da98b954eedeac495271d0f", "value": 123, "nonce": 0 }, https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg "to": "0x4bbeEB066eD09B7AEd07bF39EEe0460DFa261520", "value: 123, "nonce": 1 }]

咱们可以对这些字段进行哈希核算(例如,用确定性的方法将它们连接起来,或运用 EIP 712 之类的规范),并将得到的哈希值用作 commit。

咱们可以在智能合约中供给要发送的业务和授权音讯的签名,如 JSON 数据所示。合约函数就如下面这个例子所示:``` *
function sendTransactions(Transaction[] calldata transactions, Signature calldata signature) external;

智能合约依据 transactions 重新核算 commit,并将这个 commit (连同签名一同)供给给 AUTH 调用。此举的意图是找回签名者的地址,假如核算得到的 commit 无效,依据签名找回的地址将是过错的,也便是说业务将失败。

调用者对 commit 的安全性负全责。你可以将 0x0 作为 commit 来签署音讯,并颁发智能合约对外部账户的完好拜访权。前几版 EIP-3074 对 commit 的格局要求更为严厉,包括重放维护等,但是后边为了进步灵活性现已将其移除。这就要求你在与调用者进行交互时有必要信任对方。

局限性和安全隐患

因为可以依据签名更改 CALLER,EIP 3074 极大地改变了 EVM 的运作方法。这会为新合约和现有合约引进潜在漏洞。因而,EIP 3074 现已经过正式审计。

下文解释了一些安全隐患。因为种种原因,EIP 3074 主张只与可信调用者交互。MyCrypto 等钱包界面供给可信调用者白名单功用。运用该功用的用户只能为白名单内的调用者签署授权音讯。

弱 commit 和重放进犯

正如上文解释的那样,EIP 3074 没有为 commit 界说规范格局。调用者可以经过任意方法生成 commit。这意味着,调用者有职责保证 commit 的安全性,例如,抵御重放进犯。

假如 commit 不包括某种随机数,进犯者就可以轻松获取已签署的音讯,再一次发送给调用者。歹意调用者完全不需求验证 commit,就可以取得外部账户的控制权。每次签署音讯时,请你必须慎重。

EIP 3074 经过将调用者的地址包括在授权音讯内,供给了最根底的重放进犯维护。这样一来,歹意调用者就无法重放其他调用者的授权音讯。

可升级调用者

EIP 3074 明确声明调用者程序不行升级。假如调用者程序是可以升级的,进犯者就可以部署另一个版本的调用者,在不验证 commit 的情况下颁发合约对外部账户的控制权。

重入进犯

现在,智能合约可以运用 require(tx.origin == msg.sender) 来验证业务是否来自外部账户(而非另一个合约)。这样可以在必定程度上避免重入进犯,因为它可以避免合约调用该函数。

EIP 3074 也允许 tx.origin 成为授权音讯的签名者。调用者履行的任何 AUTHCALL 都会导致 tx.origin == msg.sender 成真,即便这个调用是由智能合约履行的,因而很有或许遭到重入进犯。EIP 3074 指出:“……本 EIP 的作者并未找到任何有关这种重入进犯的例子,尽管没有进行翔实的查找。”

定论

EIP 3074 为以太坊带来了许多新的或许。AUTH 和 AUTHCALL 使得外部账户可以将账户的控制权颁发智能合约调用者,从而完成批量业务和资助业务等新的业务类型。然而,该 EIP 也极大地改变了业务在以太坊上的运作方法,因而在主网上激活该 EIP 之前,咱们需求更深入地考虑其安全性。

来源链接:blog.mycrypto.com

视野开拓

很多人都在讲中国正在丧失劳动力成本的优势,但很少有人注意到中国在资本方面的成本优势。 资本作为另外一种重要的生产要素,其成本是储蓄者对储蓄回报率的要求。 如果储蓄者要求的储蓄回报率很高,资本就很贵,低回报率的投资项目就无法启动。 而我们之前分析过,中国储蓄过剩的核心原因是中国存在大量不在乎储蓄回报率的储蓄者。 不管是什么原因造成的,中国储蓄者对储蓄回报率的地要求意味着中国的资本成本很低。 所以我们能看到,凡是中国大举进入的产业区段,别国的企业往往都会在竞争中败下阵来。这其中的一个重要原因是中国企业能够承受比别国企业更低的利润率。这就是中国资本成本优势的体现。-《宏观经济学二十五讲:中国视角》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注