Require
使用 OR( || ) 還是創建不同的函式?
問題是,我應該使用帶有邏輯 OR 的 require 語句,….還是應該為每個條件創建一個新函式?
檢查 6x 邏輯或條件需要多少 gas?
function doSomething() external { require(msg.sender == address1 || msg.sender == address2 || msg.sender == address3 || msg.sender == address4 || msg.sender == address5 || msg.sender == address6); //whatever here } function doSomething1() external { require(msg.sender == address1); //whatever } function doSomething2() external { require(msg.sender == address2); //whatever }
..等等所有其他地址
每個條件檢查都需要讀取一個儲存變數,該變數介於 2100 和 100 之間,具體取決於資訊的冷熱程度。我建議如果您將有多個具有相同類型的儲存變數,如果您所做的總是相同的,請使用映射,因為擁有更多功能意味著更多部署成本,如下所示:
mapping(address => bool) public acceptedAddresses; function doSomething() external { require(acceptedAddresses[msg.sender]); //whatever here }
Gas 費用參考黃皮書G 附錄