如何开始在 zkSync 上开发(2025)
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 公共测试网上部署一个智能合约。
前置条件
完成本教程需要准备以下内容:
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 选项卡。
这次,区块浏览器应该会显示两个新的字段:
- Read,用于 getter 函数
- Write,用于 setter 函数
由于 personInfo 映射的可见性被定义为 public,因此会自动为其生成一个 getter 方法。
请确保部署者钱包已连接到浏览器。点击 addPerson。
该部分会展开,出现两个新字段——一个用于填写人物姓名,另一个用于填写其年龄。
填写完成后,点击 Write 并确认交易。
交易确认后,点击 personInfo,并输入刚添加的那个人的姓名。
图形界面应会返回所添加人物的年龄。
相关概览
技术2026年10月29日
什么是 webhook?
webhook 是以 HTTP POST 请求形式投递的事件通知。了解 webhook URL、payload、重试和签名验证的工作原理,并附有链上示例。
技术2026年10月20日
Hyperliquid 订单、成交与成交回报对比
在 Hyperliquid 上,订单、成交和成交回报是三种不同的记录。本文介绍每种记录在 HyperCore 上的负载、它们如何通过 oid 和 tid 关联,以及如何对账。
技术2026年6月17日
开发者的 web3 技术栈指南
2026 年的 web3 技术栈,逐层解析:网络、基础设施、智能合约、钱包、前端、存储、应用,以及新出现的 agentic 层。

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