如何開始在 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-Proofs 與 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」,然後按 enter 讓後續欄位以預設值預先填入。
專案的資料夾結構應如下所示:
在 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 測試網上的測試用 ether。
要取得一些測試用 ether,請將 Goerli ETH 從部署者錢包橋接到其在 zkSync Era 上的對應實例。
-
為此,前往 Alchemy 的 Goerli faucet 以取得 Goerli 測試網上的 ether。
-
在繼續之前,先建立一個免費的 Alchemy 帳號。
-
接著,開啟 Metamask,點擊錢包地址將其複製。
-
在 Goerli faucet 網站上,貼上錢包地址,然後點擊 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 mapping 的可見度被定義為 public,系統會自動為其產生一個 getter 方法。
請確認部署者錢包已連接到瀏覽器。點擊 addPerson。
該區塊會展開,並出現兩個新欄位——一個用於定義該人的姓名,另一個用於其年齡。
填寫完成後,點擊 Write 並確認交易。
交易確認後,點擊 personInfo 並輸入剛新增的那個人的姓名。
GUI 應會回傳所新增之人的年齡。
相關總覽

打造區塊鏈魔法
Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。


