跳至主要內容

如何在本地多客戶端測試網上開發與測試去中心化應用程式 (dapp)

客戶端
節點
智能合約
可組合性
共識層
執行層
測試
中階
泰迪·米提庫
2023年4月11日
16 分鐘閱讀

簡介

本指南將引導您完成實例化可設定的本地以太坊測試網、向其部署智能合約,並使用該測試網對您的去中心化應用程式 (dapp) 執行測試的過程。本指南專為希望在部署到即時測試網或主網之前,針對不同網路設定在本地開發與測試其 dapp 的 dapp 開發人員而設計。

在本指南中,您將:

  • 使用 Kurtosis (opens in a new tab) 透過 eth-network-package (opens in a new tab) 實例化本地以太坊測試網,
  • 將您的 Hardhat dapp 開發環境連接到本地測試網,以編譯、部署和測試 dapp,以及
  • 設定本地測試網,包括節點數量和特定的執行層 (EL) / 共識層 (CL) 客戶端配對等參數,以針對各種網路設定啟用開發與測試工作流程。

什麼是 Kurtosis?

Kurtosis (opens in a new tab) 是一個可組合的建置系統,專為設定多容器測試環境而設計。它特別能讓開發人員建立需要動態設定邏輯的可重現環境,例如區塊鏈測試網。

在本指南中,Kurtosis eth-network-package 啟動了一個本地以太坊測試網,支援 geth (opens in a new tab) 執行層 (EL) 客戶端,以及 teku (opens in a new tab)lighthouse (opens in a new tab)lodestar (opens in a new tab) 共識層 (CL) 客戶端。此套件可作為 Hardhat Network、Ganache 和 Anvil 等框架中網路的可設定且可組合的替代方案。Kurtosis 為開發人員提供了對其所使用測試網的更大控制權和靈活性,這也是以太坊基金會使用 Kurtosis 測試合併 (opens in a new tab)並繼續使用它來測試網路升級的主要原因。

設定 Kurtosis

在繼續之前,請確保您已:

實例化本地以太坊測試網

要啟動本地以太坊測試網,請執行:

kurtosis --enclave local-eth-testnet run github.com/kurtosis-tech/eth-network-package

注意:此命令使用 --enclave 標誌將您的網路命名為:「local-eth-testnet」。

Kurtosis 在解釋、驗證並執行指令時,會印出其在底層執行的步驟。最後,您應該會看到類似以下的輸出:

恭喜!您已使用 Kurtosis 透過 Docker 實例化了一個包含共識層 (CL) (lighthouse) 和執行層 (EL) 客戶端 (geth) 的本地以太坊測試網。

回顧

在本節中,您執行了一個命令,指示 Kurtosis 使用遠端託管在 GitHub 上的 eth-network-package (opens in a new tab),在 Kurtosis Enclave (opens in a new tab) 內啟動本地以太坊測試網。在您的 enclave 中,您會找到「檔案工件 (file artifacts)」和「使用者服務 (user services)」。

您的 enclave 中的檔案工件 (opens in a new tab)包含所有產生並用於引導 EL 和 CL 客戶端的資料。這些資料是使用從此 Docker 映像檔 (opens in a new tab)建置的 prelaunch-data-generator 服務所建立的。

使用者服務會顯示在您的 enclave 中運作的所有容器化服務。您會注意到已經建立了一個同時具備 EL 客戶端和 CL 客戶端的單一節點。

將您的去中心化應用程式 (dapp) 開發環境連接到本地以太坊測試網

設定 dapp 開發環境

現在您已經有一個正在運作的本地測試網,您可以連接您的 dapp 開發環境來使用您的本地測試網。本指南將使用 Hardhat 框架將一個二十一點 (blackjack) dapp 部署到您的本地測試網。

要設定您的 dapp 開發環境,請複製包含我們範例 dapp 的儲存庫並安裝其依賴項,請執行:

git clone https://github.com/kurtosis-tech/awesome-kurtosis.git && cd awesome-kurtosis/smart-contract-example && yarn

此處使用的 smart-contract-example (opens in a new tab) 資料夾包含使用 Hardhat (opens in a new tab) 框架的 dapp 開發人員的典型設定:

設定 Hardhat 以使用本地測試網

設定好 dapp 開發環境後,您現在將連接 Hardhat 以使用透過 Kurtosis 產生的本地以太坊測試網。為此,請將 hardhat.config.ts 設定檔中 localnet 結構裡的 <$YOUR_PORT> 替換為任何 el-client-<num> 服務輸出的 rpc uri 連接埠。在這個範例中,連接埠將是 64248。您的連接埠會有所不同。

hardhat.config.ts 中的範例:

儲存檔案後,您的 Hardhat dapp 開發環境現在已連接到您的本地以太坊測試網!您可以透過執行以下命令來驗證您的測試網是否正常運作:

npx hardhat balances --network localnet

輸出應該類似於以下內容:

0x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 has balance 10000000000000000000000000
0x4E9A3d9D1cd2A2b2371b8b3F489aE72259886f1A has balance 10000000000000000000000000
0xdF8466f277964Bb7a0FFD819403302C34DCD530A has balance 10000000000000000000000000
0x5c613e39Fc0Ad91AfDA24587e6f52192d75FBA50 has balance 10000000000000000000000000
0x375ae6107f8cC4cF34842B71C6F746a362Ad8EAc has balance 10000000000000000000000000
0x1F6298457C5d76270325B724Da5d1953923a6B88 has balance 10000000000000000000000000

這確認了 Hardhat 正在使用您的本地測試網,並偵測到由 eth-network-package 建立的預先注資帳戶。

在本地部署與測試您的 dapp

隨著 dapp 開發環境完全連接到本地以太坊測試網,您現在可以使用本地測試網針對您的 dapp 執行開發與測試工作流程。

要編譯並部署 ChipToken.sol 智能合約以進行本地原型設計和開發,請執行:

npx hardhat compile
npx hardhat run scripts/deploy.ts --network localnet

輸出應該類似於:

ChipToken deployed to: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d

現在嘗試針對您的本地 dapp 執行 simple.js 測試,以確認我們二十一點 dapp 中的每位玩家都鑄造了 1000 個代幣:

輸出應該類似於以下內容:

npx hardhat test --network localnet

輸出應該類似於以下內容:

ChipToken
    mint
      ✔ should mint 1000 chips for PLAYER ONE

  1 passing (654ms)

回顧

至此,您已經設定了一個 dapp 開發環境,將其連接到由 Kurtosis 建立的本地以太坊網路,並針對您的 dapp 編譯、部署並執行了一個簡單的測試。

現在讓我們探討如何設定底層網路,以便在不同的網路設定下測試我們的 dapp。

設定本地以太坊測試網

變更客戶端設定與節點數量

您的本地以太坊測試網可以設定為使用不同的 EL 和 CL 客戶端配對,以及不同數量的節點,具體取決於您想要開發或測試的場景和特定網路設定。這意味著,一旦設定完成,您就可以啟動自訂的本地測試網,並使用它在各種網路設定下執行相同的工作流程(部署、測試等),以確保一切按預期運作。要了解有關您可以修改的其他參數的更多資訊,請造訪此連結。

試試看吧!您可以透過 JSON 檔案將各種設定選項傳遞給 eth-network-package。此網路參數 JSON 檔案提供了 Kurtosis 將用來設定本地以太坊網路的特定設定。

採用預設設定檔並對其進行編輯,以啟動具有不同 EL/CL 配對的兩個節點:

  • 節點 1 使用 geth/lighthouse
  • 節點 2 使用 geth/lodestar
  • 節點 3 使用 geth/teku

此設定建立了一個由不同以太坊節點實作組成的異質網路,用於測試您的去中心化應用程式 (dapp)。您的設定檔現在應該如下所示:

每個 participants 結構對應網路中的一個節點,因此 3 個 participants 結構將指示 Kurtosis 在您的網路中啟動 3 個節點。每個 participants 結構將允許您指定該特定節點所使用的 EL 和 CL 配對。

network_params 結構設定了用於為每個節點建立創世檔案的網路設定,以及網路的每個時槽秒數等其他設定。

將您編輯後的參數檔案儲存在您希望的任何目錄中(在下面的範例中,它被儲存到桌面),然後透過執行以下命令使用它來執行您的 Kurtosis 套件:

kurtosis clean -a && kurtosis run --enclave local-eth-testnet github.com/kurtosis-tech/eth-network-package "$(cat ~/eth-network-params.json)"

注意:此處使用 kurtosis clean -a 命令來指示 Kurtosis 在啟動新的測試網之前銷毀舊的測試網及其內容。

同樣地,Kurtosis 會運作一會兒並印出正在發生的各個步驟。最終,輸出應該類似於:

恭喜!您已成功將本地測試網設定為具有 3 個節點而不是 1 個。要針對您的 dapp 執行與之前相同的工作流程(部署與測試),請執行與之前相同的操作,將 hardhat.config.ts 設定檔中 localnet 結構裡的 <$YOUR_PORT> 替換為新的 3 節點本地測試網中任何 el-client-<num> 服務輸出的 rpc uri 連接埠。

結論

就是這樣!總結這篇簡短的指南,您:

  • 使用 Kurtosis 透過 Docker 建立了一個本地以太坊測試網
  • 將您的本地去中心化應用程式 (dapp) 開發環境連接到本地以太坊網路
  • 在本地以太坊網路上部署了一個 dapp 並對其執行了簡單的測試
  • 將底層以太坊網路設定為具有 3 個節點

我們很樂意聽取您的意見,了解哪些方面對您有幫助、哪些方面可以改進,或者回答您的任何問題。請隨時透過 GitHub (opens in a new tab)電子郵件 (opens email client)與我們聯絡!

其他範例與指南

我們鼓勵您查看我們的快速入門 (opens in a new tab)(您將在其中建置 Postgres 資料庫和頂層 API)以及我們 awesome-kurtosis 儲存庫 (opens in a new tab)中的其他範例,您將在其中找到一些很棒的範例,包括用於以下用途的套件:

頁面最後更新: 2026年3月3日