JHBToken.claimToken(IERC20) (#774-776) ignores return value by token.transfer(_owner,token.balanceOf(address(this))) (#775)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
JHBToken._tFeeTotal (#584) is never initialized. It is used in:
- JHBToken.totalFees() (#729-731)
Initialize all the variables. If a variable is meant to be initialized to zero, explicitly set it to zero to improve code readability.
Additional information: link
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
JHBToken.setShare(address) (#869-877) uses a dangerous strict equality:
- IERC20(uniswapV2Pair).balanceOf(shareholder) == 0 (#871)
JHBToken.setShare(address) (#869-877) uses a dangerous strict equality:
- IERC20(uniswapV2Pair).balanceOf(shareholder) == 0 (#874)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
Contract ownership is not renounced (belongs to a wallet)
JHBToken._transfer(address,address,uint256) (#794-827) performs a multiplication on the result of a division:
-require(bool,string)(amount <= balanceOf(from).div(1000).mul(999),reduce the selling amount) (#802)
JHBToken._buyTokenTransfers(address,address,uint256,uint256) (#909-929) performs a multiplication on the result of a division:
-_takeTransfer(sender,_destroyAddress,tAmount.div(1000).mul(_destroyFee),currentRate) (#920)
JHBToken._buyTokenTransfers(address,address,uint256,uint256) (#909-929) performs a multiplication on the result of a division:
-_takeTransfer(sender,address(this),tAmount.div(1000).mul(_lpFee),currentRate) (#921)
JHBToken._buyTokenTransfers(address,address,uint256,uint256) (#909-929) performs a multiplication on the result of a division:
-_takeTransfer(sender,address(_fundAddress),tAmount.div(1000).mul(_fundFee),currentRate) (#922)
JHBToken._transferAccounts(address,address,uint256,uint256,uint256) (#943-948) performs a multiplication on the result of a division:
-_rOwned[recipient] = _rOwned[recipient].add(rAmount.div(1000).mul(recipientRate)) (#945-946)
JHBToken._transferAccounts(address,address,uint256,uint256,uint256) (#943-948) performs a multiplication on the result of a division:
-Transfer(sender,recipient,tAmount.div(1000).mul(recipientRate)) (#947)
Consider ordering multiplication before division.
Additional information: link
JHBToken.allowance(address,address).owner (#685) shadows:
- Ownable.owner() (#91-93) (function)
JHBToken._approve(address,address,uint256).owner (#783) shadows:
- Ownable.owner() (#91-93) (function)
Rename the local variables that shadow another component.
Additional information: link
Ownable.changeOwner(address) (#103-105) should emit an event for:
- _owner = newOwner (#104)
Emit an event for critical parameter changes.
Additional information: link
JHBToken.setUnlockTime(uint256) (#643-647) should emit an event for:
- _unlockTime = lockTime (#645)
JHBToken.setUn(uint256) (#649-652) should emit an event for:
- killNums = nums (#651)
Emit an event for critical parameter changes.
Additional information: link
Ownable.changeOwner(address).newOwner (#103) lacks a zero-check on :
- _owner = newOwner (#104)
Check that the address is not zero.
Additional information: link
Reentrancy in JHBToken.constructor(address) (#616-641):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),address(usdt)) (#626-627)
State variables written after the call(s):
- _isExcludedFromFee[tokenOwner] = true (#634)
- _isExcludedFromFee[address(this)] = true (#635)
- _owner = msg.sender (#639)
- _rOwned[tokenOwner] = _rTotal (#632)
- _rTotal = (MAX - (MAX % _tTotal)) (#631)
- _tTotal = 10 * 10 ** 8 * 10 ** _decimals (#630)
- isDividendExempt[address(this)] = true (#636)
- isDividendExempt[address(0)] = true (#637)
- uniswapV2Router = _uniswapV2Router (#628)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in JHBToken.constructor(address) (#616-641):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),address(usdt)) (#626-627)
Event emitted after the call(s):
- Transfer(address(0),tokenOwner,_tTotal) (#640)
Apply the check-effects-interactions pattern.
Additional information: link
JHBToken._transfer(address,address,uint256) (#794-827) uses timestamp for comparisons
Dangerous comparisons:
- from != address(this) && LPFeefenhong.add(minPeriod) <= block.timestamp (#824)
JHBToken._buyTokenTransfers(address,address,uint256,uint256) (#909-929) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp > _unlockTime,can not buy yet) (#918)
Avoid relying on block.timestamp.
Additional information: link
Pragma version^0.8.11 (#1) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
solc-0.8.11 is not recommended for deployment
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
Variable Ownable._owner (#86) is not in mixedCase
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#289) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#291) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#322) is not in mixedCase
Function IUniswapV2Router01.WETH() (#368) is not in mixedCase
Variable JHBToken._fundFee (#590) is not in mixedCase
Variable JHBToken._destroyFee (#593) is not in mixedCase
Variable JHBToken._lpFee (#603) is not in mixedCase
Variable JHBToken.LPFeefenhong (#605) is not in mixedCase
Variable JHBToken._unlockTime (#613) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#373) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#374)
Prevent variables from having similar names.
Additional information: link
JHBToken.slitherConstructorVariables() (#571-962) uses literals with too many digits:
- _destroyAddress = address(0x000000000000000000000000000000000000dEaD) (#594)
JHBToken.slitherConstructorVariables() (#571-962) uses literals with too many digits:
- distributorGas = 500000 (#602)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
JHBToken._destroyAddress (#594) should be constant
JHBToken._fundAddress (#591) should be constant
JHBToken._tFeeTotal (#584) should be constant
JHBToken.distributorGas (#602) should be constant
JHBToken.minPeriod (#604) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
changeOwner(address) should be declared external:
- Ownable.changeOwner(address) (#103-105)
setUnlockTime(uint256) should be declared external:
- JHBToken.setUnlockTime(uint256) (#643-647)
setUn(uint256) should be declared external:
- JHBToken.setUn(uint256) (#649-652)
setDestroyFee() should be declared external:
- JHBToken.setDestroyFee() (#654-658)
name() should be declared external:
- JHBToken.name() (#660-662)
symbol() should be declared external:
- JHBToken.symbol() (#664-666)
decimals() should be declared external:
- JHBToken.decimals() (#668-670)
totalSupply() should be declared external:
- JHBToken.totalSupply() (#672-674)
transfer(address,uint256) should be declared external:
- JHBToken.transfer(address,uint256) (#680-683)
allowance(address,address) should be declared external:
- JHBToken.allowance(address,address) (#685-687)
approve(address,uint256) should be declared external:
- JHBToken.approve(address,uint256) (#689-692)
transferFrom(address,address,uint256) should be declared external:
- JHBToken.transferFrom(address,address,uint256) (#694-706)
increaseAllowance(address,uint256) should be declared external:
- JHBToken.increaseAllowance(address,uint256) (#708-715)
decreaseAllowance(address,uint256) should be declared external:
- JHBToken.decreaseAllowance(address,uint256) (#717-727)
totalFees() should be declared external:
- JHBToken.totalFees() (#729-731)
excludeFromFee(address) should be declared external:
- JHBToken.excludeFromFee(address) (#742-744)
excludeFromFeeArray(address[]) should be declared external:
- JHBToken.excludeFromFeeArray(address[]) (#746-750)
includeInFee(address) should be declared external:
- JHBToken.includeInFee(address) (#752-754)
claimTokens() should be declared external:
- JHBToken.claimTokens() (#770-772)
claimToken(IERC20) should be declared external:
- JHBToken.claimToken(IERC20) (#774-776)
isExcludedFromFee(address) should be declared external:
- JHBToken.isExcludedFromFee(address) (#778-780)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find website, listings and other project-related information
Young tokens have high risks of price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Telegram and Twitter accounts