diff --git a/.circleci/config.template.yml b/.circleci/config.template.yml index 878de38a58..0f37a1f626 100644 --- a/.circleci/config.template.yml +++ b/.circleci/config.template.yml @@ -1,3 +1,5 @@ +# DO NOT EDIT MANUALLY! +# autogenerated by `.circleci/pack.js` from contents of `jobs` .yml files version: 2.1 commands: {{> commands}} diff --git a/.circleci/config.yml b/.circleci/config.yml index 796becb325..8b3a4c41b6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,3 +1,5 @@ +# DO NOT EDIT MANUALLY! +# autogenerated by `.circleci/pack.js` from contents of `jobs` .yml files version: 2.1 commands: cmd-wait-for-port: @@ -206,8 +208,11 @@ jobs: name: Show Slither output command: | set +e - slither . + slither . --disable-color 2>&1 | tee slitherReport.txt exit 0 + - store_artifacts: + path: slitherReport.txt + destination: slitherReport.txt job-test-deploy-script: working_directory: ~/repo docker: diff --git a/.circleci/src/jobs/job-static-analysis.yml b/.circleci/src/jobs/job-static-analysis.yml index b9d206726e..da650377a7 100644 --- a/.circleci/src/jobs/job-static-analysis.yml +++ b/.circleci/src/jobs/job-static-analysis.yml @@ -9,5 +9,9 @@ steps: # ignore slither error codes command: | set +e - slither . + slither . --disable-color 2>&1 | tee slitherReport.txt exit 0 + - store_artifacts: + path: slitherReport.txt + destination: slitherReport.txt + diff --git a/.gitignore b/.gitignore index 4c7cda619c..3487479339 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,6 @@ process.yml .db optimism + +# python venv +.venv/ \ No newline at end of file diff --git a/contracts/RewardsDistributionRecipient.sol b/contracts/RewardsDistributionRecipient.sol index a1e51151ea..f67416f366 100644 --- a/contracts/RewardsDistributionRecipient.sol +++ b/contracts/RewardsDistributionRecipient.sol @@ -17,4 +17,15 @@ contract RewardsDistributionRecipient is Owned { function setRewardsDistribution(address _rewardsDistribution) external onlyOwner { rewardsDistribution = _rewardsDistribution; } + + /* ========== Math helpers ========== */ + + /* + * @dev copied from openzeppelin-solidity-2.3.0/contracts/math/Math.sol + * to avoid using OZ Math import because of contract name collision (Math) + * with the internal Math.sol contract which e.g. is confusing for slither-analyzer + */ + function _min(uint256 a, uint256 b) internal pure returns (uint256) { + return a < b ? a : b; + } } diff --git a/contracts/ShortingRewards.sol b/contracts/ShortingRewards.sol index a2bcee8583..2852cd15bd 100644 --- a/contracts/ShortingRewards.sol +++ b/contracts/ShortingRewards.sol @@ -2,7 +2,6 @@ pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; -import "openzeppelin-solidity-2.3.0/contracts/math/Math.sol"; import "openzeppelin-solidity-2.3.0/contracts/math/SafeMath.sol"; import "openzeppelin-solidity-2.3.0/contracts/token/ERC20/ERC20Detailed.sol"; import "openzeppelin-solidity-2.3.0/contracts/token/ERC20/SafeERC20.sol"; @@ -72,7 +71,7 @@ contract ShortingRewards is IShortingRewards, RewardsDistributionRecipient, Reen } function lastTimeRewardApplicable() public view returns (uint256) { - return Math.min(block.timestamp, periodFinish); + return _min(block.timestamp, periodFinish); } function rewardPerToken() public view returns (uint256) { diff --git a/contracts/StakingRewards.sol b/contracts/StakingRewards.sol index 6be865f34d..f7b6561432 100644 --- a/contracts/StakingRewards.sol +++ b/contracts/StakingRewards.sol @@ -1,6 +1,5 @@ pragma solidity ^0.5.16; -import "openzeppelin-solidity-2.3.0/contracts/math/Math.sol"; import "openzeppelin-solidity-2.3.0/contracts/math/SafeMath.sol"; import "openzeppelin-solidity-2.3.0/contracts/token/ERC20/ERC20Detailed.sol"; import "openzeppelin-solidity-2.3.0/contracts/token/ERC20/SafeERC20.sol"; @@ -56,7 +55,7 @@ contract StakingRewards is IStakingRewards, RewardsDistributionRecipient, Reentr } function lastTimeRewardApplicable() public view returns (uint256) { - return Math.min(block.timestamp, periodFinish); + return _min(block.timestamp, periodFinish); } function rewardPerToken() public view returns (uint256) { diff --git a/package.json b/package.json index 9cfd45c740..c7234b17d7 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "lint": "solhint \"contracts/*.sol\" && solhint \"contracts/test-helpers/*.sol\" && solhint --config contracts/interfaces/.solhint.json \"contracts/interfaces/*.sol\" && eslint \"**/*.js\"", "lint:fix": "eslint --fix \"**/*.js\"", "build:ci": "node .circleci/pack.js", - "slither": "pip3 install --user slither-analyzer && slither .", + "slither": "python3 -m venv .venv && .venv/bin/python -m pip install slither-analyzer && .venv/bin/python -m slither .", "pack": "webpack --mode production", "prepublishOnly": "npm run describe && npm run pack", "fork": "node --max-old-space-size=4096 ./node_modules/.bin/hardhat node", diff --git a/slither.config.json b/slither.config.json index 7c3b8bbf64..a4494acca6 100644 --- a/slither.config.json +++ b/slither.config.json @@ -1,3 +1,4 @@ { - "buidler_cache_directory": "build/cache" + "buidler_cache_directory": "build/cache", + "hardhat_artifacts_directory": "build/artifacts" }