date
Aug 7, 2024
slug
solidity-101
status
Published
tags
Blockchain
summary
Solidity là ngôn ngữ chủ đạo trong việc phát triển smart contract trên Ethereum cũng như các nền tảng blockchain EVM khác. ài viết này sẽ giúp các bạn nắm bắt được những khái niệm cơ bản nhất của Solidity, làm nền tảng để tiếp cận các khái niệm nâng cao hơn ở phần sau.
type
Post
Nguồn dịch : Lê Thành Công
- Value Types
Các kiểu dữ liệu trong Solidity có thể chia thành 4 loại
- Value Type : Bao gồm Boolean, Integer, Address v.v... Các biến kiểu này được gán giá trị trực tiếp.
- Kiểu tham chiếu (Reference Type) : Gồm mảng và struct
- Ánh xạ (Mapping Type) : Mapping
- Hàm (Function Type)
- Function
<function name>
là tên của hàm(<parameter types>)
các tham số của hàm (kiểu dữ liệu và tên biến)[internal|external|public|private]
: Mức độ truy cập của hàm- public: có thể gọi hàm từ bất cứ đâu (giá trị mặc định)
- private: chỉ các hàm trong cùng contract mới gọi được (hàm trong contract kết thừa nó sẽ ko gọi được)
- internal: chỉ có thể gọi từ bên trong contract và các contract kế thừa nó.
- external: Chỉ có thể được gọi từ các contract khác. Nhưng cũng có thể gọi được từ trong contract với từ khoá this
[pure|view|payable]
: payable thêm vào cho các hàm có thể nhận ETH gửi vào. pure và view chúng ta sẽ nói kỹ hơn ở dưới[returns (<return types>)]
: Kiểu dữ liệu trả về, có thể thêm cả tên biến nữa
Để định nghĩa 1 hàm thì bắt đầu với từ khóa function
- Pure và view
- Giống nhau: Các hàm pure và view đều không mất phí gas khi gọi đến, vì chúng không làm thay đổi trạng thái của blockchain (thay đổi giá trị các biến trong smart contract)
- Khác: Hàm pure không đọc được giá trị các biến trong contract còn view thì có thể
- Return
returns
: ở cuối định nghĩa của hàm, xác định các kiểu dữ liệu trả về của hàm.return
: câu lệnh ở cuối thân hàm, trả về các giá trị.
- Data Storage
Kiểu dữ liệu tham chiếu (Reference types)
Kiểu dữ liệu tham chiếu không lưu trực tiếp giá trị của biến như các kiểu dữ liệu nguyên thủy (uint, bool, int, ...) mà chỉ chứa con trỏ trỏ đến vùng nhớ lưu trữ giá trị đó. Do đó, sẽ phát sinh vấn đề về cấp phát bộ nhớ ... mảng, struct, mapping là các kiểu dữ liệu tham chiếu trong Solidity.
Nơi lưu trữ các biến tham chiếu
Chúng ta có 3 từ khóa
storage
, memory
và calldata
. Phí gas sẽ khác nhau đối với từng nơi lưu trữ.Dữ liệu của một biến
storage
được lưu trữ trên blockchain (on-chain), nên sẽ tiêu tốn rất nhiều gas. Trong khi dữ liệu của các biến memory
và calldata được lưu trữ tạm thời trong bộ nhớ, tiêu thụ ít gas hơn.Các biến
memory
và calldata
đều không được lưu trữ on-chain mà chỉ được lưu trữ trên bộ nhớ tạm thời.. Sự khác nhau giữa chúng là biến memory
thay đổi được, còn calldata
thì không.