EIP-5003提出了一种新的账户抽象方案,允许将签名账户转换为智能合约钱包,以提供类似EIP-3074的功能。该方案可以用于批处理、赞助和特权降级等应用,且不会引入新操作码。该方案还规定了交易的成本,并在每个contract_code上添加了额外的成本。用户在签署contract_code时需要格外谨慎。
原文标题:Vitalik Buterin proposes EIP-7702 aiming to refine account abstraction on Ethereum
原文作者:Vitalik,以太坊创始人
原文来源:金色财经
编译:xiaozou@金色财经
添加一个新的交易类型(transaction type),该交易类型添加一个contract_code字段和一个签名,并在该交易期间将签名帐户(不一定与txt .origin相同)转换为智能合约钱包,目标是提供与EIP-3074类似的功能。
为EOA添加短期功能改进,增加应用的可用性,并在某些情况下支持安全性改进,很多人都对此非常感兴趣。三个特定应用如下:
EIP-3074解决了所有这些用例挑战,但是存在者未来兼容性的顾虑:
该EIP的目标是在不存在这两个问题的情况下启用EIP-3074的所有用例。
本文档中的关键字“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY”和“OPTIONAL”的解释与RFC 2119中描述的一致。
参数:
自FORK_BLOCK_NUMBER开始,引入了一个新的EIP-2718交易,TransactionType = TX_TYPE(TBD)。
该交易的EIP-2718 TransactionPayload为:
rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, data, access_list, [[contract_code, y_parity, r, s], ...], signature_y_parity, signature_r, signature_s])
新交易的固有成本继承自EIP-2930,具体为:21000 + 16 * non-zero calldata bytes + 4 * zero calldata bytes + 1900 * access list storage key count + 2400 * access list address count
此外,我们在每个contract_code上添加了16 * non-zero calldata bytes + 4 * zero calldata bytes,再加上PER_CONTRACT_CODE_BASE_COST乘以contract_code数组的长度。
在交易执行一开始时,对于各[contract_code, y_parity, r, s]元组:
在交易结束时,将每个signer的contract_code重设为空。
注意,任何contract_code签名的singer和交易的txt .origin都可以不相同。
在该设计中,无需作大量工作就可以转换现有的EIP-3074工作流程。具体来说,AUTH和AUTHCALL将被该EOA的调用所取代。一种方法是,contract_code将是一个用户钱包(为了节省gas,可以是一个DELEGATECALL转发器),并将暴露两个函数,verify和execute。
因此,从“现有的EIP-3074工作流程”转换为这个新方案下的工作流程非常简单。
该EIP被设计为具有非常高度的对帐户抽象未来的向前兼容性,不会过度保存ERC-4337或RIP-7560的任何详细信息。
具体如下:
该EIP打破了账户余额只能因源自该账户的交易而减少的定式。这对内存池设计和其他EIP(如包含列表)都有影响。然而,这些问题对于任何提供类似功能的提案都是常见的,包括EIP-3074。
关于EIP-3074的许多安全顾虑都是共通的。尤其是,用户钱包在签署contract_code时要格外谨慎。