Duy Nguyen Hoang A fully enthusiastic boy

Blockchain 101 – Ep3: Smart Contract

5 min read

Trong series “Blockchain 101,” chúng ta đã tìm hiểu về nền tảng blockchain, các khái niệm cơ bản của nó. Trong bài viết này, chúng ta sẽ tập trung vào một khía cạnh quan trọng của blockchain: Smart Contract.

Smart Contract là cái khỉ gì?

Smart Contract, hay hợp đồng thông minh, là một phần mềm tự động hóa việc thực thi các điều khoản của một hợp đồng. Chúng được xây dựng trên nền tảng blockchain và hoạt động mà không cần sự can thiệp của bất kỳ bên thứ ba nào khác. Điều này làm cho Smart Contract trở thành công cụ đáng tin cậy để thực hiện các giao dịch, mà không cần phải tin tưởng vào bất kỳ bên nào khác.

Smart Contract thường được viết bằng ngôn ngữ lập trình Solidity và được triển khai trên blockchain. Một khi được triển khai, chúng không thể thay đổi (Thực tế thì vẫn có thể update được, tôi sẽ nói về vấn đề này sau), và sẽ tự động thực thi khi điều kiện được xác định trong hợp đồng được đáp ứng.

Ứng Dụng Của Smart Contract

Smart Contract có rất nhiều ứng dụng tiềm năng trong nhiều lĩnh vực khác nhau:

DeFi (Decentralized Finance)

Trong lĩnh vực tài chính, Smart Contract đã mở ra cánh cửa cho DeFi, cho phép người dùng thực hiện các giao dịch tài chính mà không cần phải tin tưởng vào các tổ chức trung gian. Điều này bao gồm cho vay, cho thuê, giao dịch tiền điện tử và nhiều hơn nữa.

Supply Chain

Smart Contract có thể được sử dụng để theo dõi lịch sử của các sản phẩm trong chuỗi cung ứng, từ quá trình sản xuất đến giao hàng cho người tiêu dùng. Điều này giúp tăng cường tính minh bạch và an toàn cho toàn bộ quá trình.

Tiềm Năng Tương Lai

Với tính linh hoạt và tiềm năng không giới hạn, Smart Contract được coi là một trong những công nghệ quan trọng nhất trên blockchain. Trong tương lai, chúng có thể được sử dụng rộng rãi trong nhiều lĩnh vực khác nhau, từ tài chính đến bảo hiểm, y tế và nhiều lĩnh vực khác nữa.

Triển Khai Smart Contract

Bạn có thể xem Video hướng dẫn tại đây: https://youtu.be/sqbiD9ZEySc

Ngôn ngữ Solidity

Solidity là ngôn ngữ lập trình được sử dụng để viết Smart Contract trên nền tảng Ethereum. Đây là một ngôn ngữ dễ học và sử dụng, được thiết kế đặc biệt cho việc viết các hợp đồng thông minh trên blockchain.

Viết Đoạn Code Solidity Đầu Tiên

Một ví dụ về một Smart Contract đơn giản dùng để bầu chọn ứng cử viên, viết bằng Solidity:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Election {
    // Struct để lưu trữ thông tin của mỗi ứng cử viên
    struct Candidate {
        uint256 id; // ID của ứng cử viên
        string name; // Tên của ứng cử viên
        uint256 voteCount; // Số phiếu bầu cho ứng cử viên
    }

    // Mảng để lưu trữ danh sách ứng cử viên
    Candidate[] public candidates;

    // Mapping để theo dõi người dùng đã bỏ phiếu
    mapping(address => bool) public voters;

    // Sự kiện được kích hoạt khi một phiếu bầu được đưa ra
    event votedEvent(uint256 indexed _candidateId);

    // Hàm để thêm một ứng cử viên mới vào danh sách
    function addCandidate(string memory _name) public {
        candidates.push(Candidate(candidates.length + 1, _name, 0));
    }

    // Hàm để bỏ phiếu cho một ứng cử viên
    function vote(uint256 _candidateId) public {
        // Kiểm tra xem người dùng đã bỏ phiếu chưa
        require(!voters[msg.sender], "You already voted");

        // Kiểm tra xem _candidateId có hợp lệ không
        require(_candidateId > 0 && _candidateId <= candidates.length, "Invalid candidate ID");

        // Đánh dấu người dùng đã bỏ phiếu
        voters[msg.sender] = true;

        // Tăng số phiếu bầu cho ứng cử viên
        candidates[_candidateId - 1].voteCount++;

        // Kích hoạt sự kiện votedEvent
        emit votedEvent(_candidateId);
    }

    // Hàm chuyển đổi số nguyên thành chuỗi
    // internal là khai báo hàm nội bộ, không hiển thị lên contract
    function toString(uint256 value) internal pure returns (string memory) {
        // Kiểm tra trường hợp đặc biệt khi giá trị là 0
        if (value == 0) {
            return "0";
        }

        // Tính độ dài của chuỗi đầu ra
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }

        // Khởi tạo mảng bytes với độ dài tương ứng
        bytes memory buffer = new bytes(digits);

        // Lặp qua từng chữ số và ghi vào buffer
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }

        // Chuyển đổi buffer thành chuỗi và trả về
        return string(buffer);
    }

    // Hàm để lấy ra số phiếu bầu của từng ứng cử viên
    function getVoteCount(uint256 _candidateId) public view returns (string memory) {
        // Kiểm tra xem _candidateId có hợp lệ không
        require(_candidateId > 0 && _candidateId <= candidates.length, "Invalid candidate ID");

        // Lấy thông tin của ứng cử viên
        string memory candidateName = candidates[_candidateId - 1].name;
        uint256 voteCount = candidates[_candidateId - 1].voteCount;

        // Tạo chuỗi thông tin và trả về
        string memory candidateInfo = string(abi.encodePacked("Candidate: ", candidateName, " - Vote count: ", toString(voteCount)));
        return candidateInfo;
    }

    function getAllCandidates() public view returns (Candidate[] memory) {
        return candidates;
    }
}

Triển Khai Smart Contract Lên Test Net Goerli

Để triển khai Smart Contract lên test net Goerli, chúng ta cần sử dụng một công cụ như Remix IDE hoặc Truffle Framework. Tôi sẽ hướng dẫn deploy contract sử dụng Remix IDe

  1. Mở Remix IDE tại: https://remix.ethereum.org/
  2. Tạo file mới, dán code
  3. Bấm Compile và Run trên Remix VM để kiểm tra contract
  4. Chọn mạng lưới “Injected Provider” để kết nối với ví Ethereum của bạn.
  5. Chọn mạng lưới Goerli từ danh sách.
  6. Nhấn nút “Deploy” để triển khai Smart Contract lên mạng lưới Goerli.
blockchain solidity

Giao diện Remix IDE

Khu vực Compiler Solidity

Lựa chọn ENV (Ở đây chọn Remix VM cho quá trình Test)

Test thử contract

Sau khi quá trình triển khai hoàn tất, bạn sẽ nhận được địa chỉ của Smart Contract trên mạng lưới Goerli, cung cấp cho bạn khả năng tương tác với nó thông qua các giao thức Ethereum. Với ví dụ bên trên, tôi đã deploy contract sau: https://goerli.etherscan.io/address/0x7cf13de5987dd4b973951915048abeec35709583#writeContract

Kết Luận

Smart Contract là một trong những cột mốc quan trọng trong sự phát triển của công nghệ blockchain. Với khả năng tự động hóa và tính minh bạch, chúng mở ra những cơ hội mới trong nhiều lĩnh vực khác nhau và có tiềm năng để thay đổi cách chúng ta tương tác với dữ liệu và tài sản trên mạng.

Đọc thêm trong series “Blockchain 101” để hiểu rõ hơn về các khía cạnh khác của công nghệ blockchain và cách nó đang thay đổi thế giới!

Avatar photo
Duy Nguyen Hoang A fully enthusiastic boy

One Reply to “Blockchain 101 – Ep3: Smart Contract”

Leave a Reply

Your email address will not be published. Required fields are marked *