Contract-Design

OpenZeppelin 可暫停概念,安全概念

  • March 18, 2018

像 OpenZeppelin Pausable 合約這樣的項目與標準 Solidity 內聯的額外檢查有什麼不同嗎?如果編碼人員只是在每個函式呼叫之前使用類似的布爾檢查進行檢查,這會產生更少的安全效果嗎?契約(或多重簽名選項)的所有者將是唯一可以更改布爾值的人。

如果我遺漏了什麼,請解釋。我同意在簡單易讀的合約之上建構所有這些的安全作業系統是一個好主意,我只是想確保 OpenZeppelin 作業系統不會以某種方式做更多的事情。

你的斷言是準確的。除了設計上的修飾符具有較小範圍的潛在用途外,沒有功能差異。

從功能上講,它們的行為方式與修飾符只能使用發送給函式的參數並且只能更改合約儲存的約束相同。然而,內聯函式呼叫也可以在函式內部傳遞記憶體變數,並且可以更直接地影響函式程式碼邏輯。

修飾符也只能在函式體執行之前或之後一次執行其邏輯——因為內聯函式呼叫可以在函式執行期間的任何時候發生。

修飾符的存在是為了可讀性和組織性。如果許多函式具有相同的執行要求(例如 isOwner 修飾符),或者重複使用相同的模式,具有相同的準備或清理過程等 - 它提供了一種干淨的方式來實現這些而不會使函式混亂body,因此它只能包含該函式獨有的內容。

這也可以很容易地確定一個函式正在實現哪些模式,只需查看它的聲明/簽名:

function updateBalance(uint newBal) onlyOwner onlyIfUnpaused {

只需查看函式聲明,您就可以清楚地了解修飾符模式繼承的特徵:只有所有者才能呼叫它,並且只有在合約目前未暫停時才可以呼叫它。

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