原文标题:《引介 | EIP-3074 简介》 以太坊钱包可能很快就要迎来重大升级。一旦升级完成,普通账户(EOA)即可发送批量事务、限期事务、无序事务等。 我与两位同事 @SamWilsn 和 @adietrichs 正在研究如何改善以太坊的交互体验。经过多次迭代后,我们提出了 EIP 3074:操作码 AUTH 和 AUTHCALL。 要想使用这两个操作码,外部账户需要在链下签署一个消息,并将该消息发送给中继者,再由中继者将签名和调用数据发送至一个链上合约(称为 「调用者」)。调用者合约会先使用操作码 AUTH 来验证签名,再使用操作码 AUTHCALL 中继外部账户的调用。 AUTHCALL 与普通调用只有一个区别:AUTHCALL 将调用者(例如,消息发送方)设为使用操作码 AUTH 恢复的外部地址。这样一来,用户不使用以太币也可与以太坊交互。换言之,他们的事务是由中继者 「赞助」 的。 你可能会觉得这个机制似曾相识。事实上,这与元事务(meta-transaction)的运作方式差不多。但是这里要强调一下,元事务是不能随意设置消息发送方的。因此,合约必须明确支持元事务。EIP 3074 旨在淘汰元事务,降低合约的复杂性。 在深入阐述运作原理之前,我们先来介绍一下我们想要构建什么。我们想要构建一个让普通用户无需使用以太币即可以免信任方式发送事务的机制。这里的关键词是 「免信任」,即,用户不会授予中继者任何可能会被利用的特权。 EIP 3074 通过谨慎选择普通账户签名中包含的参数来创建免信任系统。用户签署 keccak (0x03 ++ invoker_address ++ commit_hash)。 「type byte」 是 EIP 2718 的常量字节,值为 0x03。这个字节的作用是避免与其它签名机制发生冲突,例如,EIP 2930 的访问列表事务、EIP 1559 的费用市场事务、EIP 191 的 0x19 签名消息等。 调用者地址将用户的调用与特定合约绑定。用户的签名只对调用者合约有效。因此,用户可以选择自己信任的调用者,就像是选择用来存放资产的智能合约钱包那样。 我们预期只会有少量调用者存在,因为如果调用者合约的实现出错,用户就有可能蒙受损失(请注意,调用者是自主选择加入的)。开发一个安全的调用者合约成本会很高,需要经过多方审计和静态证明。 不过这与如今的惯例没什么太大的不同。在存放巨额资金之前,智能合约钱包也应该经过全面的审计和证明。很多大型 DeFi 项目也是如此。 最后一个签名参数是 commit_hash (或者 commit)。这为调用者设计者带来了更大的灵活性,可以让他们开发出很多不同的方案。 (责任编辑:admin) |