Muốn trở thành Blockchain Developer thì chắc chắn bạn không thể bỏ qua ngôn ngữ lập trình Solidity.
Hàng năm, thế giới chi hàng tỷ đô la cho các giải pháp blockchain. Nhiều trong số các giải pháp này được tạo ra bằng cách sử dụng ngôn ngữ Solidity.
Nhu cầu thị trường về mảng lập trình Smart Contract tại Việt Nam cũng đang tăng rất mạnh.
Dạo một vòng các trang tuyển dụng ở Việt Nam, ta có thể dễ dàng thấy mức lương cho một Blockchain Developer khá là hấp dẫn.
Theo thống kê của 200Lab, mức lương có thể dao động từ $2000 - $4000/tháng (chưa bao gồm Token thưởng).
Vậy thì ngôn ngữ lập trình Solidity là gì? Nó hoạt động như thế nào? Làm sao để bắt đầu làm việc với nó? Liệu có nên đầu tư để học nó ngay bây giờ hay không?
Cùng đọc tiếp bài viết để trả lời những câu hỏi trên bạn nhé!
Ngôn ngữ lập trình Solidity là gì?
Solidity là một ngôn ngữ lập trình hướng đối tượng, high-level, curly-bracket được phát triển bởi team Ethereum Network.
Ngôn ngữ này ra đời nhằm để xây dựng và thiết kế các Smart Contracts (hợp đồng thông minh) trên các nền tảng của blockchain.
Nó có rất nhiều điểm tương đồng với C và C ++. Solidity khá đơn giản để học và dễ hiểu. Ví dụ: main
trong C tương đương với contract
trong Solidity.
Giống như các ngôn ngữ lập trình khác, Solidity cũng có biến, hàm, classes, Toán tử số học, thao tác chuỗi và nhiều khái niệm khác.
Sự ra đời của ngôn ngữ Solidity
Solidity là một ngôn ngữ tương đối mới và nó có sự phát triển tương đối nhanh chóng
Gavin Wood - một software developer người anh, đã bắt đầu phát triển ngôn ngữ lập trình Solidity vào năm 2014. Sau này, việc phát triển được hoàn thành bởi team Solidity của Ethereum.
Dự án được dẫn dắt bởi Christian Reitwiessner cùng với Alex Beregszaszi, Liana Husikyan, và Yoichi Hirai.
Solidity hoạt động như thế nào?
Solidity được dùng để xây dựng và thiết kế các Smart Contract.
Các đoạn code solidity sẽ được compile sang Ethereum Bytecodes và được EVM thực thi thành các ứng dụng chạy trên Ethereum.
EVM là từ viết tắt của Ethereum Virtual Machine. Nó cung cấp một môi trường runtime cho Ethereum smart contracts.
Smart contracts cho phép bạn tiến hành các giao dịch đáng tin cậy mà không cần có sự tham gia của bên thứ ba. Các giao dịch này là có thể dễ dàng truy vết và không thể đảo ngược được.
Ngôn ngữ lập trình thường được sử dụng để tạo và viết các hợp đồng thông minh là Serpent, Solidity, Mutan và LLL.
Một số nền tảng blockchain có hỗ trợ Solidity:
- Ethereum
- Binance Smart Chain
- Ethereum Classic
- Tron
- Hedera Hashgraph
- Avalanche
Public và Private functions của Solidity
Public functions tương tự như các APIs mà bất kỳ ai trên thế giới đều có thể truy cập được. Bất kỳ ai cũng có thể gọi được các APIs này.
Ví dụ, một public function có thể được thực hiện để cho phép tất cả người dùng của một nền tảng kiểm tra số dư tài khoản của họ. Một trong những cách phổ biến nhất để khai thác smart contracts đó là thông qua public functions.
Private functions chỉ được gọi từ bên trong các hợp đồng. Chúng chứa các hướng dẫn chỉ có thể được thực thi sau khi được gọi bởi các hàm khác trong một chain.
Các tiêu chuẩn và code logic trong Solidity
Các tiêu chuẩn về cách Solidity Smart Contract được sử dụng để build ứng dụng trên Ethereum dần được xác định. Những tiêu chuẩn này được biết với cái tên là tiêu chuẩn ERC (Ethereum Request for Comments).
Các tiêu chuẩn ERC bao gồm:
- ERC20
- ERC165
- ERC721
- ERC223
- ERC621
- ERC777
- ERC827
- ERC884
- ERC865
- ERC1155
Gas Costs
Khi sử dụng Solidity trên Ethereum mainnet sẽ phát sinh thêm một số chi phí. Chi phí này dựa trên hệ thống gas trên Ethereum.
Nó được dùng thanh toán cho các miner, để họ có thể thức hiện các phương thức nhằm đảm bảo code có thể chạy an toàn trên mạng blockchain network.
Khi viết smart contract, bạn hãy nhớ rằng gas cost có thể ảnh hưởng đến hiệu năng của Smart Contract.
Phí Gas được trả cho mỗi slot dung lượng lưu trữ thế nên mỗi hoạt động thực thi code Solidity đều tốn phí.
Một smart contract mà tốn quá nhiều phí gas để chạy thì khó có thể sử dụng về lâu dài.
Tối ưu hóa Gas giúp giảm chi phí khi Solidity code được thực thi. Một vài phương thức quan trọng nhất để tối ưu đó chính là hãy sử dụng các thư viện có sẵn và dùng ít các hàm hơn.
Thay vì thêm các bytecode không cần thiết vào smart contract thì bạn có thể đưa các logic đó vào thư viện. Điều này giúp smart contract có size nhỏ hơn.
Bạn có thể đọc thêm bài viết về Gas fee và đơn vị tính trong ethereum của 200Lab
Data types của ngôn ngữ lập trình Solidity
Ngôn ngữ Solidity hỗ trợ hầu hết các Data types thường thấy trong các ngôn ngữ hướng đối tượng khác như là:
- Boolean - Kiểu dữ liệu Boolean trả về ‘1 'khi điều kiện là đúng và‘ 0' khi sai, tùy thuộc vào trạng thái của điều kiện.
- Integer - bạn có thể sign hoặc unsign các giá trị integer trong Solidity. Nó cũng hỗ trợ các runtime exceptions và từ khóa “uint8” và “uint256”
- String - kiểu dữ liệu dạng chuỗi
- Modifier - Trước khi thực thi các đoạn code của smart contract, một modifier thường kiểm tra xem bất kỳ điều kiện nào có hợp lý hay không
- Array - Syntax của lập trình Solidity cũng giống như các ngôn ngữ OOP khác và nó hỗ trợ cả array đơn và array đa chiều.
Ngoài ra, lập trình Sollity cho phép bạn "map" các cấu trúc dữ liệu với các enum, toán tử và giá trị hash để trả về các giá trị được lưu trữ ở các vị trí lưu trữ cụ thể.
Bắt đầu lập trình với ngôn ngữ Solidity
Version Pragma
pragma solidity >=0.4.16 <0.7.0;
Pragmas là chỉ thị cho trình biên dịch về cách xử lý code. Mỗi dòng source code solidity nên bắt đầu bằng "phiên bản pragma", trong đó chỉ định phiên bản nào của trình biên dịch solidity để sử dụng.
Điều này ngăn đoan code không tương thích với các phiên bản trình biên dịch trong tương lai có thể giới thiệu các thay đổi.
The contract keyword
contract Test{//Functions and Data}
Contract keyword khai báo một contract đóng gói đoạn code
State/ Declare Variables
uint public var1;
uint public var2;
uint public sum;
Biến state được viết trên Ethereum Blockchain và được duy trì vĩnh viễn trong lưu trữ hợp đồng
Dòng uint public var1 khai báo một biến state của kiểu uint có tên var1 (unsigned integer of 256 bits), nó tương tự việc thêm một slot trong database.
Hàm khai báo
function set(uint a, uint b) public
function get() public view returns (uint)
Đây là một hàm có tên "set" của kiểu access modifier. Nó lấy một biến a và biến b của kiểu dữ liệu uint làm tham số.
Đây là một ví dụ về một hợp đồng thông minh đơn giản cập nhật giá trị của var1 và var2. Bất cứ ai có quyền truy cập vào blockchain Ethereum đều có thể sử dụng hàm set để thay đổi giá trị của var1 và var2.
Bằng cách thêm các giá trị của các biến var1 và var2, nó có thể tính toán tổng biến.
Nó sẽ truy xuất và in giá trị của tổng biến state bằng cách sử dụng hàm "get".
Thực thi code Solidity như thế nào?
Bạn có thể thực thi chương trình Solidity bằng 2 cách là offline mode và online mode
Offline Mode
Để vận hành một Solidity Smart Contract ở chế độ offline, cần phải đáp ứng ba điều kiện và tuân theo bốn hành động cần thiết sau:
Điều kiện:
- Download và install node.js.
- Install Truffle globally.
- Install ganache-cli.
Hành động:
- Tạo một truffle project và set up một development network cho nó
- Develop and deploy một smart contract
- Tương tác với smart contract từ Truffle console
- Tạo những bài test để đánh giá những tính năng chính của Solidity
Online mode
Trong chế độ online, Remix IDE thường được sử dụng để biên dịch và chạy các Solidity smart contract.
Một số IDE platforms hỗ trợ Solidity:
- Truffle
- Hardhat
- Microsoft Visual Studio
- Microsoft Visual Studio Code
- Tendermint on Microsoft Azure
Ưu điểm của ngôn ngữ lập trình Solidity
Ngoài những tình năng chính kể trên, ngôn ngữ lập trình solidity còn có nhiều điểm cộng khác so với các ngôn ngữ lập trình dựa trên Ethereum.
Ngoài các kiểu dữ liệu cơ bản, ngôn ngữ lập trình Solidity cũng chấp nhận các kiểu dữ liệu phức tạp và các biến thành viên.
Nó cung cấp một Application Binary Interface (ABI) để cho phép type safety. Nếu trình biên dịch phát hiện sự không phù hợp kiểu dữ liệu cho bất kỳ biến nào, ABI sẽ tạo một error.
Solidity có 'Natural Language Specification', được sử dụng để biến các thông số kỹ thuật tập trung vào người dùng thành ngôn ngữ mà máy móc có thể hiểu.
Solidity là ngôn ngữ lập trình bậc cao (high-level programming language) cho nên rất dễ đọc, dễ hiểu.
Ngôn ngữ lập trình bậc cao là một ngôn ngữ đã định sẵn cho chúng ta các biến, các kiểu dữ liệu, class để chúng ta dễ dàng lập trình hơn thay vì phải viết khá là nhiều thứ.
Các dev có kinh nghiệm với java hoặc javascript sẽ thấy rất dễ tiếp cận với ngôn ngữ này.
Vì Blockchain nói chung và Ethereum nói riêng đang ngày càng lớn mạnh cho nên nguồn tài liệu, source code demo rất nhiều và đa dạng các use cases để mọi người có thể tham khảo thêm.
Điểm hạn chế của Solidity
Tuy vậy, bất kỳ ngôn ngữ nào cũng có những điểm hạn chế riêng, Solidity cũng không phải là một ngoài lệ.
Sau khi deploy smart contract, các đoạn code Solidity không thể nâng cấp, chỉnh sửa hay bổ sung thêm được gì cả. Thế nên bạn cần kiểm tra thật kỹ lưỡng mọi thứ trước khi deploy lên mainnet.
Solidity vẫn là một ngôn ngữ “non trẻ” so với các ngôn ngữ lâu đời như C hoặc Java. Điều đó dẫn đến việc trong một số trường hợp, nó sẽ không có nhiều thư viện thỏa nhu cầu sử dụng của bạn.
Lời Kết
Công nghệ Blockchain sẽ dần cách mạng hóa các ngành công nghiệp khác trong tương lai. Ngành blockchain developer sẽ trở nên rất cần thiết và nó chỉ mới thực sự nở rộ trong khoảng 1,2 năm gần đây. Do đó, về nhân lực, nguồn cầu lớn hơn cung rất nhiều thế nên cơ hội đang chia đều cho tất cả mọi người.
Để nắm bắt tốt cơ hội trong mảng lập trình blockchain thì lập trình ngôn ngữ Solidity là thứ cơ bản nhất bạn cần phải biết.
Bạn có thể theo dõi tiếp các bài viết về lập trình blockchain tại trang blog và kênh youtube của 200Lab.
Còn nếu bạn muốn đào sâu vào những kiến thức lập trình smart contract và có định hướng dấn thân trở thành Blockchain Developer thì hãy tham khảo Bộ khóa học lập trình Blockchain Smart Contract của 200Lab nhé!
Bài viết liên quan
Web2 là gì? Web3 là gì? So sánh Web 2.0 & Web 3.0
Sep 25, 2023 • 10 min read
DeFi là gì? Tìm hiểu về Tài Chính Phi Tập Trung
Sep 08, 2023 • 13 min read
STO là gì? Kiến thức cơ bản về Security Token Offering
Sep 08, 2023 • 15 min read
Ví Bitcoin là gì? 9 ví Bitcoin hàng đầu bạn cần biết
Sep 02, 2023 • 11 min read
Blockchain là gì? Ưu & nhược điểm của các ứng dụng Blockchain
Aug 23, 2023 • 17 min read
DAPP LÀ GÌ? DAPP HAY NHƯNG CÓ HOÀN HẢO
Apr 06, 2023 • 8 min read