---
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 費用，以及原子交換、限價單，還有原生的 Layer-2 NFT 支援。

本文將說明 zkSync Era 是什麼，以及如何在五個步驟內於 zkSync 公開測試網上部署智慧合約。

## **什麼是 zkSync Era？**

zkSync Era 是 Matter Labs 推出的新 Layer-2 解決方案，結合了 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 還將[帳戶抽象化的概念](https://www.alchemy.com/overviews/what-is-account-abstraction)引入 Ethereum 技術堆疊，此概念最初由 EIP-4337 提出。

透過帳戶抽象化，錢包變成智慧合約，可具備自訂簽章演算法、贊助交易、雙因素驗證等功能。

## **如何開始在 zkSync Era 上開發**

在 zkSync Era 上開發，大致上會用到與[web3 開發者部署 Ethereum 合約相同的工具](https://www.alchemy.com/dapps/top/developer-tools)。本教學將說明如何在 zkSync 公開測試網上部署智慧合約。

### **先決條件**

進行本教學，需要準備以下項目：

- Ethereum 錢包的私鑰
- 測試用 ether
- [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 的 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**」，然後按 enter 讓後續欄位以預設值預先填入。

專案的資料夾結構應如下所示：

在 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 測試網上的測試用 ether。

**要取得一些測試用 ether，請將 Goerli ETH 從部署者錢包橋接到其在 zkSync Era 上的對應實例。**

- 為此，前往 [Alchemy 的 Goerli faucet](https://goerlifaucet.com/) 以取得 Goerli 測試網上的 ether。

- 在繼續之前，先建立一個免費的 Alchemy 帳號。

- 接著，開啟 Metamask，點擊錢包地址將其複製。

- 在 Goerli faucet 網站上，貼上錢包地址，然後點擊 **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** mapping 的可見度被定義為 _public_，系統會自動為其產生一個 getter 方法。

請確認部署者錢包已連接到瀏覽器。點擊 **addPerson**。

該區塊會展開，並出現兩個新欄位——一個用於定義該人的姓名，另一個用於其年齡。‍

填寫完成後，點擊 **Write** 並確認交易。

交易確認後，點擊 personInfo 並輸入剛新增的那個人的姓名。

GUI 應會回傳所新增之人的年齡。‍
