Solidity

即使地址非零,由於地址為零,鑄造 ERC20 代幣也會失敗

  • January 14, 2022

我正在使用 OpenZeppelin 的 ERC20 合約建構 ERC20 代幣。我的令牌建構子如下所示:

   constructor()
       ERC20(
           "Token",
           "TKN"
       )
       Ownable()
   {
       require(msg.sender != address(0), "Cannot deploy from zero address");
       _mint(msg.sender, 18000000000000);
   }

當我嘗試使用 truffle 將此合約部署到本地 Ganache 測試網時,我收到以下錯誤:

ERC20: mint to the zero address

經過進一步調查,我發現這個錯誤是在 OpenZeppelin 提供的 ERC20 合約內部拋出的。這就是我require在建構子中添加該語句的原因。

奇怪的是,建構子沒有失敗,這意味著不是msg.sender零地址。那麼為什麼我不能鑄造代幣呢?

(穩固性 ^0.8.0)

這個問題完全是我的錯:在我提供的範例中看不到一些程式碼,這些程式碼向區塊的礦工鑄造了少量的代幣。(不知道為什麼(很久以前))。

在區塊鏈上,這本來可以正常工作,但我在本地使用 truffle 的 Ganache 進行測試。由於 Ganache 只是一個測試區塊鏈,沒有礦工,因此block.coinbase通常與礦工地址對應的地址總是0

對我來說,如果我在建構子的開頭將 msg.sender 聲明為地址變數,它就可以工作

contract Test is ERC20{

address public OWNER;
uint private _totalSupply = 500000;

constructor() ERC20("Test Token ERC20", "T20"){
   
   OWNER = msg.sender;
   _mint(OWNER, _totalSupply);

}

}

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