Solidity
部署到主網的 ERC721 合約產生巨額鑄幣費
我在主網上遇到了 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()
. 就我而言,我指的是我自己內部的另一個合約,而外部合約地址來自不同的網路。修復後,氣體估算開始正常工作。