ERC 4337:无需更改以太坊协议的账户抽象-ODAILY_WOR:TORJ World

DAOrayakiDAO研究奖金池:

长期以来,账户抽象一直是以太坊开发者社区的梦想。EVM代码不仅用于实现应用程序的逻辑,还用于实现个人用户钱包的逻辑验证。这将为钱包设计的创新提供很多思路,且钱包可以提供一些重要的功能如:

1、多重签名和社会恢复

2、更高效、更简单的签名算法

3、后量子安全签名算法

4、可升级性

今天可以使用智能合约钱包完成所有这些事情,但以太坊协议本身要求将所有内容打包在源自ECDSA安全外部账户(EOA)的交易中,但智能合约钱包很难实现这些事情。每个用户操作都需要由来自EOA的事务包装,从而增加了21000gas的开销。用户需要在单独的EOA中拥有ETH来支付gas,并管理两个账户中的余额,或者依赖中继系统,这些系统通常是中心化的。

EIP2938是解决此问题的一种途径,通过更改一些以太坊协议,允许顶级以太坊交易从合约而不是EOA开始。合约本身将有核实和费用支付逻辑,矿工们将进行检查。然而,当协议开发人员密切关注合并和可伸缩性时,他们需要对协议进行重大更改。在我们的新提案中,我们提供了一种在不改变共识层协议的情况下实现相同收益的方法。

这个建议是如何运作的?

我们修改的不是共识层本身的逻辑,而是在更高级别的系统中复制交易mempool的功能。用户发送UserOperation对象,将用户的意图与签名和其他数据打包以进行验证。矿工和者使用Flashbots等服务的捆绑机都可以将一组UserOperation对象打包成一个“捆绑事务”,然后将其包含在以太坊块中。

捆绑者以ETH形式支付捆绑交易的费用,并通过作为所有单个用户操作执行的一部分支付的费用获得补偿。捆绑商将根据与矿工在现有交易mempool中的操作方式类似的费用优先级逻辑来选择要包含哪些UserOperation对象。UserOperation看起来像一个事务;它是一个ABI编码的结构,其中包括以下字段:

1、发件人:进行操作的钱包

2、nonce和signature:传递给钱包验证函数的参数,以便钱包可以验证操作

3、initCode:如果钱包尚不存在,则用于创建钱包的初始化代码

4、callData:用于实际执行步骤调用钱包的数据

其余领域与gas和fee管理有关,完整的字段列表可以在ERC4337规范中找到。

钱包是一个智能合约,需要具备两个功能:

1、validateUserOp,它接受一个UserOperation作为输入。这个函数应该验证UserOperation上的签名和nonce,如果验证成功则支付费用并增加nonce,如果验证失败则抛出异常。

2、op执行功能,将calldata解释为钱包采取行动的指令。这个函数如何解释calldata以及它的结果是完全开放的;但我们预计最常见的行为是将calldata解析为钱包拨打一个或多个电话的指令。

为了简化钱包的逻辑,确保安全所需的大部分复杂智能合约技巧不是在钱包本身中完成的,而是在称为入口点的全局合约中完成的。validateUserOp和执行函数预计将使用require(msg.sender==ENTRY_POINT)进行门控,因此只有受信任的入口点才能使钱包执行任何操作或支付费用。入口点仅在validateUserOp之后对钱包进行任意调用,并且携带该调用数据的UserOperation已经成功,因此这足以保护钱包免受攻击。如果钱包不存在,入口点还负责使用提供的initCode创建钱包。

运行时的入口点控制流程

mempool节点和绑定器需要对validateUserOp的功能实施一些限制:特别是validateUserOp执行不能读取或写入其他合约的存储,不能使用环境操作码,如时间戳,它不能调用其他合约,除非这些合约可以证明不能自我毁灭。这是为了确保绑定器和UserOperationmempool节点用于验证给定的UserOperation是否可以包含或转发的ValidateUserOperation的模拟执行在实际包含到未来块中时具有相同的效果。

如果成功模拟了UserOperation的验证,则保证UserOperation是可包含的,直到发件人帐户发生其他一些内部状态更改。

此外,用户操作为validateUser步骤指定了gas限制,mempool节点和捆绑器将拒绝它,除非此gas限制非常小。这些限制复制了现有以太坊交易的关键属性,使mempool免受DoS攻击。捆绑器和mempool节点可以使用类似于当今以太坊事务处理的逻辑来确定是否包含或转发UserOperation。

与常规的以太坊交易mempool相比,这种设计增加、维护和牺牲了哪些属性?

维护属性:

1、没有中心化的参与者;一切都通过点对点mempool完成

2、DoS安全

3、没有用户端钱包设置的复杂性:用户不必关心他们的钱包合约是否已经“已经发布”;钱包存在于确定性的CREATE2地址,如果钱包尚不存在,第一个UserOperation会自动创建它

4、完整的EIP1559支持,包括费用设置

5、通过付费替换的能力,以比旧操作更高的溢价发送新用户操作,以替换操作或更快地将其包括在内

新的好处:

1、验证逻辑灵活性:validateUserOp函数可以添加任意签名和nonce验证逻辑

2、足以使执行层量子安全:如果该提议被普遍采用,则不需要在执行层上做进一步的工作来保证量子安全。用户可以单独将他们的钱包升级到量子安全的钱包。即使是包装交易也是安全的,因为矿工可以为每个捆绑交易使用新创建的、因此受哈希保护的EOA,并且在将交易添加到区块之前不会发布交易。

3、钱包可升级性:钱包验证逻辑可以是有状态的,因此钱包可以更改其公钥或完全升级其代码。

4、执行逻辑灵活性:钱包可以为执行步骤添加自定义逻辑,例如。进行原子多操作

缺点

1、尽管协议尽了最大努力,但DoS漏洞略有增加,这仅仅是因为允许验证逻辑比单个ECDSA验证的现状更复杂。

2、gas开销:比常规事务稍微多一些的gas开销。

3、一次一笔交易:账户不能排队并将多笔交易发送到mempool中。但是,执行原子多操作的能力使此功能的必要性大大降低。

与付款人的赞助:

赞助交易有许多关键用例。最常引用的期望用例是:

1.允许应用开发者代用户付费

2.允许用户以ERC20代币支付费用,合约作为中介收取ERC20并以ETH支付

该提案可以通过内置的付款管理员机制支持此功能。UserOperation可以设置另一个地址作为其付款人。如果设置了付款管理员,则在验证步骤期间,入口点还调用付款管理员以验证付款管理员是否愿意为UserOperation付费。如果是这样,那么费用将从在入口点内抵押的付款主管的ETH中扣除而不是钱包。在执行步骤中,钱包会像往常一样使用UserOperation中的calldata调用,但之后会使用postOp调用paymaster。

上述两个用例的示例工作流程是:

1、paymaster验证paymaster数据是否包含发起人的签名,从而验证发起人是否愿意为用户操作付费。如果签名有效,出纳员接受,用户操作的费用从发起人的股份中支付

2、付款管理员验证发件人钱包是否有足够的ERC20余额来支付UserOperation。如果有,paymaster接受并支付ETH费用,然后在postOp中索取ERC20代币作为补偿。请注意,目前,这只能在ERC20是由付款管理员本身管理的包装代币时才能完成。

特别要注意的是,在第二种情况下,付款主管可能是完全被动的,可能偶尔会重新平衡和重新设置参数。这是对现有赞助尝试的巨大改进,现有赞助尝试要求付款人始终在线以积极处理个人交易。

这项建议进展如何?

ERC4337可在此处找到。这里正在实施。早期的开发者alpha版本预计很快就会出现,之后的下一步将是确定最终细节并进行审计,以确认该方案的安全性。

开发人员应该能够很快开始尝试帐户抽象钱包!

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:0ms0-3:326ms