#18 中 slither failed。在這 PR 中,我們在 gulp 中對 IERC20(token).balanceOf(address(this)) 的結果運算,在看似無關的地方觸發了 slither 的 incorrect-equality 錯誤。
Error message
$ slither . --filter-paths "test" --exclude=naming-convention,unused-state,solc-version,constable-states,external-function,reentrancy-events
...
INFO:Detectors:
BNum.bdiv(uint256,uint256) (BNum.sol#75-86) uses a dangerous strict equality:
- require(bool)(a == 0 || c0 / a == BONE) (BNum.sol#81)
BNum.bmul(uint256,uint256) (BNum.sol#63-73) uses a dangerous strict equality:
- require(bool)(a == 0 || c0 / a == b) (BNum.sol#68)
BNum.bpow(uint256,uint256) (BNum.sol#108-126) uses a dangerous strict equality:
- remain == 0 (BNum.sol#120)
BNum.bpowApprox(uint256,uint256,uint256) (BNum.sol#128-161) uses a dangerous strict equality:
- term == 0 (BNum.sol#149)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities
INFO:Slither:. analyzed (16 contracts with 40 detectors), 4 result(s) found
INFO:Slither:Use https://crytic.io/ to get access to additional detectors and Github integration
...
試著 debug 後發現 slither 會偵測「有沒有 balance 在 require 中被用 == 比較」,因此我猜測有被丟到 BNum.bdiv 、 BNum.bmul 、 BNum.bpow 、及 BNum.bpowApprox 的參數,在這 PR 後被標記為是 balance。因為這些函數會對這些參數做像是 BNum.bmul 中 require(a == 0 || c0 / a == b) 這種違反 incorrect-equality 的行為。
目前我傾向先讓 slither 忽略 incorrect-equality 不檢查,因為要 debug 需要滿多時間的,然後感覺問題很可能是在 slither。
Reference
- slither 中做標記 balance 的 code。
#18 中 slither failed。在這 PR 中,我們在
gulp中對IERC20(token).balanceOf(address(this))的結果運算,在看似無關的地方觸發了 slither 的 incorrect-equality 錯誤。Error message
試著 debug 後發現 slither 會偵測「有沒有 balance 在 require 中被用
==比較」,因此我猜測有被丟到BNum.bdiv、BNum.bmul、BNum.bpow、及BNum.bpowApprox的參數,在這 PR 後被標記為是 balance。因為這些函數會對這些參數做像是BNum.bmul中require(a == 0 || c0 / a == b)這種違反 incorrect-equality 的行為。目前我傾向先讓 slither 忽略
incorrect-equality不檢查,因為要 debug 需要滿多時間的,然後感覺問題很可能是在 slither。Reference