Cover photo

探讨:在Appchain趋势下,EIP-3074和ERC-4337谁更适合Web3游戏?

关键结论

EIP-3074有效地解决了Web3游戏因链上交易频繁和交易流程复杂而造成的用户结构单一、游戏性不够的问题:

  • 无需在每条链上都发布智能合约,维护了合约使用的便捷性;

  • 代付Gas费功能,节省了玩家成本;

  • 玩家通过提前授权,避免了在游戏中进行实时链上确认,保证玩家顺畅的游戏体验;

  • 合约调用者的账户权限范围令人对EIP-3074安全性产生担忧。但其核心逻辑是用户通过签名有限制性地对Invoker授权,可有效避免因第三方权限过大而产生的作恶情况。

ERC-4337从开发者层面解决“重复造轮子”和交易成本高的问题:

  • 支持多链部署,开发者无需在每条链上使用单独的中继器;

  • 通过自定义的代码实现批量支付的功能,节省了玩家的链上交易成本;

  • 智能合约钱包不可避免的升级过程中会出现的Proxy模式容易使代码出现易被作恶的薄弱环节,现阶段可以通过第三方安全审计在一定程度上进行风险规避。

Web3游戏当前的主要困境

正如各机构所预测的那样,Web3游戏在2022年众望所归地成为了应用领域的领航者。伴随游戏应用的增长,用户体验差的问题逐渐暴露出来,成为当下最需要被解决的问题之一。

用户体验差体现在以下几个方面:

  1. 主流用户(Web2用户)进入门槛高;

  2. 链上确认频繁,影响游戏趣味性;

  3. 交易Gas费高,交易流程复杂。

这些表象会造成:

  1. 流量壁垒;

  2. 用户结构单一,吸引的用户更多的是羊毛党,而真正的游戏玩家的留存率非常低;

  3. 玩家的资金成本和时间成本均非常高,甚至会造成Web3用户的流失。

当然,我们也看到已经有许多工具在尝试着解决这些问题,比如一些用户聚合器、一些Web3集成式SDK。但这些工具只是特定地去解决某一个产品的问题,行业内仍旧缺乏通用解决方案。

从逻辑上来讲,要创建通用解决方案,我们可以提供两个思路: 1)从底层入手,改变底层协议(底层协议与用户实时链上确认有关); 2)从中间件入手,开发可以接入传统游戏引擎Unity3D和Unreal Engine的Web3工具。

我们分开来阐述。本篇文章先聊一聊底层协议的问题。

EIP-3074和ERC-4337在功能上各自具有优势

要从底层解决用户体验差的问题,我们不得不提到EIP-3074,以及另一个与EIP-3074竞争最大的以太坊协议——ERC-4337。EIP-3074和ERC-4337之争已经很久了。大部分观点认为,尽管ERC-4337仍未落地,但未来它必将代替EIP-3074成为主要的协议。我们对这个观点暂时持保留意见。我们认为,不同的协议在底层的实现逻辑上不同,在没有设定环境的情况下去空谈谁更有前景,无异于建造空中楼阁。我们先来看看这两个协议各自的功能侧重点是什么。

EIP-3074:可实现代付功能的底层协议

我们尽可能用简单的语言完成对EIP-3074的技术阐述:

EIP-3074中有两个关键词:AUTH/AUTHCALL。这两个关键操作码贡献了EIP-3074的主要功能——调用程序。 AUTH/AUTHCALL允许智能合约可以获得对授权给它们的EOA账户的控制权,并可以对账户进行调用,因此这些智能合约也被称为Invoker(调用者)。

1)AUTH代表Invoker可以控制已获得授权的账户,其技术原理是用户使用私钥对消息进行签名,然后发送给中继器,中继器将该消息发送在调用程序的链上合约中,Invoker则通过签名消息和操作码AUTH(主要用于验证)来控制账户;

2)AUTHCALL代表Invoker可以代替用户执行账户操作,因此用户签名的消息可以由Invoker发送,使用户可以摆脱必须通过支付ETH(Gas费)来发送消息的依赖。

这个看似复杂的协议如果被应用于Web3游戏中,将解决眼下迫在眉睫的用户体验问题。

在Web3的游戏逻辑中,玩家每次调用钱包、签名、发送交易以及过程中产生的Gas费,都是玩家直接与底层链之间的交互,而游戏方只是在接受到这些消息后,为玩家提供游戏服务即可。EIP-3074虽然是用于底层链的协议,但它允许游戏方介入链与玩家的交互之中,使整个交易流程变得简单。游戏官方通过AUTH/AUTHCALL操作码来统一调用玩家的钱包,代玩家与底层链进行交互。例如代玩家支付Gas费、进行批量交易等,玩家只需要进行一次签名,即可授权给游戏方代为操作后续一段时间内所有与底层链之间的交互行为。

post image

这样一来,玩家的进入门槛大幅度降低,不管是零Web3基础的传统游戏玩家,还是钱包余额不足的Web3用户,都省去了单独购买Gas Token的步骤。批量交易也省去繁琐的链上交易签名,最大程度保证了游戏的趣味性。

然而,对EIP-3074持反对意见的人普遍认为,EIP-3074这种通过增强EOA账户智能功能的方式存在很大的安全隐患——Invoker的权限过大容易发生作恶事件。

ERC-4337:解决智能合约钱包无法在多链下使用的问题

对EIP-3074的担忧催生了ERC-4337协议的诞生。ERC-4337的支持者认为,与需要修改底层核心协议的EIP-3074相比,ERC-4337是在不修改底层协议的前提下,为智能合约钱包提供EOA功能。当前主流的智能合约钱包没有通用开发标准,因此不支持多链环境,ERC-4337通过UserOperation Mempool & Bundler这两个模块来建立了通用性。以太坊官方对ERC-4337的描述如下:

An account abstraction proposal which completely avoids the need for consensus-layer protocol changes. Instead of adding new protocol features and changing the bottom-layer transaction type, this proposal instead introduces a higher-layer pseudo-transaction object called a UserOperation. Users send UserOperation objects into a separate mempool. A special class of actor called bundlers (either block builders, or users that can send transactions to block builders through a bundle marketplace) package up a set of these objects into a transaction making a handleOps call to a special contract, and that transaction then gets included in a block.

具体的技术细节不在本文展开,感兴趣的读者可以直接阅读官方文章:https://eips.ethereum.org/EIPS/eip-4337

ERC-4337主要解决的是现有的智能合约钱包中“重复造轮子”和成本高的问题——每笔交易被打包后统一进行发送,省去了单独运营一个中继器带来的低效问题;交易被统一发送至以太坊transaction mempool,交易成本被分摊,对于用户来说,交易成本是降低的。

在智能合约钱包优势的基础上,在“无需改变底层协议+解决多链格局下独立中继器问题”这两大优势的加持下,基于ERC-4337的智能合约钱包被认为是以太坊钱包的未来。

在Appchain的大趋势下,EIP-3074和ERC-4337谁在游戏中更有优势?

Appchain的兴起开启了“一链一Dapp”的时代。顾名思义,Appchain意味着每个Dapp都会在区块链上拥有自己的专属空间,不必与其他Dapps竞争网络空间。我们预测,Appchain将随着大型Web3游戏的出现而变成底层基础设施的下一个主流趋势。

我们先来看看一些Appchains的最新动态:

  • Polygon PoS网络的许可分支上线,允许项目方Token作为Gas Token使用;

  • Cosmos2.0开发,dYdX从Starknet迁移到Cosmos;

  • Avalanche推出弹性子网,允许子网验证者使用子网代币进行质押;

  • BSC计划开发应用链;

  • Rangers Protocol计划推出子链。

除此之外,Appchain领域还有我们所熟知的Polkadot、Near Aurora、Octopus Network等早期项目。而Appchain的优势也随着各类应用的全面开花而显现出来。

从各项目目前的动向来看,我们认为2023年将是Appchains各显神通的一年,各类应用也会因为被允许使用项目Token来作为Gas而更多地去选择Appchains进行合作。而当Appchain被大规模采用后,EIP-3074和ERC-4337应该如何发挥各自的优势呢?我们回到技术层面继续聊。

前面我们提到ERC-4337解决了智能合约钱包当前最大的困境,因此从本质上来说,基于ERC-4337的钱包也是智能合约钱包,具备智能合约钱包的基础优势:钱包的实现逻辑可以通过代码自定义,钱包的管理不受私钥的控制。自定义逻辑对于开发者来说非常友好,开发者可以根据业务需求自定义钱包功能,比如前面提到的EIP-3074协议在EOA钱包中所实现的批量交易,也能在ERC-4337中通过代码实现。而对于用户来说,智能合约钱包也能攻克他们进入Web3的第一道障碍——对钱包私钥和助记词的理解和管理——智能合约钱包允许用户通过社交恢复的方式(例如,邮箱)进行钱包管理。一个可以参考的案例是Unipass,Unipass所采用的社交恢复钱包的解决方案如今已被业内广泛采用。

当然,在Appchain的大环境下,智能合约钱包也有其不便之处。要使用智能合约钱包,每个subnet/subchain上都需要单独发布一个合约;而EOA钱包可以在不单独发布合约的情况下随时被调用,无论有多少个subnets/subchains。从开发者使用的便捷程度上看,EOA钱包的便捷度是远高于智能合约钱包的。

EIP-3074的便捷性需要从商业逻辑上来分析。当下主流的商业逻辑是Token价格越高,质押的收益越高,从而参与质押的用户越多,Token的价格也因此而继续上涨,由此形成良性循环。当一条链上的用户越来越多的时候,网络会开始变得拥堵起来,Gas费出现上涨,这是一个老生常谈的问题。此时,Appchain和EIP-3074便可以发挥作用:

  • Appchain提供了“一链一Dapp”的解决方案,前面已经提到过,这里不再赘述;

  • EIP-3074的代付Gas功能,对用户来说,可以减轻由于多次链上确认而带来的Gas费压力。如果是游戏应用,代付功能还能提升游戏体验。试想,当玩家正在沉浸式体验一款MMORPG时,钱包因为实时发生的链上确认而频繁出现在游戏界面上,游戏的趣味性和玩家的沉浸式感受会受到极大的影响。而代付功能支持玩家在游戏开始之前一键授权给游戏项目方或者第三方服务商,调用钱包支付费用等与底层的交互,会由被授权方来完成,玩家在游戏过程中则完全不会受这些复杂交互的影响。这就正好解决了我们在文章开头提到的链上确认频繁,影响游戏性,以及Gas费高、交易流程复杂等问题。

不得不考虑的安全问题

ERC-4337可能会出现的安全漏洞来自于智能合约钱包的升级过程

从安全角度来分析,ERC-4337本身的构想的是很优秀的,但这并不意味着它绝对安全。它的安全漏洞来自于智能合约的普遍特性。

智能合约是由代码构建的,被认为是最具有稳定性的钱包。但不管是修复bug、改进功能,还是响应产品需求优化代码,智能合约是一定要不断升级的。由于区块链的不可篡改性,智能合约一旦发布就不能被修改,如果要做合约升级,则需要部署一个新的合约,以代替原来的旧合约,以此来完成升级。因此,智能合约的升级会涉及到Proxy,即代理模式。原本的Proxy是仅仅做一个转发就可以了。而智能合约升级使用的这种代理模式,一般被称为反向代理。反向代理意味着Proxy执行合约转发前会先执行一段代码,这段代码代表的是智能合约升级的指令。因此,所有使用Proxy进行升级的智能合约都会在被转发到目的合约之前,执行这样一段代码。

问题的关键在这段代码上。

这段代码是不受监控的。它不像交易签名那样需要验证,作恶者可以很轻易地在代码中加入升级合约以外的代码,例如发送合约钱包中的资产到其他账户。这样一来,使用Proxy合约进行升级的所有智能合约都会遭受资产损失。也许有人会提出,这种安全隐患是否可以通过审计来避免?的确,第三方的安全审计是唯一可以对这段代码的安全性进行监控的方式。但如果聪明的黑客将作恶代码隐藏过深,审计机构通常只会对作恶的代码发出警告,而不是直接指出恶意代码。虽然这种概率比较低,但一旦这些警告被忽视,后果不堪设想。也有人会提出,如果不使用Proxy,是否就从源头上杜绝安全问题?事实上,现阶段智能合约的升级还没有办法绕开Proxy。哪怕是使用了ERC-4337这种现阶段来说较为先进的协议,也无法避免这一问题。但我们也非常期待以后会有更安全的方案出现。

EIP-3074中Invoker权限遭人诟病?

我们顺着安全问题继续往下聊。读到这里,也许有读者会问,前面讲的EIP-3074代付Gas费功能也是授予了Invoker操作账户的权限,不也会容易导致人为作恶事件吗?

的确,EIP-3074协议的安全性并不是从代码上体现的。对EIP-3074持反对意见的人可能会认为,账户授权的安全性需要主观上去依赖开发者诚信度,这实际上是很危险的。

但从授权逻辑上来看,EIP-3074并非完全将用户账户暴露在不安全的环境之中。实际上,EIP-3074的权限授予是靠用户的签名完成的。用户签名代表的是他想要被代付Gas费的真实意图,签名中只授予了代付Gas费这一个权限,并不是无限授权。因此,Invoker通过AUTH/AUTHCALL这两个指令只能完成签名所包含的意图,并不会获得无上限的资产处置权。

小结

Appchain的“一链一Dapp”的模式更加适合Web3游戏的建设。我们预测,Appchain将成为基础设施的下一个热门方向。在此基础上,对于EIP-3074和ERC-4337之争,我们有了新的看法。从用户侧来看,Appchain+EIP-3074的组合方式可能是更优的选择,它既兼顾了安全性和便捷性,又在为玩家节省成本的同时,又最大程度地保证了游戏的趣味性。而从开发者角度来讲,ERC-4337无需修改底层底层协议和支持多链环境的优势,可能是开发者更青睐的方案。

但二者在安全性上,都存在一些令人担忧的地方。EIP-3074允许第三方授权操作账户,被认为是更容易发生第三方作恶的情况;而ERC-4337所属的智能合约钱包则在代码上存在一段黑客可趁虚而入的薄弱环节。因此,在底层协议的选择上,我们建议开发者充分考虑游戏自身的特点以及用户的真实需求,直击所需要解决的痛点,去选择真正能解链上交易复杂、交易成本为问题的方案。

接下来,我们要解决的是流量壁垒的问题,即如何降低传统世界玩家的进入门槛。众所周知,钱包是Web3.0的入口,要解决玩家进入问题,还需要从钱包入手。我们将在下一篇内容中来阐述与钱包相关的解决方案。