跳至內容
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 費用,以及原子交換、限價單,還有原生的 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 公開測試網上部署智慧合約。

先決條件

進行本教學,需要準備以下項目:

  • Ethereum 錢包的私鑰
  • 測試用 ether
  • 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 的 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 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 mapping 的可見度被定義為 public,系統會自動為其產生一個 getter 方法。

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

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

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

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

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

Background gradient

打造區塊鏈魔法

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