TL;DR – Tóm tắt
Smart contract là chương trình lưu trên blockchain, tự động thực thi khi điều kiện thỏa mãn — không cần bên thứ ba. Chạy trong máy ảo (EVM), mỗi thao tác tốn gas. Bất biến sau deploy (trừ proxy pattern). Giới hạn lớn nhất: không thể truy cập dữ liệu ngoài chain, không tự khởi chạy, và lỗi code là vĩnh viễn.
IĐịnh nghĩa và nguồn gốc
Thuật ngữ "smart contract" được Nick Szabo đặt ra từ năm 1994 — trước khi blockchain tồn tại. Szabo mô tả smart contract là "giao thức giao dịch máy tính thực thi điều khoản của hợp đồng", với ví dụ kinh điển là máy bán hàng tự động: bỏ tiền vào, chọn sản phẩm, máy tự giao hàng — không cần nhân viên bán hàng.
Đến 2015, Ethereum hiện thực hóa ý tưởng này trên blockchain: smart contract là chương trình được lưu tại một địa chỉ trên chain, thực thi bằng EVM (Ethereum Virtual Machine), kết quả được ghi nhận bởi toàn bộ mạng.
IICơ chế thực thi
Smart contract không tự chạy. Nó chỉ thực thi khi nhận được một transaction gửi đến địa chỉ của nó. Luồng thực thi:
- User gửi transaction đến địa chỉ contract, kèm data (function selector + arguments)
- Transaction vào mempool, được miner/validator chọn đưa vào block
- Mỗi node trong mạng thực thi lại contract với EVM — kết quả phải giống nhau trên mọi node
- State thay đổi được ghi vào world state của Ethereum
- Event logs được emit để client có thể theo dõi
Tính chất quan trọng: thực thi là deterministic — cùng input, cùng state ban đầu → luôn cho cùng output. Đây là yêu cầu bắt buộc để tất cả node đồng thuận về kết quả.
| Thuộc tính | Smart Contract | Regular Backend |
|---|---|---|
| Ai thực thi | Toàn bộ mạng (mọi node) | Server của bạn |
| Kết quả | Deterministic, on-chain | Có thể thay đổi |
| Truy cập internet | Không (cần oracle) | Tự do |
| Sửa đổi sau deploy | Không (mặc định) | Tự do |
| Chi phí thực thi | Gas fee | Server cost |
IIIKiến trúc EVM
EVM (Ethereum Virtual Machine) là môi trường sandbox cách ly để thực thi smart contract. Mọi chain EVM-compatible (Polygon, BNB Chain, Arbitrum, Optimism…) đều chạy cùng một đặc tả EVM.
Thành phần EVM
- Stack: Cấu trúc dữ liệu chính, LIFO, tối đa 1024 phần tử, mỗi phần tử 256-bit
- Memory: Bộ nhớ tạm trong một lần thực thi, mở rộng theo byte, tốn gas khi mở rộng
- Storage: Bộ nhớ vĩnh viễn gắn với contract, key-value 256-bit→256-bit, rất đắt gas
- Calldata: Input data từ transaction, read-only, rẻ nhất
- Program Counter: Con trỏ đến opcode đang thực thi
Opcode
EVM thực thi bytecode — chuỗi các opcode 1 byte. Ví dụ: ADD (0x01), SSTORE (0x55 — lưu vào storage), CALL (0xf1 — gọi contract khác). Solidity/Vyper code được compile thành bytecode trước khi deploy.
Chi tiết kiến trúc EVM và so sánh với SVM, MoveVM xem tại EVM vs SVM vs MoveVM.
IVABI và Bytecode
Khi deploy smart contract, có hai thứ quan trọng được tạo ra:
Bytecode
Là mã máy EVM — chuỗi hex được lưu on-chain tại địa chỉ contract. Đây là thứ EVM thực thi. Không thể đọc trực tiếp bằng mắt thường.
ABI (Application Binary Interface)
Là bản mô tả JSON của các function, event, và parameter trong contract. ABI cho phép client (frontend, script) biết cách encode/decode data khi gọi contract.
Ví dụ ABI entry đơn giản:
{
"name": "transfer",
"type": "function",
"inputs": [
{"name": "to", "type": "address"},
{"name": "amount", "type": "uint256"}
],
"outputs": [{"name": "", "type": "bool"}]
}
Function Selector
Khi gọi function, EVM cần biết function nào được gọi. Function selector là 4 byte đầu của keccak256 hash của function signature. Ví dụ: transfer(address,uint256) → selector là 0xa9059cbb.
VGas và chi phí tính toán
Gas là cơ chế định giá tài nguyên tính toán trên EVM. Mỗi opcode tiêu thụ một lượng gas cố định:
| Opcode | Gas Cost | Mô tả |
|---|---|---|
| ADD, MUL | 3–5 | Tính toán số học cơ bản |
| SLOAD | 2,100 | Đọc từ storage (cold) |
| SSTORE (new) | 20,000 | Ghi mới vào storage |
| SSTORE (update) | 2,900 | Cập nhật storage đã có |
| CALL | 2,600+ | Gọi contract khác |
| CREATE | 32,000 | Deploy contract mới |
Gas limit là lượng gas tối đa user sẵn sàng trả. Nếu contract tiêu hết gas limit trước khi xong, transaction revert — mọi thay đổi state bị hủy nhưng gas đã dùng không được hoàn lại.
EIP-1559 (2021) thay đổi cơ chế gas fee: phân tách thành base fee (đốt) + priority fee (trả cho validator). Base fee điều chỉnh tự động theo nhu cầu mạng. Xem thêm tại Ethereum Roadmap.
VIHai loại tài khoản Ethereum
Ethereum có hai loại tài khoản, khác nhau căn bản:
| Thuộc tính | EOA (Externally Owned Account) | Contract Account |
|---|---|---|
| Kiểm soát bởi | Private key | Code |
| Có code không | Không | Có (bytecode) |
| Tự khởi transaction | Có | Không — chỉ phản ứng |
| Trả gas | Có | Không trực tiếp |
| Ví dụ | Ví MetaMask | Uniswap, AAVE contract |
Điểm quan trọng: mọi transaction đều phải xuất phát từ EOA. Contract không thể tự chạy định kỳ (không có cron job) — cần một EOA kích hoạt. Đây là lý do các protocol dùng keeper bot để tự động hóa.
Account Abstraction (ERC-4337) là nỗ lực xóa bỏ ranh giới này, cho phép contract account trả gas và khởi transaction — mở ra ví thông minh (smart wallet).
VIILỗ hổng bảo mật phổ biến
Smart contract là mã bất biến quản lý tiền thật. Lỗi code không thể vá — chỉ có thể migrate. Lịch sử blockchain ghi nhận hàng tỷ USD bị mất vì lỗi contract.
Reentrancy
Contract A chuyển ETH cho contract B. B nhận ETH, fallback function của B gọi lại A để rút tiếp trước khi A cập nhật balance. Lặp lại cho đến khi cạn tiền. DAO hack (2016): 3.6 triệu ETH (~60M USD). Bảo vệ: Checks-Effects-Interactions pattern, ReentrancyGuard.
Integer Overflow/Underflow
Solidity <0.8: số nguyên có thể wrap around. uint8 = 255, cộng thêm 1 = 0. Solidity 0.8+ tự động revert khi overflow. Với version cũ dùng SafeMath.
Access Control sai
Thiếu onlyOwner modifier → bất kỳ ai gọi được admin function. Parity Wallet hack (2017): 153,000 ETH bị khóa vĩnh viễn vì lỗi access control trong library contract.
Oracle Manipulation
Contract dùng on-chain price từ AMM pool nhỏ — hacker dùng flash loan thao túng giá trong một block để exploit logic contract. Bảo vệ: dùng TWAP (time-weighted average price) thay vì spot price.
Front-running
Hacker monitor mempool, thấy giao dịch lớn sắp execute, gửi giao dịch của mình với gas cao hơn để chạy trước. Liên quan trực tiếp đến MEV.
VIIIUpgradeability Patterns
Smart contract mặc định bất biến. Nhưng dự án thực tế cần fix bug và thêm tính năng. Một số pattern phổ biến:
Proxy Pattern
Deploy hai contract: Proxy (lưu state, địa chỉ cố định) và Logic/Implementation (chứa code). Proxy delegate call đến Logic. Khi cần upgrade, chỉ thay địa chỉ Logic trong Proxy — state giữ nguyên.
- Transparent Proxy: Admin và user gọi theo logic khác nhau
- UUPS (EIP-1822): Logic upgrade nằm trong implementation contract
- Diamond (EIP-2535): Nhiều implementation, không giới hạn kích thước
IXGiới hạn của Smart Contract
Hiểu rõ giới hạn giúp thiết kế hệ thống đúng đắn:
Không truy cập dữ liệu ngoài chain
Contract không thể gọi API, đọc file, truy cập internet. Cần oracle (Chainlink, Pyth) làm cầu nối — nhưng oracle là điểm tin tưởng bên ngoài, vi phạm tính trustless thuần túy.
Không có randomness thực
EVM deterministic — không có nguồn ngẫu nhiên thực. block.timestamp và blockhash có thể bị miner thao túng ở mức nhỏ. Giải pháp: Chainlink VRF (Verifiable Random Function).
Giới hạn kích thước
Contract bytecode tối đa 24KB (EIP-170). Contract phức tạp phải chia nhỏ hoặc dùng Diamond pattern.
Chi phí storage cao
Lưu dữ liệu on-chain rất đắt. 1KB storage tốn ~640,000 gas (~$20–200 tùy gas price). Dữ liệu lớn nên lưu off-chain (IPFS, Arweave), chỉ lưu hash on-chain. Đây là vấn đề Data Availability giải quyết.
Không thể xử lý ngoại lệ linh hoạt
Nếu một sub-call revert, toàn bộ transaction revert (trừ khi dùng try/catch). Không thể "ignore" lỗi và tiếp tục như code thông thường.
XỨng dụng thực tế
Smart contract đã được kiểm chứng trong nhiều lĩnh vực:
DeFi Protocols
Uniswap (AMM DEX), Aave/Compound (lending), MakerDAO (stablecoin) — tất cả vận hành hoàn toàn bằng smart contract, quản lý hàng chục tỷ USD không có nhân viên nào giữ tiền.
Token Standards
ERC-20 (fungible token), ERC-721 (NFT), ERC-1155 (multi-token) — là các smart contract interface chuẩn được mọi ví và sàn hỗ trợ. Toàn bộ hệ sinh thái token trên Ethereum là smart contract.
DAO Governance
Voting, treasury management, proposal execution — thực hiện on-chain bằng governance contract. Compound, Uniswap, Aave đều dùng mô hình này.
Bridges và Cross-chain
Lock-and-mint bridge dùng smart contract giữ tài sản ở chain nguồn và mint tương đương ở chain đích. Xem Blockchain Bridge để hiểu rủi ro.
Layer 2 Rollups
Smart contract trên L1 (Ethereum) đóng vai trò "judge" — xác minh state transition của Layer 2. Đây là nền tảng bảo mật của Optimism, Arbitrum, zkSync.
❓Câu Hỏi Thường Gặp
Smart contract là chương trình lưu trên blockchain, tự động chạy khi điều kiện thỏa mãn — giống máy bán hàng tự động: bỏ tiền đúng, nhận hàng đúng, không cần người vận hành. Khác biệt: không ai có thể thay đổi luật chơi sau khi đã deploy.
Mặc định không thể sửa — đây là tính bất biến cốt lõi. Proxy pattern cho phép upgrade nhưng là đánh đổi: team vẫn có quyền thay đổi logic, người dùng phải tin tưởng team. Protocol lớn dùng timelock + multisig để giảm rủi ro này.
Gas là phí tính toán để thực thi code trên EVM. Tác dụng kép: (1) trả thù lao cho validator, (2) ngăn vòng lặp vô hạn làm treo mạng. Không có gas limit, một contract độc hại có thể chiếm toàn bộ tài nguyên mạng.
Reentrancy là lỗi khi contract gọi external contract trước khi cập nhật state nội bộ — hacker gọi lại để rút tiền nhiều lần. Phòng chống: (1) Checks-Effects-Interactions pattern: kiểm tra điều kiện → cập nhật state → gọi external. (2) ReentrancyGuard modifier khóa hàm trong khi thực thi.
Solidity là ngôn ngữ phổ biến nhất để viết EVM smart contract, cú pháp giống JavaScript/C++. Ngoài ra có Vyper (cú pháp giống Python, đơn giản hơn, ít attack surface hơn), Huff (low-level, tối ưu gas tối đa), và Fe (đang phát triển). Tất cả đều compile thành EVM bytecode.
📚Tài liệu tham khảo
- Szabo, N. (1994). Smart Contracts. fon.hum.uva.nl/rob.gonggrijp/az/smartcontracts.pdf
- Ethereum Foundation. Ethereum Yellow Paper. ethereum.github.io/yellowpaper/paper.pdf
- Wood, G. (2014). Ethereum: A Secure Decentralised Generalised Transaction Ledger.
- OpenZeppelin. Smart Contract Security Best Practices. docs.openzeppelin.com
- Consensys. Ethereum Smart Contract Best Practices. consensys.github.io/smart-contract-best-practices
- Solidity Documentation. docs.soliditylang.org