The CeFi Experience made simpler on the DeFi Ecosystem
Cactus Exchange is an on-chain crypto trading and liquidity hub that allows you Trade,
earn, and win crypto on the decentralized platform
Contract ownership is not renounced (belongs to a wallet)
CactusToken.setTaxFeePercent(uint256) (contracts/CactusToken.sol#164-167) contains a tautology or contradiction:
- require(bool,string)(taxFeeBps >= 0 && taxFeeBps <= maxTxFeeBps,Invalid bps) (contracts/CactusToken.sol#165)
Fix the incorrect comparison by changing the value type or the comparison.
Additional information: link
Unable to verify that contract auditor is trusted: Certik, Quantstamp, Hacken, Solidity, Paladinsec, Openzeppelin, Verichains
CactusToken.allowance(address,address).owner (contracts/CactusToken.sol#94) shadows:
- Ownable.owner() (@openzeppelin/contracts/access/Ownable.sol#35-37) (function)
CactusToken._approve(address,address,uint256).owner (contracts/CactusToken.sol#103) shadows:
- Ownable.owner() (@openzeppelin/contracts/access/Ownable.sol#35-37) (function)
Rename the local variables that shadow another component.
Additional information: link
BaseToken.setTreasuryAddress(address)._newAddress (contracts/extensions/BaseToken.sol#58) lacks a zero-check on :
- treasuryContract = _newAddress (contracts/extensions/BaseToken.sol#60)
CactusToken.constructor(address,uint16,uint16,uint16)._teamAddress (contracts/CactusToken.sol#43) lacks a zero-check on :
- teamAddress = _teamAddress (contracts/CactusToken.sol#55)
CactusToken.transferLiquidityOwnership(address).newAddress (contracts/CactusToken.sol#393) lacks a zero-check on :
- liquidityAddress = newAddress (contracts/CactusToken.sol#399)
Check that the address is not zero.
Additional information: link
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#27-37) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#33-35)
Address.verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#196-216) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#208-211)
Do not use evm assembly.
Additional information: link
CactusToken.includeInReward(address) (contracts/CactusToken.sol#200-211) has costly operations inside a loop:
- _excluded.pop() (contracts/CactusToken.sol#207)
Use a local variable to hold the loop computation result.
Additional information: link
Address.functionCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#80-82) is never used and should be removed
Address.functionCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#90-96) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (@openzeppelin/contracts/utils/Address.sol#109-115) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#123-134) is never used and should be removed
Address.functionDelegateCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#169-171) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#179-188) is never used and should be removed
Address.functionStaticCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#142-144) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#152-161) is never used and should be removed
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#27-37) is never used and should be removed
Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#55-60) is never used and should be removed
Address.verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#196-216) is never used and should be removed
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#21-23) is never used and should be removed
SafeMath.div(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#191-200) is never used and should be removed
SafeMath.mod(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#151-153) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#217-226) is never used and should be removed
SafeMath.sub(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#168-177) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#22-28) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#64-69) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#76-81) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#47-57) is never used and should be removed
SafeMath.trySub(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#35-40) is never used and should be removed
Remove unused functions.
Additional information: link
CactusToken._previousTaxFee (contracts/CactusToken.sol#35) is set pre-construction with a non-constant function or state variable:
- _taxFee
CactusToken._previousLiquidityFee (contracts/CactusToken.sol#38) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
CactusToken._previousMarketingFee (contracts/CactusToken.sol#41) is set pre-construction with a non-constant function or state variable:
- _marketingFee
Remove any initialization of state variables via non-constant state variables or function calls. If variables must be set upon contract deployment, locate initialization in the constructor instead.
Additional information: link
Pragma version^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/security/Pausable.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Address.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Context.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/math/SafeMath.sol#4) allows old versions
Pragma version^0.8.0 (contracts/CactusToken.sol#2) allows old versions
Pragma version^0.8.0 (contracts/extensions/BaseToken.sol#2) 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
Low level call in Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#55-60):
- (success) = recipient.call{value: amount}() (@openzeppelin/contracts/utils/Address.sol#58)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#123-134):
- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#132)
Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#152-161):
- (success,returndata) = target.staticcall(data) (@openzeppelin/contracts/utils/Address.sol#159)
Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#179-188):
- (success,returndata) = target.delegatecall(data) (@openzeppelin/contracts/utils/Address.sol#186)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Parameter CactusToken.calculateTaxFee(uint256)._amount (contracts/CactusToken.sol#414) is not in mixedCase
Parameter CactusToken.calculateLiquidityFee(uint256)._amount (contracts/CactusToken.sol#418) is not in mixedCase
Parameter CactusToken.calculateMarketingFee(uint256)._amount (contracts/CactusToken.sol#422) is not in mixedCase
Parameter CactusToken.setTeamAddress(address)._newAddress (contracts/CactusToken.sol#444) is not in mixedCase
Variable CactusToken._taxFee (contracts/CactusToken.sol#34) is not in mixedCase
Variable CactusToken._liquidityFee (contracts/CactusToken.sol#37) is not in mixedCase
Variable CactusToken._marketingFee (contracts/CactusToken.sol#40) is not in mixedCase
Parameter BaseToken.updateOperator(address,bool)._operator (contracts/extensions/BaseToken.sol#53) is not in mixedCase
Parameter BaseToken.updateOperator(address,bool)._status (contracts/extensions/BaseToken.sol#53) is not in mixedCase
Parameter BaseToken.setTreasuryAddress(address)._newAddress (contracts/extensions/BaseToken.sol#58) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable CactusToken._marketingFee (contracts/CactusToken.sol#40) is too similar to CactusToken._getTValues(uint256).tMarketingFee (contracts/CactusToken.sol#339)
Variable CactusToken._transferToExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#239) is too similar to CactusToken._transferToExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#239)
Variable CactusToken._getValues(uint256).rTransferAmount (contracts/CactusToken.sol#348) is too similar to CactusToken._transferStandard(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#229)
Variable CactusToken._getValues(uint256).rTransferAmount (contracts/CactusToken.sol#348) is too similar to CactusToken._transferToExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#239)
Variable CactusToken._getValues(uint256).rTransferAmount (contracts/CactusToken.sol#348) is too similar to CactusToken._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#250)
Variable CactusToken._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#216) is too similar to CactusToken._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#216)
Variable CactusToken._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#216) is too similar to CactusToken._getValues(uint256).tTransferAmount (contracts/CactusToken.sol#347)
Variable CactusToken._transferStandard(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#229) is too similar to CactusToken._transferToExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#239)
Variable CactusToken._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (contracts/CactusToken.sol#359-361) is too similar to CactusToken._transferToExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#239)
Variable CactusToken.reflectionFromToken(uint256,bool).rTransferAmount (contracts/CactusToken.sol#159) is too similar to CactusToken._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#250)
Variable CactusToken._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#216) is too similar to CactusToken._transferStandard(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#229)
Variable CactusToken._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#216) is too similar to CactusToken._transferToExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#239)
Variable CactusToken._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#216) is too similar to CactusToken._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#250)
Variable CactusToken.reflectionFromToken(uint256,bool).rTransferAmount (contracts/CactusToken.sol#159) is too similar to CactusToken._transferStandard(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#229)
Variable CactusToken.reflectionFromToken(uint256,bool).rTransferAmount (contracts/CactusToken.sol#159) is too similar to CactusToken._transferToExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#239)
Variable CactusToken._transferStandard(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#229) is too similar to CactusToken._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#250)
Variable CactusToken._transferStandard(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#229) is too similar to CactusToken._transferStandard(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#229)
Variable CactusToken._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#216) is too similar to CactusToken._getTValues(uint256).tTransferAmount (contracts/CactusToken.sol#340-342)
Variable CactusToken._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#250) is too similar to CactusToken._transferToExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#239)
Variable CactusToken._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (contracts/CactusToken.sol#359-361) is too similar to CactusToken._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#216)
Variable CactusToken._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#250) is too similar to CactusToken._getValues(uint256).tTransferAmount (contracts/CactusToken.sol#347)
Variable CactusToken._transferToExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#239) is too similar to CactusToken._getValues(uint256).tTransferAmount (contracts/CactusToken.sol#347)
Variable CactusToken._transferStandard(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#229) is too similar to CactusToken._getTValues(uint256).tTransferAmount (contracts/CactusToken.sol#340-342)
Variable CactusToken._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#250) is too similar to CactusToken._transferStandard(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#229)
Variable CactusToken._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#250) is too similar to CactusToken._getTValues(uint256).tTransferAmount (contracts/CactusToken.sol#340-342)
Variable CactusToken._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (contracts/CactusToken.sol#359-361) is too similar to CactusToken._getValues(uint256).tTransferAmount (contracts/CactusToken.sol#347)
Variable CactusToken._transferToExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#239) is too similar to CactusToken._transferStandard(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#229)
Variable CactusToken._transferToExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#239) is too similar to CactusToken._getTValues(uint256).tTransferAmount (contracts/CactusToken.sol#340-342)
Variable CactusToken.reflectionFromToken(uint256,bool).rTransferAmount (contracts/CactusToken.sol#159) is too similar to CactusToken._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#216)
Variable CactusToken._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (contracts/CactusToken.sol#359-361) is too similar to CactusToken._transferStandard(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#229)
Variable CactusToken._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (contracts/CactusToken.sol#359-361) is too similar to CactusToken._getTValues(uint256).tTransferAmount (contracts/CactusToken.sol#340-342)
Variable CactusToken._getValues(uint256).rTransferAmount (contracts/CactusToken.sol#348) is too similar to CactusToken._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#216)
Variable CactusToken._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#250) is too similar to CactusToken._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#250)
Variable CactusToken.reflectionFromToken(uint256,bool).rTransferAmount (contracts/CactusToken.sol#159) is too similar to CactusToken._getValues(uint256).tTransferAmount (contracts/CactusToken.sol#347)
Variable CactusToken._transferToExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#239) is too similar to CactusToken._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#250)
Variable CactusToken._getValues(uint256).rTransferAmount (contracts/CactusToken.sol#348) is too similar to CactusToken._getValues(uint256).tTransferAmount (contracts/CactusToken.sol#347)
Variable CactusToken.reflectionFromToken(uint256,bool).rTransferAmount (contracts/CactusToken.sol#159) is too similar to CactusToken._getTValues(uint256).tTransferAmount (contracts/CactusToken.sol#340-342)
Variable CactusToken._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (contracts/CactusToken.sol#359-361) is too similar to CactusToken._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#250)
Variable CactusToken._getValues(uint256).rTransferAmount (contracts/CactusToken.sol#348) is too similar to CactusToken._getTValues(uint256).tTransferAmount (contracts/CactusToken.sol#340-342)
Variable CactusToken._transferStandard(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#229) is too similar to CactusToken._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#216)
Variable CactusToken._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#250) is too similar to CactusToken._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#216)
Variable CactusToken._transferToExcluded(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#239) is too similar to CactusToken._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/CactusToken.sol#216)
Variable CactusToken._transferStandard(address,address,uint256).rTransferAmount (contracts/CactusToken.sol#229) is too similar to CactusToken._getValues(uint256).tTransferAmount (contracts/CactusToken.sol#347)
Prevent variables from having similar names.
Additional information: link
BaseToken._cap (contracts/extensions/BaseToken.sol#16) should be constant
BaseToken.liquidityReserveUsed (contracts/extensions/BaseToken.sol#18) should be constant
CactusToken.maxTxFeeBps (contracts/CactusToken.sol#29) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (@openzeppelin/contracts/access/Ownable.sol#54-56)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (@openzeppelin/contracts/access/Ownable.sol#62-65)
name() should be declared external:
- CactusToken.name() (contracts/CactusToken.sol#68-70)
symbol() should be declared external:
- CactusToken.symbol() (contracts/CactusToken.sol#72-74)
decimals() should be declared external:
- CactusToken.decimals() (contracts/CactusToken.sol#76-78)
transfer(address,uint256) should be declared external:
- CactusToken.transfer(address,uint256) (contracts/CactusToken.sol#89-92)
allowance(address,address) should be declared external:
- CactusToken.allowance(address,address) (contracts/CactusToken.sol#94-96)
approve(address,uint256) should be declared external:
- CactusToken.approve(address,uint256) (contracts/CactusToken.sol#98-101)
increaseAllowance(address,uint256) should be declared external:
- CactusToken.increaseAllowance(address,uint256) (contracts/CactusToken.sol#122-125)
decreaseAllowance(address,uint256) should be declared external:
- CactusToken.decreaseAllowance(address,uint256) (contracts/CactusToken.sol#127-134)
isExcludedFromReward(address) should be declared external:
- CactusToken.isExcludedFromReward(address) (contracts/CactusToken.sol#136-138)
totalFees() should be declared external:
- CactusToken.totalFees() (contracts/CactusToken.sol#140-142)
deliver(uint256) should be declared external:
- CactusToken.deliver(uint256) (contracts/CactusToken.sol#144-151)
reflectionFromToken(uint256,bool) should be declared external:
- CactusToken.reflectionFromToken(uint256,bool) (contracts/CactusToken.sol#153-162)
setTaxFeePercent(uint256) should be declared external:
- CactusToken.setTaxFeePercent(uint256) (contracts/CactusToken.sol#164-167)
setLiquidityFeePercent(uint256) should be declared external:
- CactusToken.setLiquidityFeePercent(uint256) (contracts/CactusToken.sol#169-172)
setMarketingFeePercent(uint256) should be declared external:
- CactusToken.setMarketingFeePercent(uint256) (contracts/CactusToken.sol#174-177)
excludeFromReward(address) should be declared external:
- CactusToken.excludeFromReward(address) (contracts/CactusToken.sol#191-198)
includeInReward(address) should be declared external:
- CactusToken.includeInReward(address) (contracts/CactusToken.sol#200-211)
burn(address,uint256) should be declared external:
- CactusToken.burn(address,uint256) (contracts/CactusToken.sol#293-305)
includeInFee(address) should be declared external:
- CactusToken.includeInFee(address) (contracts/CactusToken.sol#328-330)
isExcludedFromFee(address) should be declared external:
- CactusToken.isExcludedFromFee(address) (contracts/CactusToken.sol#332-334)
transferLiquidityOwnership(address) should be declared external:
- CactusToken.transferLiquidityOwnership(address) (contracts/CactusToken.sol#393-401)
setTeamAddress(address) should be declared external:
- CactusToken.setTeamAddress(address) (contracts/CactusToken.sol#444-448)
pause() should be declared external:
- BaseToken.pause() (contracts/extensions/BaseToken.sol#45-47)
unpause() should be declared external:
- BaseToken.unpause() (contracts/extensions/BaseToken.sol#49-51)
updateOperator(address,bool) should be declared external:
- BaseToken.updateOperator(address,bool) (contracts/extensions/BaseToken.sol#53-56)
setTreasuryAddress(address) should be declared external:
- BaseToken.setTreasuryAddress(address) (contracts/extensions/BaseToken.sol#58-61)
Use the external attribute for functions never called from the contract.
Additional information: link
BscScan page for the token does not contain additional info: website, socials, description, etc.
Additional information: link
Unable to find token on CoinGecko
Additional information: link
Token was delisted (assigned to inactive / untracked listing) from CoinMarketCap
Additional information: link
Unable to find token on CoinHunt
Additional information: link
Unable to find audit link on the website
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Young tokens have high risks of price dump / death
Unable to find Youtube account