跳至内容
0%

如何开始在 zkSync 上开发(2025)

发布于 2023年5月5日2 分钟阅读

Matter Labs 现在派出了自己的选手,加入 Scroll 和 Polygon 之间的竞争,共同争夺世界首个零知识 EVM的头衔——这就是zkSync Era。

zkSync Era 于 2023 年 3 月上线,是一个兼容 EVM 的 ZK Rollup,利用零知识证明来扩展 Ethereum 网络的速度和处理能力。

在 zkSync 上进行开发的好处包括:ETH 和 ERC20 代币的低 gas 费用,以及原子交换、限价单和原生 Layer-2 NFT 支持。

本文将介绍 zkSync Era 是什么,以及如何用五个步骤在 zkSync 公共测试网上部署一个智能合约。

什么是 zkSync era?

zkSync Era 是 Matter Labs 推出的一个新 Layer-2 方案,结合了 ZK 证明和 Ethereum 虚拟机技术,用于扩展 Ethereum 主网的吞吐量。将这两项技术结合起来,zkSync Era 能实现更快、更安全的 Ethereum 交易。

除了完全等价于 EVM 之外,Era 还将账户抽象的概念引入了 Ethereum 技术栈,该概念最初由 EIP-4337 提出。

有了账户抽象,钱包就变成了智能合约,可以具备诸如自定义签名算法、赞助交易和双因素认证等功能。

如何开始在 zkSync era 上开发

在 zkSync Era 上进行开发,所用的工具与 web3 开发者在 Ethereum 上部署合约时所用的工具基本相同。本教程将介绍如何在 zkSync 公共测试网上部署一个智能合约。

前置条件

完成本教程需要准备以下内容:

  • 一个 Ethereum 钱包的私钥
  • 测试用以太币
  • 带有所需插件的 Hardhat 集成开发环境(IDE)
  • 一个包管理器(NPM 或 Yarn)
  • VScode
  • 对 Typescript 的基本了解

1. 为 zkSync era 搭建 IDE

首先,为项目创建一个文件夹。

打开 VScode(或本机终端),输入:

然后,用以下命令初始化 npm:npm init -y

-y 标志会用默认值预先填充 package.json 文件的所有输入字段,从而节省时间。

现在 npm 和项目文件夹都已设置好,接下来安装所需的依赖项。‍

在 VScode 终端中输入:

以下是该命令的说明:

  • $ npm i -D:install 命令的别名。-D 标志会将所有软件包保存为开发依赖项。
  • $ typescript ts-node:安装 Typescript 以及 Node.js 的 Typescript 执行引擎。
  • $ ethers@^5.7.2 zksync-web3@^0.13.1:两个用于部署合约和与合约交互的库。
  • $ hardhat:所使用的 IDE。
  • $ @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy:两个用于编译和部署智能合约的 Hardhat 插件。

接下来是初始化 Hardhat 项目。‍

在终端中输入:

npx hardhat init

选择“Create a TypeScript Project”,然后按回车,用默认值预先填充接下来的字段。

项目文件夹结构应如下所示:

在 contracts 文件夹中,删除自动生成的 Lock.sol 合约,因为不会用到它。‍

IDE 设置的最后一步是打开 hardhat.config.ts 文件。

hardhat.config.ts 文件是定义以下部署参数的“指挥中心”:

  • zkSync 编译器版本
  • 合约将要部署到的链
  • 合约所使用的 Solidity 编译器版本。

删除 hardhat.config.ts 文件中的内容,并替换为以下内容:

IDE 设置到此完成,下一步是创建智能合约。

2. 创建智能合约

该合约将用于记录一个人的姓名和年龄。

前往项目目录下的 contacts 文件夹,创建一个名为 Registry.sol 的新文件。‍

然后,将以下智能合约代码复制粘贴到该文件中:

合约在部署之前必须先编译。在终端中输入:

npx hardhat compile

3. 为 zkSync era 设置钱包

由于 zkSync Era 支持现有的 Ethereum 钱包,因此不需要创建新钱包。

因此,可以使用任何现有的钱包,例如 Metamask。

注意:不建议使用存有个人投资或储蓄的 Ethereum 钱包,因为部署过程需要导出私钥。

4. 获取测试用 Sepolia ETH 并桥接到 zkSync era

部署合约可能需要 zkSync Era 测试网上的测试以太币。

要获取一些测试以太币,请将部署者钱包中的 Sepolia ETH 桥接到其在 zkSync Era 上的实例。

  • 为此,请前往 Alchemy 的 Sepolia 水龙头以获取 Sepolia 上的以太币。

  • 在继续之前,请先创建一个免费的 Alchemy 账户。

  • 然后,打开 Metamask 并点击钱包地址将其复制。

  • 在水龙头页面上,粘贴钱包地址,并申请 Sepolia ETH。

接下来,前往 zkSync Era 当前的 Sepolia 桥。

点击“Connect via a browser wallet Metamask”。

选择将用于合约部署的钱包。

点击 MAX(或输入自定的金额,但要确保至少为 0.1 ETH),然后点击 Deposit。

注意:请确认目标网络是 zkSync Era 当前的 Sepolia 测试网。

在等待桥接完成的同时,通过创建部署脚本来完成部署流程。

5. 创建部署脚本并导出私钥

接下来,创建一个部署脚本,从 Metamask 导出私钥,复制该私钥,然后部署智能合约。

具体操作如下:

创建部署脚本

回到 VSCode,将 scripts 文件夹重命名为 deploy,并在其中创建一个名为 deploy.ts 的文件。

然后,将以下代码复制到该文件中:

以“//”标记的注释解释了代码的逻辑。

从 MetaMask 导出私钥

在 Metamask 中,打开桥接过程中使用的钱包,并导出其私钥。

点击三个竖排圆点,然后点击 Account details,接着点击 Export private key。

输入密码,并复制显示出的字符串。

粘贴私钥并部署智能合约

回到 deploy.ts 文件,找到以下这一行:

** const wallet = new Wallet("<WALLET-PRIVATE-KEY>");**

将私钥粘贴到 <WALLET-PRIVATE-KEY> 的位置。

请确保没有删除双引号。

最后,回到 VScode 的终端,输入:npx hardhat deploy-zksync

6. 通过区块浏览器验证智能合约

使用 zkSync Era 的测试网区块浏览器来验证已部署的合约。

前往区块浏览器。在搜索栏中粘贴已部署合约的地址。

找到合约后,点击 Contract 选项卡,然后点击 Verify Smart Contract。

然后,填写所需信息:

Contract Name 应填写为 “Registry”。

Zksolc version - v1.3。

Solc version - 0.8.17。

Zksolc Version 和 Solc Version 都可以从 hardhat.config.ts 文件中获取。

在 Enter the Solidity Contract Code 字段中,粘贴 Registry.sol 文件的内容。

点击 Verify Smart Contract 完成流程。

‍7. 与部署在 ZkSync Era 上的合约进行交互

在区块浏览器中,再次通过地址找到该合约,并点击 Contract 选项卡。

这次,区块浏览器应该会显示两个新的字段:

  1. Read,用于 getter 函数
  2. Write,用于 setter 函数

由于 personInfo 映射的可见性被定义为 public,因此会自动为其生成一个 getter 方法。

请确保部署者钱包已连接到浏览器。点击 addPerson。

该部分会展开,出现两个新字段——一个用于填写人物姓名,另一个用于填写其年龄。‍

填写完成后,点击 Write 并确认交易。

交易确认后,点击 personInfo,并输入刚添加的那个人的姓名。

图形界面应会返回所添加人物的年龄。‍

Background gradient

构建区块链应用

Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。