Solidity

使用接收功能的 Solidity 警告

  • August 18, 2022

為什麼solidity給我這個警告???在此處輸入圖像描述 我們需要每次都聲明接收函式嗎?

如果您聲明該fallback() external payable函式,則意味著您打算直接接收乙太幣,就像任何其他 EOA(外部擁有的帳戶)一樣。因此,Solidity 建議您也添加一個receive() external payable功能。

您可能知道,receive當乙太幣直接發送到合約(沒有指定任何函式)並且沒有提供任何數據時,該函式被執行。fallback當乙太幣直接發送到合約而沒有指定任何函式並提供數據時,或者如果 EVM 無法辨識數據中的函式選擇器,或者receive未聲明函式,則執行。

出於這個原因,如果您打算直接接收乙太幣,請添加該receive函式,並添加該fallback函式,但要處理傳入的數據(通常通過 訪問msg.data)。

實際上,您還可以為fallback函式使用另一種語法來顯式接收數據:

fallback(bytes calldata input) external payable returns(bytes memory output) {}

receive函式不支持這種重載。

所以是的,這不是強制性的,但建議如果您添加其中一個功能,請添加另一個。

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