Solidity

智能合約是否跟踪 ERC-20 餘額?

  • November 7, 2022

在嘗試製作自己的代幣之前,我想確保我了解 ERC-20 代幣的工作原理。正如我從以下實現該transfer功能的程式碼中理解的那樣:

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;
}

ERC20 合約本身會跟踪誰持有哪些餘額。要鑄造更多的硬幣,您可以使用繼承自該合約的鑄造合約擴展此基礎合約。該鑄幣合約實現了基礎合約,並通過其函式實現確定瞭如何鑄幣。我的問題是:

  1. Metamask 如何知道誰持有多少 ERC20 代幣?Metamask 是否為知名 ERC20 手動設置合約地址,並使用其balancesOf功能顯示每個使用者持有的數量?
  2. 我想確認 ERC20balances映射是關於誰擁有多少 ERC20 代幣的絕對唯一真實賬本
  3. 是否有流行或廣泛接受的不同鑄幣合約的介面(如 ERC20 標準)?

謝謝。

你大多是正確的。每個地址的 ERC20 餘額保存在 ERC20 合約的balances(或_balances)映射中,可通過balanceOf函式訪問。

  1. 當您向 Metamask 添加代幣時(或 Metamask 自動添加時),Metamask 會呼叫balanceOfERC20 合約的函式來了解目前餘額是多少。
  2. 在普通 ERC20 合約中,balances(或_balances)映射是絕對真實的賬本,說明哪個地址擁有多少 ERC20 代幣。當然,有許多非標準的實現可能會有所不同。此外,持有代幣的地址不一定擁有它(例如使用借貸協議、保管人、包裝代幣等)。
  3. 最廣泛接受的庫是 OpenZeppelin。您可以在doc中找到許多標準,並在github repo中找到相應的契約。

引用自:https://ethereum.stackexchange.com/questions/138903