织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 区块链

解读 EIP-3074 将如何提升以太坊用户体验(2)

时间:2021-07-13 10:37来源:未知 作者:admin 点击:
AUTHCALL(0xf7) —— 代替已授权的外部账户发送调用(事务) 。共有 8 个输入参数:gas、addr、value、valueExt、argsOffset、argsLength、retOffset 和 retLength。与现有

  •   AUTHCALL(0xf7) —— 代替已授权的外部账户发送调用(事务) 。共有 8 个输入参数:gas、addr、value、valueExt、argsOffset、argsLength、retOffset 和 retLength。与现有的 CALL 操作码相似。

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

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

    科普

      - 上图显示了 EIP 3074 的基本流程,其中调用者合约发送多个事务 -

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

    •   外部账户或其他 gas 支付方将事务数据和授权消息发送给调用者合约;

    •   调用者合约使用 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 格式):

        [ { “to”: “0x6b175474e89094c44da98b954eedeac495271d0f”, “value”: 123, “nonce”: 0 }, { “to”: “0x4bbeEB066eD09B7AEd07bF39EEe0460DFa261520”, “value: 123, ”nonce: 1 }] (责任编辑:admin)

    织梦二维码生成器
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线----------------------------
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    评价:
    表情:
    用户名: 验证码:点击我更换图片
    栏目列表
    推荐内容