Chuyển đến nội dung chính

Cách phát triển và thử nghiệm dapp trên mạng thử nghiệm đa máy khách cục bộ

máy khách
nút
hợp đồng thông minh
khả năng kết hợp
lớp đồng thuận
lớp thực thi
thử nghiệm
Trung cấp
Tedi Mitiku
11 tháng 4, 2023
14 phút đọc

Giới thiệu

Hướng dẫn này sẽ chỉ cho bạn quy trình khởi tạo mạng thử nghiệm Ethereum cục bộ có thể cấu hình, triển khai hợp đồng thông minh lên đó và sử dụng mạng thử nghiệm để chạy các bài kiểm tra cho ứng dụng phi tập trung (dapp) của bạn. Hướng dẫn này được thiết kế dành cho các nhà phát triển dapp muốn phát triển và thử nghiệm dapp của họ cục bộ với các cấu hình mạng lưới khác nhau trước khi triển khai lên mạng thử nghiệm trực tiếp hoặc Mạng chính.

Trong hướng dẫn này, bạn sẽ:

  • Khởi tạo mạng thử nghiệm Ethereum cục bộ với eth-network-package (opens in a new tab) bằng cách sử dụng Kurtosis (opens in a new tab),
  • Kết nối môi trường phát triển dapp Hardhat của bạn với mạng thử nghiệm cục bộ để biên dịch, triển khai và thử nghiệm dapp, và
  • Cấu hình mạng thử nghiệm cục bộ, bao gồm các thông số như số lượng nút và các cặp máy khách EL/CL cụ thể, để cho phép các quy trình phát triển và thử nghiệm với nhiều cấu hình mạng lưới khác nhau.

Kurtosis là gì?

Kurtosis (opens in a new tab) là một hệ thống xây dựng có khả năng kết hợp được thiết kế để cấu hình các môi trường thử nghiệm đa vùng chứa (multi-container). Nó đặc biệt cho phép các nhà phát triển tạo ra các môi trường có thể tái tạo yêu cầu logic thiết lập động, chẳng hạn như các mạng thử nghiệm Chuỗi khối.

Trong hướng dẫn này, gói eth-network-package của Kurtosis sẽ khởi chạy một mạng thử nghiệm Ethereum cục bộ có hỗ trợ máy khách lớp thực thi (EL) geth (opens in a new tab), cũng như các máy khách lớp đồng thuận (CL) teku (opens in a new tab), lighthouse (opens in a new tab), và lodestar (opens in a new tab). Gói này đóng vai trò như một giải pháp thay thế có khả năng kết hợp và cấu hình được cho các mạng lưới trong các framework như Hardhat Network, Ganache và Anvil. Kurtosis cung cấp cho các nhà phát triển quyền kiểm soát và tính linh hoạt cao hơn đối với các mạng thử nghiệm mà họ sử dụng, đây là lý do chính khiến Tổ chức Ethereum đã sử dụng Kurtosis để thử nghiệm The Merge (opens in a new tab) và tiếp tục sử dụng nó để thử nghiệm các bản nâng cấp mạng lưới.

Thiết lập Kurtosis

Trước khi tiếp tục, hãy đảm bảo bạn đã:

Khởi tạo mạng thử nghiệm Ethereum cục bộ

Để khởi chạy một mạng thử nghiệm Ethereum cục bộ, hãy chạy:

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

Lưu ý: Lệnh này đặt tên cho mạng lưới của bạn là: "local-eth-testnet” bằng cách sử dụng cờ --enclave.

Kurtosis sẽ in ra các bước mà nó đang thực hiện bên trong hệ thống khi nó diễn giải, xác thực và sau đó thực thi các lệnh. Cuối cùng, bạn sẽ thấy một đầu ra tương tự như sau:

Xin chúc mừng! Bạn đã sử dụng Kurtosis để khởi tạo một mạng thử nghiệm Ethereum cục bộ, với một máy khách CL (lighthouse) và EL (geth), thông qua Docker.

Đánh giá

Trong phần này, bạn đã thực thi một lệnh chỉ đạo Kurtosis sử dụng eth-network-package được lưu trữ từ xa trên GitHub (opens in a new tab) để khởi chạy một mạng thử nghiệm Ethereum cục bộ bên trong một Enclave (opens in a new tab) của Kurtosis. Bên trong enclave của bạn, bạn sẽ tìm thấy cả "file artifacts" (tệp tạo tác) và "user services" (dịch vụ người dùng).

Các File Artifacts (opens in a new tab) trong enclave của bạn bao gồm tất cả dữ liệu được tạo và sử dụng để khởi động các máy khách EL và CL. Dữ liệu được tạo bằng dịch vụ prelaunch-data-generator được xây dựng từ Docker image (opens in a new tab) này

Các dịch vụ người dùng hiển thị tất cả các dịch vụ được đóng gói trong vùng chứa đang hoạt động trong enclave của bạn. Bạn sẽ nhận thấy rằng một nút duy nhất, bao gồm cả máy khách EL và máy khách CL, đã được tạo.

Kết nối môi trường phát triển dapp của bạn với mạng thử nghiệm Ethereum cục bộ

Thiết lập môi trường phát triển dapp

Bây giờ bạn đã có một mạng thử nghiệm cục bộ đang chạy, bạn có thể kết nối môi trường phát triển dapp của mình để sử dụng mạng thử nghiệm cục bộ đó. Framework Hardhat sẽ được sử dụng trong hướng dẫn này để triển khai một dapp blackjack lên mạng thử nghiệm cục bộ của bạn.

Để thiết lập môi trường phát triển dapp của bạn, hãy sao chép kho lưu trữ chứa dapp mẫu của chúng tôi và cài đặt các phần phụ thuộc của nó, chạy:

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

Thư mục smart-contract-example (opens in a new tab) được sử dụng ở đây chứa thiết lập điển hình cho một nhà phát triển dapp sử dụng framework Hardhat (opens in a new tab):

Cấu hình Hardhat để sử dụng mạng thử nghiệm cục bộ

Với môi trường phát triển dapp đã được thiết lập, bây giờ bạn sẽ kết nối Hardhat để sử dụng mạng thử nghiệm Ethereum cục bộ được tạo bằng Kurtosis. Để thực hiện việc này, hãy thay thế <$YOUR_PORT> trong cấu trúc localnet ở tệp cấu hình hardhat.config.ts của bạn bằng cổng của rpc uri được xuất ra từ bất kỳ dịch vụ el-client-<num> nào. Trong trường hợp mẫu này, cổng sẽ là 64248. Cổng của bạn sẽ khác.

Ví dụ trong hardhat.config.ts:

Sau khi bạn lưu tệp, môi trường phát triển dapp Hardhat của bạn hiện đã được kết nối với mạng thử nghiệm Ethereum cục bộ! Bạn có thể xác minh rằng mạng thử nghiệm của mình đang hoạt động bằng cách chạy:

npx hardhat balances --network localnet

Đầu ra sẽ trông giống như thế này:

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

Điều này xác nhận rằng Hardhat đang sử dụng mạng thử nghiệm cục bộ của bạn và phát hiện các tài khoản đã được cấp vốn trước do eth-network-package tạo ra.

Triển khai và thử nghiệm dapp của bạn cục bộ

Với môi trường phát triển dapp được kết nối hoàn toàn với mạng thử nghiệm Ethereum cục bộ, giờ đây bạn có thể chạy các quy trình phát triển và thử nghiệm cho dapp của mình bằng cách sử dụng mạng thử nghiệm cục bộ.

Để biên dịch và triển khai hợp đồng thông minh ChipToken.sol cho việc tạo nguyên mẫu và phát triển cục bộ, hãy chạy:

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

Đầu ra sẽ trông giống như:

ChipToken deployed to: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d

Bây giờ hãy thử chạy bài kiểm tra simple.js cho dapp cục bộ của bạn để xác nhận mỗi người chơi trong dapp Blackjack của chúng tôi đã được đúc 1000 token:

Đầu ra sẽ trông giống như thế này:

npx hardhat test --network localnet

Đầu ra sẽ trông giống như thế này:

ChipToken
    mint
      ✔ should mint 1000 chips for PLAYER ONE

  1 passing (654ms)

Đánh giá

Tại thời điểm này, bạn đã thiết lập xong môi trường phát triển dapp, kết nối nó với mạng lưới Ethereum cục bộ do Kurtosis tạo ra, đồng thời đã biên dịch, triển khai và chạy một bài kiểm tra đơn giản cho dapp của bạn.

Bây giờ hãy cùng khám phá cách bạn có thể cấu hình mạng lưới cơ sở để thử nghiệm các dapp của chúng ta dưới các cấu hình mạng lưới khác nhau.

Cấu hình mạng thử nghiệm Ethereum cục bộ

Thay đổi cấu hình máy khách và số lượng nút

Mạng thử nghiệm Ethereum cục bộ của bạn có thể được cấu hình để sử dụng các cặp máy khách EL và CL khác nhau, cũng như số lượng nút khác nhau, tùy thuộc vào kịch bản và cấu hình mạng lưới cụ thể mà bạn muốn phát triển hoặc thử nghiệm. Điều này có nghĩa là, sau khi được thiết lập, bạn có thể khởi chạy một mạng thử nghiệm cục bộ tùy chỉnh và sử dụng nó để chạy các quy trình tương tự (việc triển khai, thử nghiệm, v.v.) dưới nhiều cấu hình mạng lưới khác nhau để đảm bảo mọi thứ hoạt động như mong đợi. Để tìm hiểu thêm về các thông số khác mà bạn có thể sửa đổi, hãy truy cập liên kết này.

Hãy thử xem! Bạn có thể truyền các tùy chọn cấu hình khác nhau cho eth-network-package thông qua một tệp JSON. Tệp JSON chứa các thông số mạng lưới này cung cấp các cấu hình cụ thể mà Kurtosis sẽ sử dụng để thiết lập mạng lưới Ethereum cục bộ.

Lấy tệp cấu hình mặc định và chỉnh sửa nó để khởi chạy hai nút với các cặp EL/CL khác nhau:

  • Nút 1 với geth/lighthouse
  • Nút 2 với geth/lodestar
  • Nút 3 với geth/teku

Cấu hình này tạo ra một mạng lưới không đồng nhất gồm các triển khai nút Ethereum để thử nghiệm dapp của bạn. Tệp cấu hình của bạn bây giờ sẽ trông giống như:

Mỗi cấu trúc participants ánh xạ tới một nút trong mạng lưới, vì vậy 3 cấu trúc participants sẽ yêu cầu Kurtosis khởi chạy 3 nút trong mạng lưới của bạn. Mỗi cấu trúc participants sẽ cho phép bạn chỉ định cặp EL và CL được sử dụng cho nút cụ thể đó.

Cấu trúc network_params cấu hình các cài đặt mạng lưới được sử dụng để tạo các tệp genesis cho mỗi nút cũng như các cài đặt khác như số giây mỗi khe của mạng lưới.

Lưu tệp thông số đã chỉnh sửa của bạn vào bất kỳ thư mục nào bạn muốn (trong ví dụ bên dưới, nó được lưu vào màn hình nền) và sau đó sử dụng nó để chạy gói Kurtosis của bạn bằng cách chạy:

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

Lưu ý: lệnh kurtosis clean -a được sử dụng ở đây để hướng dẫn Kurtosis phá hủy mạng thử nghiệm cũ và nội dung của nó trước khi khởi động một mạng mới.

Một lần nữa, Kurtosis sẽ hoạt động một lúc và in ra các bước riêng lẻ đang diễn ra. Cuối cùng, đầu ra sẽ trông giống như:

Xin chúc mừng! Bạn đã cấu hình thành công mạng thử nghiệm cục bộ của mình để có 3 nút thay vì 1. Để chạy các quy trình tương tự như bạn đã làm trước đây cho dapp của mình (triển khai và thử nghiệm), hãy thực hiện các thao tác tương tự như chúng ta đã làm trước đây bằng cách thay thế <$YOUR_PORT> trong cấu trúc localnet ở tệp cấu hình hardhat.config.ts của bạn bằng cổng của rpc uri được xuất ra từ bất kỳ dịch vụ el-client-<num> nào trong mạng thử nghiệm cục bộ 3 nút mới của bạn.

Kết luận

Và thế là xong! Để tóm tắt hướng dẫn ngắn này, bạn đã:

  • Tạo một mạng thử nghiệm Ethereum cục bộ thông qua Docker bằng cách sử dụng Kurtosis
  • Kết nối môi trường phát triển dapp cục bộ của bạn với mạng lưới Ethereum cục bộ
  • Triển khai một dapp và chạy một bài kiểm tra đơn giản cho nó trên mạng lưới Ethereum cục bộ
  • Cấu hình mạng lưới Ethereum cơ sở để có 3 nút

Chúng tôi rất muốn nghe ý kiến từ bạn về những gì đã diễn ra tốt đẹp, những gì có thể được cải thiện hoặc để trả lời bất kỳ câu hỏi nào của bạn. Đừng ngần ngại liên hệ qua GitHub (opens in a new tab) hoặc gửi email cho chúng tôi (opens email client)!

Các ví dụ và hướng dẫn khác

Chúng tôi khuyến khích bạn xem qua hướng dẫn bắt đầu nhanh (opens in a new tab) của chúng tôi (nơi bạn sẽ xây dựng một cơ sở dữ liệu Postgres và API trên đó) và các ví dụ khác trong kho lưu trữ awesome-kurtosis (opens in a new tab) của chúng tôi, nơi bạn sẽ tìm thấy một số ví dụ tuyệt vời, bao gồm các gói cho:

Cập nhật trang lần cuối: 3 tháng 3, 2026