Khóa học blockchain

Tìm Hiểu Token ERC20 Trong Blockchain

0 phút đọc

Trong thế giới của blockchain và tiền điện tử, token ERC20 là một chuẩn mực quan trọng trong việc phát hành và quản lý các token trên mạng Ethereum. ERC20 cung cấp một bộ quy tắc chuẩn mà các token dựa trên Ethereum phải tuân theo, giúp đảm bảo tính tương thích giữa các dự án khác nhau. Bài viết này sẽ cung cấp một cái nhìn sâu sắc về token ERC20, bao gồm định nghĩa, cách thức hoạt động, và ví dụ cụ thể về cách triển khai một token ERC20.

Khái Niệm về Token ERC20

ERC20 là một chuẩn token trên Ethereum, viết tắt của "Ethereum Request for Comments 20". Được đề xuất bởi Fabian Vogelsteller vào năm 2015, ERC20 đã trở thành chuẩn mực cho việc phát triển các token tương thích trên mạng Ethereum. Chuẩn này định nghĩa một bộ các quy tắc mà các token phải tuân theo để có thể tương tác một cách trơn tru với các hợp đồng thông minh và ví tiền khác trên mạng Ethereum.

Các Chức Năng Chính của ERC20

Chuẩn ERC20 bao gồm các chức năng cơ bản sau đây mà một token cần phải có:

  1. totalSupply: Trả về tổng số lượng token hiện có.
  2. balanceOf: Trả về số lượng token mà một địa chỉ sở hữu.
  3. transfer: Cho phép một địa chỉ chuyển một số lượng token đến một địa chỉ khác.
  4. transferFrom: Cho phép chuyển token giữa các địa chỉ bởi một địa chỉ thứ ba được ủy quyền.
  5. approve: Cho phép một địa chỉ được ủy quyền sử dụng một lượng token nhất định từ một địa chỉ khác.
  6. allowance: Trả về số lượng token mà một địa chỉ được phép rút từ địa chỉ khác.

Ngoài ra, chuẩn ERC20 cũng định nghĩa các sự kiện (events) mà các hợp đồng thông minh phải phát ra khi thực hiện các giao dịch nhất định:

  • Transfer: Phát ra khi một lượng token được chuyển từ địa chỉ này sang địa chỉ khác.
  • Approval: Phát ra khi một địa chỉ được ủy quyền sử dụng token từ địa chỉ khác.

Triển Khai Token ERC20

Để hiểu rõ hơn về cách triển khai một token ERC20, chúng ta sẽ xem xét một ví dụ cụ thể về cách viết một hợp đồng thông minh cho token ERC20 sử dụng ngôn ngữ lập trình Solidity.

Bước 1: Khai báo phiên bản Solidity

pragma solidity ^0.8.0;

Bước 2: Định nghĩa Interface cho ERC20

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

Bước 3: Triển khai Hợp Đồng Thông Minh

contract MyToken is IERC20 {
    string public constant name = "MyToken";
    string public constant symbol = "MTK";
    uint8 public constant decimals = 18;

    mapping(address => uint256) balances;
    mapping(address => mapping (address => uint256)) allowed;
    uint256 totalSupply_;

    constructor(uint256 total) {
        totalSupply_ = total;
        balances[msg.sender] = totalSupply_;
    }

    function totalSupply() public override view returns (uint256) {
        return totalSupply_;
    }

    function balanceOf(address tokenOwner) public override view returns (uint256 balance) {
        return balances[tokenOwner];
    }

    function transfer(address receiver, uint256 numTokens) public override returns (bool) {
        require(numTokens <= balances[msg.sender]);
        balances[msg.sender] = balances[msg.sender] - numTokens;
        balances[receiver] = balances[receiver] + numTokens;
        emit Transfer(msg.sender, receiver, numTokens);
        return true;
    }

    function approve(address delegate, uint256 numTokens) public override returns (bool) {
        allowed[msg.sender][delegate] = numTokens;
        emit Approval(msg.sender, delegate, numTokens);
        return true;
    }

    function allowance(address owner, address delegate) public override view returns (uint) {
        return allowed[owner][delegate];
    }

    function transferFrom(address owner, address buyer, uint256 numTokens) public override returns (bool) {
        require(numTokens <= balances[owner]);
        require(numTokens <= allowed[owner][msg.sender]);

        balances[owner] = balances[owner] - numTokens;
        allowed[owner][msg.sender] = allowed[owner][msg.sender] - numTokens;
        balances[buyer] = balances[buyer] + numTokens;
        emit Transfer(owner, buyer, numTokens);
        return true;
    }
}

Trong ví dụ trên, chúng ta đã triển khai một hợp đồng thông minh cho token ERC20 với tên là "MyToken". Hợp đồng này bao gồm các chức năng cơ bản như totalSupply, balanceOf, transfer, approve, allowance, và transferFrom. Ngoài ra, hợp đồng cũng phát ra các sự kiện TransferApproval khi thực hiện các giao dịch liên quan.

Tương Tác với Token ERC20

Sau khi triển khai token, bạn có thể tương tác với nó thông qua các giao diện lập trình ứng dụng (API)

Avatar
Được viết bởi

TechMely Team

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

entry

Blockchain là gì?

entry

What is blockchain?

entry

Bạn biết gì về ký hiệu big-O (big-O notation) và bạn có thể cho biết một số ví dụ liên quan đến các cấu trúc dữ liệu khác nhau?

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