Solidity
智能合約是否跟踪 ERC-20 餘額?
在嘗試製作自己的代幣之前,我想確保我了解 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 合約本身會跟踪誰持有哪些餘額。要鑄造更多的硬幣,您可以使用繼承自該合約的鑄造合約擴展此基礎合約。該鑄幣合約實現了基礎合約,並通過其函式實現確定瞭如何鑄幣。我的問題是:
- Metamask 如何知道誰持有多少 ERC20 代幣?Metamask 是否為知名 ERC20 手動設置合約地址,並使用其
balancesOf
功能顯示每個使用者持有的數量?- 我想確認 ERC20
balances
映射是關於誰擁有多少 ERC20 代幣的絕對唯一真實賬本- 是否有流行或廣泛接受的不同鑄幣合約的介面(如 ERC20 標準)?
謝謝。
你大多是正確的。每個地址的 ERC20 餘額保存在 ERC20 合約的
balances
(或_balances
)映射中,可通過balanceOf
函式訪問。
- 當您向 Metamask 添加代幣時(或 Metamask 自動添加時),Metamask 會呼叫
balanceOf
ERC20 合約的函式來了解目前餘額是多少。- 在普通 ERC20 合約中,
balances
(或_balances
)映射是絕對真實的賬本,說明哪個地址擁有多少 ERC20 代幣。當然,有許多非標準的實現可能會有所不同。此外,持有代幣的地址不一定擁有它(例如使用借貸協議、保管人、包裝代幣等)。- 最廣泛接受的庫是 OpenZeppelin。您可以在doc中找到許多標準,並在github repo中找到相應的契約。