Solidity là gì? Một ngôn ngữ lập trình hợp đồng thông minh.
Chỉ một dòng mã Solidity bất cẩn đã từng trao cho kẻ tấn công 3,6 triệu ETH. Đoạn mã đã thực hiện chính xác những gì nó được yêu cầu. Đó là điều đáng lo ngại. Solidity là ngôn ngữ chuyển tiền. Mã nguồn của nó thường nằm ngay trước mắt mọi người. Và một khi hợp đồng đã được kích hoạt, sẽ không có bản vá lỗi nào được thực thi một cách âm thầm — lỗi vẫn còn đó, tiền vẫn bị lộ, và cả thế giới đều có thể đọc được cả hai. Nó là ngôn ngữ lập trình thống trị để viết hợp đồng thông minh trên Ethereum và mọi blockchain EVM khác. Bỏ qua thuật ngữ chuyên ngành, hầu hết DeFi và NFT đều được xây dựng bằng Solidity. Mạnh mẽ. Nhưng cũng không khoan nhượng. Dưới đây là những gì Solidity thể hiện, cách mã nguồn thực sự hoạt động, một hợp đồng đầu tiên trông như thế nào, và tại sao vấn đề bảo mật luôn được đặt lên hàng đầu.
Solidity là gì?
Mọi hướng dẫn đều nói cùng một điều: Solidity là ngôn ngữ cấp cao dành cho hợp đồng thông minh. Được thôi. Điều đó hầu như không giúp ích gì cho bạn. Nhưng nó là loại ngôn ngữ nào? Kiểu tĩnh. Hướng đối tượng. Dấu ngoặc nhọn và dấu chấm phẩy, cú pháp được mượn từ JavaScript, C++ và Python. Nếu bạn đã từng viết mã bằng bất kỳ ngôn ngữ nào trong số đó, thì việc đọc một tập tin `.sol` sẽ trở nên quen thuộc chỉ sau khoảng mười phút.
Gavin Wood đã phác thảo nó vào năm 2014, với sự trợ giúp của một nhóm nhỏ Ethereum bao gồm Christian Reitwiessner. Mục tiêu rất rõ ràng: cho phép mọi người viết hợp đồng thông minh cho một blockchain công khai. Đơn vị cốt lõi của nó là "hợp đồng". Hãy coi nó như một "lớp" tồn tại trên chuỗi - nó lưu giữ trạng thái, cung cấp các chức năng, kế thừa từ các lớp khác. Điểm mấu chốt nằm ở nơi nó hoạt động. Biên dịch nó thành mã byte, và cùng một hợp đồng sẽ được thực thi giống hệt nhau trên mọi nút trên một mạng lưới phi tập trung, tất cả chúng đều kiểm tra lẫn nhau. Yêu cầu duy nhất đó giải thích tại sao Solidity lại có cảm giác bị bó buộc như vậy.
| Độ bền tổng thể | |
|---|---|
| Lần đầu tiên phát hành | 2014 |
| Nhà thiết kế chính | Gavin Wood (Ethereum) |
| Mô hình | Hướng đối tượng, hướng hợp đồng |
| Đánh máy | Tĩnh |
| Biên dịch thành | Mã bytecode EVM |
| Trình biên dịch mới nhất | v0.8.35 (Tháng 4 năm 2026) |
| Phần mở rộng tệp | .sol |
Cách thức hoạt động của Solidity: Từ mã nguồn đến máy ảo EVM
Điều thú vị ở Solidity không phải là cú pháp, mà là quy trình xử lý. Mã dễ đọc trở thành thứ mà hàng ngàn máy tính đồng ý chạy theo cùng một cách. Tính xác định là điểm mấu chốt. Nếu hai nút chạy cùng một hợp đồng và nhận được các câu trả lời khác nhau, mạng lưới không thể thống nhất về số dư của bất kỳ ai. Yêu cầu duy nhất đó giải thích nhiều hạn chế kỳ lạ của ngôn ngữ này: không thể lấy số ngẫu nhiên, không thể gọi API web bên ngoài giữa chừng quá trình thực thi. Mọi thứ phải có thể tái tạo được từ chính chuỗi khối.
Trình biên dịch và mã bytecode
Bạn viết một tập tin `.sol`, dễ đọc và ở cấp độ cao. Trình biên dịch Solidity, `solc`, sẽ chuyển nó thành mã bytecode EVM, một chuỗi dài các thao tác cấp thấp, cộng với một ABI liệt kê các chức năng của hợp đồng. Mã bytecode này là thứ được đưa lên chuỗi khối. Không ai đọc nó bằng tay. Nó là mục tiêu của máy, giống như cách mã C được chuyển đổi thành mã assembly.
EVM và khí đốt
Máy ảo Ethereum (EVM) chạy đoạn mã bytecode đó. Mỗi node Ethereum đều có một VMV. Mỗi thao tác nó thực hiện đều tốn gas, một khoản phí được trả bằng ETH. Gas không phải là chi tiết nhỏ. Đó là cách mạng lưới định giá việc tính toán và tự bảo vệ mình: một vòng lặp mất kiểm soát không làm đóng băng chuỗi — nó chỉ đốt hết gas của người gửi và quay trở lại trạng thái ban đầu. Solidity tốt sẽ giữ mức gas thấp.
ABI
ABI, hay Giao diện nhị phân ứng dụng, là bản đồ JSON mô tả cách thức giao tiếp với một hợp đồng đã được triển khai. Một ví điện tử như MetaMask, hoặc một ứng dụng phi tập trung (dApp) ở giao diện người dùng, sử dụng ABI để mã hóa một lệnh gọi hàm thành định dạng mà EVM mong đợi, sau đó giải mã bất kỳ dữ liệu nào trả về. Hãy coi ABI như một cây cầu nối giữa giao diện mà người dùng nhìn thấy và hợp đồng nằm ở một địa chỉ trên blockchain.

Viết hợp đồng thông minh Solidity đầu tiên của bạn
Đủ lý thuyết rồi. Cách nhanh nhất để hiểu Solidity là đọc một hợp đồng nhỏ và nhận biết các thành phần của nó.
Cấu trúc của một hợp đồng
```độ bền
// SPDX-Mã định danh giấy phép: MIT
pragma solidity ^0.8.20;
Bộ đếm hợp đồng {
uint256 public count;
event Incremented(uint256 newCount);
function increment() public {
count += 1;
emit Incremented(count);
}
}
```
Một vài thành phần cấu thành toàn bộ hệ thống. Dòng lệnh `pragma` cố định phiên bản trình biên dịch, do đó một phiên bản không tương thích sẽ không thể tự động biên dịch lại mã của bạn. `contract Counter` mở hợp đồng, giống như mở một lớp. `count` là một biến trạng thái, được lưu trữ vĩnh viễn trên chuỗi. `increment()` là một hàm công khai mà bất kỳ ai cũng có thể gọi. `event Incremented` ghi lại mỗi thay đổi để các ứng dụng ngoài chuỗi có thể phản ứng. Mã hướng đối tượng, với blockchain hỗ trợ bên dưới.
Những công cụ bạn thực sự sử dụng
Bạn không cần cài đặt gì cả để bắt đầu. Remix là một IDE trên trình duyệt: viết, biên dịch và triển khai Solidity chỉ với vài cú nhấp chuột, điều này khiến nó trở thành nơi lý tưởng để học Solidity. Các dự án thực tế chuyển sang sử dụng các framework cục bộ. Hardhat và Foundry xử lý việc biên dịch, kiểm thử và triển khai một cách bài bản. Và hầu hết mọi người đều dựa vào OpenZeppelin, một thư viện các hợp đồng đã được kiểm định và có thể tái sử dụng cho token và kiểm soát truy cập, thay vì phải tự viết lại mã nguồn đầy rủi ro từ đầu.
Từ mã nguồn đến địa chỉ thực tế
Triển khai nghĩa là gửi mã bytecode đã biên dịch trong một giao dịch. Hãy thử nghiệm trên mạng thử nghiệm miễn phí trước. Sepolia thường là lựa chọn hàng đầu. Kết nối ví điện tử như MetaMask. Chỉ đẩy lên mạng chính khi hợp đồng hoạt động ổn định. Việc triển khai cũng tốn phí gas, được thanh toán bằng ETH thật. Và đây là điều đáng ghi nhớ: một khi đã được triển khai, mã nguồn sẽ không thể thay đổi. Bạn không thể chỉnh sửa hợp đồng đang hoạt động. Chính điều đó — hơn bất kỳ lỗi cú pháp nào — là lý do tại sao phần tiếp theo tồn tại.
Những blockchain nào hỗ trợ Solidity?
Solidity đã không còn là "ngôn ngữ của Ethereum" từ nhiều năm trước. Rất nhiều mạng lưới đã áp dụng EVM để tái sử dụng các công cụ của Ethereum đến nỗi Solidity trở thành ngôn ngữ chung của cả một gia đình chuỗi. ChainList theo dõi hơn 385 chuỗi khối tương thích với EVM trong 2026. Tất cả các tên tuổi lớn đều đủ điều kiện: Polygon, BNB Chain, Arbitrum , Base và Avalanche, tất cả đều chạy cùng một mã bytecode mà tệp `.sol` của bạn biên dịch ra.
Ethereum vẫn là trung tâm của mọi hoạt động. Theo DeFiLlama , tổng giá trị bị khóa của nó lên tới khoảng 45 tỷ đô la, hơn một nửa tổng giá trị của DeFi. Và hoạt động trên nền tảng này đang ngày càng tăng: theo thống kê của Token Terminal, chỉ riêng trong quý 4 năm 2025 đã có khoảng 8,7 triệu hợp đồng thông minh mới được triển khai. Đối với các nhà phát triển, phạm vi hoạt động rộng lớn này chính là lý do thực sự để lựa chọn Solidity thay vì một ngôn ngữ chỉ gắn liền với một chuỗi khối duy nhất.
Vậy những gì được xây dựng bằng Solidity? Hầu hết mọi loại ứng dụng phi tập trung mà bạn từng nghe đến. Các giao thức cho vay và giao dịch DeFi. Các hợp đồng ERC-20 đằng sau hầu hết các token, các hợp đồng ERC-721 đằng sau NFT. Các DAO mã hóa các quy tắc bỏ phiếu của họ bằng Solidity. Stablecoin quản lý nguồn cung bằng nó. Các trò chơi trên chuỗi giữ logic của chúng ở đó. Khi một dự án nói rằng nó "trên Ethereum", gần như chắc chắn ai đó đã viết và triển khai Solidity.
Vì sao bảo mật hợp đồng thông minh Solidity lại khó khăn
Những đặc tính làm cho Solidity mạnh mẽ cũng chính là những đặc tính khiến lỗi của nó trở nên đắt đỏ. Mã nguồn chứa tiền. Mã nguồn thường được công khai. Nó không thể được vá lỗi. Kẻ tấn công có thể đọc hợp đồng của bạn một cách thoải mái, và tiền nằm ngay tại địa chỉ đó. Đây không phải là ngôn ngữ để làm việc nhanh chóng và phá vỡ mọi thứ. Tôi chưa từng làm việc với phần mềm nào mà khoảng cách giữa "nó biên dịch được" và "nó an toàn" lại lớn đến vậy.
Khả năng tái nhập và vụ tấn công DAO
Lỗ hổng bảo mật điển hình trong Solidity là khả năng tái nhập (reentrancy). Một hợp đồng gửi ETH đến một địa chỉ bên ngoài trước khi cập nhật số dư nội bộ của chính nó, và hợp đồng nhận lại gọi đến để rút tiền, lặp đi lặp lại, trước khi cuộc gọi đầu tiên hoàn tất. Vào tháng 6 năm 2016, chính lỗi này đã làm mất khoảng 3,6 triệu ETH, trị giá khoảng 60 triệu đô la vào thời điểm đó, từ The DAO . Hậu quả là Ethereum bị chia tách thành ETH và Ethereum Classic, một chuỗi vẫn đang được giao dịch cho đến ngày nay. Và giải pháp khắc phục? Gần như quá đơn giản. Cập nhật trạng thái trước, gửi tiền sau. Mô hình này thậm chí còn có tên: kiểm tra-tác động-tương tác (checks-effects-interactions).
Tràn số nguyên và SafeMath
Trước phiên bản Solidity 0.8, phép toán số học có thể âm thầm bị tràn. Cộng 1 vào giá trị tối đa của kiểu dữ liệu `uint256` sẽ làm tròn về 0, điều mà kẻ tấn công đã lợi dụng để tạo ra số dư token khổng lồ, như trong vụ BeautyChain (BEC) năm 2018. Trong nhiều năm, các nhà phát triển đã phòng ngừa điều này bằng một thư viện có tên SafeMath, từng là một trong những tệp được nhập nhiều nhất trong toàn bộ ngôn ngữ Solidity. Sau đó, phiên bản 0.8 đã tích hợp các kiểm tra tràn và thiếu số vào chính ngôn ngữ. Lỗi toán học phổ biến nhất hiện nay được tự động khắc phục, không cần thêm thư viện nào.
Kiểm toán và chi phí của chúng
Vì sai lầm là vĩnh viễn, các dự án nghiêm túc đều trả phí cho việc kiểm toán. Họ xây dựng dựa trên các thành phần đã được kiểm toán của OpenZeppelin và sau đó thuê các công ty để kiểm toán toàn bộ hệ thống. Theo dữ liệu thị trường từ Sherlock , một cuộc kiểm toán hợp đồng thông minh chuyên nghiệp thường có giá từ 25.000 đô la đến hơn 100.000 đô la cho một giao thức DeFi, và các cuộc kiểm toán Solidity thường rẻ hơn từ 25 đến 40% so với các cuộc kiểm toán Rust tương đương đơn giản vì nguồn nhân lực dồi dào hơn. Các công ty tốt cũng thường kín lịch. Một giao thức quy mô trung bình có thể phải chờ đợi hàng tuần để có được một suất, rồi lại chờ thêm vài tuần nữa để nhận báo cáo. Tất cả những điều này đều không nhanh chóng và không có gì là tùy chọn.
| Lỗ hổng | Điều gì đã xảy ra sai? | Vụ án nổi tiếng | Sửa chữa |
|---|---|---|---|
| Tái nhập cảnh | Cuộc gọi bên ngoài được thực hiện lại trước khi trạng thái được cập nhật. | DAO, 2016 | Kiểm tra - tác động - tương tác |
| Tràn số nguyên | Phép toán số học vượt quá giới hạn của nó | BeautyChain (BEC), 2018 | Kiểm tra tích hợp sẵn (Solidity 0.8 trở lên) |
| Kiểm soát truy cập | Bất kỳ ai cũng có thể gọi một hàm có quyền ưu tiên. | Nhiều | `onlyOwner` / vai trò bảo vệ |
| Các cuộc gọi bên ngoài không được kiểm tra | Cuộc gọi thất bại bị bỏ qua, logic tiếp tục. | Nhiều | Xác thực giá trị trả về |
Tin tốt là thiệt hại đang giảm dần. Theo Immunefi , tổn thất tiền điện tử do các cuộc tấn công nhắm vào DeFi đã giảm xuống còn khoảng 680 triệu đô la vào năm 2025, giảm khoảng 74% so với mức đỉnh 2,62 tỷ đô la vào năm 2022. Một phần lý do là nhờ các công cụ tốt hơn và các bước kiểm tra bảo mật được tích hợp sẵn trong trình biên dịch.

So sánh Solidity với các ngôn ngữ hợp đồng thông minh khác
Solidity có đối thủ. Thậm chí nó còn không phải là ngôn ngữ an toàn nhất. Vyper tối giản và giống Python, được lược bỏ bớt các chi tiết để giảm thiểu rủi ro; Curve cũng chạy trên nền tảng này. Rust cung cấp sức mạnh cho các hợp đồng trên Solana và NEAR, an toàn hơn ở một số khía cạnh, nhưng khó học hơn và tốn kém hơn khi kiểm toán. Vậy tại sao Solidity vẫn thắng? Không phải do thiết kế ngôn ngữ. Mà là do hiệu ứng mạng lưới. Bộ công cụ mạnh mẽ nhất, các thư viện được kiểm toán nhiều nhất, toàn bộ hệ sinh thái EVM gồm các chuỗi và ví điện tử, tất cả đều đã được viết bằng Solidity.
| Ngôn ngữ | Chuỗi | Cơ sở cú pháp | Tốt nhất cho | Sự đánh đổi |
|---|---|---|---|---|
| Độ bền | Ethereum + tất cả EVM | JavaScript/C++ | Tầm với tối đa, công cụ hoàn thiện. | Dễ dàng viết mã không an toàn |
| Vyper | EVM | Python | Hợp đồng đơn giản, quan trọng về mặt an toàn | Ít tính năng hơn, cộng đồng nhỏ hơn |
| Gỉ sét | Solana, GẦN | Gỉ sét | Hiệu năng cao, độ an toàn vượt trội | Đường cong dốc, chi phí kiểm toán cao hơn |
Nếu bạn muốn triển khai sản phẩm ở nơi người dùng và nguồn tiền đã có sẵn, Solidity là lựa chọn thực tế và mặc định, ngay cả khi một đối thủ cạnh tranh về mặt kỹ thuật an toàn hơn.
Bạn có nên học lập trình Solidity trong 2026?
Sự thổi phồng đầu cơ xung quanh tiền điện tử đã lắng xuống, nhưng nhu cầu về những người có thể viết mã Solidity chính xác thì không. Theo thống kê của Electric Capital , Ethereum đã có thêm khoảng 16.181 nhà phát triển mới từ tháng 1 đến tháng 9 năm 2025, và khoảng 74% tổng số nhà phát triển đa chuỗi làm việc trên các chuỗi EVM. Đó là nơi có công việc được trả lương cao và các thư viện có thể tái sử dụng.
Một lộ trình hợp lý để học lập trình Solidity: bắt đầu với Remix, đọc tài liệu chính thức của Solidity, sau đó nghiên cứu các hợp đồng của OpenZeppelin để hiểu cách các chuyên gia cấu trúc token và kiểm soát truy cập. Triển khai các dự án nhỏ lên mạng thử nghiệm cho đến khi bạn cảm thấy các mô hình bảo mật trở nên tự động chứ không phải là học thuộc lòng. Kỹ năng hiếm có không phải là viết mã Solidity biên dịch được; rất nhiều người có thể làm được điều đó. Điều mà một nhà phát triển Solidity thực sự được trả tiền là viết mã có thể tồn tại trước sự tấn công của kẻ thù — người đã đọc hợp đồng của bạn và có tiền đặt cược.
Vì sao Solidity vẫn là ngôn ngữ mặc định?
Solidity là ngôn ngữ mặc định vì một lý do cụ thể, không phải do sự cường điệu. Nó có mặt trên mọi chuỗi EVM. Nó sở hữu bộ công cụ phong phú nhất. Nó là nền tảng của hầu hết các ứng dụng DeFi và NFT. Nhưng điều đầu tiên cần nắm bắt không phải là cú pháp. Mà là: trên blockchain, mã được triển khai là luật, và lỗi sẽ tồn tại mãi mãi. Hãy học ngôn ngữ và các mô hình bảo mật cùng nhau, bởi vì hai điều này không thể tách rời. Bước tiếp theo chân thực rất đơn giản và miễn phí. Mở Remix, viết một hợp đồng mười dòng và triển khai nó lên mạng thử nghiệm trong tuần này.