基礎:在 Solidity 中探索 ERC20標準

語言: CN / TW / HK

這次讓我們討論一下可替換代幣,這是DeFi的主要構建模組之一。這些代幣可以代表硬幣、黃金、穀物和其他可以交換的資產。我們將研究第 20 個以太坊改進提案。這個代幣標準被廣泛稱為ERC20,描述了智慧合約中代幣的介面。像代幣轉移、批准支出、建立等功能都由ERC20標準定義。

為了說明ERC20標準的程式碼,我們將使用OpenZepplin ERC20實現。

鑄造和銷燬

總代幣供應有兩個主要操作。我們可以鑄造,也可以銷燬。鑄造意味著創造更多的供應,銷燬意味著有需要就可以減少供應。

鑄造

為了建立代幣供應,我們是需要鑄造數量的。當我們在後臺進行建立時,呼叫此函式的場景呼叫者將接收提供的代幣數量。

讓我們建立一個充當 ERC20 代幣的智慧合約。在建構函式中,我們需要提供總代幣供應,並呼叫OpenZepplin的ERC20實現建構函式,提供代幣名稱和符號。

contract FungibleToken is ERC20 {
  constructor(uint256 totalSupply) ERC20("MyBestToken", "BTKN") {
    _mint(msg.sender, totalSupply);
  }

當我們想要部署這個合約時,我們應該提供totalSupply。

如果需要,我們可以通過鑄造更多代幣來發行更多代幣。

銷燬

當我們需要降低流通中的所有代幣的價值時,我們可以銷燬它們。代幣銷燬意味著我們將特定數量的代幣傳送到零地址0x0000000000000000000000000000000000000000,並且它會被永遠鎖定,因為沒有人可以訪問這個地址。

function burn(uint256 burnAmount) external {
    _burn(msg.sender, burnAmount);
  }

為了銷燬代幣,我們需要傳遞與鑄造代幣相同的地址和我們想要銷燬的數量。

實用函式

ERC20標準中的幾個實用函式幫助我們找到代幣資訊和餘額。

代幣資訊

一旦智慧合約被部署到鏈上,任何人都可以看到名稱、符號。唯一需要的是代幣智慧合約地址。

餘額

本質上,ERC20標準儲存了地址的對映及其數量。這意味著在任何給定的時間,我們都可以查詢特定地址的餘額。它是公開可見和可訪問的。當然,我們不知道這個地址的主人是誰,也無法改變金額。

在幕後,ERC20 OpenZepplin標準在對映中保持餘額,其中key是一個地址,值是uint256。

mapping(address => uint256) private _balances;

轉賬

我們可以將代幣轉移到一個地址,或者給一個地址轉讓權。轉讓權意味著我們賦予另一個地址以代表我們使用具體數量的代幣的權利。

轉移代幣

一旦我們持有一定量的ERC20代幣,我們就可以將其傳送到任何地址,但不能超過地址中的代幣總數。這也包括0地址0x000000000000000000000000000000000000000,這在技術上意味著銷燬。

在ERC20實現中,描述了一旦我們轉移了代幣,我們傳送的金額將從我們的餘額中扣除,並增加到接收地址。它會檢查我們是否有足夠的代幣來轉賬,以及我們是否沒有超過我們的餘額總數。其實我們一直在處理代幣金額資產負債表。

代幣轉賬

給其他人轉讓權聽起來可能很複雜,但它在DeFi中被廣泛使用,我們提供以太坊智慧合約權利來使用我們的代幣進行操作。例如,智慧合約互換代幣將它們放在流動性池中,或者我們希望獲得一筆貸款,所以為我們的代幣提供抵押品。

首先,我們需要賦予一個地址許可權,並提供它可以操作的最大金額。ERC20 實施還將檢查我們是否沒有超過可用代幣並在內部對映中保留代幣限額。

mapping(address => mapping(address => uint256)) private _allowances;)

這個對映鍵是代幣持有者的地址。然後該值是另一個對映,其中key是支出者地址和允許支出的金額。

現在,傳送者可以將我們保留的代幣金額傳送到任何其他提供代幣持有者地址、傳送地址和要轉移的代幣數量的任何其他地址。

Source: http://betterprogramming.pub/exploring-erc20-fungible-token-standard-in-solidity-d3a9936a6a63

關於

ChinaDeFi– ChinaDeFi.com 是一個研究驅動的DeFi創新組織,同時我們也是區塊鏈開發團隊。每天從全球超過500個優質資訊源的近900篇內容中,尋找思考更具深度、梳理更為系統的內容,以最快的速度同步到中國市場提供決策輔助材料。

Layer 2道友– 歡迎對Layer 2感興趣的區塊鏈技術愛好者、研究分析人與Gavin(微信: chinadefi)聯絡,共同探討Layer 2帶來的落地機遇。敬請關注我們的微信公眾號 “去中心化金融社群”