Solidity

Gas 估計錯誤並顯示以下消息(見下文)。將乙太幣發送給合約的部署者時

  • October 9, 2022

該合約是一個簡單的合約,讓其他人將 eth 發送給合約的持有者。發件人應以 eths 的形式發送至少 50 美元。但每次我得到這個錯誤 在此處輸入圖像描述

這是我的程式碼

在此處輸入圖像描述

如果你想為你的契約提供資金,你需要分割 $ 50 by the current price of Ethereum. Let say the current price of Ethereum is $ 3000,你需要做 $ 50/ $ 3000 = 0.0167 乙太幣。我建議使用 0.02 乙醚,這樣你就有足夠的氣體。然後你需要將 0.02 ether 轉換為 wei,大約是 20000000000000000 wei。您在 Remix 中將這個 wei 的數量輸入為 wei 並再次點擊“fund”按鈕。

轉換見:https ://eth-converter.com/

在發送交易之前,您的程式碼正在虛擬執行以計算需要多少氣體。如果此虛擬執行返回錯誤(這可能來自 require 函式或任何其他未擷取的錯誤),則它無法估計所需的 gas。

在您的情況下,有兩種選擇:

  1. 不滿足您的要求條件,它會引發錯誤。
  2. getConversionRate 或 priceFeed 中還有另一個錯誤。

我建議您檢查 ethPrice 和 ethAmountInUsd 變數。這些變數可能是錯誤的原因。因為 Solidity 不支持十進制數。您不應該在任何時候除以 1000000000000000000。繼續與wei合作。

編輯:我剛剛閱讀了 Yongijan 的回答。為了補充他,這可能是您的解決方案:

   uint requiredValue = (50 / getPrice()) ether
   require(msg.Value > requiredValue, "Not enough funding");

ether關鍵字只是將數字轉換為wei,您也可以使用:

   uint requiredValue = (50 / getPrice()) * 1000000000000000000
   require(msg.Value > requiredValue, "Not enough funding");

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