Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
VLAD.swapBack() (#282-322) sends eth to arbitrary user
Dangerous calls:
- (MarketingSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#312)
- (charitySuccess) = address(charityFeeReceiver).call{gas: 30000,value: amountBNBcharity}() (#314)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBbuyback}() (#316)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in VLAD._transferFrom(address,address,uint256) (#205-238):
External calls:
- swapBack() (#229)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#298-304)
- (MarketingSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#312)
- (charitySuccess) = address(charityFeeReceiver).call{gas: 30000,value: amountBNBcharity}() (#314)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBbuyback}() (#316)
External calls sending eth:
- swapBack() (#229)
- (MarketingSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#312)
- (charitySuccess) = address(charityFeeReceiver).call{gas: 30000,value: amountBNBcharity}() (#314)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBbuyback}() (#316)
- address(WBNB).transfer(totalBNBFee) (#320)
State variables written after the call(s):
- _balances[sender] = _balances[sender] - amount (#231)
- _balances[recipient] = _balances[recipient] + amountReceived (#234)
- amountReceived = takeFee(recipient,amount) (#233)
- _balances[address(this)] = _balances[address(this)] + (feeAmount) (#269)
Apply the check-effects-interactions pattern.
Additional information: link
Combination 1: Reentrancy vulnerabilities + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
VLAD.takeFee(address,uint256) (#266-273) performs a multiplication on the result of a division:
-feeAmount = amount / 100 * (totalFee + 2) (#267)
VLAD.setSwapBackSettings(bool,uint256,uint256) (#367-371) performs a multiplication on the result of a division:
-swapThreshold = _totalSupply / (10000) * (_percentage_min_base10000) (#369)
VLAD.setSwapBackSettings(bool,uint256,uint256) (#367-371) performs a multiplication on the result of a division:
-maxSwapSize = _totalSupply / (10000) * (_percentage_max_base10000) (#370)
VLAD.setMaxWalletPercent_base1000(uint256) (#381-383) performs a multiplication on the result of a division:
-_maxWalletToken = _totalSupply / (1000) * (maxWallPercent_base1000) (#382)
VLAD.setMaxBuyTxPercent_base1000(uint256) (#385-387) performs a multiplication on the result of a division:
-_maxBuyTxAmount = _totalSupply / (1000) * (maxBuyTXPercentage_base1000) (#386)
VLAD.setMaxSellTxPercent_base1000(uint256) (#389-391) performs a multiplication on the result of a division:
-_maxSellTxAmount = _totalSupply / (1000) * (maxSellTXPercentage_base1000) (#390)
VLAD.slitherConstructorVariables() (#109-408) performs a multiplication on the result of a division:
-_maxBuyTxAmount = _totalSupply / (100) * (2) (#142)
VLAD.slitherConstructorVariables() (#109-408) performs a multiplication on the result of a division:
-_maxSellTxAmount = _totalSupply / (100) * (1) (#143)
VLAD.slitherConstructorVariables() (#109-408) performs a multiplication on the result of a division:
-_maxWalletToken = _totalSupply / (100) * (3) (#144)
VLAD.slitherConstructorVariables() (#109-408) performs a multiplication on the result of a division:
-swapThreshold = _totalSupply / 1000 * 1 (#155)
VLAD.slitherConstructorVariables() (#109-408) performs a multiplication on the result of a division:
-maxSwapSize = _totalSupply / 100 * 1 (#156)
Consider ordering multiplication before division.
Additional information: link
VLAD.setBuyFees(uint256,uint256,uint256) (#347-352) should emit an event for:
- BuycharityFee = _charityFee (#348)
- BuymarketingFee = _marketingFee (#349)
- BuybuybackFee = _buybackFee (#350)
- BuytotalFee = (_charityFee) + (_marketingFee) + (_buybackFee) (#351)
VLAD.setSellFees(uint256,uint256,uint256) (#354-359) should emit an event for:
- SellcharityFee = _charityFee (#355)
- SellmarketingFee = _marketingFee (#356)
- SellbuybackFee = _buybackFee (#357)
- SelltotalFee = (_charityFee) + (_marketingFee) + (_buybackFee) (#358)
VLAD.setSwapBackSettings(bool,uint256,uint256) (#367-371) should emit an event for:
- swapThreshold = _totalSupply / (10000) * (_percentage_min_base10000) (#369)
- maxSwapSize = _totalSupply / (10000) * (_percentage_max_base10000) (#370)
VLAD.setMaxWalletPercent_base1000(uint256) (#381-383) should emit an event for:
- _maxWalletToken = _totalSupply / (1000) * (maxWallPercent_base1000) (#382)
VLAD.setMaxBuyTxPercent_base1000(uint256) (#385-387) should emit an event for:
- _maxBuyTxAmount = _totalSupply / (1000) * (maxBuyTXPercentage_base1000) (#386)
VLAD.setMaxSellTxPercent_base1000(uint256) (#389-391) should emit an event for:
- _maxSellTxAmount = _totalSupply / (1000) * (maxSellTXPercentage_base1000) (#390)
Emit an event for critical parameter changes.
Additional information: link
VLAD.setFeeReceivers(address,address,address)._marketingFeeReceiver (#361) lacks a zero-check on :
- marketingFeeReceiver = _marketingFeeReceiver (#362)
VLAD.setFeeReceivers(address,address,address)._buybackFeeReceiver (#361) lacks a zero-check on :
- buybackFeeReceiver = _buybackFeeReceiver (#363)
VLAD.setFeeReceivers(address,address,address)._charityFeeReceiver (#361) lacks a zero-check on :
- charityFeeReceiver = _charityFeeReceiver (#364)
Check that the address is not zero.
Additional information: link
Reentrancy in VLAD.constructor() (#162-172):
External calls:
- pair = IDEXFactory(router.factory()).createPair(router.WETH(),address(this)) (#164)
State variables written after the call(s):
- _allowances[address(this)][address(router)] = type()(uint256).max (#165)
- _balances[msg.sender] = _totalSupply (#170)
- isFeeExempt[msg.sender] = true (#167)
- isTxLimitExempt[msg.sender] = true (#168)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in VLAD._transferFrom(address,address,uint256) (#205-238):
External calls:
- swapBack() (#229)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#298-304)
- (MarketingSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#312)
- (charitySuccess) = address(charityFeeReceiver).call{gas: 30000,value: amountBNBcharity}() (#314)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBbuyback}() (#316)
External calls sending eth:
- swapBack() (#229)
- (MarketingSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#312)
- (charitySuccess) = address(charityFeeReceiver).call{gas: 30000,value: amountBNBcharity}() (#314)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBbuyback}() (#316)
- address(WBNB).transfer(totalBNBFee) (#320)
Event emitted after the call(s):
- Transfer(sender,address(this),feeAmount) (#270)
- amountReceived = takeFee(recipient,amount) (#233)
- Transfer(sender,recipient,amountReceived) (#236)
Reentrancy in VLAD.constructor() (#162-172):
External calls:
- pair = IDEXFactory(router.factory()).createPair(router.WETH(),address(this)) (#164)
Event emitted after the call(s):
- Transfer(address(0),msg.sender,_totalSupply) (#171)
Apply the check-effects-interactions pattern.
Additional information: link
VLAD.BuytotalFee (#134) is set pre-construction with a non-constant function or state variable:
- BuybuybackFee + BuycharityFee + BuymarketingFee
VLAD.SelltotalFee (#139) is set pre-construction with a non-constant function or state variable:
- SellbuybackFee + SellcharityFee + SellmarketingFee
VLAD._maxBuyTxAmount (#142) is set pre-construction with a non-constant function or state variable:
- _totalSupply / (100) * (2)
VLAD._maxSellTxAmount (#143) is set pre-construction with a non-constant function or state variable:
- _totalSupply / (100) * (1)
VLAD._maxWalletToken (#144) is set pre-construction with a non-constant function or state variable:
- _totalSupply / (100) * (3)
VLAD.swapThreshold (#155) is set pre-construction with a non-constant function or state variable:
- _totalSupply / 1000 * 1
VLAD.maxSwapSize (#156) is set pre-construction with a non-constant function or state variable:
- _totalSupply / 100 * 1
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
Low level call in VLAD.swapBack() (#282-322):
- (MarketingSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#312)
- (charitySuccess) = address(charityFeeReceiver).call{gas: 30000,value: amountBNBcharity}() (#314)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBbuyback}() (#316)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IDEXRouter.WETH() (#59) is not in mixedCase
Parameter VLAD.setBuyFees(uint256,uint256,uint256)._charityFee (#347) is not in mixedCase
Parameter VLAD.setBuyFees(uint256,uint256,uint256)._marketingFee (#347) is not in mixedCase
Parameter VLAD.setBuyFees(uint256,uint256,uint256)._buybackFee (#347) is not in mixedCase
Parameter VLAD.setSellFees(uint256,uint256,uint256)._charityFee (#354) is not in mixedCase
Parameter VLAD.setSellFees(uint256,uint256,uint256)._marketingFee (#354) is not in mixedCase
Parameter VLAD.setSellFees(uint256,uint256,uint256)._buybackFee (#354) is not in mixedCase
Parameter VLAD.setFeeReceivers(address,address,address)._marketingFeeReceiver (#361) is not in mixedCase
Parameter VLAD.setFeeReceivers(address,address,address)._charityFeeReceiver (#361) is not in mixedCase
Parameter VLAD.setFeeReceivers(address,address,address)._buybackFeeReceiver (#361) is not in mixedCase
Parameter VLAD.setSwapBackSettings(bool,uint256,uint256)._enabled (#367) is not in mixedCase
Parameter VLAD.setSwapBackSettings(bool,uint256,uint256)._percentage_min_base10000 (#367) is not in mixedCase
Parameter VLAD.setSwapBackSettings(bool,uint256,uint256)._percentage_max_base10000 (#367) is not in mixedCase
Function VLAD.setMaxWalletPercent_base1000(uint256) (#381-383) is not in mixedCase
Parameter VLAD.setMaxWalletPercent_base1000(uint256).maxWallPercent_base1000 (#381) is not in mixedCase
Function VLAD.setMaxBuyTxPercent_base1000(uint256) (#385-387) is not in mixedCase
Parameter VLAD.setMaxBuyTxPercent_base1000(uint256).maxBuyTXPercentage_base1000 (#385) is not in mixedCase
Function VLAD.setMaxSellTxPercent_base1000(uint256) (#389-391) is not in mixedCase
Parameter VLAD.setMaxSellTxPercent_base1000(uint256).maxSellTXPercentage_base1000 (#389) is not in mixedCase
Variable VLAD.WBNB (#111) is not in mixedCase
Variable VLAD.DEAD (#112) is not in mixedCase
Variable VLAD.ZERO (#113) is not in mixedCase
Constant VLAD._name (#115) is not in UPPER_CASE_WITH_UNDERSCORES
Constant VLAD._symbol (#116) is not in UPPER_CASE_WITH_UNDERSCORES
Constant VLAD._decimals (#117) is not in UPPER_CASE_WITH_UNDERSCORES
Variable VLAD._totalSupply (#118) is not in mixedCase
Variable VLAD._balances (#120) is not in mixedCase
Variable VLAD._allowances (#121) is not in mixedCase
Variable VLAD.BuybuybackFee (#131) is not in mixedCase
Variable VLAD.BuymarketingFee (#132) is not in mixedCase
Variable VLAD.BuycharityFee (#133) is not in mixedCase
Variable VLAD.BuytotalFee (#134) is not in mixedCase
Variable VLAD.SellbuybackFee (#136) is not in mixedCase
Variable VLAD.SellmarketingFee (#137) is not in mixedCase
Variable VLAD.SellcharityFee (#138) is not in mixedCase
Variable VLAD.SelltotalFee (#139) is not in mixedCase
Variable VLAD._maxBuyTxAmount (#142) is not in mixedCase
Variable VLAD._maxSellTxAmount (#143) is not in mixedCase
Variable VLAD._maxWalletToken (#144) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Reentrancy in VLAD._transferFrom(address,address,uint256) (#205-238):
External calls:
- swapBack() (#229)
- address(WBNB).transfer(totalBNBFee) (#320)
External calls sending eth:
- swapBack() (#229)
- (MarketingSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#312)
- (charitySuccess) = address(charityFeeReceiver).call{gas: 30000,value: amountBNBcharity}() (#314)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBbuyback}() (#316)
- address(WBNB).transfer(totalBNBFee) (#320)
State variables written after the call(s):
- _balances[sender] = _balances[sender] - amount (#231)
- _balances[recipient] = _balances[recipient] + amountReceived (#234)
- amountReceived = takeFee(recipient,amount) (#233)
- _balances[address(this)] = _balances[address(this)] + (feeAmount) (#269)
Event emitted after the call(s):
- Transfer(sender,address(this),feeAmount) (#270)
- amountReceived = takeFee(recipient,amount) (#233)
- Transfer(sender,recipient,amountReceived) (#236)
Apply the check-effects-interactions pattern.
Additional information: link
Variable IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#64) is too similar to IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#65)
Variable VLAD.setSwapBackSettings(bool,uint256,uint256)._percentage_max_base10000 (#367) is too similar to VLAD.setSwapBackSettings(bool,uint256,uint256)._percentage_min_base10000 (#367)
Prevent variables from having similar names.
Additional information: link
VLAD.slitherConstructorVariables() (#109-408) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#112)
VLAD.slitherConstructorVariables() (#109-408) uses literals with too many digits:
- ZERO = 0x0000000000000000000000000000000000000000 (#113)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Ownable._previousOwner (#26) is never used in VLAD (#109-408)
VLAD.ZERO (#113) is never used in VLAD (#109-408)
Remove unused state variables.
Additional information: link
Ownable._previousOwner (#26) should be constant
VLAD.DEAD (#112) should be constant
VLAD.WBNB (#111) should be constant
VLAD.ZERO (#113) should be constant
VLAD._totalSupply (#118) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#42-46)
rescueToken(address,uint256) should be declared external:
- VLAD.rescueToken(address,uint256) (#399-401)
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