区块链技术博客
www.b2bchain.cn

区块链技术eip-3074将如何改善以太坊用户体验

第20460篇区块链技术文章区块链技术eip-3074将如何改善以太坊用户体验

然而,公网IP也极大地改变了以太坊的交易操作模式,因此在激活主网公网IP之前,我们需要更深入地思考其安全性

原题:科普| EIP-3074:增强以太坊用户体验
Maarten zuidhoorn
translator&Min&校对;阿健

如果您是以太坊的活跃用户,您可能会持有一些(ERC 20)代币,与以太坊生态中的各种defi项目进行交互。但是,这样做的前提是您必须持有eth,因为ERC 20代币不能用于支付以太坊的手续费。此外,向智能合约发送令牌时,通常需要执行两个事务:一个用于发送令牌权限目标合约使用您的令牌,另一个用于将令牌转移到目标合约中

eip-3074启用智能合约代表外部帐户(即,普通以太坊地址)发送事务,从而解决了上述甚至更多的问题

eip3074引入了两条EVM指令auth和authcall。第一条指令根据ECDSA签名设置authorized环境变量,第二条指令根据authorized发送调用。这本质上是将外部帐户的控制权授予智能合约,通过auth和authcall EVM指令(也称为操作码),智能合约可以基于已签名的消息从外部帐户获得授权,并代表外部帐户发送事务。这带来了许多可能性,例如:

*赞助交易**(也称为元交易):从另一个账户支付交易的gas。这样,就可以在不持有eth地址的情况下发送令牌

*批处理事务**:通过单个调用发送多个事务。这样可以确保在同一块中执行两个或多个事务,并降低事务成本

*增强用户体验*:例如,您可以在单个事务中调用approve和transferFrom。p>

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

不幸的是,EIP 3074仍在审查中,由于各种(安全)问题,不知道何时推出。如果你现在想体验一下,可以使用浦西测试网。在本文中,我将详细介绍eip3074的工作原理

如果您想了解eip3074的实际性能,我以编写一个(批处理)事务调用方合约为例。单击下面的链接访问:

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

请注意,本合同未经审计,仅为概念证明。请勿在生产环境中使用EIP 3074定义了两个新的操作码,可由智能合约调用:

auth(0xf6)-基于签名和提交建议授权的外部帐户。有四个输入参数:commit和yparity,签名的R和s

authcall(0xf7)–发送调用(事务),而不是授权的外部帐户。有八个输入参数:gas、addr、value、valueext、argssoffset、argslength、retoffset和retlength。与现有的call操作码类似,要确认外部帐户的授权,需要外部帐户的签名消息。智能合约调用auth可以通过消息签名恢复签名者,然后将其设置为授权EVM环境变量。这样,每次智能合约调用authcall时,调用者都将被设置为授权地址。当被调用的智能合约调用调用方时(例如,通过solid的MSG。发送方),呼叫将由授权外部帐户的地址而不是呼叫者的地址执行(智能合约)

AUTH 和 AUTHCALL 操作码

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

  • 技术层面解读 EIP-3074 将如何提升以太坊用户体验-上图显示了EIP 3074的基本流程,调用方合约发送多笔交易时-

  • 外部账户签署授权消息;p>

外部账户或其他天然气付款人向呼叫者合同发送交易数据和授权信息

呼叫者合同使用auth操作码执行授权,authcall操作码发送交易

无论谁向合同发送交易,只要外部账户的签名有效。因此,其他人(或账户)也可以发送交易

  1. 请注意,EIP 3074目前不能通过外部账户发送eth。这样做将极大地改变当前一些重要的假设,例如检查事务是否有效。呼叫方需要使用自己的eth余额发送eth。但是,您可以将ETH发送给呼叫者并代表他发送。目前,authcall操作码中包含的valueext字段必须硬编码为0。将来,如果我们找到合适的解决方案,我们可以更改此字段以允许调用者的外部帐户发送eth来执行授权,外部帐户必须以特定格式对消息进行签名:
    ‘*

  2. (注意:|用作字节联接运算符。)

  3. 我们可以对这些字段进行哈希运算(例如,以确定性方式联接它们,或者使用诸如EIP 712之类的规范,并将得到的哈希值用作commit,智能合约基于事务重新计算commit,并将commit(连同签名)提供给auth调用。此操作的目的是检索签名者的地址。如果计算出的提交无效,则根据签名检索到的地址将是错误的,即事务将失败

调用方对提交的安全性负全部责任。您可以将消息作为提交进行签名,并授予智能合约对外部帐户的完全访问权限。以前版本的eip-3074对提交的格式有更严格的要求,包括重放保护,但后来为了提高灵活性,它们被删除了。这要求您在与呼叫者交互时信任呼叫者

因为能够基于签名改变呼叫者,EIP 3074极大地改变了EVM的操作。这将在新的和现有的合同中引入潜在的漏洞。因此,EIP 3074已被正式审计

授权消息和 commit

下面将解释一些安全风险。出于各种原因,eip3074建议只与受信任的呼叫者进行交互。Mycrypto和其他钱包接口提供了可信呼叫者的白名单功能。使用此功能的用户只能为白名单中的呼叫者签署授权消息

    0x03 ||  ||  

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

这个消息包含三个部分:一个魔术字节(`0x03`)、填充成 32 字节的调用者地址(执行 authorize 的智能合约的地址)以及一个 32 字节的 commit。  ![科普 | EIP-3074:提升以太坊用户体验](https://img.chainnews.com/material/images/57c919fe36183af8e3caef553ca635e3.jpg)_- 授权消息格式,包含一个 commit 示例 -_  该 commit 描述了外部账户提交的数据,并且可以根据调用的某些属性计算得出,例如,地址、值和 nonce 的哈希值。调用者合约可以根据属性重新计算出 commit,如果这些字段都正确的话,就会执行授权。  假设我们想要发送以下事务(JSON 格式): 
    [  {    "to": "0x6b175474e89094c44da98b954eedeac495271d0f",    "value": 123,    "nonce": 0  },  {    "to": "0x4bbeEB066eD09B7AEd07bF39EEe0460DFa261520",    "value: 123,    "nonce": 1  }] 

如果提交不包含一些随机数,攻击者可以很容易地获得签名消息并将其再次发送给调用者。恶意调用方可以在不验证提交的情况下控制外部帐户。每次签署消息时请小心

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

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

eip3074明确表示呼叫者程序无法升级。如果调用者程序可以升级,则攻击者可以部署调用者的另一个版本,并在不验证提交的情况下授予对外部帐户的协定控制。目前,智能协定可以使用require(tx.origin==MSG)。发件人)以验证交易是否来自外部帐户(而不是其他合同)。这在某种程度上防止了重入攻击,因为它防止了契约调用函数

局限性和安全隐患

EIP 3074还允许tx.origin作为授权消息的签名者。调用方执行的任何authcall都将导致tx.origin==msg.sender变为真,即使调用是通过智能合约执行的,因此很可能会重新输入。EIP 3074规定“。。。这个EIP的作者没有发现任何此类再入攻击的例子,尽管没有进行详尽的搜索。”

EIP 3074为以太坊带来了许多新的可能性。Auth和authcall使外部帐户能够将帐户的控制权授予智能合约调用者,从而实现批量交易和赞助交易等新的交易类型。然而,公网IP也极大地改变了以太坊交易的运行模式,因此在激活主网公网IP之前,我们需要对其安全性进行更深入的思考

弱 commit 和重放攻击

来源链接:blog.mycrypto.com

如果 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 为以太坊带来了很多新的可能。AUTHAUTHCALL 使得外部账户能够将账户的控制权授予智能合约调用者,从而实现批量事务和赞助事务等新的事务类型。然而,该 EIP 也极大地改变了事务在以太坊上的运作方式,因此在主网上激活该 EIP 之前,我们需要更深入地思考其安全性。

来源链接:blog.mycrypto.com

区块链技术eip-3074将如何改善以太坊用户体验 由www.b2bchain.cn 提供
文章整理自网络,只为个人学习与分享使用
链接地址https://www.b2bchain.cn/20460.html

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 区块链技术eip-3074将如何改善以太坊用户体验
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们