
Solidity là gì? Solidity là ngôn ngữ lập trình cao cấp dùng để viết hợp đồng thông minh (smart contract) trên blockchain Ethereum và các chuỗi tương thích EVM. Ngôn ngữ này cú pháp gần giống JavaScript và C++, được phát triển bởi các nhà nghiên cứu Ethereum và giờ là tiêu chuẩn để xây dựng ứng dụng phi tập trung như DEX, NFT, DAO và các chuỗi tiền ổn định.
Một hợp đồng Solidity gồm ba phần chính: state variables (dữ liệu lưu trên blockchain), functions (logic xử lý), và events (ghi log khi có hành động xảy ra). Khi người dùng gọi một hàm, Máy ảo Ethereum (EVM) thực thi bytecode đã được biên dịch từ mã Solidity, và mỗi thao tác đều bị tính phí gas. Tài liệu chính thức của dự án nằm tại docs.soliditylang.org.
Cấu trúc cơ bản của một hợp đồng Solidity
Mỗi tệp Solidity bắt đầu bằng chỉ thị pragma solidity để khai báo phiên bản compiler, sau đó là từ khóa contract để định nghĩa hợp đồng. Dưới đây là ví dụ lưu trữ một số nguyên đơn giản:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SimpleStorage {
uint256 public storedData;
function set(uint256 x) public {
storedData = x;
}
function get() public view returns (uint256) {
return storedData;
}
}
Trong đoạn mã trên, storedData là biến trạng thái kiểu uint256 tức số nguyên không dấu 256 bit. Hàm set cập nhật giá trị, còn hàm get chỉ đọc nên không tốn gas nhờ từ khoá view. Từ khoá public khiến compiler tự sinh ra hàm getter cho biến.

Khác với C++, khai báo this bên trong hợp đồng thay đổi hoàn toàn hành vi truy cập biến, nên người viết Solidity phải hiểu rõ phạm vi dữ liệu của từng hàm.
Kiểu dữ liệu và tính năng nổi bật
- Kiểu dữ liệu cơ bản: số nguyên không dấu và có dấu (
uint8đếnuint256,int256), kiểuaddress,bool,string,bytes. - Cấu trúc dữ liệu phức tạp:
struct,enumvàmapping(bảng băm khóa giá trị, dùng rất phổ biến cho sổ dư và quyền sở hữu). - Đơn vị dựng sẵn: có thể viết
1 etherhay1 gweiđể chia nhỏ giá trị mà không cần tự tính toán. - Biến toàn cục:
msg.sender(địa chỉ người gọi),msg.value(lượng wei đi kèm),block.timestamp(thời gian khối hiện tại). - Điều khiển luồng:
if/else,for,while,try/catch. - Xử lý lỗi:
requiredùng cho điều kiện đầu vào,reverthoàn tác toàn bộ thay đổi trạng thái,assertcho lỗi nội bộ.
Từ phiên bản 0.8.0 trở đi, trình biên dịch tự động phát hiện tràn số khi cộng, trừ hoặc nhân, nên lỗi overflow kinh điển đã được xử lý tận gốc.
Các mẫu hợp đồng thông minh phổ biến

Token ERC-20
ERC-20 là tiêu chuẩn token phổ biến nhất trên Ethereum, dùng cho các đồng coin gốc và stablecoin. Hợp đồng cần một mapping số dư, hai sự kiện Transfer và Approval, cùng ba hàm chính transfer, approve và transferFrom. Chi tiết kỹ thuật được đặc tả trong EIP-20.
Token NFT ERC-721 và ERC-1155
ERC-721 đại diện cho mỗi token là duy nhất, phù hợp với tác phẩm nghệ thuật số hoặc quyền truy cập. ERC-1155 cho phép gộp nhiều loại token trong cùng một hợp đồng, tiết kiệm phí triển khai khi phát hành hàng loạt.
Hợp đồng quản lý vault và staking
Các giao thức DeFi như Compound hay Aave dùng hợp đồng quản lý tài sản để theo dõi tiền gửi, tính lãi suất và phân phối phần thưởng. Người dùng gửi tài sản vào hợp đồng vault bằng cách gọi hàm deposit và nhận lại bằng withdraw.
Công cụ phát triển hợp đồng thông minh
- Foundry: bộ công cụ viết bằng Rust, biên dịch cực nhanh và có trình kiểm thử tích hợp sẵn.
- Hardhat: môi trường phát triển Node phổ biến, hỗ trợ mô phỏng mainnet và debug từng dòng lệnh.
- Remix IDE: trình biên tập chạy trên trình duyệt, không cần cài đặt, phù hợp để học nhanh.
- Truffle: framework có hệ thống migration và test tích hợp.
- Slither: phân tích tĩnh phát hiện lỗ hổng trước khi triển khai.
- OpenZeppelin Contracts: thư viện hợp đồng chuẩn đã được kiểm toán, nên dùng thay vì tự viết lại từ đầu.
Lưu ý bảo mật thường gặp
Reentrancy là lỗ hổng nổi tiếng khiến hợp đồng bị gọi lặp lại trước khi cập nhật trạng thái, từng gây thiệt hại lớn cho một DAO. Ngoài ra còn có front-running, kiểm tra số dư sai thứ tự, rò rỉ khóa riêng tư khi vô tình dùng chức năng nhận ether, và các lỗi tràn số ở phiên bản cũ. Cách phòng tránh hiệu quả nhất là bám sát thư viện đã kiểm toán, viết test thuộc tính và chạy kiểm toán độc lập trước khi xuất bản.
Tương lai của Solidity
Các phiên bản 0.8.x gần đây bổ sung custom errors giúp giảm chi phí triển khai, biến immutable và constant cho biến trạng thái, cùng trình kiểm định hình thức SMT checker tích hợp sẵn. Ngôn ngữ Yul – lớp trung gian giữa Solidity và bytecode – cũng được tối ưu để viết thủ công đoạn mã tiết kiệm khí. Với nhu cầu DeFi, NFT và game on-chain tiếp tục tăng, Solidity vẫn giữ vai trò nền tảng cho mọi dự án blockchain.
