Solidity

將值轉移到合約的備份函式中

  • January 24, 2022

我試圖弄清楚當您向契約發送價值時會發生什麼。

如果目標地址 (to) 是合約,則 EVM 將執行合約並嘗試呼叫交易數據負載中指定的函式。如果您的交易中沒有數據,EVM 將呼叫一個回退函式,如果該函式是可支付的,將執行它以確定下一步該做什麼。如果 fallback 函式中沒有程式碼,那麼交易的效果就是增加合約的餘額,就像向錢包付款一樣。如果沒有回退功能或不支付回退功能,則交易將被還原。

當存在應付函式或備用應付函式時會發生什麼,這一點非常清楚;他們將被呼叫並且價值將被轉移到契約中。但是,如果有 是什麼意思no code in fallback function?這是否意味著函式聲明在主體中沒有任何內容,如下所示?

function() public payable {

}

the effect of the transaction will be to increase the balance of the contract另外,幕後是怎麼發生的?

該指南略有偏差,好像您的交易中沒有數據並且您在其中發送乙太幣,EVM 將首先嘗試呼叫receive() payable {...}您擁有的函式。這是一個處理接收乙太幣的函式,但如果你願意,你可以省略它,然後 EVM 將呼叫回退函式。

備份功能是當交易的有效負載數據不適合合約中的任何其他功能,或者交易中沒有有效負載時發生的情況。沒有程式碼的回退功能正是您所描述的: function() public payable {}

“交易的效果將是增加合約的餘額”意味著contractAddress.balance將增加您發送的乙太幣數量。它會自動使用已發送到payable函式的所有乙太幣完成,因此不需要receiveorfallback函式內的程式碼。如果你想做額外的事情,你只需要那裡的程式碼。

希望涵蓋它。

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