Hợp đồng thông minh Hello World dành cho người mới bắt đầu
Nếu bạn mới bắt đầu phát triển chuỗi khối và không biết bắt đầu từ đâu, hoặc nếu bạn chỉ muốn hiểu cách triển khai và tương tác với các hợp đồng thông minh, thì hướng dẫn này là dành cho bạn. Chúng tôi sẽ hướng dẫn từng bước tạo và triển khai một hợp đồng thông minh đơn giản trên mạng thử nghiệm Sepolia bằng ví ảo MetaMaskopens in a new tab, Solidityopens in a new tab, Hardhatopens in a new tab và Alchemyopens in a new tab (đừng lo lắng nếu bạn chưa hiểu bất kỳ điều gì trong số này, chúng tôi sẽ giải thích).
Trong phần 2opens in a new tab của hướng dẫn này, chúng tôi sẽ trình bày cách chúng tôi có thể tương tác với hợp đồng thông minh của mình sau khi nó được triển khai tại đây và trong phần 3opens in a new tab, chúng tôi sẽ đề cập đến cách xuất bản nó trên Etherscan.
Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ trong Alchemy Discordopens in a new tab!
Bước 1: Kết nối với mạng Ethereum
Có nhiều cách để thực hiện yêu cầu đến chuỗi Ethereum. Để đơn giản, chúng tôi sẽ sử dụng một tài khoản miễn phí trên Alchemy, một nền tảng và API dành cho nhà phát triển chuỗi khối cho phép chúng tôi giao tiếp với chuỗi Ethereum mà không cần phải chạy các nút của riêng mình. Nền tảng này cũng có các công cụ dành cho nhà phát triển để giám sát và phân tích mà chúng tôi sẽ tận dụng trong hướng dẫn này để hiểu cơ chế hoạt động bên trong việc triển khai hợp đồng thông minh của chúng tôi. Nếu bạn chưa có tài khoản Alchemy, bạn có thể đăng ký miễn phí tại đâyopens in a new tab.
Bước 2: Tạo ứng dụng của bạn (và khóa API)
Khi bạn đã tạo tài khoản Alchemy, bạn có thể tạo một khoá API bằng cách tạo một ứng dụng. Điều này sẽ cho phép chúng ta gửi yêu cầu đến mạng thử nghiệm Sepolia. Nếu bạn không quen thuộc với các mạng thử nghiệm, hãy xem trang này.
- Điều hướng đến trang "Tạo ứng dụng mới" trong Trang tổng quan Alchemy của bạn bằng cách chọn "Chọn một ứng dụng" trong thanh điều hướng và nhấp vào "Tạo ứng dụng mới"
- Đặt tên cho ứng dụng của bạn là “Hello World”, cung cấp một mô tả ngắn và chọn một trường hợp sử dụng, ví dụ: "Cơ sở hạ tầng & Công cụ." Tiếp theo, tìm kiếm "Ethereum" và chọn mạng.
- Nhấp vào "Tiếp theo" để tiếp tục, sau đó nhấp vào “Tạo ứng dụng” và thế là xong! Ứng dụng của bạn sẽ xuất hiện trong menu thả xuống của thanh điều hướng, với Khóa API có sẵn để sao chép.
Bước 3: Tạo một tài khoản Ethereum (địa chỉ)
Chúng ta cần một tài khoản Ethereum để gửi và nhận giao dịch. Trong bài hướng dẫn này, chúng ta sẽ sử dụng MetaMask, một ví ảo trong trình duyệt dùng để quản lý địa chỉ tài khoản Ethereum của bạn. Thông tin thêm về giao dịch.
Bạn có thể tải xuống MetaMask và tạo một tài khoản Ethereum miễn phí tại đâyopens in a new tab. Khi bạn đang tạo một tài khoản, hoặc nếu bạn đã có tài khoản, hãy đảm bảo chuyển sang mạng thử nghiệm "Sepolia" bằng menu thả xuống của mạng (để chúng ta không phải xử lý tiền thật).
Nếu bạn không thấy Sepolia được liệt kê, hãy vào menu, sau đó chọn Nâng cao và cuộn xuống để bật "Hiển thị các mạng thử nghiệm". Trong menu lựa chọn mạng, chọn tab "Tùy chỉnh" để tìm danh sách các mạng thử nghiệm và chọn "Sepolia."
Bước 4: Thêm ether từ một vòi
Để triển khai hợp đồng thông minh của chúng ta trên mạng thử nghiệm, chúng ta sẽ cần một ít Eth giả. Để nhận Sepolia ETH, bạn có thể truy cập chi tiết mạng Sepolia để xem danh sách các vòi khác nhau. Nếu một vòi không hoạt động, hãy thử một vòi khác vì đôi khi chúng có thể cạn kiệt. Có thể mất một chút thời gian để nhận được ETH giả của bạn do lưu lượng mạng. Bạn sẽ sớm thấy ETH trong tài khoản Metamask của mình!
Bước 5: Kiểm tra Số dư của bạn
Để kiểm tra lại số dư của chúng ta, hãy thực hiện một yêu cầu eth_getBalance bằng cách sử dụng công cụ soạn thảo của Alchemyopens in a new tab. Thao tác này sẽ trả về lượng ETH có trong ví của chúng ta. Sau khi bạn nhập địa chỉ tài khoản MetaMask của mình và nhấp vào “Send Request”, bạn sẽ thấy một phản hồi như sau:
1{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }LƯU Ý: Kết quả này tính bằng wei chứ không phải ETH. Wei được sử dụng làm mệnh giá nhỏ nhất của ether. Việc chuyển đổi từ wei sang ETH là: 1 eth = 1018 wei. Vì vậy, nếu chúng ta chuyển 0x2B5E3AF16B1880000 sang hệ thập phân, chúng ta sẽ nhận được 5*10¹⁸ tương đương với 5 ETH.
Phù! Tiền giả của chúng ta đã có đủ .
Bước 6: Khởi tạo dự án của chúng ta
Đầu tiên, chúng ta sẽ cần tạo một thư mục cho dự án của mình. Điều hướng đến dòng lệnh của bạn và gõ:
1mkdir hello-world2cd hello-worldBây giờ chúng ta đang ở trong thư mục dự án của mình, chúng ta sẽ sử dụng npm init để khởi tạo dự án. Nếu bạn chưa cài đặt npm, hãy làm theo các hướng dẫn sauopens in a new tab (chúng ta cũng sẽ cần Node.js vì vậy hãy tải nó xuống luôn nhé!).
1npm initViệc bạn trả lời các câu hỏi cài đặt như thế nào không thực sự quan trọng, sau đây là cách chúng tôi đã làm để bạn tham khảo:
1tên gói: (hello-world)2phiên bản: (1.0.0)3mô tả: hợp đồng thông minh hello world4điểm vào: (index.js)5lệnh kiểm tra:6kho lưu trữ git:7từ khóa:8tác giả:9giấy phép: (ISC)10Sắp ghi vào /Users/.../.../.../hello-world/package.json:1112{13 "name": "hello-world",14 "version": "1.0.0",15 "description": "hợp đồng thông minh hello world",16 "main": "index.js",17 "scripts": {18 "test": "echo \\"Error: no test specified\\" && exit 1"19 },20 "author": "",21 "license": "ISC"22}Hiện tất cảPhê duyệt package.json và chúng ta đã sẵn sàng!
Bước 7: Tải xuống Hardhatopens in a new tab
Hardhat là một môi trường phát triển để biên dịch, triển khai, kiểm thử và gỡ lỗi phần mềm Ethereum của bạn. Nó giúp các nhà phát triển khi xây dựng hợp đồng thông minh và các ứng dụng phi tập trung cục bộ trước khi triển khai lên chuỗi chính.
Bên trong dự án hello-world của chúng ta, chạy:
1npm install --save-dev hardhatHãy xem trang này để biết thêm chi tiết về hướng dẫn cài đặtopens in a new tab.
Bước 8: Tạo dự án Hardhat
Bên trong thư mục dự án của chúng ta, hãy chạy:
1npx hardhatSau đó, bạn sẽ thấy một thông báo chào mừng và tùy chọn để chọn những gì bạn muốn làm. Chọn “create an empty hardhat.config.js”:
1888 888 888 888 8882888 888 888 888 8883888 888 888 888 88848888888888 8888b. 888d888 .d88888 88888b. 8888b. 8888885888 888 "88b 888P" d88" 888 888 "88b "88b 8886888 888 .d888888 888 888 888 888 888 .d888888 8887888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888910👷 Chào mừng đến với Hardhat v2.0.11 👷?1112Bạn muốn làm gì? …13Tạo một dự án mẫu14❯ Tạo một tệp hardhat.config.js trống15ThoátHiện tất cảThao tác này sẽ tạo một tệp hardhat.config.js cho chúng ta, đây là nơi chúng ta sẽ chỉ định tất cả các thiết lập cho dự án của mình (ở bước 13).
Bước 9: Thêm thư mục dự án
Để giữ cho dự án của chúng ta được sắp xếp có tổ chức, chúng ta sẽ tạo hai thư mục mới. Điều hướng đến thư mục gốc của dự án của bạn trong dòng lệnh và gõ:
1mkdir contracts2mkdir scriptscontracts/là nơi chúng ta sẽ lưu tệp mã hợp đồng thông minh hello worldscripts/là nơi chúng ta sẽ lưu giữ các tập lệnh để triển khai và tương tác với hợp đồng của mình
Bước 10: Viết hợp đồng của chúng ta
Bạn có thể đang tự hỏi, khi nào chúng ta mới bắt đầu viết mã đây?? Vâng, chúng ta đây rồi, ở bước 10.
Mở dự án hello-world trong trình chỉnh sửa yêu thích của bạn (chúng tôi thích VSCodeopens in a new tab). Các hợp đồng thông minh được viết bằng một ngôn ngữ gọi là Solidity, đây là ngôn ngữ chúng tôi sẽ sử dụng để viết hợp đồng thông minh HelloWorld.sol của mình.
- Điều hướng đến thư mục “contracts” và tạo một tệp mới có tên HelloWorld.sol
- Dưới đây là một hợp đồng thông minh Hello World mẫu từ Ethereum Foundation mà chúng tôi sẽ sử dụng cho hướng dẫn này. Sao chép và dán nội dung bên dưới vào tệp HelloWorld.sol của bạn, và hãy nhớ đọc các nhận xét để hiểu hợp đồng này làm gì:
1// Chỉ định phiên bản Solidity, sử dụng phiên bản ngữ nghĩa.2// Tìm hiểu thêm: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma3pragma solidity ^0.7.0;45// Định nghĩa một hợp đồng có tên là `HelloWorld`.6// Hợp đồng là một tập hợp các hàm và dữ liệu (trạng thái của nó). Sau khi được triển khai, một hợp đồng sẽ nằm ở một địa chỉ cụ thể trên chuỗi khối Ethereum. Tìm hiểu thêm: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html7contract HelloWorld {89 // Khai báo một biến trạng thái `message` kiểu `string`.10 // Các biến trạng thái là các biến có giá trị được lưu trữ vĩnh viễn trong bộ nhớ hợp đồng. Từ khóa `public` làm cho các biến có thể truy cập được từ bên ngoài hợp đồng và tạo ra một hàm mà các hợp đồng hoặc ứng dụng khách khác có thể gọi để truy cập giá trị.11 string public message;1213 // Tương tự như nhiều ngôn ngữ lập trình hướng đối tượng dựa trên lớp, hàm khởi tạo là một hàm đặc biệt chỉ được thực thi khi tạo hợp đồng.14 // Các hàm khởi tạo được sử dụng để khởi tạo dữ liệu của hợp đồng. Tìm hiểu thêm:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors15 constructor(string memory initMessage) {1617 // Chấp nhận một đối số chuỗi `initMessage` và đặt giá trị vào biến lưu trữ `message` của hợp đồng).18 message = initMessage;19 }2021 // Một hàm công khai chấp nhận một đối số chuỗi và cập nhật biến lưu trữ `message`.22 function update(string memory newMessage) public {23 message = newMessage;24 }25}Hiện tất cảĐây là một hợp đồng thông minh siêu đơn giản, lưu trữ một thông điệp khi được tạo và có thể được cập nhật bằng cách gọi hàm update.
Bước 11: Kết nối MetaMask & Alchemy với dự án của bạn
Chúng ta đã tạo một ví MetaMask, tài khoản Alchemy và viết hợp đồng thông minh của mình, giờ là lúc kết nối cả ba.
Mọi giao dịch được gửi từ ví ảo của bạn đều yêu cầu chữ ký bằng khóa riêng tư duy nhất của bạn. Để cấp quyền này cho chương trình của chúng ta, chúng ta có thể lưu trữ khóa riêng tư (và khóa API Alchemy) một cách an toàn trong một tệp môi trường.
Để tìm hiểu thêm về việc gửi giao dịch, hãy xem bài hướng dẫn này về việc gửi giao dịch bằng web3.
Đầu tiên, cài đặt gói dotenv trong thư mục dự án của bạn:
1npm install dotenv --saveSau đó, tạo một tệp .env trong thư mục gốc của dự án và thêm khóa riêng tư MetaMask và URL API HTTP Alchemy của bạn vào đó.
- Làm theo các hướng dẫn nàyopens in a new tab để xuất khóa riêng tư của bạn
- Xem bên dưới để lấy URL API HTTP của Alchemy
Sao chép URL API của Alchemy
Tệp .env của bạn sẽ trông như thế này:
1API_URL = "https://eth-sepolia.g.alchemy.com/v2/khoa-api-cua-ban"2PRIVATE_KEY = "khoa-rieng-tu-metamask-cua-ban"Để thực sự kết nối những thứ này với mã của chúng ta, chúng ta sẽ tham chiếu các biến này trong tệp hardhat.config.js của mình ở bước 13.
.env! Vui lòng đảm bảo không bao giờ chia sẻ hoặc tiết lộ tệp .env của bạn với bất kỳ ai, vì làm như vậy bạn đang làm lộ bí mật của mình. Nếu bạn đang sử dụng kiểm soát phiên bản, hãy thêm tệp .env của bạn vào tệp gitignore.Bước 12: Cài đặt Ethers.js
Ethers.js là một thư viện giúp tương tác và gửi yêu cầu đến Ethereum dễ dàng hơn bằng cách gói các phương thức JSON-RPC tiêu chuẩn với các phương thức thân thiện hơn với người dùng.
Hardhat giúp tích hợp Pluginopens in a new tab cho các công cụ bổ sung và chức năng mở rộng trở nên siêu dễ dàng. Chúng tôi sẽ tận dụng plugin Ethersopens in a new tab để triển khai hợp đồng (Ethers.jsopens in a new tab có một số phương pháp triển khai hợp đồng siêu gọn gàng).
Trong thư mục dự án của bạn, hãy gõ:
1npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"Chúng ta cũng sẽ nhúng ethers vào tệp hardhat.config.js của mình trong bước tiếp theo.
Bước 13: Cập nhật hardhat.config.js
Cho đến nay, chúng ta đã thêm một số phần phụ thuộc và plugin, bây giờ chúng ta cần cập nhật hardhat.config.js để dự án của chúng ta biết về tất cả chúng.
Cập nhật tệp hardhat.config.js của bạn để trông như thế này:
1require('dotenv').config();23require("@nomiclabs/hardhat-ethers");4const { API_URL, PRIVATE_KEY } = process.env;56/**7* @type import('hardhat/config').HardhatUserConfig8*/9module.exports = {10 solidity: "0.7.3",11 defaultNetwork: "sepolia",12 networks: {13 hardhat: {},14 sepolia: {15 url: API_URL,16 accounts: [`0x${PRIVATE_KEY}`]17 }18 },19}Hiện tất cảBước 14: Biên dịch hợp đồng của chúng ta
Để đảm bảo mọi thứ đều hoạt động cho đến nay, hãy biên dịch hợp đồng của chúng ta. Tác vụ compile là một trong những tác vụ có sẵn của hardhat.
Từ dòng lệnh, hãy chạy:
1npx hardhat compileBạn có thể nhận được cảnh báo về SPDX license identifier not provided in source file , nhưng không cần phải lo lắng về điều đó — hy vọng mọi thứ khác đều ổn! Nếu không, bạn luôn có thể nhắn tin trong Alchemy discordopens in a new tab.
Bước 15: Viết tập lệnh triển khai của chúng ta
Bây giờ hợp đồng của chúng ta đã được viết và tệp cấu hình đã sẵn sàng, đã đến lúc viết tập lệnh triển khai hợp đồng của chúng ta.
Điều hướng đến thư mục scripts/ và tạo một tệp mới có tên deploy.js, thêm nội dung sau vào đó:
1async function main() {2 const HelloWorld = await ethers.getContractFactory("HelloWorld");34 // Bắt đầu triển khai, trả về một promise phân giải thành một đối tượng hợp đồng5 const hello_world = await HelloWorld.deploy("Hello World!");6 console.log("Hợp đồng được triển khai đến địa chỉ:", hello_world.address);}78main()9 .then(() => process.exit(0))10 .catch(error => {11 console.error(error);12 process.exit(1);13 });Hiện tất cảHardhat đã làm rất tốt việc giải thích mỗi dòng mã này làm gì trong Bài hướng dẫn về Hợp đồngopens in a new tab của họ, chúng tôi đã áp dụng các giải thích của họ ở đây.
1const HelloWorld = await ethers.getContractFactory("HelloWorld");ContractFactory trong ethers.js là một sự trừu tượng hóa được sử dụng để triển khai các hợp đồng thông minh mới, vì vậy HelloWorld ở đây là một nhà máy cho các phiên bản của hợp đồng hello world của chúng ta. Khi sử dụng plugin hardhat-ethers, các phiên bản ContractFactory và Contract được kết nối với người ký đầu tiên theo mặc định.
1const hello_world = await HelloWorld.deploy();Việc gọi deploy() trên một ContractFactory sẽ bắt đầu việc triển khai và trả về một Promise phân giải thành một Contract. Đây là đối tượng có một phương thức cho mỗi chức năng hợp đồng thông minh của chúng ta.
Bước 16: Triển khai hợp đồng của chúng ta
Cuối cùng, chúng ta đã sẵn sàng để triển khai hợp đồng thông minh của mình! Điều hướng đến dòng lệnh và chạy:
1npx hardhat run scripts/deploy.js --network sepoliaSau đó, bạn sẽ thấy một cái gì đó như thế này:
1Hợp đồng được triển khai đến địa chỉ: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570Nếu chúng ta truy cập Etherscan của Sepoliaopens in a new tab và tìm kiếm địa chỉ hợp đồng của mình, chúng ta sẽ có thể thấy rằng nó đã được triển khai thành công. Giao dịch sẽ trông giống như thế này:
Địa chỉ From phải khớp với địa chỉ tài khoản MetaMask của bạn và địa chỉ To sẽ ghi là “Tạo Hợp đồng” nhưng nếu chúng ta nhấp vào giao dịch, chúng ta sẽ thấy địa chỉ hợp đồng của mình trong trường To:
Xin chúc mừng! Bạn vừa triển khai một hợp đồng thông minh trên chuỗi Ethereum 🎉
Để hiểu những gì đang diễn ra ở hậu trường, hãy điều hướng đến tab Explorer trong bảng điều khiển Alchemyopens in a new tab của chúng ta. Nếu bạn có nhiều ứng dụng Alchemy, hãy đảm bảo lọc theo ứng dụng và chọn “Hello World”.

Tại đây, bạn sẽ thấy một vài lệnh gọi JSON-RPC mà Hardhat/Ethers đã thực hiện ngầm cho chúng ta khi chúng ta gọi hàm .deploy(). Hai lệnh gọi quan trọng cần đề cập ở đây là eth_sendRawTransactionopens in a new tab, là yêu cầu để thực sự ghi hợp đồng của chúng ta lên chuỗi Sepolia, và eth_getTransactionByHashopens in a new tab, là yêu cầu để đọc thông tin về giao dịch của chúng ta với hàm băm đã cho (một mẫu điển hình khi có
các giao dịch). Để tìm hiểu thêm về việc gửi giao dịch, hãy xem hướng dẫn này về gửi giao dịch bằng Web3
Đó là tất cả cho phần 1 của hướng dẫn này, trong phần 2, chúng ta sẽ thực sự tương tác với hợp đồng thông minh của mìnhopens in a new tab bằng cách cập nhật thông điệp ban đầu của chúng ta và trong phần 3, chúng ta sẽ xuất bản hợp đồng thông minh của mình lên Etherscanopens in a new tab để mọi người sẽ biết cách tương tác với nó.
Bạn muốn tìm hiểu thêm về Alchemy? Hãy xem trang webopens in a new tab của chúng tôi. Bạn không muốn bỏ lỡ bất kỳ bản cập nhật nào? Đăng ký nhận bản tin của chúng tôi tại đâyopens in a new tab! Hãy chắc chắn cũng tham gia Discordopens in a new tab của chúng tôi.**.
Lần cập nhật trang lần cuối: 5 tháng 12, 2025





