Solidity
錯誤:不推薦使用“.value(…)”。改用“{value: …}”
有人請幫我找到正確的模式以使這個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
希望這可以幫助。