快速入门:EIP-7702与ZeroDev

zerodev 发布于 2026-07-11 阅读 9

本文介绍了EIP-7702以太坊升级,该升级允许为EOA附加EVM代码,使其成为同时拥有EOA和智能账户功能的“双账户”。通过ZeroDev SDK,用户可以将EOA升级为智能账户,并实现无gas赞助、交易批量、会话密钥等功能。文章提供了完整的快速入门示例,包括安装依赖、创建项目、自动或手动创建授权、以及发送无gas批量UserOp。示例基于Sepolia测试网,但可适用于任何支持EIP-7702的网络。最终,用户可以通过ZeroDev SDK以类似普通智能账户的方式操作升级后的账户。

完整示例

以下是供你参考的完整代码示例

设置好仓库后,你可以通过 npx ts-node 7702/7702.ts 运行该示例。

安装包

你将使用以下包:

npm i @zerodev/sdk viem

为支持7702的网络创建项目

在本示例中,我们将使用 Sepolia 测试网,但你也可以使用其他支持7702的网络,如 Arbitrum 和 Base。

  • 前往 ZeroDev 仪表盘,为 Sepolia 创建一个项目。
  • Gas 策略 下启用 Sepolia 的 Gas 赞助。
  • 创建一个 .env 文件,内容如下:
ZERODEV_RPC=<你的仪表盘RPC地址>

使用仪表盘项目页面上的 ZeroDev RPC。

将 EOA 升级为智能账户

要将 EOA 升级为智能账户,你需要签署一份“授权”。你可以手动创建此授权并传递给 ZeroDev SDK,也可以让 ZeroDev 自动创建此授权。

自动创建授权

使用7702辅助函数设置 ZeroDev 账户:

import { createKernelAccount, createKernelAccountClient, createZeroDevPaymasterClient } from "@zerodev/sdk";
import { KERNEL_V3_3 } from "@zerodev/sdk/constants";

const kernelVersion = KERNEL_V3_3;

// 这是你要升级的 EOA
const eip7702Account = privateKeyToAccount(generatePrivateKey());

const publicClient = createPublicClient({
  transport: http(),
  chain,
});

const account = await createKernelAccount(publicClient, {
  eip7702Account,
  entryPoint,
  kernelVersion
});

const paymasterClient = createZeroDevPaymasterClient({
  chain,
  transport: http(ZERODEV_RPC),
});

const kernelClient = createKernelAccountClient({
  account,
  chain,
  bundlerTransport: http(ZERODEV_RPC),
  paymaster: paymasterClient,
  client: publicClient,
  userOperation: {
    estimateFeesPerGas: async ({ bundlerClient }) => {
      return getUserOperationGasPrice(bundlerClient)
    }
  }
});

注意,在此示例中,eip7702Account 是你要升级的 EOA。本示例中使用的是随机 EOA,但你应将其替换为实际的 EOA。

手动创建授权

你可以使用 Viem 的 signAuthorization 函数 手动创建授权,然后将授权传递给 ZeroDev SDK。创建授权时,请确保将 Kernel 指定为智能账户。

import { KERNEL_V3_3 } from "@zerodev/sdk/constants";

const authorization = await walletClient.signAuthorization({
  account: signer,
  contractAddress: KERNEL_V3_3,
});

const account = await createKernelAccount(publicClient, {
  eip7702Account: signer,
  entryPoint,
  kernelVersion,
  eip7702Auth: authorization
});

从智能账户发送 UserOps

将 EOA 升级为智能账户后,你可以像往常一样使用 ZeroDev SDK。例如,发送一个无 Gas 费用的批量 UserOp:

const userOpHash = await kernelClient.sendUserOperation({
  callData: await kernelClient.account.encodeCalls([
    {
      to: zeroAddress,
      value: BigInt(0),
      data: "0x",
    },
    {
      to: zeroAddress,
      value: BigInt(0),
      data: "0x",
    },
  ]),
});

await kernelClient.waitForUserOperationReceipt({
  hash: userOpHash,
});

console.log("UserOp completed");

恭喜!你刚刚使用 EOA 发送了第一笔无 Gas 费用的批量交易。你可以在 Sepolia 浏览器 上通过查找你的账户来查看它。请注意,你可能需要查看“内部交易”(Internal Transactions),因为 UserOps 不会显示为常规交易。

很简单,对吧?现在尝试一些更高级的示例来使用7702构建,或者浏览 ZeroDev 的其他文档!

  • 原文链接: docs.zerodev.app/smart-a...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论