以太坊钱包或许很快就要迎来严重晋级。一旦晋级完结,一般账户(EOA)即可发送批量业务、限期业务、无序业务等。

我与两位搭档 @_SamWilsn_ 和 @adietrichs 正在研究怎么改善以太坊的交互体会。经过屡次迭代后,咱们提出了 EIP 3074:操作码 AUTH 和 AUTHCALL。

要想运用这两个操作码,外部账户需求在链下签署一个音讯,并将该音讯发送给中继者,再由中继者将签名和调用数据发送至一个链上合约(称为 “调用者”)。调用者合约会先运用操作码 AUTH 来验证签名,再运用操作码 AUTHCALL 中继外部账户的调用。

AUTHCALL 与一般调用只有一个差异:AUTHCALL 将调用者(例如,音讯发送方)设为运用操作码 AUTH 恢复的外部地址。这样一来,用户不运用以太币也可与以太坊交互。换言之,他们的业务是由中继者 “赞助” 的。

你或许会觉得这个机制似曾相识。事实上,这与元业务(meta-transaction)的运作方式差不多。可是这里要强调一下,元业务是不能随意设置音讯发送方的。因而,合约必须清晰支撑元业务。EIP 3074 旨在淘汰元业务,降低合约的复杂性。

在深入论述运作原理之前,咱们先来介绍一下咱们想要构建什么。咱们想要构建一个让一般用户无需运用以太币即可防止信赖方式发送业务的机制。这里的关键词是 “免信赖”,即,用户不会颁发中继者任何或许会被运用的特权。

EIP 3074 经过谨慎挑选一般账户签名中包括的参数来创立免信赖体系。用户签署 keccak(0x03 ++ invoker_address ++ commit_hash)。

以太坊钱包可能很快就要迎来重大升级?读懂EIP-3074

“type byte” 是 EIP 2718 的常量字节,值为 0x03。这个字节的作用是防止与其它签名机制发生冲突,例如,EIP 2930 的访问列表业务、EIP 1559 的费用市场业务、EIP 191 的 0x19 签名音讯等。

调用者地址将用户的调用与特定合约绑定。用户的签名只对调用者合约有用。因而,用户能够挑选自己信赖的调用者,就像是挑选用来寄存财物的智能合约钱包那样。

咱们预期只会有少量调用者存在,由于假如调用者合约的实现出错,用户就有或许蒙受损失(请注意,调用者是自主挑选加入的)。开发一个安全的调用者合约成本会很高,需求经过多方审计和静态证明。

不过这与如今的惯例没什么太大的不同。在寄存巨额资金之前,智能合约钱包也应该经过全面的审计和证明。许多大型 DeFi 项目也是如此。

最终一个签名参数是 commit_hash(或许 commit)。这为调用者设计者带来了更大的灵活性,能够让他们开宣布许多不同的计划。

这个 commit 约束调用者只能履行特定操作并创立特定的验证要求(validity requirement)来处理调用。用户能够信赖调用者会遵循这一流程,由于他们能够在链上验证代码。这就是区块链的长处。

咱们来看一个简略的案例。用户想要经过调用者发送一个调用。为了防止他们的调用被无限次中继,他们需求供给一个 nonce,别的还有其它不行更改的值。用户对这些值进行哈希核算得到 commit,并将该 commit 包括在签名音讯内,以便合约运用操作码 AUTH 进行验证。

以太坊钱包可能很快就要迎来重大升级?读懂EIP-3074

调用者会运用传入的值来重新生成 commit 哈希。这样一来,假如代付者(sponsor)改变了其中一个值,调用者核算得到的 commit 哈希会与外部账户签署的彻底不同,导致 AUTH 恢复出一个废物地址,如下图所示:

以太坊钱包可能很快就要迎来重大升级?读懂EIP-3074

希望你现在现已信任,调用者就像任何一般账户都能够运用的智能合约钱包。现在咱们来看看怎么运用 commit 来构建更有趣的计划。

通常情况下,“一个操作对应一个签名” 现已成了经历法则。这是一种比较简略的了解。签名是基于一个业务的哈希值创立的,为什么咱们不将多个业务兼并进行哈希核算呢?事实证明,EIP 3074 能够做到这点。

只要某个账户能够经过 AUTH 的验证,调用者就能够按该账户的要求做恣意屡次 AUTHCALL。这样做是没问题的,由于咱们信任调用者会如实履行代码。咱们能够设计将多个调用兼并哈希成 commit 的计划。

以太坊钱包可能很快就要迎来重大升级?读懂EIP-3074

在上图所示的计划中,调用者会将一切值(nonce1、nonce2 等)兼并进行哈希,生成 commit。调用者将运用这个 commit 和用户签名来调用 AUTH。AUTH 会验证用户是否真的签署了这些参数。

然后,调用者会遍历每个调用并验证 nonce 和其它参数,然后将经过认证的调用数据(calldata)发送至被许可的地址。

在此基础上,咱们还能够构建更多计划。例如,假定你增加一个新的参数 “保质期”。该参数会与其它参数一起经过哈希得到 commit。别的,在验证过程中,调用者会验证expiration < block.number。现在,外部账户现已能够运用限期交易了!

EIP 3074 将带来更多流畅的用户体会,一起不会引入额定的信赖假定。假如你想要阅览 EIP 3074 的完整内容,请点击这个链接:https://eips.ethereum.org/EIPS/eip-3074

go-ethereum 的原型实现在此处维护:

https://github.com/quilt/go-ethereum/tree/eip-3074

视野开拓

从这个意义上讲,整个社会契约学说是制衡欲望策略的一个分支。-《欲望与利益》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注