Polis is a community-driven, smart chain, focused on creating technology to start accepting cryptocurrencies easily and securely.
Polis._writeCheckpoint(address,uint32,uint256,uint256) (contracts/token/Polis.sol#231-253) uses a dangerous strict equality:
- nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber (contracts/token/Polis.sol#240-241)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
Ownable.constructor().msgSender (contracts/token/Ownable.sol#32) lacks a zero-check on :
- _owner = msgSender (contracts/token/Ownable.sol#33)
Check that the address is not zero.
Additional information: link
Polis.delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32) (contracts/token/Polis.sol#88-124) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp <= expiry,POLIS::delegateBySig: signature expired) (contracts/token/Polis.sol#122)
Avoid relying on block.timestamp.
Additional information: link
Polis.getChainId() (contracts/token/Polis.sol#255-261) uses assembly
- INLINE ASM (contracts/token/Polis.sol#257-259)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['>=0.6.0<0.8.0', '^0.7.0']
- >=0.6.0<0.8.0 (@openzeppelin/contracts/GSN/Context.sol#3)
- >=0.6.0<0.8.0 (@openzeppelin/contracts/math/SafeMath.sol#3)
- >=0.6.0<0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20.sol#3)
- >=0.6.0<0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20Capped.sol#3)
- >=0.6.0<0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3)
- >=0.6.0<0.8.0 (@openzeppelin/contracts/utils/Context.sol#3)
- ^0.7.0 (contracts/token/Ownable.sol#3)
- ^0.7.0 (contracts/token/Polis.sol#3)
Use one Solidity version.
Additional information: link
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-23) is never used and should be removed
ERC20._beforeTokenTransfer(address,address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#305) is never used and should be removed
ERC20._setupDecimals(uint8) (@openzeppelin/contracts/token/ERC20/ERC20.sol#287-289) is never used and should be removed
ERC20Capped._beforeTokenTransfer(address,address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20Capped.sol#38-44) is never used and should be removed
SafeMath.div(uint256,uint256) (@openzeppelin/contracts/math/SafeMath.sol#135-138) is never used and should be removed
SafeMath.div(uint256,uint256,string) (@openzeppelin/contracts/math/SafeMath.sol#190-193) is never used and should be removed
SafeMath.mod(uint256,uint256) (@openzeppelin/contracts/math/SafeMath.sol#152-155) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (@openzeppelin/contracts/math/SafeMath.sol#210-213) is never used and should be removed
SafeMath.mul(uint256,uint256) (@openzeppelin/contracts/math/SafeMath.sol#116-121) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (@openzeppelin/contracts/math/SafeMath.sol#24-28) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (@openzeppelin/contracts/math/SafeMath.sol#60-63) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (@openzeppelin/contracts/math/SafeMath.sol#70-73) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (@openzeppelin/contracts/math/SafeMath.sol#45-53) is never used and should be removed
SafeMath.trySub(uint256,uint256) (@openzeppelin/contracts/math/SafeMath.sol#35-38) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version>=0.6.0<0.8.0 (@openzeppelin/contracts/GSN/Context.sol#3) is too complex
Pragma version>=0.6.0<0.8.0 (@openzeppelin/contracts/math/SafeMath.sol#3) is too complex
Pragma version>=0.6.0<0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20.sol#3) is too complex
Pragma version>=0.6.0<0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20Capped.sol#3) is too complex
Pragma version>=0.6.0<0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3) is too complex
Pragma version>=0.6.0<0.8.0 (@openzeppelin/contracts/utils/Context.sol#3) is too complex
Pragma version^0.7.0 (contracts/token/Ownable.sol#3) allows old versions
Pragma version^0.7.0 (contracts/token/Polis.sol#3) allows old versions
Deploy with any of the following Solidity versions: 0.5.16 - 0.5.17, 0.6.11 - 0.6.12, 0.7.5 - 0.7.6 Use a simple pragma version that allows any of these versions. Consider using the latest version of Solidity for testing.
Additional information: link
Parameter Ownable.proposeOwner(address)._proposedOwner (contracts/token/Ownable.sol#69) is not in mixedCase
Parameter Polis.mint(address,uint256)._to (contracts/token/Polis.sol#61) is not in mixedCase
Parameter Polis.mint(address,uint256)._amount (contracts/token/Polis.sol#61) is not in mixedCase
Parameter Polis.burn(uint256)._amount (contracts/token/Polis.sol#66) is not in mixedCase
Variable Polis._delegates (contracts/token/Polis.sol#13) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (@openzeppelin/contracts/utils/Context.sol#21)" inContext (@openzeppelin/contracts/utils/Context.sol#15-24)
Remove redundant statements if they congest code but offer no value.
Additional information: link
symbol() should be declared external:
- ERC20.symbol() (@openzeppelin/contracts/token/ERC20/ERC20.sol#72-74)
decimals() should be declared external:
- ERC20.decimals() (@openzeppelin/contracts/token/ERC20/ERC20.sol#89-91)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#115-118)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (@openzeppelin/contracts/token/ERC20/ERC20.sol#123-125)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#134-137)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#152-156)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#170-173)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#189-192)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (contracts/token/Ownable.sol#59-63)
proposeOwner(address) should be declared external:
- Ownable.proposeOwner(address) (contracts/token/Ownable.sol#69-72)
claimOwnership() should be declared external:
- Ownable.claimOwnership() (contracts/token/Ownable.sol#78-83)
mint(address,uint256) should be declared external:
- Polis.mint(address,uint256) (contracts/token/Polis.sol#61-64)
burn(uint256) should be declared external:
- Polis.burn(uint256) (contracts/token/Polis.sol#66-69)
Use the external attribute for functions never called from the contract.
Additional information: link
Contract ownership is semi-renounced (passed to a contract)
Unable to find audit link on the website
Unable to find whitepaper link on the website
Unable to find token on CoinHunt
Additional information: link
Alexa traffic rank is very low
Additional information: link