如果你是以太坊上的活跃用户,那么你大概率会持有一些 (ERC 20)代币,用来与以太坊生态中的各种 DeFi 项目进行交互。但是,这么做的前提是你必须持有 ETH,因为 ERC 20 代币无法用来支付以太坊的手续费。另外,在向智能合约发送代币时,你通常需要执行两个事务:一个用来_许可_目标合约使用你的代币,另一个用来将代币_转移_到目标合约中。 EIP-3074 可以让智能合约_代表_外部账户(就是普通的以太坊地址)发送事务,从而解决了上述乃至更多问题。 EIP 3074 引入了 AUTH 和 AUTHCALL 这两个 EVM 指令。第一个指令基于 ECDSA 签名设置环境变量 authorized,第二个指令则作为 authorized 发送调用。这本质上就是向智能合约授予外部账户的控制权。 通过 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 定义了两个新的操作码,可由智能合约调用:
|