跳至內容
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 Virtual Machine 技術,用於擴展 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. 取得測試用 Sepolia ETH 並橋接至 zkSync era

部署合約時可能需要 zkSync Era 測試網上的測試用 ether。

若要取得一些測試用 ether,請將部署者錢包中的 Sepolia ETH 橋接到其在 zkSync Era 上的實例。

  • 為此,請前往 Alchemy 的 Sepolia 水龍頭以取得 Sepolia 上的 ether。

  • 在繼續之前,先建立一個免費的 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 分頁。

這次,區塊瀏覽器應該會顯示兩個新的欄位:

  1. Read:用於 getter 函式
  2. Write:用於 setter 函式

由於 personInfo 映射的可見性被定義為 public,系統會自動為它產生一個 getter 方法。

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

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

填寫完這些欄位後,點擊 Write 並確認交易。

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

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

Background gradient

打造區塊鏈魔法

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