---
title: "如何开始在 zkSync 上开发（2025）"
description: "开始开发你的第一个 zkSync 应用。"
---

# 如何开始在 zkSync 上开发（2025）

Matter Labs 现在派出了自己的代表，加入 Scroll 和 Polygon 之间争夺全球[首个零知识 EVM](https://www.alchemy.com/overviews/zkevm)的竞赛——[zkSync](https://www.alchemy.com/overviews/what-is-zksync-era) Era。

zkSync Era 于 2023 年 3 月上线，是一个兼容 EVM 的 ZK Rollup，利用[零知识证明](https://www.alchemy.com/overviews/validity-proof-vs-fraud-proof)来提升 Ethereum 网络的速度和处理能力。

在 zkSync 上开发的好处包括 ETH 和[**ERC20 代币**](https://www.alchemy.com/overviews/erc20-solidity)的低 gas 费用，以及原子交换、限价单和原生的二层 NFT 支持。

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

## **什么是 zkSync era？**

zkSync Era 是 Matter Labs 推出的新二层解决方案，它结合了 ZK-Proofs 和 Ethereum 虚拟机技术，用于[扩展 Ethereum 主网的吞吐量](https://www.alchemy.com/overviews/ethereum-scaling-solutions)。通过融合这两项技术，zkSync Era 能够实现更快、更安全的 Ethereum 交易。

除了完全兼容 [EVM](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm) 之外，Era 还将 EIP-4337 中最初提出的[账户抽象概念](https://www.alchemy.com/overviews/what-is-account-abstraction)引入了 Ethereum 技术栈。

有了账户抽象，钱包变成了智能合约，可以具备自定义签名算法、赞助交易、双重验证等功能。

## **如何开始在 zkSync era 上开发**

在 zkSync Era 上开发所用的[工具与 web3 开发者在 Ethereum 上部署合约所用的工具](https://www.alchemy.com/dapps/top/developer-tools)基本相同。本教程将介绍如何在 zkSync 公共测试网上部署智能合约。

### **先决条件**

完成本教程需要以下条件：

- Ethereum 钱包的私钥
- 测试以太币
- 带有所需插件的 [Hardhat](https://www.alchemy.com/dapps/hardhat) 集成开发环境（IDE）
- 一个包管理器（NPM 或 Yarn）
- [VScode](https://www.alchemy.com/dapps/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 上的执行引擎。
- $ 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](https://www.alchemy.com/overviews/solidity-smart-contract) 编译器版本

删除 **hardhat.config.ts** 文件中的内容，并替换为以下内容：

IDE 现已设置完成，下一步是创建智能合约。

## **2. 创建智能合约**

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

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

接下来，将以下智能合约代码复制粘贴到该文件中：

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

**npx hardhat compile**

## **3. 为 zkSync era 设置钱包**

由于 zkSync Era 支持已有的 Ethereum 钱包，因此无需创建新钱包。

因此，可以使用任何现有钱包，例如 [Metamask](https://www.alchemy.com/dapps/metamask)。

**注意：不建议使用存有投资或存款的个人 Ethereum 钱包，因为部署过程需要导出私钥。**

## **4. 获取测试 Goerli ETH 并桥接到 zkSync era**

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

**若要获取一些测试以太币，请将 Goerli ETH 从部署者钱包桥接到其在 zkSync Era 上的对应实例。**

- 为此，前往 [Alchemy 的 Goerli 水龙头](https://goerlifaucet.com/)，在 Goerli 测试网上获取以太币。

- 在继续之前，先创建一个免费的 Alchemy 账户。

- 然后，打开 Metamask，点击钱包地址以将其复制。

- 在 Goerli 水龙头网站上，粘贴钱包地址，然后点击 **Send Me ETH**。

接下来，前往 zkSync Era 的[桥接页面](https://goerli.portal.zksync.io/bridge)。

点击“Connect via a browser wallet Metamask”。

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

点击 **MAX**（或输入你选择的金额，但确保至少为 0.1 [gETH](https://www.alchemy.com/overviews/what-is-a-geth-node-and-how-to-run-one)），然后点击 **Deposit**。

**注意**：确认右下角的字段显示为：**“zkSync Era Goerli”**。

在等待桥接完成的同时，通过创建部署脚本来完成部署工作。

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

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

具体操作如下：

#### **创建部署脚本**

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

之后，将以下代码复制到该文件中：

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

#### **从 MetaMask 导出私钥**

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

点击三个竖点，然后点击 Account details，接着点击 **Export private key**。

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

#### **粘贴私钥并部署智能合约**

回到 deploy.ts 文件中，找到以下这一行：

**  const wallet = new Wallet\("&lt;WALLET-PRIVATE-KEY&gt;"\);**

将私钥粘贴到 **&lt;WALLET-PRIVATE-KEY&gt;** 的位置。

确保没有删除双引号。

最后，前往 VScode 的终端，输入：**npx hardhat deploy-zksync**

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

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

前往[区块浏览器](https://goerli.explorer.zksync.io/)。在搜索栏中，粘贴已部署合约的地址。

找到合约后，点击 **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](https://www.alchemy.com/overviews/solidity) Contract Code 字段中，粘贴 Registry.sol 文件的内容。

点击 **Verify Smart Contract** 完成整个流程。

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

在区块浏览器中，再次通过地址找到合约，并点击 **Contract** 标签。

此时，区块浏览器应会显示两个新字段：

1. **Read**，用于 getter 函数
1. Write，用于 setter 函数

由于 **personInfo** 映射的可见性被定义为 _public_，系统会自动为其生成一个 getter 方法。

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

该部分将展开，并出现两个新字段——一个用于定义该人的姓名，另一个用于定义其年龄。‍

填写完毕后，点击 **Write** 并确认交易。

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

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