Solidity

Solidity 多重需求與單一需求

  • November 9, 2017

我的智能合約的其中一項功能只有在滿足三個條件的情況下才能執行。目前我有一個單曲require,它結合了這樣的所有條件:

 require(evalCond1() && evalCond2() && evalCond3());

但是,當我嘗試用它檢查我的程式碼覆蓋率時solidity-coverage,只會看到兩個分支:一個require滿足條件,另一個分支,其中至少一個條件評估為假(無論哪一個)。我想知道將單曲分成三個單獨的部分是否有任何問題,require每個條件一個:

require(evalCond1());
require(evalCond2());
require(evalCond3());

我認為這提高了可讀性(因為真正的函式名稱比 複雜一點evalCond)並有助於顯示正確的分支覆蓋率,但我不確定這對氣體使用和性能沒有任何副作用。

比較每種方法生成的字節碼,第二個字節碼長了 6 個字節——基本上是因為REVERT操作碼和關聯記憶體的東西出現了 3 次而不是一次。但是由於這些指令沒有被執行(除非出現問題!)這無關緊要。兩種方法都會產生相同數量的JUMPIs

簡而言之,在半打氣體內,任何一種方法的氣體使用量都將足夠接近,所以請選擇。

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