Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Token.setShare(address) (#981-990) uses a dangerous strict equality:
- IERC20(uniswapV2Pair).balanceOf(shareholder) == 0 (#983)
Token.setShare(address) (#981-990) uses a dangerous strict equality:
- IERC20(uniswapV2Pair).balanceOf(shareholder) == 0 (#986)
Token.transferFrom(address,address,uint256) (#760-776) uses a dangerous strict equality:
- _startTimeForSwap == 0 && recipient == uniswapV2Pair (#765)
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)
Token._takeInviterFee(address,address,uint256) (#1026-1062) performs a multiplication on the result of a division:
-_tOwned[marketAddr] = _tOwned[marketAddr].add(tAmount.div(10000).mul(_inviterFee)) (#1038)
Token._takeInviterFee(address,address,uint256) (#1026-1062) performs a multiplication on the result of a division:
-Transfer(sender,marketAddr,tAmount.div(10000).mul(_inviterFee)) (#1039)
Token._takeInviterFee(address,address,uint256) (#1026-1062) performs a multiplication on the result of a division:
-_tOwned[marketAddr] = _tOwned[marketAddr].add(tAmount.div(10000).mul(_inviterFee.sub(accurRate))) (#1060)
Token._takeInviterFee(address,address,uint256) (#1026-1062) performs a multiplication on the result of a division:
-Transfer(sender,marketAddr,tAmount.div(10000).mul(_inviterFee.sub(accurRate))) (#1061)
Token._takeInviterFee(address,address,uint256) (#1026-1062) performs a multiplication on the result of a division:
-curTAmount = tAmount.div(10000).mul(rate) (#1056)
Token._takeTransfer(address,address,uint256,uint256) (#1078-1088) performs a multiplication on the result of a division:
-rAmount = tAmount.div(10000).mul(currentRate) (#1085)
Token._transferStandard(address,address,uint256) (#1090-1116) performs a multiplication on the result of a division:
-_takeburnFee(sender,tAmount.div(10000).mul(_burnFee)) (#1098)
Token._transferStandard(address,address,uint256) (#1090-1116) performs a multiplication on the result of a division:
-_takeLPFee(sender,tAmount.div(10000).mul(_LPFee)) (#1102)
Token._transferStandard(address,address,uint256) (#1090-1116) performs a multiplication on the result of a division:
-_tOwned[recipient] = _tOwned[recipient].add(tAmount.div(10000).mul(recipientRate)) (#1112-1114)
Token._transferStandard(address,address,uint256) (#1090-1116) performs a multiplication on the result of a division:
-Transfer(sender,recipient,tAmount.div(10000).mul(recipientRate)) (#1115)
Consider ordering multiplication before division.
Additional information: link
Reentrancy in Token._transfer(address,address,uint256) (#857-939):
External calls:
- swapTokensForTokens(contractTokenBalance) (#920)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1160-1166)
- dividendMarketAddr(tokenBal.mul(_marketingFee).div(_LPFee.add(_marketingFee))) (#935)
- (b1) = TOKEN.call(abi.encodeWithSignature(transfer(address,uint256),shareholder,amount)) (#976)
- process(distributorGas) (#936)
- (b1) = TOKEN.call(abi.encodeWithSignature(transfer(address,uint256),shareholder,amount)) (#976)
State variables written after the call(s):
- LPFeefenhong = block.timestamp (#937)
Reentrancy in Token.process(uint256) (#942-973):
External calls:
- distributeDividend(shareholders[currentIndex],amount) (#967)
- (b1) = TOKEN.call(abi.encodeWithSignature(transfer(address,uint256),shareholder,amount)) (#976)
State variables written after the call(s):
- currentIndex ++ (#970)
Apply the check-effects-interactions pattern.
Additional information: link
Token.allowance(address,address).owner (#735) shadows:
- Ownable.owner() (#99-101) (function)
Token._approve(address,address,uint256).owner (#846) shadows:
- Ownable.owner() (#99-101) (function)
Rename the local variables that shadow another component.
Additional information: link
Token.setSwapTokensAtAmount(uint256) (#1135-1137) should emit an event for:
- swapTokensAtAmount = value (#1136)
Token.setMinLPDividendToken(uint256) (#1183-1185) should emit an event for:
- minLPDividendToken = _minLPDividendToken (#1184)
Emit an event for critical parameter changes.
Additional information: link
Reentrancy in Token._transfer(address,address,uint256) (#857-939):
External calls:
- swapTokensForTokens(contractTokenBalance) (#920)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1160-1166)
State variables written after the call(s):
- setShare(fromAddress) (#929)
- _updated[shareholder] = false (#997)
- _updated[shareholder] = true (#988)
- setShare(toAddress) (#930)
- _updated[shareholder] = false (#997)
- _updated[shareholder] = true (#988)
- fromAddress = from (#927)
- fromAddress = from (#932)
- setShare(fromAddress) (#929)
- shareholderIndexes[shareholder] = shareholders.length (#992)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#1001)
- setShare(toAddress) (#930)
- shareholderIndexes[shareholder] = shareholders.length (#992)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#1001)
- setShare(fromAddress) (#929)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#1000)
- shareholders.push(shareholder) (#993)
- shareholders.pop() (#1002)
- setShare(toAddress) (#930)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#1000)
- shareholders.push(shareholder) (#993)
- shareholders.pop() (#1002)
- toAddress = to (#928)
- toAddress = to (#933)
Reentrancy in Token.constructor(string,string,uint8,uint256,address[6],uint256[3],uint256[3],uint256,uint256) (#651-704):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#685-686)
State variables written after the call(s):
- TOKEN = addrs[5] (#698)
- _isExcludedFromFee[msg.sender] = true (#692)
- _isExcludedFromFee[adminAddress] = true (#693)
- _isExcludedFromFee[address(this)] = true (#694)
- isDividendExempt[address(this)] = true (#695)
- isDividendExempt[address(0)] = true (#696)
- isDividendExempt[address(0xdead)] = true (#697)
- swapTokensAtAmount = _tTotal.mul(2).div(10 ** 6) (#699)
- uniswapV2Router = _uniswapV2Router (#689)
Reentrancy in Token.transferFrom(address,address,uint256) (#760-776):
External calls:
- _transfer(sender,recipient,amount) (#766)
- (b1) = TOKEN.call(abi.encodeWithSignature(transfer(address,uint256),shareholder,amount)) (#976)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1160-1166)
State variables written after the call(s):
- _approve(sender,msg.sender,_allowances[sender][msg.sender].sub(amount,ERC20: transfer amount exceeds allowance)) (#767-774)
- _allowances[owner][spender] = amount (#853)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in Token.constructor(string,string,uint8,uint256,address[6],uint256[3],uint256[3],uint256,uint256) (#651-704):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#685-686)
Event emitted after the call(s):
- Transfer(address(0),adminAddress,_tTotal) (#701)
Reentrancy in Token.transferFrom(address,address,uint256) (#760-776):
External calls:
- _transfer(sender,recipient,amount) (#766)
- (b1) = TOKEN.call(abi.encodeWithSignature(transfer(address,uint256),shareholder,amount)) (#976)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1160-1166)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#854)
- _approve(sender,msg.sender,_allowances[sender][msg.sender].sub(amount,ERC20: transfer amount exceeds allowance)) (#767-774)
Apply the check-effects-interactions pattern.
Additional information: link
Token.transferFrom(address,address,uint256) (#760-776) uses timestamp for comparisons
Dangerous comparisons:
- _startTimeForSwap == 0 && recipient == uniswapV2Pair (#765)
Token._transfer(address,address,uint256) (#857-939) uses timestamp for comparisons
Dangerous comparisons:
- (_startTimeForSwap + _limitTimeMaxTx) > block.timestamp && to != uniswapV2Pair && from == uniswapV2Pair (#867)
- _startTimeForSwap + _intervalSecondsForSwap > block.timestamp (#875)
- tokenBal >= minLPDividendToken && from != address(this) && LPFeefenhong.add(minPeriod) <= block.timestamp (#934)
Avoid relying on block.timestamp.
Additional information: link
Low level call in Token.distributeDividend(address,uint256) (#975-978):
- (b1) = TOKEN.call(abi.encodeWithSignature(transfer(address,uint256),shareholder,amount)) (#976)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#301) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#303) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#334) is not in mixedCase
Function IUniswapV2Router01.WETH() (#380) is not in mixedCase
Parameter Token.transferTokensAvg(address[],uint256)._tos (#1169) is not in mixedCase
Parameter Token.setMinLPDividendToken(uint256)._minLPDividendToken (#1183) is not in mixedCase
Parameter Token.setDividendExempt(address,bool)._value (#1187) is not in mixedCase
Variable Token.TOKEN (#595) is not in mixedCase
Variable Token._name (#598) is not in mixedCase
Variable Token._symbol (#599) is not in mixedCase
Variable Token._decimals (#600) is not in mixedCase
Variable Token._burnFee (#604) is not in mixedCase
Variable Token._LPFee (#608) is not in mixedCase
Variable Token._marketingFee (#611) is not in mixedCase
Variable Token._inviterFee (#614) is not in mixedCase
Variable Token.LPFeefenhong (#620) is not in mixedCase
Variable Token._startTimeForSwap (#634) is not in mixedCase
Variable Token._limitTimeMaxTx (#645) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#385) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#386)
Prevent variables from having similar names.
Additional information: link
Token.slitherConstructorVariables() (#583-1205) uses literals with too many digits:
- distributorGas = 500000 (#618)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Ownable._previousOwner (#87) is never used in Token (#583-1205)
Ownable._lockTime (#88) is never used in Token (#583-1205)
Remove unused state variables.
Additional information: link
Ownable._lockTime (#88) should be constant
Ownable._previousOwner (#87) should be constant
Token._intervalSecondsForSwap (#635) should be constant
Token._limitTimeMaxTx (#645) should be constant
Token.distributorGas (#618) should be constant
Token.minPeriod (#619) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#108-111)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#113-117)
name() should be declared external:
- Token.name() (#706-708)
symbol() should be declared external:
- Token.symbol() (#710-712)
decimals() should be declared external:
- Token.decimals() (#714-716)
totalSupply() should be declared external:
- Token.totalSupply() (#718-720)
transfer(address,uint256) should be declared external:
- Token.transfer(address,uint256) (#726-733)
allowance(address,address) should be declared external:
- Token.allowance(address,address) (#735-742)
approve(address,uint256) should be declared external:
- Token.approve(address,uint256) (#744-758)
transferFrom(address,address,uint256) should be declared external:
- Token.transferFrom(address,address,uint256) (#760-776)
increaseAllowance(address,uint256) should be declared external:
- Token.increaseAllowance(address,uint256) (#778-789)
decreaseAllowance(address,uint256) should be declared external:
- Token.decreaseAllowance(address,uint256) (#791-805)
isExcludedFromFee(address) should be declared external:
- Token.isExcludedFromFee(address) (#809-811)
excludeFromFee(address) should be declared external:
- Token.excludeFromFee(address) (#812-814)
includeInFee(address) should be declared external:
- Token.includeInFee(address) (#816-818)
setBot(address,bool) should be declared external:
- Token.setBot(address,bool) (#1119-1121)
getBot(address) should be declared external:
- Token.getBot(address) (#1123-1125)
transferContracts() should be declared external:
- Token.transferContracts() (#1131-1133)
setSwapTokensAtAmount(uint256) should be declared external:
- Token.setSwapTokensAtAmount(uint256) (#1135-1137)
transferTokensAvg(address[],uint256) should be declared external:
- Token.transferTokensAvg(address[],uint256) (#1169-1178)
testDividend(uint256) should be declared external:
- Token.testDividend(uint256) (#1179-1181)
setMinLPDividendToken(uint256) should be declared external:
- Token.setMinLPDividendToken(uint256) (#1183-1185)
setDividendExempt(address,bool) should be declared external:
- Token.setDividendExempt(address,bool) (#1187-1189)
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 scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Telegram and Twitter accounts