, September 29, 2022

0 kết quả được tìm thấy

Solidity là gì? Bất kỳ Blockchain Developer nào cũng nên biết

  • Đăng bởi  Groot
  •  Jun 04, 2022

  •   10 min reads
Solidity là gì? Bất kỳ Blockchain Developer nào cũng nên biết

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 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.

Solidity hoạt động như thế nào?
Solidity hoạt động như thế nào?

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, MutanLLL.

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

Data types của Solidity
Data types của 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ửgiá trị hash để trả về các giá trị được lưu trữ ở các vị trí lưu trữ cụ thể.

Bạn có thể xem qua bài viết "Tìm hiểu kiểu dữ liệu cơ bản của ngôn ngữ Solidity" của 200Lab nhé!

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 modeonline 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:

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

Tìm hiểu kiểu dữ liệu Boolean trong Solidity

Trong bài viết này, mình sẽ cùng nhau đi tìm hiểu kiểu dữ liệu Boolean trong Solidity thông qua các demo cơ bản nhé!...

Tìm hiểu kiểu dữ liệu Boolean trong Solidity
Tìm hiểu kiểu dữ liệu (Unsigned) Integer trong Solidity

Trong bài viết này, mình sẽ cùng nhau đi tìm hiểu kiểu dữ liệu (Unsigned) Integer trong Solidity thông qua các demo cơ bản nhé!...

Tìm hiểu kiểu dữ liệu (Unsigned) Integer trong Solidity
Sự khác biệt giữa Blockchain vs Cryptocurrency (Tiền điện tử)

Blockchain và tiền điện tử là hai thuật ngữ thường được sử dụng để thay thế cho nhau. Tuy nhiên, sẽ có sự khác biệt lớn giữa hai điều này. Tiền điện tử là loại tiền kỹ thuật số sử dụng blockchain làm sổ cái để lưu trữ hồ sơ của các giao dịch tiền điện tử....

Sự khác biệt giữa Blockchain vs Cryptocurrency (Tiền điện tử)
13 projects giúp bạn trở thành master với Web3 và Blockchain - Từ cơ bản đến nâng cao

Sau đây là 13 projects giúp bạn xây dựng để nâng cấp kỹ năng Web3 và Blockchain cho dù bạn là người mới bắt đầu hay đã lập trình trước đó....

13 projects giúp bạn trở thành master với Web3 và Blockchain - Từ cơ bản đến nâng cao
Làm sao để trở thành Blockchain Developer?

Dể trở thành Blockchain Developer, thì việc biết tương tác với smart contract là chưa đủ, còn rất nhiều công việc khác mà một Blockchain Dev cần phải đảm nhận. Vậy những công việc khác đó là gì?...

Làm sao để trở thành Blockchain Developer?
You've successfully subscribed to 200Lab Blog
Great! Next, complete checkout for full access to 200Lab Blog
Xin chào mừng bạn đã quay trở lại
OK! Tài khoản của bạn đã kích hoạt thành công.
Success! Your billing info is updated.
Billing info update failed.
Your link has expired.