Triển khai 1 token từ smart contract trên remix

Vinh Phan

Xin chào mọi người, tiếp tục trong series blockchain mình sẽ chia sẻ một bài viết về cách tạo một smart contract trên remix. Qua bài viết này bạn sẽ thấy cách tạo ra một token. Kết nối token đó với ví metamask, thấy được giao dịch từ ví này sang ví khác.

Những kiến thức bạn nên có để có thể hiểu bài viết này:
Blockchain là gì
Vì sao web3 sẽ là tương lai của ứng dụng web
Blockchain wallet là gì, chi tiết từng loại ví trong blockchain
Metamask là gì? Một số tuỳ chỉnh cho metamask để xây dựng ứng dụng phi tập trung

OK, bắt đầu thôi

Các bạn hãy xem bài viết trước rồi hãy xem video nhé!

Video demo giao dịch, kết nối ví metamask khi tạo ra token từ remix

Remix.ethereum.ORG là gì?

remix.ethereum.org là một trình biên tập mã nguồn mở trực tuyến được phát triển bởi cộng đồng Ethereum để hỗ trợ phát triển và kiểm tra các hợp đồng thông minh Ethereum. Trình biên tập này cung cấp một giao diện web dễ sử dụng cho những người phát triển và nhà phân tích hợp đồng thông minh để tạo, sửa đổi và kiểm tra mã nguồn của họ.

Hiểu cơ bản nó giống như 1 website cho bạn viết vậy đó, đỡ tốn công phải build môi trường trên máy tính của bạn (yên tâm những bài tiếp theo mình sẽ giới thiệu cách build, dựng ứng dụng D-APP trên local của bạn).

Hướng dẫn tạo và triển khai một token lên blockchain với Remix

Truy cập vào trang remix.ethereum.org

remix

Giao diện nó nhìn rất giống với visua studio code, nên nếu bạn là dân lập trình rồi thì nhìn phát hiểu ngay vấn đề ^^. Nó có 3 vùng: vùng công cụ, vùng soạn thảo, vùng cmd(vùng nhận kết quả khi thực hiện giao dịch)

Cấu trúc folder mặc định của remix:
– Contracts
– Scripts
– Tests
– README.txt
– .prettierrc.json

Tạo một file token.sol trong folder: contracts

remix

Code của file token.sol

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract ToraCoinERC20 {

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

    string public constant name = "Tora tech Coin";
    string public constant symbol = "TRT";
    uint8 public constant decimals = 0;

    mapping(address => uint256) balances;

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

    uint256 totalSupply_;

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

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

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

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

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

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

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

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

OK, mình giải thích chi tiết code nhé:

contract ToraCoinERC20{

}

contract ToraCoinERC20 : đây là cú pháp khởi tạo một smart contract trong ngôn ngữ solidity (solidity là ngôn ngữ để biên soạn smart contract trong ethereum).

string public constant name = "Tora tech Coin";
string public constant symbol = "TRT";
uint8 public constant decimals = 0;
mapping(address => uint256) balances;
mapping(address => mapping (address => uint256)) allowed;
  • name: bạn đặt tên cho token của bạn: Tora tech Coin
  • symbol: bạn đặt tên ngắn gọn cho đồng token của bạn: TRT
  • decimals: định rõ số lượng chữ số thập phân sau dấu chấm trong số lượng token được đại diện bởi hợp đồng
  • balances: được sử dụng để lưu trữ số lượng token
  • mapping:  Đây là kiểu dữ liệu dùng để tạo một bản đồ tương ứng giữa các giá trị của kiểu dữ liệu address và uint256 (số nguyên không dấu 256 bit). Tức ở đây balances nhận một address và trả về một unit
constructor(uint256 total) {
    totalSupply_ = total;
    balances[msg.sender] = totalSupply_;
}

Hàm khởi tạo trong smart contract, nó nhận một giá trị nó tên: total với kiểu uint (uint là kiểu số nguyên không âm).

  • msg.sender là một biến toàn cục trong các hợp đồng thông minh Ethereum, cho biết địa chỉ của người gửi hoặc người thao tác hiện tại với hợp đồng, tức khi build cái smart contract này, địa chị ví metamask nào đang connect thì nó sẽ lấy để build hợp đồng (ví này sẽ bị trừ chi phí gas bằng ETH, nhớ trong bài trước mình có bày bạn cách lấy ETH trên mạng sepolia đấy, giờ là lúc dùng đó).
  • balances[msg.sender] = totalSupply_ : gán tổng số token tạo ra vào địa chỉ ví dựng hợp đồng (có thể hiểu là công ty tạo ra token xong thì sẽ chuyển số token này vào ví của công ty)

Những function: totalSupply, balanceOf, transfer, approve, allowance, transferFrom đây là những hàm để thực hiện giao dịch cho token.

  • totalSupply: lấy ra tổng cung của token
  • balanceOf: lấy ra tổng số token của ví đang nắm giữ
  • transfer: chuyển token từ ví root sang một ví bất kỳ
  • approve: cho phép thực hiện giao dịch gì đó, thường được dùng trước khi sử dụng transferFrom
  • transferFrom: chuyển token từ ví này sang ví khác (do việc chuyển này là 2 ví bất kỳ giao dịch nên cần hàm approve mới cho phép)

Tất cả những hàm trên hiện tại mình đang viết rõ trong hợp đồng này, tuy nhiên trong thực tế bạn có dùng ERC-20 để sử dụng những hàm này.

ERC-20 là gì?

ERC-20 là một tiêu chuẩn giao thức token phổ biến trên nền tảng Ethereum. “ERC” viết tắt của “Ethereum Request for Comments,” đây là quá trình mà các cộng đồng phát triển token trên Ethereum đề xuất và thảo luận về các tiêu chuẩn. ERC-20 cụ thể là một đề xuất tiêu chuẩn token mà hầu hết các token Ethereum tuân theo.

Tiêu chuẩn ERC-20 xác định một loạt các quy tắc và giao diện cho các hợp đồng thông minh mà token phải tuân theo để có tính tương thích và khả năng giao tiếp với các ứng dụng và dịch vụ khác trên mạng Ethereum. Các quy tắc chính bao gồm:

  • balanceOf(address _owner): Một hợp đồng phải cung cấp một hàm để truy xuất số lượng token của một địa chỉ cụ thể.
  • transfer(address _to, uint256 _value): Hợp đồng phải có một hàm cho phép người dùng gửi token từ tài khoản của họ đến một địa chỉ khác.
  • transferFrom(address _from, address _to, uint256 _value): Hợp đồng cũng phải cung cấp một cách để một bên thứ ba (ví dụ: một ứng dụng hoặc dịch vụ) chuyển token từ một tài khoản đến tài khoản khác với sự cho phép của chủ sở hữu.
  • approve(address _spender, uint256 _value): Hợp đồng phải có một cách để chủ sở hữu token ủy quyền cho một bên thứ ba (ví dụ: một hợp đồng thông minh) để thực hiện các giao dịch trên tài khoản của họ.
  • allowance(address _owner, address _spender): Hợp đồng cung cấp một cách để truy xuất số lượng token mà chủ sở hữu đã ủy quyền cho một bên thứ ba.

ERC-20 giúp token trên Ethereum có tính tương thích với nhiều ví Ethereum, sàn giao dịch, và ứng dụng phi tập trung khác nhau. Điều này đã làm cho ERC-20 trở thành một tiêu chuẩn phổ biến và được sử dụng rộng rãi cho việc phát triển các token trên nền tảng Ethereum.

Thực hiện build smart contract trong Remix

Đến đây bạn nhấn save lại, hãy để ý tab: Solidity compiler. Khi chạy nếu bạn thấy tick xanh thì ok rồi đấy

remix

Thực hiện DEPLOY & RUN TRANSACTIONS trong REMIX

Hãy chuyển đến tab: DEPLOY & RUN TRANSACTIONS. Chú ý cần chuyển môi trường của bạn về ví metamask nhé.

OK, bây giờ hãy nhập số lượng token bạn muốn tạo ra và nhấn Deploy

Khi bấm deploy, một kết nối đến ví metamask, nó sẽ thông báo cho bạn biết địa chỉ ví nào đang connect, số chi phí gas bạn phải bỏ ra để tạo smart contract. Bấm Xác nhận thôi.

OK, đến đây nó sẽ báo một giao dịch thành công, trả về ở vùng cmd nhé.

Bạn có thể click vào link: view on etherscan để xem chi tiết giao dịch trên sepolia

Bây giờ bạn copy địa chỉ hợp đó, nhập vào token trong ví, bạn sẽ thấy được token đã connect vào ví của mình.

Đến đây bạn tạo thành công một token trên remix rồi đó. Những thao tác thực hiện như chuyển token, bạn hoàn toàn có thể xem video demo ở trên nhé.

Hi vọng giúp được cho bạn ^^.

Viết một bình luận