Solidity

為了安全起見,是否應該避免 Try-Catch 錯誤處理?

  • June 15, 2020

如果函式的內容被包裝到 try-catch 語句中,它會對函式的安全性產生什麼影響?

這是一個非常籠統的問題,所以是一個非常籠統的答案。

Try-catch 是一種邏輯分支技術,邏輯錯誤可能會產生嚴重的安全隱患。

它對函式的安全性有什麼影響

在任何情況下,一個函式都應該始終準確地完成它應該做的事情。這應該是顯而易見的。try-catch 並不總是錯誤的,但值得注意的是,沒有它,數以千計的合約確實會找到。考慮到失敗通常是正確的做法,“儘早失敗並努力失敗”是最佳實踐。

我會把它當作狗哨,這表明這裡可能有問題,因為:

  1. 如果呼叫另一個合約並且該合約出錯,例如某人實際上沒有得到報酬,那麼整個交易失敗通常是正確的做法。他們為什麼要抓住它並繼續前進?
  2. 如果是內部的,是什麼如此雜亂無章以至於他們覺得有必要發現內部錯誤,為什麼堅持做正確的事情?
  3. 有沒有辦法阻止導致他們試圖擷取的錯誤的情況,為什麼他們沒有這樣做?
  4. 是否有不止一種方法可以製造錯誤,契約是否可以被誘騙“捕捉”某些東西並繼續前進,在這種情況下停止是正確的做法?

Try-catch 可能是一種創可貼,覆蓋了本應在根本原因層面解決的問題。當然,沒有人可以僅僅因為使用了鈍器就說邏輯是有缺陷的。

希望能幫助到你。

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