Cấu trúc của Hợp đồng Thông minh
3 phút đọc22/05/2025
Cú GiàCyber Intelligence Analyst
Reading Time: 3 minutes
Khi làm việc với hợp đồng thông minh, tôi thấy việc hiểu rõ cấu trúc và bản chất của hợp đồng là rất cần thiết. Chính vì vậy, tôi viết bài này để làm rõ một số khái niệm quan trọng trong hợp đồng thông minh Ethereum, khác biệt so với mô hình phát triển web2.
Các Kiểu Dữ Liệu
Trong Solidity, kiểu contract là một cấu trúc tổ chức một tập hợp các hàm liên quan xoay quanh một mục đích duy nhất.
Kiểu address là địa chỉ Ethereum có kích thước 20 byte và được biểu diễn ở dạng thập lục phân bắt đầu bằng tiền tố 0x.
Bạn sẽ quen thuộc với hầu hết các kiểu dữ liệu khác nếu là một lập trình viên – bao gồm boolean, số nguyên, số dấu phẩy động cố định, mảng byte và ký tự.
Lưu Trữ Dữ Liệu
Trong Solidity, các giá trị dữ liệu tham chiếu có thể được lưu trữ dưới dạng storage, memory hoặc calldata tùy thuộc vào vai trò của dữ liệu được lưu trữ. Cụ thể:
- storage lưu trữ dữ liệu vĩnh viễn trên blockchain và cực kỳ tốn kém.
- Các giá trị memory chỉ được lưu trữ trong vòng đời thực thi của hợp đồng thông minh và có chi phí sử dụng thấp (chỉ tốn một lượng gas nhỏ).
- calldata là một vị trí dữ liệu đặc biệt chứa các đối số hàm và chỉ khả dụng cho các tham số gọi hàm bên ngoài.
Bộ Sửa Đổi Hàm
Các hàm tồn tại để lấy/đặt thông tin dựa trên các lệnh gọi được khởi tạo bởi các giao dịch bên ngoài. Cụ thể, một hợp đồng thông minh không bao giờ có thể chạy trừ khi được khởi tạo bởi một giao dịch bên ngoài – chúng không tự động thực thi.
Bộ sửa đổi truy cập bao gồm:
- public: Có thể được truy cập bởi tất cả các hàm hoặc người gọi.
- external: Chỉ có thể được truy cập bởi người gọi bên ngoài, không phải các hàm bên trong.
- internal: Chỉ có thể được truy cập bởi hợp đồng này hoặc các hợp đồng kế thừa từ nó.
- private: Chỉ có thể được truy cập từ chính hợp đồng này.
Các bộ sửa đổi khác bao gồm:
- view: Điều này đảm bảo rằng hàm sẽ không sửa đổi trạng thái dữ liệu của hợp đồng (hoặc dữ liệu trong storage).
- pure: Điều này đảm bảo rằng hàm sẽ không đọc cũng như không sửa đổi trạng thái dữ liệu của hợp đồng.
- payable: Các hàm và địa chỉ được khai báo payable có thể nhận ether vào hợp đồng của chúng.
Các Hàm và Biến Đặc Biệt
Có một số biến và hàm toàn cục mà bạn nên nhớ rằng bạn có quyền truy cập! Một số biến đặc biệt là:
- block.number (uint256): Số của khối gần đây nhất.
- block.timestamp (uint256): Dấu thời gian UNIX của khối gần đây nhất.
- block.gaslimit (uint256): Giới hạn gas của khối hiện tại.
- msg.sender (address payable): Người gửi giao dịch kích hoạt hợp đồng.
- msg.value (uint256): Số wei được chuyển cùng với thông báo.
Các hàm đặc biệt bao gồm:
- receive(): Hợp đồng chỉ có thể có một trong những hàm này được khai báo. Nó đóng vai trò là đích đến mặc định khi một hợp đồng được gửi Ether. Nó không thể có đối số, trả về bất kỳ thứ gì và phải là external và payable.
- fallback(): Hợp đồng chỉ có thể có một trong những hàm này được khai báo. Nó đóng vai trò là dự phòng nếu một lệnh gọi đến hợp đồng không khớp với bất kỳ hàm nào hoặc nếu không có dữ liệu nào được cung cấp và hàm receive() không được khai báo. Nó không thể có đối số, trả về bất kỳ thứ gì và phải là external.
Sự Kiện (Events)
Các sự kiện Solidity tương đương với việc ghi nhật ký trong các mô hình lập trình khác. Chúng được phát hành khi một hợp đồng được thực thi, được lưu trữ vĩnh viễn trên blockchain, nhưng không thể truy cập để sửa đổi/đọc bởi các hợp đồng thông minh.
Bạn có thể khai báo và phát hành một sự kiện như thế này:
event TestEvent (
uint256 date,
string value
);
emit TestEvent(block.timestamp,’My first event!”);
Các sự kiện có thể được truy cập theo nhiều cách khác nhau:
- Các sự kiện được lưu trữ trong biên lai của giao dịch và có thể được truy cập tại đó.
- Bạn có thể đăng ký một sự kiện bằng myContract.events.TestEvent([options][, callback])
- Bạn có thể yêu cầu các sự kiện trong quá khứ bằng cách gọi hàm myContract.getPastEvents(event[, options][, callback]).
Hy vọng bài viết này đã cung cấp cho bạn một cái nhìn tổng quan về các thành phần chính của một hợp đồng thông minh! Bạn có thể tìm thêm chi tiết trong Tài liệu Solidity được liên kết tại đây.
Về tác giả

Cú GiàCyber Intelligence Analyst
I’m a cyber intelligence analyst with 8 years tracking targeted attack campaigns across the globe, weaving detailed tales of hackers’ moves. I guide organizations through the fog of the dark web and insider threats. May my writings shed light and bring useful wisdom to my brothers and sisters in the field.
@#@
Chuyên gia phân tích tình báo mạng với 8 năm kinh nghiệm theo dõi các chiến dịch tấn công có chủ đích trên toàn cầu, xây dựng các báo cáo chi tiết về hành vi của tin tặc.
Cú mong muốn giúp các tổ chức nhận diện rủi ro từ dark web và các mối đe dọa bên trong tổ chức.
Hy vọng các bài viết của Cú Già này sẽ đem đến nhiều kiến thức hữu ích cho anh em trong ngành
Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn
{"success":true,"head":"<title>Cấu trúc của Hợp đồng Thông minh</title>\n<meta name=\"description\" content=\"Khi làm việc với hợp đồng thông minh, tôi thấy việc hiểu rõ cấu trúc và bản chất của hợp đồng là rất cần thiết. Chính vì vậy, tôi viết bài này để làm rõ một số khái niệm quan trọng trong hợp đồng thông minh Ethereum.\"/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-video-preview:-1, max-image-preview:large\"/>\n<link rel=\"canonical\" href=\"https://blog.cystack.org/tutorial/2025/05/22/cau-truc-cua-hop-dong-thong-minh/\" />\n<meta property=\"og:locale\" content=\"en_US\" />\n<meta property=\"og:type\" content=\"article\" />\n<meta property=\"og:title\" content=\"Cấu trúc của Hợp đồng Thông minh\" />\n<meta property=\"og:description\" content=\"Khi làm việc với hợp đồng thông minh, tôi thấy việc hiểu rõ cấu trúc và bản chất của hợp đồng là rất cần thiết. Chính vì vậy, tôi viết bài này để làm rõ một số khái niệm quan trọng trong hợp đồng thông minh Ethereum.\" />\n<meta property=\"og:url\" content=\"https://blog.cystack.org/tutorial/2025/05/22/cau-truc-cua-hop-dong-thong-minh/\" />\n<meta property=\"og:site_name\" content=\"CyStack Tutorial\" />\n<meta property=\"article:tag\" content=\"vi\" />\n<meta property=\"article:section\" content=\"Blockchain\" />\n<meta property=\"og:updated_time\" content=\"2025-05-26T22:20:18+07:00\" />\n<meta property=\"og:image\" content=\"https://s2.cystack.net/tutorial/22172411/cau-truc-hop-dong-thong-minh-1024x538.png\" />\n<meta property=\"og:image:secure_url\" content=\"https://s2.cystack.net/tutorial/22172411/cau-truc-hop-dong-thong-minh-1024x538.png\" />\n<meta property=\"og:image:width\" content=\"1024\" />\n<meta property=\"og:image:height\" content=\"538\" />\n<meta property=\"og:image:alt\" content=\"Cấu trúc hợp đồng thông minh\" />\n<meta property=\"og:image:type\" content=\"image/png\" />\n<meta property=\"article:published_time\" content=\"2025-05-22T17:24:53+07:00\" />\n<meta property=\"article:modified_time\" content=\"2025-05-26T22:20:18+07:00\" />\n<meta name=\"twitter:card\" content=\"summary_large_image\" />\n<meta name=\"twitter:title\" content=\"Cấu trúc của Hợp đồng Thông minh\" />\n<meta name=\"twitter:description\" content=\"Khi làm việc với hợp đồng thông minh, tôi thấy việc hiểu rõ cấu trúc và bản chất của hợp đồng là rất cần thiết. Chính vì vậy, tôi viết bài này để làm rõ một số khái niệm quan trọng trong hợp đồng thông minh Ethereum.\" />\n<meta name=\"twitter:image\" content=\"https://s2.cystack.net/tutorial/22172411/cau-truc-hop-dong-thong-minh-1024x538.png\" />\n<meta name=\"twitter:label1\" content=\"Written by\" />\n<meta name=\"twitter:data1\" content=\"Cú Già\" />\n<meta name=\"twitter:label2\" content=\"Time to read\" />\n<meta name=\"twitter:data2\" content=\"4 minutes\" />\n<script type=\"application/ld+json\" class=\"rank-math-schema\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https://blog.cystack.org/tutorial/#person\",\"name\":\"CyStack Tutorial\"},{\"@type\":\"WebSite\",\"@id\":\"https://blog.cystack.org/tutorial/#website\",\"url\":\"https://blog.cystack.org/tutorial\",\"name\":\"CyStack Tutorial\",\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https://s2.cystack.net/tutorial/22172411/cau-truc-hop-dong-thong-minh.png\",\"url\":\"https://s2.cystack.net/tutorial/22172411/cau-truc-hop-dong-thong-minh.png\",\"width\":\"2400\",\"height\":\"1260\",\"caption\":\"C\\u1ea5u tr\\u00fac h\\u1ee3p \\u0111\\u1ed3ng th\\u00f4ng minh\",\"inLanguage\":\"en-US\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://blog.cystack.org/tutorial/2025/05/22/cau-truc-cua-hop-dong-thong-minh/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":\"1\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":\"2\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/category/blockchain/\",\"name\":\"Blockchain\"}},{\"@type\":\"ListItem\",\"position\":\"3\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/05/22/cau-truc-cua-hop-dong-thong-minh/\",\"name\":\"C\\u1ea5u tr\\u00fac c\\u1ee7a H\\u1ee3p \\u0111\\u1ed3ng Th\\u00f4ng minh\"}}]},{\"@type\":\"WebPage\",\"@id\":\"https://blog.cystack.org/tutorial/2025/05/22/cau-truc-cua-hop-dong-thong-minh/#webpage\",\"url\":\"https://blog.cystack.org/tutorial/2025/05/22/cau-truc-cua-hop-dong-thong-minh/\",\"name\":\"C\\u1ea5u tr\\u00fac c\\u1ee7a H\\u1ee3p \\u0111\\u1ed3ng Th\\u00f4ng minh\",\"datePublished\":\"2025-05-22T17:24:53+07:00\",\"dateModified\":\"2025-05-26T22:20:18+07:00\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/#website\"},\"primaryImageOfPage\":{\"@id\":\"https://s2.cystack.net/tutorial/22172411/cau-truc-hop-dong-thong-minh.png\"},\"inLanguage\":\"en-US\",\"breadcrumb\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/05/22/cau-truc-cua-hop-dong-thong-minh/#breadcrumb\"}},{\"@type\":\"Person\",\"@id\":\"https://blog.cystack.org/tutorial/author/oldowl/\",\"name\":\"C\\u00fa Gi\\u00e0\",\"url\":\"https://blog.cystack.org/tutorial/author/oldowl/\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https://secure.gravatar.com/avatar/b3fa7cf5dcac1b689e54fb260f2c07b3d64eb7a0240f9ea63cbc3e0d558b5c31?s=96&d=mm&r=g\",\"url\":\"https://secure.gravatar.com/avatar/b3fa7cf5dcac1b689e54fb260f2c07b3d64eb7a0240f9ea63cbc3e0d558b5c31?s=96&d=mm&r=g\",\"caption\":\"C\\u00fa Gi\\u00e0\",\"inLanguage\":\"en-US\"}},{\"@type\":\"BlogPosting\",\"headline\":\"C\\u1ea5u tr\\u00fac c\\u1ee7a H\\u1ee3p \\u0111\\u1ed3ng Th\\u00f4ng minh\",\"keywords\":\"H\\u1ee3p \\u0111\\u1ed3ng Th\\u00f4ng minh\",\"datePublished\":\"2025-05-22T17:24:53+07:00\",\"dateModified\":\"2025-05-26T22:20:18+07:00\",\"articleSection\":\"Blockchain\",\"author\":{\"@id\":\"https://blog.cystack.org/tutorial/author/oldowl/\",\"name\":\"C\\u00fa Gi\\u00e0\"},\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"description\":\"Khi l\\u00e0m vi\\u1ec7c v\\u1edbi h\\u1ee3p \\u0111\\u1ed3ng th\\u00f4ng minh, t\\u00f4i th\\u1ea5y vi\\u1ec7c hi\\u1ec3u r\\u00f5 c\\u1ea5u tr\\u00fac v\\u00e0 b\\u1ea3n ch\\u1ea5t c\\u1ee7a h\\u1ee3p \\u0111\\u1ed3ng l\\u00e0 r\\u1ea5t c\\u1ea7n thi\\u1ebft. Ch\\u00ednh v\\u00ec v\\u1eady, t\\u00f4i vi\\u1ebft b\\u00e0i n\\u00e0y \\u0111\\u1ec3 l\\u00e0m r\\u00f5 m\\u1ed9t s\\u1ed1 kh\\u00e1i ni\\u1ec7m quan tr\\u1ecdng trong h\\u1ee3p \\u0111\\u1ed3ng th\\u00f4ng minh Ethereum.\",\"name\":\"C\\u1ea5u tr\\u00fac c\\u1ee7a H\\u1ee3p \\u0111\\u1ed3ng Th\\u00f4ng minh\",\"@id\":\"https://blog.cystack.org/tutorial/2025/05/22/cau-truc-cua-hop-dong-thong-minh/#richSnippet\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/05/22/cau-truc-cua-hop-dong-thong-minh/#webpage\"},\"image\":{\"@id\":\"https://s2.cystack.net/tutorial/22172411/cau-truc-hop-dong-thong-minh.png\"},\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/05/22/cau-truc-cua-hop-dong-thong-minh/#webpage\"}}]}</script>\n"}