Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
UNIPAD.swapETHForTokens(uint256) (#794-807) sends eth to arbitrary user
Dangerous calls:
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
UNIPAD.addLiquidity(uint256,uint256) (#835-848) sends eth to arbitrary user
Dangerous calls:
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in UNIPAD._transfer(address,address,uint256) (#715-760):
External calls:
- buyBackTokens(balance.div(100)) (#751)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- swapAndLiquify(swapTokensAtAmount) (#754)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#859-865)
External calls sending eth:
- buyBackTokens(balance.div(100)) (#751)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- swapAndLiquify(swapTokensAtAmount) (#754)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- address(operationsAddress).transfer(operationsAmt) (#831)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- _rOwned[marketingAddress] += rMarketing (#639)
- _rOwned[address(this)] += rOperations (#608)
- _rOwned[address(this)] += rLiquidity (#629)
- _rOwned[address(this)] += rBuyback (#619)
- _rOwned[sender] = _rOwned[sender] - s.rAmount (#775)
- _rOwned[recipient] = _rOwned[recipient] + s.rTransferAmount (#776)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- _rTotal -= rRfi (#599)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- _tOwned[sender] = _tOwned[sender] - tAmount (#769)
- _tOwned[address(this)] += tLiquidity (#627)
- _tOwned[address(this)] += tBuyback (#617)
- _tOwned[marketingAddress] += tMarketing (#637)
- _tOwned[address(this)] += tOperations (#606)
- _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount (#772)
- swapAndLiquify(swapTokensAtAmount) (#754)
- swapping = true (#427)
- swapping = false (#429)
Apply the check-effects-interactions pattern.
Additional information: link
UNIPAD.rescueBEP20Tokens(address) (#918-920) ignores return value by IERC20(tokenAddress).transfer(msg.sender,IERC20(tokenAddress).balanceOf(address(this))) (#919)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
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.
Combination 2: Unchecked transfer + 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.
Combination 3: Reentrancy vulnerabilities + Unchecked transfer vulnerability. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
UNIPAD.swapAndLiquify(uint256) (#809-833) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - feeRates.liquidity) (#820)
-bnbToAddLiquidityWith = unitBalance * feeRates.liquidity (#821)
UNIPAD.swapAndLiquify(uint256) (#809-833) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - feeRates.liquidity) (#820)
-operationsAmt = unitBalance * 2 * feeRates.operations (#829)
Consider ordering multiplication before division.
Additional information: link
Reentrancy in UNIPAD.setRouterAddress(address) (#923-934):
External calls:
- pair = IFactory(_newRouter.factory()).createPair(address(this),_newRouter.WETH()) (#928)
State variables written after the call(s):
- router = _newRouter (#933)
Apply the check-effects-interactions pattern.
Additional information: link
UNIPAD._transfer(address,address,uint256).isSale (#756) is a local variable never initialized
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
UNIPAD.addLiquidity(uint256,uint256) (#835-848) ignores return value by router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
Ensure that all the return values of the function calls are used.
Additional information: link
UNIPAD.allowance(address,address).owner (#474) shadows:
- Ownable.owner() (#269-271) (function)
UNIPAD._approve(address,address,uint256).owner (#708) shadows:
- Ownable.owner() (#269-271) (function)
Rename the local variables that shadow another component.
Additional information: link
UNIPAD.setMaxWalletPercent(uint256) (#574-578) should emit an event for:
- _maxWalletSize = _tTotal.mul(maxWallPercent).div(10 ** 2) (#575-577)
UNIPAD.setMaxBuyAndSellAmount(uint256,uint256) (#882-885) should emit an event for:
- maxBuyAmount = _maxBuyamount * 10 ** 9 (#883)
- maxSellAmount = _maxSellAmount * 10 ** 9 (#884)
UNIPAD.updateSwapTokensAtAmount(uint256) (#887-889) should emit an event for:
- swapTokensAtAmount = amount * 10 ** _decimals (#888)
UNIPAD.setBuybackUpperLimit(uint256) (#904-906) should emit an event for:
- buyBackUpperLimit = buyBackLimit * 10 ** 15 (#905)
Emit an event for critical parameter changes.
Additional information: link
Reentrancy in UNIPAD._transfer(address,address,uint256) (#715-760):
External calls:
- buyBackTokens(balance.div(100)) (#751)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- swapAndLiquify(swapTokensAtAmount) (#754)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#859-865)
External calls sending eth:
- buyBackTokens(balance.div(100)) (#751)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- swapAndLiquify(swapTokensAtAmount) (#754)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- address(operationsAddress).transfer(operationsAmt) (#831)
State variables written after the call(s):
- swapAndLiquify(swapTokensAtAmount) (#754)
- _allowances[owner][spender] = amount (#711)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- totFeesPaid.liquidity += tLiquidity (#623)
- totFeesPaid.buyBack += tBuyback (#613)
- totFeesPaid.operations += tOperations (#604)
- totFeesPaid.marketing += tMarketing (#633)
- totFeesPaid.rfi += tRfi (#600)
Reentrancy in UNIPAD.constructor() (#432-446):
External calls:
- _pair = IFactory(_router.factory()).createPair(address(this),_router.WETH()) (#434-435)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (#441)
- _isExcludedFromFee[marketingAddress] = true (#442)
- _isExcludedFromFee[operationsAddress] = true (#443)
- _rOwned[owner()] = _rTotal (#440)
- pair = _pair (#438)
- router = _router (#437)
Reentrancy in UNIPAD.swapAndLiquify(uint256) (#809-833):
External calls:
- swapTokensForBNB(toSwap) (#817)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#859-865)
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#825)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
External calls sending eth:
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#825)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
State variables written after the call(s):
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#825)
- _allowances[owner][spender] = amount (#711)
Reentrancy in UNIPAD.transferFrom(address,address,uint256) (#483-487):
External calls:
- _transfer(sender,recipient,amount) (#484)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#859-865)
External calls sending eth:
- _transfer(sender,recipient,amount) (#484)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- address(operationsAddress).transfer(operationsAmt) (#831)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#485)
- _allowances[owner][spender] = amount (#711)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in UNIPAD._transfer(address,address,uint256) (#715-760):
External calls:
- buyBackTokens(balance.div(100)) (#751)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- swapAndLiquify(swapTokensAtAmount) (#754)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#859-865)
External calls sending eth:
- buyBackTokens(balance.div(100)) (#751)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- swapAndLiquify(swapTokensAtAmount) (#754)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- address(operationsAddress).transfer(operationsAmt) (#831)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#712)
- swapAndLiquify(swapTokensAtAmount) (#754)
- Transfer(sender,recipient,s.tTransferAmount) (#782)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- Transfer(sender,address(this),s.tLiquidity + s.tOperations + s.tBuyback) (#783)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- Transfer(sender,marketingAddress,s.tMarketing) (#784)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
Reentrancy in UNIPAD.constructor() (#432-446):
External calls:
- _pair = IFactory(_router.factory()).createPair(address(this),_router.WETH()) (#434-435)
Event emitted after the call(s):
- Transfer(address(0),owner(),_tTotal) (#445)
Reentrancy in UNIPAD.swapAndLiquify(uint256) (#809-833):
External calls:
- swapTokensForBNB(toSwap) (#817)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#859-865)
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#825)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
External calls sending eth:
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#825)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#712)
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#825)
Reentrancy in UNIPAD.transferFrom(address,address,uint256) (#483-487):
External calls:
- _transfer(sender,recipient,amount) (#484)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#859-865)
External calls sending eth:
- _transfer(sender,recipient,amount) (#484)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- address(operationsAddress).transfer(operationsAmt) (#831)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#712)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#485)
Apply the check-effects-interactions pattern.
Additional information: link
Address.isContract(address) (#157-164) uses assembly
- INLINE ASM (#160-162)
Address._verifyCallResult(bool,bytes,string) (#236-254) uses assembly
- INLINE ASM (#246-249)
Do not use evm assembly.
Additional information: link
UNIPAD.includeInReward(address) (#547-558) has costly operations inside a loop:
- _excluded.pop() (#554)
Use a local variable to hold the loop computation result.
Additional information: link
Address._verifyCallResult(bool,bytes,string) (#236-254) is never used and should be removed
Address.functionCall(address,bytes) (#173-175) is never used and should be removed
Address.functionCall(address,bytes,string) (#177-183) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#185-191) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#193-204) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#221-223) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#225-234) is never used and should be removed
Address.functionStaticCall(address,bytes) (#206-208) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#210-219) is never used and should be removed
Address.isContract(address) (#157-164) is never used and should be removed
Address.sendValue(address,uint256) (#166-171) is never used and should be removed
Context._msgData() (#148-151) is never used and should be removed
SafeMath.div(uint256,uint256,string) (#118-127) is never used and should be removed
SafeMath.mod(uint256,uint256) (#103-105) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#129-138) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (#49-55) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (#73-78) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (#80-85) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (#64-71) is never used and should be removed
SafeMath.trySub(uint256,uint256) (#57-62) is never used and should be removed
Remove unused functions.
Additional information: link
UNIPAD._rTotal (#356) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
UNIPAD.maxBuyAmount (#358) is set pre-construction with a non-constant function or state variable:
- _tTotal.mul(3).div(100)
UNIPAD.maxSellAmount (#359) is set pre-construction with a non-constant function or state variable:
- _tTotal.mul(1).div(10)
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.11 (#23) 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
Low level call in Address.sendValue(address,uint256) (#166-171):
- (success) = recipient.call{value: amount}() (#169)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#193-204):
- (success,returndata) = target.call{value: value}(data) (#202)
Low level call in Address.functionStaticCall(address,bytes,string) (#210-219):
- (success,returndata) = target.staticcall(data) (#217)
Low level call in Address.functionDelegateCall(address,bytes,string) (#225-234):
- (success,returndata) = target.delegatecall(data) (#232)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IRouter.WETH() (#301) is not in mixedCase
Struct UNIPAD.feeRatesStruct (#372-378) is not in CapWords
Struct UNIPAD.valuesFromGetValues (#406-420) is not in CapWords
Parameter UNIPAD.setFeeRates(uint256,uint256,uint256,uint256,uint256)._rfi (#580) is not in mixedCase
Parameter UNIPAD.setFeeRates(uint256,uint256,uint256,uint256,uint256)._operations (#580) is not in mixedCase
Parameter UNIPAD.setFeeRates(uint256,uint256,uint256,uint256,uint256)._marketing (#580) is not in mixedCase
Parameter UNIPAD.setFeeRates(uint256,uint256,uint256,uint256,uint256)._liquidity (#580) is not in mixedCase
Parameter UNIPAD.setFeeRates(uint256,uint256,uint256,uint256,uint256)._buyback (#580) is not in mixedCase
Parameter UNIPAD.setSellFeeRates(uint256,uint256,uint256,uint256,uint256)._rfi (#589) is not in mixedCase
Parameter UNIPAD.setSellFeeRates(uint256,uint256,uint256,uint256,uint256)._operations (#589) is not in mixedCase
Parameter UNIPAD.setSellFeeRates(uint256,uint256,uint256,uint256,uint256)._marketing (#589) is not in mixedCase
Parameter UNIPAD.setSellFeeRates(uint256,uint256,uint256,uint256,uint256)._liquidity (#589) is not in mixedCase
Parameter UNIPAD.setSellFeeRates(uint256,uint256,uint256,uint256,uint256)._buyback (#589) is not in mixedCase
Parameter UNIPAD.setMaxBuyAndSellAmount(uint256,uint256)._maxBuyamount (#882) is not in mixedCase
Parameter UNIPAD.setMaxBuyAndSellAmount(uint256,uint256)._maxSellAmount (#882) is not in mixedCase
Parameter UNIPAD.updateSwapEnabled(bool)._enabled (#891) is not in mixedCase
Parameter UNIPAD.updateBuybackEnabled(bool)._enabled (#895) is not in mixedCase
Parameter UNIPAD.setAntibot(address,bool)._bot (#899) is not in mixedCase
Constant UNIPAD._decimals (#352) is not in UPPER_CASE_WITH_UNDERSCORES
Variable UNIPAD._maxWalletSize (#361) is not in mixedCase
Constant UNIPAD.deadAddress (#366) is not in UPPER_CASE_WITH_UNDERSCORES
Constant UNIPAD._name (#368) is not in UPPER_CASE_WITH_UNDERSCORES
Constant UNIPAD._symbol (#369) is not in UPPER_CASE_WITH_UNDERSCORES
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#149)" inContext (#143-152)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Reentrancy in UNIPAD._transfer(address,address,uint256) (#715-760):
External calls:
- swapAndLiquify(swapTokensAtAmount) (#754)
- address(operationsAddress).transfer(operationsAmt) (#831)
External calls sending eth:
- buyBackTokens(balance.div(100)) (#751)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- swapAndLiquify(swapTokensAtAmount) (#754)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- address(operationsAddress).transfer(operationsAmt) (#831)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- _rOwned[marketingAddress] += rMarketing (#639)
- _rOwned[address(this)] += rOperations (#608)
- _rOwned[address(this)] += rLiquidity (#629)
- _rOwned[address(this)] += rBuyback (#619)
- _rOwned[sender] = _rOwned[sender] - s.rAmount (#775)
- _rOwned[recipient] = _rOwned[recipient] + s.rTransferAmount (#776)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- _rTotal -= rRfi (#599)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- _tOwned[sender] = _tOwned[sender] - tAmount (#769)
- _tOwned[address(this)] += tLiquidity (#627)
- _tOwned[address(this)] += tBuyback (#617)
- _tOwned[marketingAddress] += tMarketing (#637)
- _tOwned[address(this)] += tOperations (#606)
- _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount (#772)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- totFeesPaid.liquidity += tLiquidity (#623)
- totFeesPaid.buyBack += tBuyback (#613)
- totFeesPaid.operations += tOperations (#604)
- totFeesPaid.marketing += tMarketing (#633)
- totFeesPaid.rfi += tRfi (#600)
Event emitted after the call(s):
- Transfer(sender,recipient,s.tTransferAmount) (#782)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- Transfer(sender,address(this),s.tLiquidity + s.tOperations + s.tBuyback) (#783)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
- Transfer(sender,marketingAddress,s.tMarketing) (#784)
- _tokenTransfer(from,to,amount,! (_isExcludedFromFee[from] || _isExcludedFromFee[to]),isSale) (#759)
Reentrancy in UNIPAD.transferFrom(address,address,uint256) (#483-487):
External calls:
- _transfer(sender,recipient,amount) (#484)
- address(operationsAddress).transfer(operationsAmt) (#831)
External calls sending eth:
- _transfer(sender,recipient,amount) (#484)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#840-847)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#801-806)
- address(operationsAddress).transfer(operationsAmt) (#831)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#485)
- _allowances[owner][spender] = amount (#711)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#712)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#485)
Apply the check-effects-interactions pattern.
Additional information: link
Variable UNIPAD.setSellFeeRates(uint256,uint256,uint256,uint256,uint256)._operations (#589) is too similar to UNIPAD._getRValues(UNIPAD.valuesFromGetValues,uint256,bool,uint256).rOperations (#675)
Variable UNIPAD.setSellFeeRates(uint256,uint256,uint256,uint256,uint256)._operations (#589) is too similar to UNIPAD._takeOperations(uint256,uint256).rOperations (#603)
Variable UNIPAD.setSellFeeRates(uint256,uint256,uint256,uint256,uint256)._operations (#589) is too similar to UNIPAD._takeOperations(uint256,uint256).tOperations (#603)
Variable UNIPAD.setFeeRates(uint256,uint256,uint256,uint256,uint256)._operations (#580) is too similar to UNIPAD._takeOperations(uint256,uint256).rOperations (#603)
Variable UNIPAD.setFeeRates(uint256,uint256,uint256,uint256,uint256)._operations (#580) is too similar to UNIPAD._getRValues(UNIPAD.valuesFromGetValues,uint256,bool,uint256).rOperations (#675)
Variable UNIPAD._takeOperations(uint256,uint256).rOperations (#603) is too similar to UNIPAD._takeOperations(uint256,uint256).tOperations (#603)
Variable UNIPAD.setFeeRates(uint256,uint256,uint256,uint256,uint256)._operations (#580) is too similar to UNIPAD._takeOperations(uint256,uint256).tOperations (#603)
Variable UNIPAD._getRValues(UNIPAD.valuesFromGetValues,uint256,bool,uint256).rOperations (#675) is too similar to UNIPAD._takeOperations(uint256,uint256).tOperations (#603)
Prevent variables from having similar names.
Additional information: link
UNIPAD.slitherConstructorVariables() (#330-939) uses literals with too many digits:
- _tTotal = 100000000 * 10 ** _decimals (#355)
UNIPAD.slitherConstructorVariables() (#330-939) uses literals with too many digits:
- swapTokensAtAmount = 500000 * 10 ** _decimals (#360)
UNIPAD.slitherConstructorVariables() (#330-939) uses literals with too many digits:
- _maxWalletSize = 5000000 * 10 ** 9 (#361)
UNIPAD.slitherConstructorConstantVariables() (#330-939) uses literals with too many digits:
- deadAddress = 0x000000000000000000000000000000000000dEaD (#366)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
UNIPAD._tTotal (#355) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#278-280)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#282-285)
name() should be declared external:
- UNIPAD.name() (#449-451)
symbol() should be declared external:
- UNIPAD.symbol() (#452-454)
decimals() should be declared external:
- UNIPAD.decimals() (#455-457)
totalSupply() should be declared external:
- UNIPAD.totalSupply() (#460-462)
transfer(address,uint256) should be declared external:
- UNIPAD.transfer(address,uint256) (#469-472)
allowance(address,address) should be declared external:
- UNIPAD.allowance(address,address) (#474-476)
approve(address,uint256) should be declared external:
- UNIPAD.approve(address,uint256) (#478-481)
transferFrom(address,address,uint256) should be declared external:
- UNIPAD.transferFrom(address,address,uint256) (#483-487)
increaseAllowance(address,uint256) should be declared external:
- UNIPAD.increaseAllowance(address,uint256) (#489-492)
decreaseAllowance(address,uint256) should be declared external:
- UNIPAD.decreaseAllowance(address,uint256) (#494-497)
isExcludedFromReward(address) should be declared external:
- UNIPAD.isExcludedFromReward(address) (#499-501)
deliver(uint256) should be declared external:
- UNIPAD.deliver(uint256) (#503-510)
reflectionFromToken(uint256,bool) should be declared external:
- UNIPAD.reflectionFromToken(uint256,bool) (#513-522)
excludeFromReward(address) should be declared external:
- UNIPAD.excludeFromReward(address) (#538-545)
excludeFromFee(address) should be declared external:
- UNIPAD.excludeFromFee(address) (#561-563)
includeInFee(address) should be declared external:
- UNIPAD.includeInFee(address) (#565-567)
isExcludedFromFee(address) should be declared external:
- UNIPAD.isExcludedFromFee(address) (#570-572)
isBot(address) should be declared external:
- UNIPAD.isBot(address) (#908-910)
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