根本逻辑
主要的挑战对于aa系统来说是DoS Safety:包含操作的矿工如何保证它(账户抽象钱包)实际上会支付gas,而不需要首先执行完所有的操作?
如果要求矿工来执行整个交易,那么可能会出现DoS攻击的情况
作为攻击者可以很轻易的发送很多交易假装支付gas,但是在长时间的执行之后,最后一刻revert
同样,为了防止攻击者廉价地阻塞内存池,P2P网络中的节点需要在愿意转发该操作之前检查该操作是否会支付费用。
在这个提案中,我们希望Wallets 有一个ValidateUserOp方法接受UserOperation作为输入,验证签名然后pay the fee。这个方法要求almost-pure: 它只允许访问钱包本身的存储,不能使用environment opcodes (eg. TIMESTAMP), 只能编辑钱包的内存,也可以发送ETH(需要支付 entrypoint)这个方法gas-limited by the verificationGasLimit of the UserOperation; 节点可以选择拒绝 VerificationGasLimit 太高的Op。这些限制允许矿工和网络节点在本地模拟一个验证步骤,并且要确信,当操作实际包含到块中时,结果将与结果匹配
entry point-based的方法允许在验证和执行之间有一个清晰的界限,保持钱包的逻辑简洁。另一种选择是要求钱包遵循一个模板,首先自调用验证,然后自调用执行(这样执行是沙盒的,不会导致费用支付恢复)。
基于模板的方法因为难以实现而被拒绝,因为现有的代码编译和验证工具并没有围绕模板验证进行设计。 @cejay 这段话啥意思 基于模版的方法…这段话