Solidity Token Issuance

在 Solidity 中,代幣發行 (Token Issuance) 指的是創建新代幣並增加總供應量的過程。這是一個非常基礎且重要的概念,因為它直接決定了代幣的經濟模型。

要用 Solidity 發行代幣,你通常需要兩個步驟:

  1. 定義代幣標準:使用公認的代幣標準,其中 ERC-20 是最常用的可替換代幣標準。OpenZeppelin 的函式庫是業界標準,因為它提供了經過嚴格測試的、安全的合約。
  2. 實施發行機制:你需要編寫一個函數來呼叫底層的鑄幣函數 (_mint)。你添加的邏輯將決定誰可以發行新代幣以及在什麼條件下發行。

以下用Sepolia 測試網上模擬 USDT做範例。

步驟一:編寫代幣合約

可以使用一個基礎的 ERC-20 合約範本。這是最簡單、最安全的做法。Solidity代碼如下

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

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";


contract USDTR is ERC20, Ownable {
    constructor() ERC20("Tether USD", "rUSDT") Ownable(msg.sender) {
        _mint(msg.sender, 1000000 * 10 ** 18); 
    }

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }
}
  • 程式碼說明
    • 這段程式碼繼承了 OpenZeppelin 提供的安全 ERC-20 標準。
    • constructor:合約部署時,會自動鑄造 1,000,000 個代幣到部署者的錢包。代幣符號是 mUSDT(代表 Mock USDT),小數點位數設定為 18,這與真實的 USDT 一致。
    • mint:這個函數只允許合約的部署者呼叫,可以自由地為任何地址鑄造代幣。

步驟二:部署合約到 Sepolia 測試網

你可以使用 Remix IDE 來部署這個合約。

  1. 打開 Remix
  2. 在左側的文件瀏覽器中,創建一個新檔案,例如 MockUSDT.sol。將上面的程式碼複製貼上到這個檔案中。
  3. 在左側導航欄,點擊編譯,選擇 Solidity 版本為 0.8.20 或更高,然後點擊「Compile MockUSDT.sol」。
  4. 在左側導航欄,點擊部署和運行交易圖標
    • 在「Environment」下拉選單中,選擇「Injected Provider – MetaMask」。這會讓你連接到 MetaMask 錢包。
    • 確保你的 MetaMask 已經切換到 Sepolia 測試網
    • 在「Contract」下拉選單中,選擇「MockUSDT」。
    • 點擊「Deploy」。你的 MetaMask 會彈出一個視窗,讓你確認交易。確認後,合約就會被部署到 Sepolia。

部署完成後,你可以在 Remix 的「Deployed Contracts」區域或 Sepolia Etherscan 上看到你部署的 MockUSDT 合約地址。這個地址就是你自己的測試用 USDT。

假設地址為 0xbd7ba6764f2b0a5cf4e3e1f74a0e925e4dd05e4b,可以在sepolia瀏覽器在token區塊看到相關記錄 https://sepolia.etherscan.io/token/0xbd7ba6764f2b0a5cf4e3e1f74a0e925e4dd05e4b


步驟三:在 MetaMask 中添加代幣

就像之前所說,你需要手動將這個新代幣添加到 MetaMask 中。

  1. 複製你剛剛部署的 MockUSDT 合約地址。例如上一步的 0xbd7ba6764f2b0a5cf4e3e1f74a0e925e4dd05e4b
  2. 打開 MetaMask,切換到 Sepolia 網路。
  3. 在資產列表底部,點擊「Import tokens」。
  4. 將合約地址貼到「Token Contract Address」欄位。MetaMask 會自動識別 rUSDT 和 18 位小數點。
  5. 點擊「Import」。

完成這些步驟後,你將在錢包中看到 1,000,000 個 rUSDT 代幣。這就是你自己的測試 USDT


步驟四:設定測試用的收款帳號

收款帳號唯一需要做的,是在他們的 MetaMask 裡手動添加 rUSDT 這個代幣。就像你當初在錢包裡添加這個代幣一樣,他們需要輸入你部署的 rUSDT 合約地址。這樣,他們才能在錢包介面裡看到你轉給他們的代幣。

如果他們沒有添加,你轉給他們的 rUSDT 仍然會安全地存在他們的錢包裡,只是他們看不到餘額,就像銀行帳戶裡有一筆錢,但你沒有開啟顯示這筆錢的頁面一樣。

接著就可以開始測試轉帳,例如在Metamask轉帳1000到收款帳號