跳至主要內容

如何在本地多用戶端測試網上開發和測試 dApp

用戶端
節點
智能合約
可組合性
共識層
執行層
測試
中等
Tedi Mitiku
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 在解譯、驗證和執行指令時,會印出其在幕後執行的步驟。 最後,您應該會看到類似以下的輸出:

恭喜! 您透過 Docker 使用 Kurtosis 實例化了一個本地以太坊測試網,其中包含一個 CL(lighthouse)和一個 EL 用戶端(geth)。

回顧

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

您 enclave 中的檔案成品 (opens in a new tab)包含所有用於啟動 EL 和 CL 用戶端的已生成和已使用的資料。 這些資料是使用從這個 Docker 映像檔 (opens in a new tab)建構的 prelaunch-data-generator 服務建立的

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

將您的 dApp 開發環境連接到本地以太坊測試網

設定 dApp 開發環境

既然您已擁有一個正在運行的本地測試網,您可以將您的 dApp 開發環境連接到本地測試網來使用。 本指南將使用 Hardhat 框架將一個二十一點 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
      ✔ 應為玩家一號鑄造 1000 枚籌碼

  1 個通過 (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日

這篇教學對您有幫助嗎?