如何开始在 zkSync 上开发(2025)
Matter Labs 现在派出了自己的代表,加入 Scroll 和 Polygon 之间争夺全球首个零知识 EVM的竞赛——zkSync Era。
zkSync Era 于 2023 年 3 月上线,是一个兼容 EVM 的 ZK Rollup,利用零知识证明来提升 Ethereum 网络的速度和处理能力。
在 zkSync 上开发的好处包括 ETH 和ERC20 代币的低 gas 费用,以及原子交换、限价单和原生的二层 NFT 支持。
本文将介绍什么是 zkSync Era,以及如何通过五个步骤在 zkSync 公共测试网上部署智能合约。
什么是 zkSync era?
zkSync Era 是 Matter Labs 推出的新二层解决方案,它结合了 ZK-Proofs 和 Ethereum 虚拟机技术,用于扩展 Ethereum 主网的吞吐量。通过融合这两项技术,zkSync Era 能够实现更快、更安全的 Ethereum 交易。
除了完全兼容 EVM 之外,Era 还将 EIP-4337 中最初提出的账户抽象概念引入了 Ethereum 技术栈。
有了账户抽象,钱包变成了智能合约,可以具备自定义签名算法、赞助交易、双重验证等功能。
如何开始在 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 上的执行引擎。
- $ 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. 获取测试 Goerli ETH 并桥接到 zkSync era
部署合约可能需要 zkSync Era 测试网上的测试以太币。
若要获取一些测试以太币,请将 Goerli ETH 从部署者钱包桥接到其在 zkSync Era 上的对应实例。
-
为此,前往 Alchemy 的 Goerli 水龙头,在 Goerli 测试网上获取以太币。
-
在继续之前,先创建一个免费的 Alchemy 账户。
-
然后,打开 Metamask,点击钱包地址以将其复制。
-
在 Goerli 水龙头网站上,粘贴钱包地址,然后点击 Send Me ETH。
接下来,前往 zkSync Era 的桥接页面。
点击“Connect via a browser wallet Metamask”。
选择将用于合约部署的钱包。
点击 MAX(或输入你选择的金额,但确保至少为 0.1 gETH),然后点击 Deposit。
注意:确认右下角的字段显示为:“zkSync Era Goerli”。
在等待桥接完成的同时,通过创建部署脚本来完成部署工作。
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,并输入刚刚添加的那个人的姓名。
图形界面应会返回所添加人员的年龄。
相关概览

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


