跳至内容
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 费用,以及原子交换、限价单和原生的二层 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 公共测试网上部署智能合约。

先决条件

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

  • 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 上的执行引擎。
  • $ 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 VersionSolc 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 开发者产品和工具与资源、社区及专业支持结合在一起。