Solidity

部署到主網的 ERC721 合約產生巨額鑄幣費

  • February 9, 2022

我在主網上遇到了 ERC721 合約的一些奇怪行為。我使用基於 ERC721、ERC721URIStorage 和 ERC721Enumerable 的 OpenZeppelin 開發了兩個非常簡單的合約。我使用 truffle 5.4.5 部署了它們,並在 Rinkeby 上成功測試了它們。然而,當部署到主網時,第一個需要 5+ ETH(見圖)來鑄造一個代幣。

元遮罩費

一段時間後,我再次重新部署合約,鑄幣費恢復正常(大約 0.02)。我部署了第二個,現在遇到了同樣的問題:gas 費用約為 3 ETH。我嘗試了不同的松露配置組合,但沒有運氣。我使用的組合:

  • 汽油和汽油價格的所有自動值。
  • 將gas價格設置為某個平均值。
  • 設定高gas價格。

這是我最初的松露網路配置:

module.exports = {
 networks: {
   development: {
     host: "127.0.0.1",
     port: 7545,
     network_id: "*" // Match any network id
   },
   rinkeby: {
     provider: () => new HDWalletProvider({ mnemonic: {phrase: MNEMONIC}, providerOrUrl: rinkebyNodeUrl }),
     gas: 5000000,
     network_id: 4,
     from: OWNER_ADDRESS,
     networkCheckTimeout: 30000,
   },
   mainnet: {
     provider: () => new HDWalletProvider({ mnemonic: {phrase: MNEMONIC}, providerOrUrl: mainnetNodeUrl }),
     network_id: 1,
     from: OWNER_ADDRESS,
   },
 },
 contracts_directory: './src/contracts/',
 contracts_build_directory: './src/abis/',
 compilers: {
   solc: {
     version: "0.8.4",
     optimizer: {
       enabled: true,
       runs: 200
     }
   }
 }
}

非常感謝任何幫助。

好的,我想通了。如果存在明顯的邏輯錯誤或違反契約約束,Metamask 將顯示正確的錯誤消息“交易預計會失敗。你還想嘗試嗎?”。但是如果誤差不是很明顯,gas 估計會失敗,會應用最大的gas fee,並且不會顯示 MM 錯誤。我發現在嘗試手動估算汽油費時,使用web3.eth.estimateGas(). 就我而言,我指的是我自己內部的另一個合約,而外部合約地址來自不同的網路。修復後,氣體估算開始正常工作。

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