Require

使用 OR( || ) 還是創建不同的函式?

  • January 26, 2022

問題是,我應該使用帶有邏輯 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 附錄

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