Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
DogeArm._claimBNBTo(address,address,uint256) (#567-578) sends eth to arbitrary user
Dangerous calls:
- (sent) = to.call{value: (amountWei)}() (#574)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in DogeArm._claimBNBTo(address,address,uint256) (#567-578):
External calls:
- (sent) = to.call{value: (amountWei)}() (#574)
State variables written after the call(s):
- _isWithdrawing = false (#576)
Reentrancy in DogeArm._taxedTransfer(address,address,uint256,bool,bool) (#894-942):
External calls:
- claimToken(recipient,MainReward,0) (#915)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
- _swapContractToken(AutoLPThreshold,false) (#932)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#841-847)
- (sent) = to.call{value: (amountWei)}() (#574)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#915)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
- _swapContractToken(AutoLPThreshold,false) (#932)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- (sent) = to.call{value: (amountWei)}() (#574)
State variables written after the call(s):
- _removeToken(sender,amount) (#936)
- _balances[addr] = newAmount (#746)
- _balances[addr] = newAmount (#752)
- _addToken(address(this),contractToken) (#937)
- _balances[addr] = newAmount (#728)
- _balances[addr] = newAmount (#734)
- _balances[addr] = newAmount (#739)
- _addToken(recipient,taxedAmount) (#940)
- _balances[addr] = newAmount (#728)
- _balances[addr] = newAmount (#734)
- _balances[addr] = newAmount (#739)
- _swapContractToken(AutoLPThreshold,false) (#932)
- _isWithdrawing = true (#570)
- _isWithdrawing = false (#576)
- _removeToken(sender,amount) (#936)
- _totalShares -= amount (#749)
- _addToken(address(this),contractToken) (#937)
- _totalShares += amount (#731)
- _addToken(recipient,taxedAmount) (#940)
- _totalShares += amount (#731)
- _removeToken(sender,amount) (#936)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#753)
- _addToken(address(this),contractToken) (#937)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#735)
- _addToken(recipient,taxedAmount) (#940)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#735)
- _swapContractToken(AutoLPThreshold,false) (#932)
- alreadyPaidMisc[addr] = miscRewardShare * _balances[addr] (#589)
- _removeToken(sender,amount) (#936)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#755)
- _addToken(address(this),contractToken) (#937)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#737)
- _addToken(recipient,taxedAmount) (#940)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#737)
- _swapContractToken(AutoLPThreshold,false) (#932)
- mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#790)
- _swapContractToken(AutoLPThreshold,false) (#932)
- miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#791)
- _removeToken(sender,amount) (#936)
- toBePaidMain[addr] += mainPayment (#754)
- _addToken(address(this),contractToken) (#937)
- toBePaidMain[addr] += mainPayment (#736)
- _addToken(recipient,taxedAmount) (#940)
- toBePaidMain[addr] += mainPayment (#736)
- _swapContractToken(AutoLPThreshold,false) (#932)
- toBePaidMisc[addr] -= amount (#585)
- toBePaidMisc[addr] += newAmount (#590)
- toBePaidMisc[addr] -= amount (#591)
- _removeToken(sender,amount) (#936)
- toBePaidMisc[addr] += miscPayment (#756)
- _addToken(address(this),contractToken) (#937)
- toBePaidMisc[addr] += miscPayment (#738)
- _addToken(recipient,taxedAmount) (#940)
- toBePaidMisc[addr] += miscPayment (#738)
- _swapContractToken(AutoLPThreshold,false) (#932)
- totalPayouts += amountWei (#573)
Reentrancy in DogeArm.claimToken(address,address,uint256) (#506-551):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
State variables written after the call(s):
- _isWithdrawing = false (#550)
Apply the check-effects-interactions pattern.
Additional information: link
DogeArm.ReleaseLP() (#650-655) ignores return value by liquidityToken.transfer(msg.sender,amount) (#654)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
DogeArm._subtractDividents(address,uint256) (#580-593) uses a dangerous strict equality:
- amount == 0 (#581)
DogeArm.claimToken(address,address,uint256) (#506-551) uses a dangerous strict equality:
- amount == 0 && payableAmount == 0 (#532)
Don't use strict equality to determine if an account has enough Ether or tokens.
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.
DogeArm.ChangeMiscReward(address).newReward (#627) lacks a zero-check on :
- MiscReward = newReward (#628)
DogeArm.SetMarketingWallet(address).addr (#1087) lacks a zero-check on :
- MarketingWallet = addr (#1090)
DogeArm.SetDevWallet(address).addr (#1097) lacks a zero-check on :
- Developer = addr (#1100)
Check that the address is not zero.
Additional information: link
DogeArm.slitherConstructorVariables() (#359-1214) uses literals with too many digits:
- BurnAddress = 0x000000000000000000000000000000000000dEaD (#394)
DogeArm.slitherConstructorConstantVariables() (#359-1214) uses literals with too many digits:
- _totalSupply = 1000000000 * 10 ** _decimals (#371)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
DogeArm.BurnAddress (#394) should be constant
DogeArm.Staker (#799) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
DogeArm._distributeStake(uint256,bool) (#771-795) performs a multiplication on the result of a division:
-StakingSplit = (BNBamount * _stakingTax) / totalRatio (#776)
-MainAmount = (StakingSplit * _MainRewardSplit) / 100 (#777)
DogeArm._distributeStake(uint256,bool) (#771-795) performs a multiplication on the result of a division:
-StakingSplit = (BNBamount * _stakingTax) / totalRatio (#776)
-MiscAmount = (StakingSplit * _MiscRewardSplit) / 100 (#778)
DogeArm._distributeStake(uint256,bool) (#771-795) performs a multiplication on the result of a division:
-MainAmount = (StakingSplit * _MainRewardSplit) / 100 (#777)
-mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#790)
DogeArm._distributeStake(uint256,bool) (#771-795) performs a multiplication on the result of a division:
-MiscAmount = (StakingSplit * _MiscRewardSplit) / 100 (#778)
-miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#791)
DogeArm._swapContractToken(uint16,bool) (#806-834) performs a multiplication on the result of a division:
-tokenToSwap = _balances[_pancakePairAddress] * permilleOfPancake / 1000 (#812)
-tokenForLiquidity = (tokenToSwap * _liquidityTax) / totalTax (#821)
Consider ordering multiplication before division.
Additional information: link
DogeArm.constructor() (#425-459) ignores return value by _excluded.add(0xA64934a354eA34e190f3D3b92a3fe7376E0d9fBd) (#447)
DogeArm.constructor() (#425-459) ignores return value by _excluded.add(0xfb9a81b6893DaBa34B29EAC711d2f08435143223) (#448)
DogeArm.constructor() (#425-459) ignores return value by _excluded.add(msg.sender) (#449)
DogeArm.constructor() (#425-459) ignores return value by _excluded.add(MarketingWallet) (#450)
DogeArm.constructor() (#425-459) ignores return value by _excluded.add(Developer) (#451)
DogeArm.constructor() (#425-459) ignores return value by _excluded.add(address(this)) (#452)
DogeArm.constructor() (#425-459) ignores return value by _excluded.add(BurnAddress) (#453)
DogeArm.constructor() (#425-459) ignores return value by _excludedFromStaking.add(address(this)) (#454)
DogeArm.constructor() (#425-459) ignores return value by _excludedFromStaking.add(BurnAddress) (#455)
DogeArm.constructor() (#425-459) ignores return value by _excludedFromStaking.add(address(_pancakeRouter)) (#456)
DogeArm.constructor() (#425-459) ignores return value by _excludedFromStaking.add(_pancakePairAddress) (#457)
DogeArm.RemoveLP() (#658-674) ignores return value by liquidityToken.approve(address(_pancakeRouter),amount) (#663)
DogeArm.RemoveLP() (#658-674) ignores return value by _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens(address(this),amount,0,0,address(this),block.timestamp) (#664-671)
DogeArm._addLiquidity(uint256,uint256) (#850-861) ignores return value by _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
DogeArm.ExcludeFromStaking(address) (#1041-1052) ignores return value by _excludedFromStaking.add(addr) (#1050)
DogeArm.IncludeMeToStaking() (#1055-1061) ignores return value by _excludedFromStaking.remove(msg.sender) (#1058)
DogeArm.IncludeToStaking(address) (#1064-1071) ignores return value by _excludedFromStaking.remove(addr) (#1067)
DogeArm.SetMarketingWallet(address) (#1087-1093) ignores return value by _excluded.remove(prevMarketing) (#1089)
DogeArm.SetMarketingWallet(address) (#1087-1093) ignores return value by _excluded.add(MarketingWallet) (#1091)
DogeArm.SetDevWallet(address) (#1097-1103) ignores return value by _excluded.remove(prevDev) (#1099)
DogeArm.SetDevWallet(address) (#1097-1103) ignores return value by _excluded.add(Developer) (#1101)
DogeArm.ExcludeAccountFromFees(address) (#1107-1110) ignores return value by _excluded.add(account) (#1108)
DogeArm.IncludeAccountToFees(address) (#1113-1116) ignores return value by _excluded.remove(account) (#1114)
DogeArm.setPresale(address) (#1118-1121) ignores return value by _excluded.add(presaleAddress) (#1119)
DogeArm.setPresale(address) (#1118-1121) ignores return value by _excludedFromStaking.add(presaleAddress) (#1120)
Ensure that all the return values of the function calls are used.
Additional information: link
DogeArm.allowance(address,address)._owner (#460) shadows:
- Ownable._owner (#182) (state variable)
DogeArm._approve(address,address,uint256).owner (#467) shadows:
- Ownable.owner() (#189-191) (function)
Rename the local variables that shadow another component.
Additional information: link
DogeArm.WithdrawDev(uint256) (#1015-1020) should emit an event for:
- DevBalance -= amount (#1017)
DogeArm.WithdrawMarketing(uint256) (#1031-1036) should emit an event for:
- MarketingBalance -= amount (#1033)
Emit an event for critical parameter changes.
Additional information: link
Reentrancy in DogeArm.TriggerBuyBack(uint256) (#972-990):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: weiAmount}(0,path,BurnAddress,block.timestamp) (#980-984)
State variables written after the call(s):
- _circulatingSupply -= boughtTokens (#987)
- tokensBurnt += boughtTokens (#988)
Reentrancy in DogeArm._swapContractToken(uint16,bool) (#806-834):
External calls:
- _swapTokenForBNB(swapToken) (#827)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#841-847)
- _addLiquidity(liqToken,liqBNB) (#830)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#830)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
State variables written after the call(s):
- _distributeStake(distributeBNB,true) (#833)
- BuyBackBalance += BuyBackSplit (#781)
- _distributeStake(distributeBNB,true) (#833)
- DevBalance += DevSplit (#780)
- _distributeStake(distributeBNB,true) (#833)
- MarketingBalance += MarketingSplit (#779)
- MarketingBalance += StakingSplit (#788)
- _addLiquidity(liqToken,liqBNB) (#830)
- _allowances[owner][spender] = amount (#471)
- _distributeStake(distributeBNB,true) (#833)
- mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#790)
- _distributeStake(distributeBNB,true) (#833)
- miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#791)
- _distributeStake(distributeBNB,true) (#833)
- totalRewards += StakingSplit (#784)
Reentrancy in DogeArm._taxedTransfer(address,address,uint256,bool,bool) (#894-942):
External calls:
- claimToken(recipient,MainReward,0) (#915)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
- _swapContractToken(AutoLPThreshold,false) (#932)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#841-847)
- (sent) = to.call{value: (amountWei)}() (#574)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#915)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
- _swapContractToken(AutoLPThreshold,false) (#932)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- (sent) = to.call{value: (amountWei)}() (#574)
State variables written after the call(s):
- _swapContractToken(AutoLPThreshold,false) (#932)
- _allowances[owner][spender] = amount (#471)
- _circulatingSupply -= tokensToBeBurnt (#938)
- tokensBurnt += tokensToBeBurnt (#939)
Reentrancy in DogeArm.constructor() (#425-459):
External calls:
- _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH()) (#434)
State variables written after the call(s):
- Developer = msg.sender (#441)
- MarketingWallet = 0x8735F6c14984fDE34C8BC08e637709C8a27f0061 (#440)
- MaxWallet = _totalSupply / MaxWalletDivider (#444)
- _allowances[address(this)][address(_pancakeRouter)] = type()(uint256).max (#437)
- _approve(address(this),address(_pancakeRouter),type()(uint256).max) (#458)
- _allowances[owner][spender] = amount (#471)
- _addToken(msg.sender,_totalSupply) (#435)
- _balances[addr] = newAmount (#728)
- _balances[addr] = newAmount (#734)
- _balances[addr] = newAmount (#739)
- _addToken(msg.sender,_totalSupply) (#435)
- _totalShares += amount (#731)
- _addToken(msg.sender,_totalSupply) (#435)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#735)
- _addToken(msg.sender,_totalSupply) (#435)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#737)
- sellLimit = _totalSupply / SellLimitDivider (#443)
- _addToken(msg.sender,_totalSupply) (#435)
- toBePaidMain[addr] += mainPayment (#736)
- _addToken(msg.sender,_totalSupply) (#435)
- toBePaidMisc[addr] += miscPayment (#738)
Reentrancy in DogeArm.transferFrom(address,address,uint256) (#492-500):
External calls:
- _transfer(sender,recipient,amount) (#493)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#841-847)
- (sent) = to.call{value: (amountWei)}() (#574)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
External calls sending eth:
- _transfer(sender,recipient,amount) (#493)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- (sent) = to.call{value: (amountWei)}() (#574)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
State variables written after the call(s):
- _approve(sender,msg.sender,currentAllowance - amount) (#498)
- _allowances[owner][spender] = amount (#471)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in DogeArm.TriggerBuyBack(uint256) (#972-990):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: weiAmount}(0,path,BurnAddress,block.timestamp) (#980-984)
Event emitted after the call(s):
- Buyback(weiAmount,boughtTokens) (#989)
Reentrancy in DogeArm._claimBNBTo(address,address,uint256) (#567-578):
External calls:
- (sent) = to.call{value: (amountWei)}() (#574)
Event emitted after the call(s):
- OnClaimBNB(from,to,amountWei) (#577)
Reentrancy in DogeArm._swapContractToken(uint16,bool) (#806-834):
External calls:
- _swapTokenForBNB(swapToken) (#827)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#841-847)
- _addLiquidity(liqToken,liqBNB) (#830)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#830)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#472)
- _addLiquidity(liqToken,liqBNB) (#830)
Reentrancy in DogeArm._swapContractToken(uint16,bool) (#806-834):
External calls:
- _swapTokenForBNB(swapToken) (#827)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#841-847)
- _addLiquidity(liqToken,liqBNB) (#830)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- _claimBNBTo(distribute,distribute,newLiq) (#833)
- (sent) = to.call{value: (amountWei)}() (#574)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#830)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- _claimBNBTo(distribute,distribute,newLiq) (#833)
- (sent) = to.call{value: (amountWei)}() (#574)
Event emitted after the call(s):
- OnClaimBNB(from,to,amountWei) (#577)
- _claimBNBTo(distribute,distribute,newLiq) (#833)
Reentrancy in DogeArm._taxedTransfer(address,address,uint256,bool,bool) (#894-942):
External calls:
- claimToken(recipient,MainReward,0) (#915)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
- _swapContractToken(AutoLPThreshold,false) (#932)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#841-847)
- (sent) = to.call{value: (amountWei)}() (#574)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#915)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
- _swapContractToken(AutoLPThreshold,false) (#932)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- (sent) = to.call{value: (amountWei)}() (#574)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#472)
- _swapContractToken(AutoLPThreshold,false) (#932)
- OnClaimBNB(from,to,amountWei) (#577)
- _swapContractToken(AutoLPThreshold,false) (#932)
- Transfer(sender,recipient,taxedAmount) (#941)
Reentrancy in DogeArm.claimToken(address,address,uint256) (#506-551):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
Event emitted after the call(s):
- OnWithdrawToken(amount,token,addr) (#549)
Reentrancy in DogeArm.constructor() (#425-459):
External calls:
- _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH()) (#434)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#472)
- _approve(address(this),address(_pancakeRouter),type()(uint256).max) (#458)
- Transfer(address(0),msg.sender,_totalSupply) (#436)
Reentrancy in DogeArm.transferFrom(address,address,uint256) (#492-500):
External calls:
- _transfer(sender,recipient,amount) (#493)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#841-847)
- (sent) = to.call{value: (amountWei)}() (#574)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
External calls sending eth:
- _transfer(sender,recipient,amount) (#493)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#853-860)
- (sent) = to.call{value: (amountWei)}() (#574)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#543-547)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#472)
- _approve(sender,msg.sender,currentAllowance - amount) (#498)
Apply the check-effects-interactions pattern.
Additional information: link
DogeArm._lockLiquidityTokens(uint256) (#643-647) uses timestamp for comparisons
Dangerous comparisons:
- require(bool)(newUnlockTime > _liquidityUnlockTime) (#645)
DogeArm.ReleaseLP() (#650-655) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#651)
DogeArm.RemoveLP() (#658-674) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#659)
DogeArm.RecoverBNB() (#677-682) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#678)
DogeArm.getLiquidityUnlockInSeconds() (#1201-1206) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp < _liquidityUnlockTime (#1202)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#207-211) uses assembly
- INLINE ASM (#209)
Address._verifyCallResult(bool,bytes,string) (#248-261) uses assembly
- INLINE ASM (#253-256)
Do not use evm assembly.
Additional information: link
Address._verifyCallResult(bool,bytes,string) (#248-261) is never used and should be removed
Address.functionCall(address,bytes) (#217-219) is never used and should be removed
Address.functionCall(address,bytes,string) (#220-222) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#223-225) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#226-231) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#240-242) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#243-247) is never used and should be removed
Address.functionStaticCall(address,bytes) (#232-234) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#235-239) is never used and should be removed
Address.isContract(address) (#207-211) is never used and should be removed
Address.sendValue(address,uint256) (#212-216) is never used and should be removed
EnumerableSet._at(EnumerableSet.Set,uint256) (#298-301) is never used and should be removed
EnumerableSet._length(EnumerableSet.Set) (#295-297) is never used and should be removed
EnumerableSet.add(EnumerableSet.Bytes32Set,bytes32) (#305-307) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (#341-343) is never used and should be removed
EnumerableSet.at(EnumerableSet.AddressSet,uint256) (#335-337) is never used and should be removed
EnumerableSet.at(EnumerableSet.Bytes32Set,uint256) (#317-319) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (#353-355) is never used and should be removed
EnumerableSet.contains(EnumerableSet.Bytes32Set,bytes32) (#311-313) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (#347-349) is never used and should be removed
EnumerableSet.length(EnumerableSet.AddressSet) (#332-334) is never used and should be removed
EnumerableSet.length(EnumerableSet.Bytes32Set) (#314-316) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (#350-352) is never used and should be removed
EnumerableSet.remove(EnumerableSet.Bytes32Set,bytes32) (#308-310) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (#344-346) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.11 (#7) 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) (#212-216):
- (success) = recipient.call{value: amount}() (#214)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#226-231):
- (success,returndata) = target.call{value: value}(data) (#229)
Low level call in Address.functionStaticCall(address,bytes,string) (#235-239):
- (success,returndata) = target.staticcall(data) (#237)
Low level call in Address.functionDelegateCall(address,bytes,string) (#243-247):
- (success,returndata) = target.delegatecall(data) (#245)
Low level call in DogeArm._claimBNBTo(address,address,uint256) (#567-578):
- (sent) = to.call{value: (amountWei)}() (#574)
Low level call in DogeArm.RemoveLP() (#658-674):
- (sent) = msg.sender.call{value: (address(this).balance)}() (#672)
Low level call in DogeArm.RecoverBNB() (#677-682):
- (sent) = msg.sender.call{value: (address(this).balance)}() (#680)
Low level call in DogeArm.WithdrawAllDev() (#1007-1012):
- (sent) = Developer.call{value: (amount)}() (#1010)
Low level call in DogeArm.WithdrawDev(uint256) (#1015-1020):
- (sent) = Developer.call{value: (amount)}() (#1018)
Low level call in DogeArm.WithdrawAllMarketing() (#1023-1028):
- (sent) = MarketingWallet.call{value: (amount)}() (#1026)
Low level call in DogeArm.WithdrawMarketing(uint256) (#1031-1036):
- (sent) = MarketingWallet.call{value: (amount)}() (#1034)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IPancakeERC20.DOMAIN_SEPARATOR() (#35) is not in mixedCase
Function IPancakeERC20.PERMIT_TYPEHASH() (#36) is not in mixedCase
Function IPancakeRouter01.WETH() (#135) is not in mixedCase
Event DogeArmonUpdateLPThreshold(uint16) (#703) is not in CapWords
Event DogeArmonBurnTokens(uint256) (#993) is not in CapWords
Parameter DogeArm.allowance(address,address)._owner (#460) is not in mixedCase
Function DogeArm.ClaimMainReward() (#554-556) is not in mixedCase
Function DogeArm.ClaimMiscReward() (#559-563) is not in mixedCase
Function DogeArm.ChangeMainReward(address) (#619-623) is not in mixedCase
Function DogeArm.ChangeMiscReward(address) (#627-630) is not in mixedCase
Function DogeArm.LockLiquidityTokens(uint256) (#639-642) is not in mixedCase
Function DogeArm.ReleaseLP() (#650-655) is not in mixedCase
Function DogeArm.RemoveLP() (#658-674) is not in mixedCase
Function DogeArm.RecoverBNB() (#677-682) is not in mixedCase
Function DogeArm.UpdateAutoLPThreshold(uint16) (#704-709) is not in mixedCase
Parameter DogeArm.UpdateAutoLPThreshold(uint16).Threshold (#704) is not in mixedCase
Function DogeArm.CreateLPandBNB(uint16,bool) (#712-714) is not in mixedCase
Parameter DogeArm.CreateLPandBNB(uint16,bool).PermilleOfPancake (#712) is not in mixedCase
Function DogeArm.ManualBNBSwap(bool) (#865-867) is not in mixedCase
Function DogeArm.TriggerBuyBack(uint256) (#972-990) is not in mixedCase
Function DogeArm.BurnTokens(uint256) (#994-1004) is not in mixedCase
Function DogeArm.WithdrawAllDev() (#1007-1012) is not in mixedCase
Function DogeArm.WithdrawDev(uint256) (#1015-1020) is not in mixedCase
Function DogeArm.WithdrawAllMarketing() (#1023-1028) is not in mixedCase
Function DogeArm.WithdrawMarketing(uint256) (#1031-1036) is not in mixedCase
Function DogeArm.ExcludeFromStaking(address) (#1041-1052) is not in mixedCase
Function DogeArm.IncludeMeToStaking() (#1055-1061) is not in mixedCase
Function DogeArm.IncludeToStaking(address) (#1064-1071) is not in mixedCase
Function DogeArm.SetMarketingWallet(address) (#1087-1093) is not in mixedCase
Function DogeArm.SetDevWallet(address) (#1097-1103) is not in mixedCase
Function DogeArm.ExcludeAccountFromFees(address) (#1107-1110) is not in mixedCase
Function DogeArm.IncludeAccountToFees(address) (#1113-1116) is not in mixedCase
Function DogeArm.UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) (#1129-1147) is not in mixedCase
Function DogeArm.UpdateRewardSplit(uint8,uint8) (#1151-1157) is not in mixedCase
Parameter DogeArm.UpdateRewardSplit(uint8,uint8).MainSplit (#1151) is not in mixedCase
Parameter DogeArm.UpdateRewardSplit(uint8,uint8).MiscSplit (#1151) is not in mixedCase
Function DogeArm.UpdateLimits(uint256,uint256) (#1160-1174) is not in mixedCase
Constant DogeArm._name (#368) is not in UPPER_CASE_WITH_UNDERSCORES
Constant DogeArm._symbol (#369) is not in UPPER_CASE_WITH_UNDERSCORES
Constant DogeArm._decimals (#370) is not in UPPER_CASE_WITH_UNDERSCORES
Constant DogeArm._totalSupply (#371) is not in UPPER_CASE_WITH_UNDERSCORES
Variable DogeArm._circulatingSupply (#372) is not in mixedCase
Constant DogeArm.MaxWalletDivider (#373) is not in UPPER_CASE_WITH_UNDERSCORES
Constant DogeArm.SellLimitDivider (#374) is not in UPPER_CASE_WITH_UNDERSCORES
Constant DogeArm.MaxTax (#375) is not in UPPER_CASE_WITH_UNDERSCORES
Variable DogeArm._MainRewardSplit (#388) is not in mixedCase
Variable DogeArm._MiscRewardSplit (#389) is not in mixedCase
Variable DogeArm.MaxWallet (#390) is not in mixedCase
Variable DogeArm.MarketingWallet (#392) is not in mixedCase
Variable DogeArm.Developer (#393) is not in mixedCase
Variable DogeArm.BurnAddress (#394) is not in mixedCase
Constant DogeArm.blacklistBlocks (#400) is not in UPPER_CASE_WITH_UNDERSCORES
Variable DogeArm.MainReward (#408) is not in mixedCase
Variable DogeArm.MiscReward (#409) is not in mixedCase
Variable DogeArm.PancakeRouter (#413) is not in mixedCase
Constant DogeArm.StakeMulti (#686) is not in UPPER_CASE_WITH_UNDERSCORES
Constant DogeArm.DistributionMultiplier (#687) is not in UPPER_CASE_WITH_UNDERSCORES
Variable DogeArm.MarketingBalance (#693) is not in mixedCase
Variable DogeArm.DevBalance (#694) is not in mixedCase
Variable DogeArm.BuyBackBalance (#695) is not in mixedCase
Variable DogeArm.AutoLPThreshold (#696) is not in mixedCase
Variable DogeArm.Staker (#799) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#55) is too similar to IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#56)
Prevent variables from having similar names.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#196-199)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#200-204)
ClaimMainReward() should be declared external:
- DogeArm.ClaimMainReward() (#554-556)
ClaimMiscReward() should be declared external:
- DogeArm.ClaimMiscReward() (#559-563)
getMainBalance(address) should be declared external:
- DogeArm.getMainBalance(address) (#606-609)
getMiscBalance(address) should be declared external:
- DogeArm.getMiscBalance(address) (#612-615)
ChangeMainReward(address) should be declared external:
- DogeArm.ChangeMainReward(address) (#619-623)
ChangeMiscReward(address) should be declared external:
- DogeArm.ChangeMiscReward(address) (#627-630)
LockLiquidityTokens(uint256) should be declared external:
- DogeArm.LockLiquidityTokens(uint256) (#639-642)
ReleaseLP() should be declared external:
- DogeArm.ReleaseLP() (#650-655)
RemoveLP() should be declared external:
- DogeArm.RemoveLP() (#658-674)
RecoverBNB() should be declared external:
- DogeArm.RecoverBNB() (#677-682)
UpdateAutoLPThreshold(uint16) should be declared external:
- DogeArm.UpdateAutoLPThreshold(uint16) (#704-709)
CreateLPandBNB(uint16,bool) should be declared external:
- DogeArm.CreateLPandBNB(uint16,bool) (#712-714)
ManualBNBSwap(bool) should be declared external:
- DogeArm.ManualBNBSwap(bool) (#865-867)
TriggerBuyBack(uint256) should be declared external:
- DogeArm.TriggerBuyBack(uint256) (#972-990)
BurnTokens(uint256) should be declared external:
- DogeArm.BurnTokens(uint256) (#994-1004)
WithdrawAllDev() should be declared external:
- DogeArm.WithdrawAllDev() (#1007-1012)
WithdrawDev(uint256) should be declared external:
- DogeArm.WithdrawDev(uint256) (#1015-1020)
WithdrawAllMarketing() should be declared external:
- DogeArm.WithdrawAllMarketing() (#1023-1028)
WithdrawMarketing(uint256) should be declared external:
- DogeArm.WithdrawMarketing(uint256) (#1031-1036)
ExcludeFromStaking(address) should be declared external:
- DogeArm.ExcludeFromStaking(address) (#1041-1052)
IncludeMeToStaking() should be declared external:
- DogeArm.IncludeMeToStaking() (#1055-1061)
IncludeToStaking(address) should be declared external:
- DogeArm.IncludeToStaking(address) (#1064-1071)
setBlacklistStatus(address[],bool) should be declared external:
- DogeArm.setBlacklistStatus(address[],bool) (#1073-1077)
enableBlacklist(bool) should be declared external:
- DogeArm.enableBlacklist(bool) (#1080-1083)
SetMarketingWallet(address) should be declared external:
- DogeArm.SetMarketingWallet(address) (#1087-1093)
SetDevWallet(address) should be declared external:
- DogeArm.SetDevWallet(address) (#1097-1103)
ExcludeAccountFromFees(address) should be declared external:
- DogeArm.ExcludeAccountFromFees(address) (#1107-1110)
IncludeAccountToFees(address) should be declared external:
- DogeArm.IncludeAccountToFees(address) (#1113-1116)
setPresale(address) should be declared external:
- DogeArm.setPresale(address) (#1118-1121)
UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) should be declared external:
- DogeArm.UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) (#1129-1147)
UpdateRewardSplit(uint8,uint8) should be declared external:
- DogeArm.UpdateRewardSplit(uint8,uint8) (#1151-1157)
UpdateLimits(uint256,uint256) should be declared external:
- DogeArm.UpdateLimits(uint256,uint256) (#1160-1174)
getLimits() should be declared external:
- DogeArm.getLimits() (#1197-1199)
getLiquidityUnlockInSeconds() should be declared external:
- DogeArm.getLiquidityUnlockInSeconds() (#1201-1206)
getTaxes() should be declared external:
- DogeArm.getTaxes() (#1208-1210)
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