Fallback-Function
不總是呼叫應付回退功能嗎?
在智能合約安全建議中,我讀到以下內容:
" 請記住,Ether 可以被強制發送到一個帳戶。謹防編寫嚴格檢查合約餘額的不變數。
攻擊者可以強行將 wei 發送到任何帳戶,這是無法阻止的(即使使用執行 revert() 的備份函式也不行)。
攻擊者可以通過創建一個合約,用 1 wei 資助它,並呼叫 selfdestruct(victimAddress) 來做到這一點。在victimAddress 中沒有呼叫任何程式碼,因此無法阻止。"
這是否意味著備份函式不能執行 revert() 或者這是否意味著如果以這種方式將乙太幣發送到合約,則不會呼叫備份函式?
payable
以下三種場景不呼叫fallback函式:
- 乙太幣以自毀方式發送
2)通過將合約設置為獎勵目標,從挖礦中發送乙太幣
- 乙太幣在合約存在於該地址之前被發送到該地址。
因此,從本質上講,在這三種情況下,您無法阻止將 Ether 發送到合約中。
您可以在此處閱讀更多相關資訊:https ://medium.com/@alexsherbuck/two-ways-to-force-ether-into-a-contract-1543c1311c56
那是對的。如果乙太幣通過另一個合約的自毀發送到一個合約,接收合約沒有任何辦法阻止它。不執行任何程式碼,包括回退函式。
事實上,這甚至可以用來將乙太幣發送到一個根本沒有支付功能的功能。
這也適用於直接將乙太幣開採到合約地址,或者在部署合約之前通過正常交易將其發送到該地址的情況(如果您知道將執行部署交易的地址,則可以預測合約的地址)。