Khóa học blockchain

Kiểu Dữ Liệu Trong Solidity

0 phút đọc

Solidity là ngôn ngữ lập trình tĩnh được thiết kế đặc biệt cho việc phát triển Smart Contract trên Ethereum. Một trong những yếu tố cơ bản nhất khi làm việc với Solidity là hiểu biết về các kiểu dữ liệu mà ngôn ngữ này hỗ trợ. Dưới đây là một cái nhìn tổng quan về các kiểu dữ liệu chính trong Solidity và cách sử dụng chúng.

Kiểu Dữ Liệu Nguyên Thủy

1. Boolean

Kiểu bool đại diện cho giá trị đúng hoặc sai. Các phép toán logic như && (và), || (hoặc), ! (phủ định) có thể được áp dụng cho các biến kiểu bool.

bool public isActive = true;

2. Integer

Solidity hỗ trợ cả số nguyên có dấu (int) và không có dấu (uint) với kích thước từ 8 đến 256 bit, tăng dần theo bội số của 8 (ví dụ: uint8, uint16, uint256). Mặc định, intuint tương đương với int256uint256.

uint256 public totalSupply = 1000;
int public balance = -100;

3. Address

Kiểu address dùng để lưu trữ địa chỉ Ethereum. Có hai loại địa chỉ: addressaddress payable, trong đó address payable có thể nhận Ether.

address public owner;
address payable public receiver;

4. Bytes

Solidity hỗ trợ kiểu dữ liệu bytes với kích thước cố định từ bytes1 đến bytes32 và kiểu dữ liệu động bytes.

bytes32 public constant id = keccak256(abi.encodePacked("identifier"));
bytes public data;

Kiểu Dữ Liệu Phức Tạp

1. Arrays

Mảng có thể được khai báo với kiểu dữ liệu cố định hoặc động và có thể chứa các kiểu dữ liệu nguyên thủy hoặc phức tạp.

uint[] public dynamicArray;
uint[10] public fixedArray;

2. Structs

Structs cho phép tạo các kiểu dữ liệu tùy chỉnh bằng cách kết hợp nhiều kiểu dữ liệu khác nhau.

struct Person {
    string name;
    uint age;
}
Person public alice = Person("Alice", 30);

3. Mappings

Mappings là cấu trúc dữ liệu cho phép lưu trữ các cặp khóa-giá trị, nơi khóa là duy nhất.

mapping(address => uint) public balances;

4. Enums

Enums cho phép tạo một tập hợp các hằng số được đặt tên và giới hạn.

enum State { Created, Locked, Inactive }
State public currentState = State.Created;

Sử Dụng Kiểu Dữ Liệu

Khi phát triển Smart Contract, việc lựa chọn kiểu dữ liệu phù hợp không chỉ giúp tối ưu hóa việc sử dụng gas mà còn đảm bảo tính an toàn và chính xác của dữ liệu. Dưới đây là một ví dụ về cách sử dụng các kiểu dữ liệu trong một Smart Contract đơn giản:

pragma solidity ^0.8.0;

contract Voting {
    struct Candidate {
        string name;
        uint voteCount;
    }

    mapping(address => bool) public voters;
    Candidate[] public candidates;
    State public currentState = State.Created;

    function addCandidate(string memory _name) public {
        candidates.push(Candidate(_name, 0));
    }

    function vote(uint _candidateIndex) public {
        require(!voters[msg.sender], "Already voted");
        voters[msg.sender] = true;
        candidates[_candidateIndex].voteCount += 1;
    }
}

Trong ví dụ này, chúng ta sử dụng struct để định nghĩa một ứng cử viên, mapping để theo dõi cử tri đã bỏ phiếu, và một mảng động để lưu trữ danh sách các ứng cử viên. Điều này minh họa cách kết hợp các kiểu dữ liệu khác nhau để xây dựng logic phức tạp trong Smart Contract.

Kết luận

Kiểu dữ liệu trong Solidity là nền tảng cơ bản cho việc phát triển Smart Contract, giúp định nghĩa cấu trúc dữ liệu và logic xử lý. Việc hiểu rõ và sử dụng hiệu quả các kiểu dữ liệu sẽ giúp tối ưu hóa chi phí gas, tăng cường tính bảo mật và độ tin cậy của Smart Contract.

Avatar
Được viết bởi

TechMely Team

Gợi ý câu hỏi phỏng vấn

entry

Liệt kê các kiểu dữ liệu trong Python?

entry

Liệt kê các kiểu dữ liệu được định nghĩa sẵn trong Typescript.

entry

Javascript có các kiểu dữ liệu nào? Bạn biết gì về chúng

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào

Khoá học javascript từ cơ bản đến chuyên sâuYoutube Techmely