Solidity

錯誤:不推薦使用“.value(…)”。改用“{value: …}”

  • December 26, 2021

有人請幫我找到正確的模式以使這個solidity錯誤消失,我專門使用solc^0.8.0,這是我的程式碼片段:

function fundAirline() 
   isAirlineRegistered(msg.sender) 
   requireIsOperational
   paidEnough(FUNDING_REQUIRED) 
   checkValue(FUNDING_REQUIRED) external payable {
   
   flightSurety.fundAirline.value(msg.value)(msg.sender); // the problem is in this line
   emit AirlineFunded(flightSurety.getAirlineName(msg.sender), msg.sender); 
}

問題出在這條線上:flightSurety.fundAirline.value(msg.value)(msg.sender);它引發了以下抱怨:

不推薦使用“.value(…)”。請改用“{value: …}”。

謝謝你。

我在呼叫呼叫時遇到了這個問題,並且從 Solidity 文件中發現氣體和值參數現在需要在大括號中傳遞:

address(nameReg).call{gas: 1000000, value: 1 ether}(abi.encodeWithSignature("register(string)", "MyName"));

這是反映我在修復過程中遇到的問題的程式碼片段。

有類似問題的程式碼:

(bool success, ) = payable(msg.sender).call.value(withdrawalAmt)('');

使固定:

(bool success, ) = payable(msg.sender).call{ value: withdrawalAmt }('');

儘管您沒有使用呼叫,但基本原理與您呼叫合約函式相同,因此,將上述修復應用於您的問題:

有問題的程式碼:

flightSurety.fundAirline.value(msg.value)(msg.sender);

建議修復*****

flightSurety.fundAirline{ value: msg.value }(msg.sender);

在 ESE 上也遇到過這個問題,它提供了相關的清晰度:Ethereum.StackExchange - Calling a paid function in another contract with value and arguments

希望這可以幫助。

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