如何开始在 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,并输入刚添加的那个人的姓名。
图形界面应会返回所添加人物的年龄。
相关概览

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


