Solidity

修飾符與私有函式

  • October 28, 2022

有人建議我使用私有函式而不是修飾符,因為“私有方法在建構合約時不會佔用額外的空間,並且修飾符就像宏一樣”。所以就像在這個例子中:

代替

modifier onlyOwner {
   require(msg.sender == owner);
   _;
}

利用

function onlyOwner() private {
   require(msg.sender == owner);
   _;
}

這是真的?因為我在很多契約中看到,修飾符通常用於將功能限制為僅所有者之類的東西。另外,與私人功能相比,修改器的 gas 成本是否更貴?

不,你在那裡做什麼是行不通的。佔位符是唯一可以與修飾符一起使用的語法。修飾符主要是為了可讀性。您可以呼叫執行在函式開頭或結尾呼叫的相同程式碼的內部函式。不要認為它以任何方式影響氣體,但不要引用我的話。

modifier onlyOwner {
   require(msg.sender == owner);
   _;
}

以上onlyOwner是一個修飾符,可以應用於您的函式以限制其對所有者的使用。此修改器可以根據您的契約設計多次應用。正在修改的函式的程式碼插入_;到修飾符中的位置。

function onlyOwner() private {
   require(msg.sender == owner);
   _;
}

上面onlyOwner()實際上是一個函式,它被呼叫onlyOwner並且它的可見性是private但函式不能有,_;因為那隻允許在modifier. 此函式不是修飾符。強行這樣做會渲染一個DeclarationError: Undeclared identifierfor _;。這個程式碼塊甚至沒有執行。方法是否private佔用額外空間取決於您的契約設計。

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