Hợp đồng thông minh là gì?
Hợp đồng thông minh (smart contract) là chương trình được triển khai trên mạng blockchain và chạy theo quy tắc trong mã của nó khi một giao dịch hoặc một chương trình khác gọi đến. Nó có thể đọc dữ liệu đầu vào và dữ liệu đã ghi trên chuỗi, kiểm tra các điều kiện định sẵn và cập nhật dữ liệu mà blockchain lưu giữ khi thực thi thành công.
Chữ "thông minh" không có nghĩa là chương trình tự suy nghĩ, và chữ "hợp đồng" không bảo đảm rằng nó cấu thành hợp đồng theo pháp luật. Tên gọi này nhấn mạnh một điều hẹp hơn: các bên tham gia có thể viết một bộ quy tắc hoạt động thành mã, để những node chạy phần mềm blockchain và kiểm tra giao dịch xử lý theo giao thức, thay vì để một máy chủ duy nhất tự quyết định kết quả.
Trước hết hãy phân biệt mã, trạng thái và lệnh gọi
Mã quy định chương trình được thực hiện những thao tác nào và mỗi thao tác cần thỏa mãn điều kiện gì. Trạng thái là dữ liệu chương trình đang lưu trên chuỗi, chẳng hạn số dư, chủ sở hữu, tham số hoặc quyền phê duyệt. Giao dịch hoặc lệnh gọi cung cấp người gửi, hàm cần gọi và dữ liệu đầu vào cho lần thực thi đó, đồng thời khiến chương trình đọc hoặc thay đổi trạng thái.
Cùng một đoạn mã có thể cho ra kết quả khác nhau khi nhận đầu vào khác nhau, hoặc khi trạng thái hiện tại khác nhau. Vì vậy "thực thi theo mã" không có nghĩa là hợp đồng luôn trả về cùng một đáp án, mà là với cùng quy tắc chuỗi, cùng trạng thái hiện tại, cùng dữ liệu giao dịch và cùng bối cảnh thực thi, các validator phải đi đến cùng một kết quả. Bối cảnh thực thi bao gồm bên gọi, thời gian của block và những thông tin khác mà giao thức cung cấp cho lần thực thi này.
Hợp đồng cũng không tự thức dậy để xem giờ, giá hay một sự kiện ngoài đời thực. Nó thường chờ một giao dịch hoặc một thông điệp của giao thức kích hoạt. Nếu chương trình cần thông tin ngoài chuỗi như giá thị trường, thời tiết hay kết quả một trận đấu, cần có cơ chế dữ liệu như oracle gửi thông tin đó lên chuỗi trước. Hợp đồng chỉ có thể thực thi trên dữ liệu nó nhận được; nó không thể tự chứng minh thông tin bên ngoài là đúng.
Vấn đề mà hợp đồng thông minh hướng tới
Ở ứng dụng thông thường, phần logic cốt lõi thường chạy trên máy chủ do bên phát triển hoặc bên cung cấp dịch vụ kiểm soát. Người dùng gửi yêu cầu đến máy chủ, máy chủ đọc cơ sở dữ liệu, áp dụng quy tắc rồi trả về kết quả. Bên vận hành máy chủ đó có thể cập nhật chương trình, thay đổi quyền trên cơ sở dữ liệu hoặc dừng dịch vụ.
Hợp đồng thông minh chuyển một phần logic và trạng thái đó vào môi trường thực thi chung của blockchain. Khi mạng xác nhận một giao dịch đáp ứng điều kiện, các node tính kết quả theo cùng một bộ quy tắc và ghi những thay đổi trạng thái hợp lệ vào sổ cái. Người tham gia có thể tự đối chiếu giao dịch và kết quả, thay vì chỉ dựa vào bản ghi do backend của một ứng dụng cung cấp.
Điều này không có nghĩa là ứng dụng không còn cần bên vận hành hay máy chủ. Trang web, ứng dụng di động, lập chỉ mục dữ liệu, thông báo và hỗ trợ khách hàng vẫn có thể do hệ thống tập trung đảm nhiệm, và bản thân hợp đồng vẫn có thể giữ quyền quản trị. Khi đánh giá cách một ứng dụng được kiểm soát, cần xem riêng chương trình trên chuỗi, các dịch vụ ngoài chuỗi không chạy trên blockchain, và những khóa có thể sử dụng quyền quản trị.
Từ triển khai đến thực thi
Các blockchain không dùng cùng một tên gọi và cùng một cách xử lý cho hợp đồng thông minh, nhưng quy trình thường trải qua triển khai, gọi, thực thi và ghi nhận.
Triển khai chương trình lên mạng
Bên phát triển trước tiên viết chương trình bằng ngôn ngữ mà mạng hỗ trợ, sau đó chuyển mã sang dạng mà môi trường thực thi của mạng đó xử lý được. Việc triển khai thường thực hiện qua một giao dịch đặc biệt; sau khi mạng xác nhận, chương trình nhận được một định danh trên chuỗi để các tài khoản hoặc chương trình khác gọi đến.
Bên triển khai có thể đặt dữ liệu và quyền ban đầu trong chương trình, ví dụ ai được tạm dừng một chức năng, sửa tham số hay phê duyệt bản nâng cấp. Không phải hợp đồng nào cũng có những quyền này, và chúng cũng không tự mất đi chỉ vì đoạn mã được gọi là "hợp đồng thông minh".
Người dùng hoặc chương trình gửi lệnh gọi
Người dùng thường khởi tạo giao dịch qua ví hoặc giao diện ứng dụng, chỉ rõ hàm cần gọi và dữ liệu đầu vào. Một hợp đồng thông minh khác cũng có thể gọi nó trong quá trình thực thi, nhờ đó nhiều chương trình được kết hợp thành một thao tác.
Tên nút bấm hoặc thông báo của ví hiển thị trước khi gọi chỉ là cách giao diện diễn giải giao dịch. Thứ thực sự được gửi đi là dữ liệu đã mã hóa. Nếu giao diện hiển thị không đầy đủ, kết nối tới địa chỉ sai hoặc che bớt các quyền phát sinh, hiệu lực thực tế của chữ ký có thể khác với điều người dùng tưởng mình đã chấp thuận.
Node thực thi và xác minh kết quả
Các mạng sắp xếp "ai thực thi trước, ai xác minh sau" không giống nhau. Trên nhiều chuỗi công khai hướng thực thi, node validator sẽ chạy lại hoặc đối chiếu quá trình thực thi hợp đồng theo cùng quy tắc để xác nhận những thay đổi trạng thái mà giao dịch tạo ra. Chương trình đọc trạng thái hiện tại và dữ liệu đầu vào, kiểm tra điều kiện theo thứ tự rồi tính ra kết quả.
Ví dụ trên Ethereum, hợp đồng thông minh được giao dịch gọi đến và thực thi trong Máy ảo Ethereum. Trong Hyperledger Fabric, chương trình tương tự được gọi là chaincode: các node đáp ứng chính sách chứng thực sẽ mô phỏng thực thi và ký vào kết quả trước, sau đó các node peer trong channel kiểm tra chữ ký chứng thực cùng bản ghi đọc – ghi, và chỉ những giao dịch đã qua xác minh mới cập nhật trạng thái hiện tại. Chính sách chứng thực đơn giản là quy tắc mà các thành viên mạng thống nhất trước về việc node của những tổ chức nào phải chấp nhận kết quả. Những khác biệt này cho thấy "hợp đồng thông minh" là một loại chương trình, không đồng nghĩa với cách triển khai riêng của một chuỗi công khai nào.
Ghi trạng thái hoặc trả về kết quả đọc
Lệnh gọi làm thay đổi trạng thái trên chuỗi phải được xác nhận dưới dạng giao dịch. Chẳng hạn, chương trình có thể cập nhật số dư của một token, ghi nhận một quyền phê duyệt, hoặc thay đổi người nắm giữ một vật phẩm số. Khi thực thi thất bại, thay đổi trạng thái dự kiến thường không có hiệu lực, nhưng bên gửi vẫn có thể phải chịu phí xử lý mà mạng đã tiêu tốn; quy tắc cụ thể do mạng quyết định.
Việc đọc trạng thái hiện có thường không cần tạo giao dịch mới trên chuỗi. Ứng dụng có thể truy vấn node về số dư, tham số hoặc bản ghi, và node trả kết quả tại chỗ. Vì trạng thái chung không thay đổi, lần đọc này không cần toàn mạng xác nhận lại. Dù vậy, các mạng và nhà cung cấp dịch vụ có thể có quy định riêng về cách truy vấn hoặc chi phí.
Khác biệt so với hợp đồng thông thường
Hợp đồng thông minh trước hết là một chương trình; hợp đồng thông thường trước hết là một thỏa thuận pháp lý giữa các bên. Hai thứ có thể liên quan với nhau — các bên có thể dùng chương trình để thanh toán hoặc ghi nhận việc thực hiện nghĩa vụ — nhưng tên gọi giống nhau không làm chúng đồng nhất.
Điều một chương trình có thể phán định là dữ liệu mà mã của nó đọc được và những điều kiện được nêu rõ ràng. Nó không chắc hiểu được ý định thật của các bên, không xử lý được điều khoản mơ hồ, không nhận ra gian lận và không quyết định được cách khắc phục ngoài đời thực. Kết quả trên chuỗi có tương ứng với một quyền hay không, và tranh chấp được xử lý thế nào, phụ thuộc vào thỏa thuận cụ thể và quy tắc áp dụng; không thể suy ra từ tên gọi của đoạn mã.
Ngược lại cũng vậy: một hợp đồng pháp lý không nhất thiết phải dùng hợp đồng thông minh. Nó có thể được ghi nhận và thực hiện bằng hệ thống truyền thống. Khi xét quan hệ giữa hai bên, hãy hỏi riêng: mã thực sự làm gì, và các bên còn có thỏa thuận pháp lý hay dịch vụ nào khác.
Khác biệt so với ứng dụng phi tập trung
Hợp đồng thông minh thường chỉ là một phần của ứng dụng phi tập trung. Ứng dụng phi tập trung (decentralized application, DApp) còn có thể gồm giao diện web hoặc di động, kết nối ví, cơ sở dữ liệu ngoài chuỗi, lưu trữ tệp và dịch vụ dữ liệu.
Khi người dùng nhấn "hoán đổi" trên trang web, giao diện trình bày tài sản và tham số, ví giúp người dùng đối chiếu rồi ký, hợp đồng thông minh thực thi quy tắc trên chuỗi, và các node xác minh giao dịch. Sai sót ở bất kỳ lớp nào cũng có thể ảnh hưởng tới kết quả cuối cùng.
Vì vậy, hợp đồng được triển khai trên blockchain không có nghĩa là toàn bộ ứng dụng đã phi tập trung. Tên miền frontend có thể bị đóng, dịch vụ dữ liệu có thể trả về thông tin sai, và quản trị viên vẫn có thể giữ quyền nâng cấp hoặc tạm dừng. Khi đánh giá một ứng dụng, cần xem từng thành phần và bên kiểm soát chúng.
Hợp đồng có thể sửa hoặc nâng cấp không
Một số blockchain giữ nguyên mã hợp đồng đã triển khai, nhưng điều đó không có nghĩa logic ứng dụng không bao giờ nâng cấp được. Bên phát triển có thể triển khai hợp đồng mới rồi chuyển người dùng sang, hoặc dùng cấu trúc proxy, trong đó một điểm vào cố định chuyển lệnh gọi tới hợp đồng logic có thể thay thế.
Khả năng nâng cấp có thể dùng để sửa lỗi hoặc thêm chức năng. Nó cũng có nghĩa là một số tài khoản, cơ chế đa chữ ký hay quy trình quản trị có thể có quyền thay đổi hành vi của chương trình. Có quyền nâng cấp hay không, ai được sử dụng, có thời gian chờ hay không, và người dùng có thể rút ra hay không đều cần kiểm tra trong cấu trúc và thiết lập quyền của hợp đồng hiện tại.
Ngay cả khi mã không thể sửa, quản trị viên vẫn có thể thay đổi kết quả qua tham số, danh sách cho phép, công tắc tạm dừng hoặc nguồn dữ liệu bên ngoài. Ngược lại, không có quyền nâng cấp cũng không làm giảm rủi ro: một lỗi không thể sửa có thể tồn tại rất lâu.
Các mục đích sử dụng phổ biến
Hợp đồng thông minh có thể kết hợp tài sản và dữ liệu trên chuỗi theo một bộ quy tắc thống nhất. Các mục đích phổ biến gồm:
- ghi nhận việc phát hành, số dư, chuyển giao và phê duyệt token theo quy tắc thống nhất;
- hoán đổi tài sản theo quy tắc số lượng và giá được viết trong chương trình;
- quản lý việc thế chấp, cho vay, hoàn trả tài sản, kể cả xử lý tài sản khi điều kiện không còn được đáp ứng;
- ghi nhận định danh của vật phẩm số và quan hệ nắm giữ;
- quản lý tài sản theo nhiều chữ ký hoặc quyền theo vai trò;
- áp dụng thay đổi tham số dựa trên kết quả một cuộc bỏ phiếu trên chuỗi.
Đây chỉ là các loại chương trình, không cho thấy một hợp đồng cụ thể là vững chắc, hợp lý hay phù hợp với bất kỳ ai. Những chương trình cùng loại có thể dùng quyền, nguồn dữ liệu và cách nâng cấp hoàn toàn khác nhau.
Giới hạn và rủi ro
Viết quy tắc thành mã thực thi cũng đưa lỗi mã và cách thiết kế quyền lên chuỗi. Các giới hạn thường gặp gồm:
- Lỗi mã: sai sót ở điều kiện, phép tính hoặc kiểm tra quyền có thể khiến tài sản hay dữ liệu bị xử lý sai.
- Quyền quản trị: quản trị viên, tài khoản nâng cấp hoặc các bên trong cơ chế đa chữ ký có thể tạm dừng hoặc thay đổi chương trình.
- Dữ liệu bên ngoài: khi oracle cung cấp dữ liệu sai, chậm hoặc bị can thiệp, hợp đồng vẫn có thể thực thi bình thường trên đầu vào sai.
- Phụ thuộc khi kết hợp: khi một hợp đồng gọi các hợp đồng khác, sự cố, bản nâng cấp hoặc thay đổi tài sản khả dụng ở phía trước có thể lan sang phía sau.
- Thứ tự giao dịch: các bên khác trong mạng có thể thấy giao dịch đang chờ trước khi nó được xác nhận và gửi thao tác liên quan sớm hơn, làm thay đổi điều kiện mà giao dịch ban đầu gặp phải sau cùng.
- Giao diện và chữ ký: trang web độc hại, địa chỉ sai hoặc yêu cầu phê duyệt không rõ ràng có thể khiến người dùng ký một thao tác ngoài dự tính.
- Chi phí thực thi: tính toán phức tạp và lưu trữ trên chuỗi có thể cần phí cao hơn; giao dịch có thể thất bại khi phí không đủ hoặc điều kiện không được đáp ứng.
Mã công khai cũng không đồng nghĩa với mã dễ hiểu. Thứ thực sự chạy trên blockchain có thể là bytecode đã biên dịch, tức các chỉ thị cấp thấp mà môi trường thực thi đọc. Ngay cả khi dự án công bố mã nguồn dễ đọc hơn, người đọc phổ thông cũng khó xác nhận nó khớp với chương trình trên chuỗi, đã được kiểm thử đầy đủ, hay hiện tại proxy có đang trỏ sang một logic khác.
Kiểm toán bảo mật có thể phát hiện một phần vấn đề, nhưng không chứng minh được hợp đồng không có lỗi và không loại bỏ rủi ro từ quản trị viên, dữ liệu bên ngoài, điều kiện thị trường hay chữ ký của người dùng. Khi đánh giá một chương trình cụ thể, không thể chỉ nhìn vào nhãn "đã kiểm toán".
Câu hỏi thường gặp
Hợp đồng thông minh có tự chạy không?
Nó thực thi theo mã, nhưng thường vẫn cần một giao dịch, một hợp đồng khác hoặc một thông điệp của giao thức kích hoạt. Chỉ triển khai hợp đồng không có nghĩa là nó sẽ tự theo dõi thế giới thực và tự khởi tạo mọi thao tác.
Mọi hợp đồng thông minh đều công khai?
Không hẳn. Trên blockchain công khai, node thường đọc được mã đang thực thi và dữ liệu giao dịch, nhưng mã nguồn không luôn được công bố hay xác minh. Mạng cần cấp quyền còn có thể giới hạn thành viên nào được xem dữ liệu và gọi chương trình.
Triển khai rồi là không sửa được?
Không hẳn. Mã hợp đồng ban đầu có thể giữ nguyên, nhưng ứng dụng có thể chuyển sang hợp đồng mới, hoặc thay logic thông qua proxy và quyền quản trị. Cần kiểm tra cấu trúc nâng cấp cụ thể thay vì chỉ tin vào thông điệp "không thể thay đổi".
Hợp đồng thông minh có đọc trực tiếp dữ liệu trang web không?
Thông thường là không thể coi nội dung web phổ thông là đầu vào đáng tin trên chuỗi. Nó cần oracle, bên tham gia được cấp quyền hoặc cơ chế khác gửi dữ liệu, và những nguồn dữ liệu đó tạo thêm phụ thuộc.
Thực thi thành công có nghĩa thao tác đã ổn?
Không. Thực thi thành công chỉ cho thấy giao dịch đáp ứng mã hiện hành và quy tắc mạng. Nó không chứng minh mã khớp với ý định của người dùng, dữ liệu bên ngoài là đúng, quyền được thiết lập hợp lý, hay chương trình không có khuyết điểm về kinh tế và bảo mật.
Khái niệm liên quan
Tìm hiểu thêm về blockchain, block, phí gas và node blockchain, hoặc trở lại bảng thuật ngữ tiền mã hóa.
Nguồn
- NISTIR 8202: Tổng quan về công nghệ blockchain — định nghĩa chung về hợp đồng thông minh, mã và trạng thái, yêu cầu thực thi của node.
- Ethereum.org: giới thiệu về hợp đồng thông minh — triển khai, lệnh gọi, trạng thái, khả năng kết hợp và giới hạn dữ liệu ngoài chuỗi.
- Ethereum.org: tương tác với hợp đồng thông minh — khác biệt giữa đọc trạng thái và gửi thay đổi trạng thái.
- Ethereum.org: nâng cấp hợp đồng thông minh — mã không thể thay đổi so với cấu trúc nâng cấp bằng proxy.
- Hyperledger Fabric: hợp đồng thông minh và chaincode — chaincode, chứng thực, xác minh và cập nhật trạng thái trong mạng cần cấp quyền.
© 2025 OKX. Bài viết này có thể được sao chép hoặc phân phối toàn bộ, hoặc trích dẫn các đoạn không quá 100 từ, miễn là không sử dụng cho mục đích thương mại. Mọi bản sao hoặc phân phối toàn bộ bài viết phải ghi rõ: “Bài viết này thuộc bản quyền © 2025 OKX và được sử dụng có sự cho phép.” Nếu trích dẫn, vui lòng ghi tên bài viết và nguồn tham khảo, ví dụ: “Tên bài viết, [tên tác giả nếu có], © 2025 OKX.” Một số nội dung có thể được tạo ra hoặc hỗ trợ bởi công cụ trí tuệ nhân tạo (AI). Nghiêm cấm các tác phẩm phái sinh hoặc hình thức sử dụng khác đối với bài viết này.









