Contract-Development

乙太坊 Solidity NFT 合約執行期間的錯誤超過____G一個_○你噸○FG一個sOut of gas?

  • July 31, 2022

我們有一份用於鑄造 NFT 的 Rinkeby 合約。有時,當它處於公成本售模式時,如果有人試圖鑄造 NFT,交易會失敗,並且在 tx 的 etherscan 上會顯示:

警告!合約執行過程中遇到的錯誤

$$ out of gas $$

即使他們的錢包里肯定有足夠的 ETH 並且他們在 metamask 上將他們的 gas 最高費用設置為“高”,它也這麼說。令人困惑的是,它只發生在大約 75% 的時間裡。有時它會毫無問題地薄荷…

你能在我們的契約中看到什麼會導致這樣的天然氣問題嗎?

在您失敗的交易中,交易使用的氣體達到了氣體限制。您可以通過點擊“點擊以查看更多”按鈕進行檢查。

可能這就是交易失敗的原因。

在此處輸入圖像描述

此 gas 限制與客戶錢包的 ETH 餘額或 MetaMask 中的“高”設置無關。

為避免這種情況,您可以在呼叫合約函式時將 gas 限制設置得更高。

例如,如果你自己建構 dapp 來呼叫合約函式,並且你使用 ethers.js 作為前端,你可以像這樣設置 gas 限制。

這裡的問題似乎與交易發送的氣體量有關。通常錢包會很好地估計完成交易所需的氣體量並自動設置它。但是,當智能合約實施複雜的 if…else 控制和循環時,這些功能就不能很好地工作了。錢包很難估計將執行什麼程式碼塊或循環將執行多少次。

我在您的契約 ERC721A _safeMint 中看到,您有一些循環可能會為大量薄荷糖執行一段時間。此外,失敗的交易似乎只針對大於 1 的鑄幣數量。如果使用者通過您的 dapp 鑄幣 NFT,請嘗試增加交易的 gas 限制並查看交易是否成功完成。

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