Mục lục
Nội dung này phục vụ mục đích giáo dục, không phải lời khuyên đầu tư hoặc tín hiệu giao dịch.
Trả lời ngắn: Smart contract là chương trình triển khai tại một địa chỉ blockchain, gồm code và dữ liệu trạng thái. Khi tài khoản hoặc contract khác gửi yêu cầu hợp lệ, mạng thực thi function theo code, thu gas và cập nhật state hoặc revert. “Smart” không có nghĩa tự suy nghĩ, biết dữ liệu ngoài đời hay luôn an toàn.
Đọc xong, bạn sẽ hiểu:
- Code, state, address và function ghép thành contract ra sao.
- Transaction đi qua EVM, gas và revert thế nào.
- Cách kiểm tra contract công khai mà chưa kết nối ví.
1. Smart contract là chương trình onchain, không phải luật sư robot
Ethereum.org định nghĩa smart contract là chương trình chạy trên Ethereum, gồm code và state tại một địa chỉ cụ thể.
- Code là tập quy tắc và các function, tức những hành động contract cho phép gọi.
- State là dữ liệu contract đang lưu: số dư, quyền sở hữu, biến cấu hình hoặc trạng thái đơn hàng.
- Contract address là địa chỉ dùng để tìm và tương tác với contract trên network.
Hãy hình dung máy bán hàng. Code nói “nhận đủ tiền và còn hàng thì giao”; state ghi tồn kho và tiền đã nhận; các nút chọn là function; vị trí chiếc máy là address. Máy không thương lượng, không biết bạn đang vội và không tự sửa quy tắc.
Hai điều dễ hiểu sai
Thứ nhất, smart contract không nhất thiết là hợp đồng pháp lý. Nó có thể là token, pool thanh khoản, trò chơi hoặc sổ quyền biểu quyết.
Thứ hai, “tự thực thi” không có nghĩa tự thức dậy. Contract thường chạy khi transaction hoặc contract khác gọi function. Nếu cần dữ liệu ngoài blockchain, nó phải nhận dữ liệu qua một cơ chế như oracle.
Hình 1 — Address xác định nơi gọi; function nhận yêu cầu; code đọc hoặc đổi state theo quy tắc.
2. Một transaction kích hoạt smart contract như thế nào?
Luồng cơ bản có sáu bước:
- Người dùng chọn một hành động trên ví hoặc giao diện.
- Ví tạo transaction gồm contract address, function, tham số và mức phí.
- Người dùng đọc rồi ký bằng private key.
- Network đưa yêu cầu vào EVM — môi trường thực thi thống nhất của Ethereum.
- EVM chạy code với state hiện tại.
- Nếu hợp lệ, state mới được ghi; nếu lỗi, transaction revert.
Gas đo lượng tài nguyên tính toán cần cho execution. Ethereum.org nêu transaction tương tác smart contract cần gas; function chỉ đọc dạng view hoặc pure có thể được gọi từ bên ngoài mà không tạo transaction thay đổi state.
Ví dụ số đơn giản
Giả sử function yêu cầu 70.000 đơn vị gas và giá gas là 20 gwei. Phần phí tính toán thô là:
70.000 × 20 gwei = 1.400.000 gwei = 0,0014 ETH
Đây là ví dụ cơ học, chưa tính mọi yếu tố và không phải giá gas hiện tại. Gas price, gas used và giá ETH đều có thể thay đổi.
Revert không đồng nghĩa hoàn phí
Revert hoàn tác thay đổi state của lần gọi thất bại, nhưng computation đã chạy vẫn tiêu tốn gas. Ví dụ, swap có thể revert vì amount tối thiểu không đạt, deadline hết hoặc contract thiếu quyền dùng token.
Deploy là transaction đưa code contract lên network. Sau deploy, contract có address và code chạy theo thiết kế. Một số hệ thống dùng proxy để nâng cấp logic, nên “đã deploy” không luôn đồng nghĩa mọi code bất biến mãi mãi.
Hình 2 — EVM chạy cùng logic trên các node; state chỉ đổi khi toàn bộ điều kiện execution đạt.
3. Từ máy bán hàng đến token, DEX và ứng dụng DeFi
Ví dụ escrow ba trạng thái
Một contract demo giữ 1 đơn vị token cho giao dịch giữa An và Bình:
- An gửi 1 token vào contract; state chuyển thành
FUNDED. - Nếu Bình giao hàng và An xác nhận trước hạn, function
release()gửi 1 token cho Bình. - Nếu hết hạn mà điều kiện không đạt, function
refund()trả token cho An.
Code cần định nghĩa ai được gọi, deadline tính thế nào và trường hợp tranh chấp. Contract chỉ thi hành logic đã viết; nó không tự biết hàng ngoài đời đã giao. Muốn dùng dữ liệu đó phải có người xác nhận hoặc oracle, tức nguồn đưa dữ liệu ngoài chain vào contract.
Các nhóm ứng dụng phổ biến
- Token contract ghi số dư và quy tắc chuyển.
- DEX contract tính swap và quản lý pool.
- Lending contract ghi tài sản thế chấp, khoản vay và thanh lý.
- NFT contract ghi token ID và chủ sở hữu.
- DAO contract ghi đề xuất, phiếu bầu và execution.
Một dApp có thể gọi nhiều contract. Ethereum.org gọi khả năng ghép các contract như khối Lego là composability. Điều này tăng tốc xây dựng nhưng cũng nối rủi ro: contract A phụ thuộc B thì sự cố ở B có thể ảnh hưởng A.
Hình 3 — Cùng một khoản giữ có hai đường hợp lệ; điều kiện ngoài đời vẫn cần nguồn dữ liệu hoặc người xác nhận.
4. Code chạy đúng không có nghĩa yêu cầu ban đầu đúng
a. Bug và logic thiếu trường hợp
Máy tính thực thi đúng code, kể cả khi code có bug. Tài liệu Solidity nhấn mạnh khó ngăn mọi cách sử dụng ngoài dự kiến; contract còn có thể giữ tài sản có giá trị nên review và test rất quan trọng.
Audit giảm rủi ro chứ không bảo đảm không có lỗi. Cần đọc phạm vi audit, phiên bản code và thay đổi sau audit.
b. Admin key và proxy nâng cấp
Admin key là quyền đặc biệt có thể pause, đổi tham số hoặc nâng cấp hệ thống. Upgradeable proxy giữ address/state nhưng trỏ execution sang logic khác. Đây có thể là cơ chế sửa lỗi, đồng thời tạo rủi ro quản trị nếu một khóa kiểm soát quá nhiều.
c. Oracle và dữ liệu sai
Contract không tự biết tỷ giá, thời tiết hoặc kết quả trận đấu. Oracle đưa dữ liệu vào; dữ liệu trễ, sai hoặc bị thao túng có thể khiến code thực hiện kết quả không mong muốn.
d. Token approval và frontend giả
Token approval cho contract quyền sử dụng token trong giới hạn nhất định. Approval quá rộng hoặc ký nhầm contract nguy hiểm có thể dẫn đến mất tài sản.
Giao diện đẹp không chứng minh address bên dưới đúng. Website giả có thể tạo transaction tới contract khác; người dùng phải đọc network, address, function và quyền đang ký.
e. Public không đồng nghĩa dễ hiểu
Bytecode có thể công khai nhưng khó đọc. Source “verified” trên explorer cho biết source khớp bytecode theo quy trình của explorer; nó không chứng minh logic an toàn hoặc phù hợp.
Câu đoán chắc: “Contract verified và audited thì an toàn.” Sai vì audit có phạm vi, admin có thể đổi logic, oracle/contract phụ thuộc có thể lỗi.
Câu có điều kiện: verified source và audit tăng thông tin để đánh giá, nhưng vẫn phải kiểm tra quyền quản trị, dependency, approval và phiên bản đang chạy.
Hình 4 — Rủi ro nằm cả trong code lẫn dữ liệu, quyền quản trị, contract phụ thuộc và giao diện người dùng.
5. Checklist và bài tập 15 phút trên explorer
Checklist trước khi tương tác
- Network và contract address đến từ nguồn chính thức chưa?
- Source có verified không; đây có đúng phiên bản đang dùng không?
- Function sắp gọi làm đổi state hay chỉ đọc?
- Transaction gửi tài sản, cấp approval hoặc gọi contract nào khác?
- Có admin key, pause, upgrade hoặc proxy không?
- Contract phụ thuộc oracle hoặc contract ngoài nào?
- Audit thuộc phiên bản/phạm vi nào và còn issue mở không?
- Gas estimate, minimum output, deadline và cảnh báo ví có hợp lý không?
Không rõ address, function hoặc approval thì dừng, không ký để “xem thử”.
Bài tập đọc-only
Mở một public block explorer cho network bạn muốn học. Chọn một contract có source verified từ trang tài liệu chính thức. Không kết nối ví, không bấm Write và không gửi transaction.
- Ghi network và contract address rút gọn.
- Tìm trạng thái source verified.
- Ghi hai function chỉ đọc và một function đổi state.
- Tìm creator/deployer và dấu hiệu proxy nếu explorer hiển thị.
- Mở một transaction gần đây; ghi function, status và gas used.
- Viết ba câu hỏi chưa trả lời trước khi ký thật.
Mẫu đối chiếu đã điền
| Trường | Mẫu demo | Kết luận |
|---|---|---|
| Network/address | Ethereum, 0x12ab...89cd giả lập |
Phải đối chiếu nguồn chính thức |
| Source | Verified | Chỉ chứng minh source khớp, không chứng minh an toàn |
| Read function | balanceOf, totalSupply |
Chỉ đọc theo mô tả demo |
| Write function | transfer |
Có thể đổi state |
| Proxy/admin | Chưa xác định | Dừng trước khi tương tác |
| Transaction | Success, có gas used | Thành công kỹ thuật, chưa nói giá trị kinh tế |
Kết quả đúng là đọc được ranh giới “đã biết/chưa biết”, không phải tìm được contract để đầu tư.
Hình 5 — Explorer giúp xác minh dữ liệu onchain; trường quản trị hoặc function chưa rõ là điểm dừng.
6. Tổng kết: smart contract là logic công khai, không phải bảo đảm
a. Năm ý chính
- Smart contract là code và state tại một blockchain address.
- Transaction gọi function; EVM thực thi, thu gas và ghi state hoặc revert.
- Contract chỉ biết dữ liệu onchain hoặc dữ liệu được oracle/actor đưa vào.
- Composability tạo ứng dụng mạnh nhưng nối rủi ro giữa nhiều contract.
- Verified source, audit và giao diện đẹp không thay việc kiểm tra admin, proxy, approval và dependency.
b. Câu hỏi tự kiểm tra
- Code, state và address khác nhau thế nào?
- Vì sao transaction revert vẫn có thể tốn gas?
- Oracle giải quyết giới hạn gì và thêm rủi ro gì?
- Verified source không chứng minh điều gì?
c. Gợi ý đáp án
Xem gợi ý câu 1
Code là quy tắc, state là dữ liệu hiện tại, address là nơi contract tồn tại. Xem lại mục 1.
Xem gợi ý câu 2
State được hoàn tác nhưng network đã dùng tài nguyên để chạy và phát hiện lỗi. Xem lại mục 2.
Xem gợi ý câu 3
Oracle đưa dữ liệu ngoài chain vào, đồng thời thêm rủi ro dữ liệu trễ/sai/thao túng. Xem lại mục 3.
Xem gợi ý câu 4
Nó không chứng minh code an toàn, không có admin hoặc phù hợp với mục tiêu người dùng. Xem lại mục 4.
d. Thuật ngữ cần nhớ
| Thuật ngữ | Giải thích ngắn |
|---|---|
| Function | Hành động contract cho phép gọi. |
| State | Dữ liệu hiện tại contract lưu onchain. |
| Contract address | Địa chỉ xác định contract trên network. |
| EVM | Môi trường thực thi smart contract của Ethereum. |
| Gas | Đơn vị đo tài nguyên computation. |
| Revert | Hủy thay đổi state của execution thất bại. |
| Deploy | Đưa code contract lên network. |
| Composability | Khả năng ghép contract thành hệ thống mới. |
| Oracle | Cơ chế đưa dữ liệu ngoài chain vào contract. |
| Token approval | Quyền cho contract sử dụng token trong giới hạn. |
e. Nguồn tham khảo
- Ethereum.org — Introduction to smart contracts
- Ethereum.org — Transactions
- Ethereum.org — Smart contract composability
- Solidity — Security considerations
f. Bài tiếp theo nên đọc
Bài tiếp theo: dApp là gì? Bạn sẽ nối giao diện, ví, RPC và smart contract thành một ứng dụng hoàn chỉnh, rồi thấy phần nào onchain và phần nào vẫn có thể tập trung.
Nội dung giáo dục, không phải lời khuyên đầu tư. Tương tác smart contract có thể làm mất tài sản; hãy kiểm tra transaction trước khi ký.
Bài tiếp theo