Lisk Smart Contract
Solidity Basics 01 - Global Variables

Biến toàn cục (Global Variables)

Thuộc tính Block và Transaction

  • blockhash(uint blockNumber) returns (bytes32): Lấy hash của block với số thứ tự cho trước (chỉ áp dụng cho 256 block gần nhất), nếu không sẽ trả về 0.
  • block.basefee (uint): Phí cơ bản của block hiện tại.
  • block.chainid (uint): Chain ID hiện tại.
  • block.coinbase (address payable): Địa chỉ của miner tạo block hiện tại.
  • block.gaslimit (uint): Giới hạn gas của block hiện tại.
  • block.number (uint): Số thứ tự của block hiện tại.
  • block.timestamp (uint): Thời gian tạo block hiện tại (tính bằng giây từ thời điểm Unix epoch).
  • gasleft() returns (uint256): Lượng gas còn lại trong quá trình thực thi.
  • msg.data (bytes calldata): Dữ liệu calldata đầy đủ của giao dịch/hàm gọi.
  • msg.sender (address): Địa chỉ gửi giao dịch hoặc gọi hàm (caller).
  • msg.sig (bytes4): 4 byte đầu tiên của calldata (dùng để xác định hàm gọi).
  • msg.value (uint): Số lượng wei được gửi kèm giao dịch/hàm gọi.
  • tx.gasprice (uint): Giá gas của giao dịch.
  • tx.origin (address): Địa chỉ gốc gửi giao dịch (toàn bộ chuỗi gọi).

Xử lý lỗi (Error handling)

  • assert(bool condition): Gây ra lỗi Panic và revert trạng thái nếu điều kiện không đúng (dùng cho lỗi nội bộ).
  • require(bool condition): Revert nếu điều kiện không đúng (dùng kiểm tra input hoặc tương tác bên ngoài).
  • require(bool condition, string memory message): Tương tự trên, nhưng có thêm thông báo lỗi.
  • revert(): Dừng thực thi và revert trạng thái.
  • revert(string memory reason): Dừng thực thi, revert trạng thái và trả về thông báo lỗi.

Các thuộc tính của kiểu Address (Members of Address Types)

  • <address>.balance (uint256): Số dư (wei) của địa chỉ.
  • <address>.code (bytes memory): Mã code tại địa chỉ (có thể rỗng).
  • <address>.codehash (bytes32): Hash của mã code tại địa chỉ.
  • <address payable>.transfer(uint256 amount): Gửi số wei đến địa chỉ, revert nếu thất bại, chỉ chuyển 2300 gas, không điều chỉnh được.
  • <address payable>.send(uint256 amount) returns (bool): Gửi số wei đến địa chỉ, trả về false nếu thất bại, chỉ chuyển 2300 gas, không điều chỉnh được.
  • <address>.call(bytes memory) returns (bool, bytes memory): Gọi hàm thấp cấp với payload, trả về trạng thái thành công và dữ liệu trả về, chuyển toàn bộ gas còn lại, có thể điều chỉnh.
  • <address>.delegatecall(bytes memory) returns (bool, bytes memory): Gọi DELEGATECALL thấp cấp, trả về trạng thái thành công và dữ liệu trả về, chuyển toàn bộ gas còn lại, có thể điều chỉnh.
  • <address>.staticcall(bytes memory) returns (bool, bytes memory): Gọi STATICCALL thấp cấp, trả về trạng thái thành công và dữ liệu trả về, chuyển toàn bộ gas còn lại, có thể điều chỉnh.

Từ khóa liên quan đến Contract (Contract-related keywords)

  • this: Đại diện cho contract hiện tại, có thể chuyển đổi thành địa chỉ.
  • super: Đại diện cho contract cha (trong kế thừa).
  • selfdestruct(address payable recipient): Hủy contract hiện tại, gửi toàn bộ số dư đến địa chỉ chỉ định và kết thúc thực thi. Lưu ý:
    • Hàm receive của contract nhận sẽ không được thực thi.
    • Contract chỉ thực sự bị hủy vào cuối transaction, nếu bị revert thì việc hủy cũng bị hoàn tác.