Altimatum is a reward token, alternating between 7 popular alt coins for each day of the week.
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Altimatum._swapBack(uint256) (#1067-1112) sends eth to arbitrary user
Dangerous calls:
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
Altimatum._handleJackpot() (#1134-1153) sends eth to arbitrary user
Dangerous calls:
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in Altimatum._transfer(address,address,uint256) (#988-1023):
External calls:
- _handleJackpotSizeLimit() (#997)
- distributor.deposit{value: rewardBNB}() (#1129-1131)
- _handleJackpot() (#1000)
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
State variables written after the call(s):
- lastBuyBlock = block.number (#1004)
- lastEligibleBuyer = recipient (#1003)
Reentrancy in Altimatum._transfer(address,address,uint256) (#988-1023):
External calls:
- _handleJackpotSizeLimit() (#997)
- distributor.deposit{value: rewardBNB}() (#1129-1131)
- _handleJackpot() (#1000)
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
- _swapBack(swapAmount) (#1010)
- ROUTER.swapExactTokensForETH(amountToSwap,0,path,address(this),block.timestamp) (#1077-1083)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
External calls sending eth:
- _handleJackpotSizeLimit() (#997)
- distributor.deposit{value: rewardBNB}() (#1129-1131)
- _handleJackpot() (#1000)
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
- _swapBack(swapAmount) (#1010)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
State variables written after the call(s):
- super._transfer(sender,recipient,amountReceived) (#1017)
- _balances[from] = fromBalance - amount (#357)
- _balances[to] += amount (#359)
- amountReceived = _takeTax(sender,recipient,amount) (#1014)
- _balances[from] = fromBalance - amount (#357)
- _balances[to] += amount (#359)
- _swapBack(swapAmount) (#1010)
- inSwap = true (#956)
- inSwap = false (#958)
Reentrancy in DividendDistributor.distributeDividend(address) (#804-841):
External calls:
- (success) = address(shareholder).call{value: amount}() (#810)
State variables written after the call(s):
- shares[shareholder].totalRealised += amount (#814)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#815)
Reentrancy in DividendDistributor.distributeDividend(address) (#804-841):
External calls:
- ROUTER.swapExactETHForTokens{value: amount}(0,path,shareholder,block.timestamp) (#825-838)
State variables written after the call(s):
- shares[shareholder].totalRealised += amount (#833)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#834)
Reentrancy in DividendDistributor.process() (#752-779):
External calls:
- distributeDividend(shareHolders[currentIndex]) (#768)
- (success) = address(shareholder).call{value: amount}() (#810)
- ROUTER.swapExactETHForTokens{value: amount}(0,path,shareholder,block.timestamp) (#825-838)
State variables written after the call(s):
- currentIndex ++ (#773)
Reentrancy in DividendDistributor.setShare(address,uint256) (#734-750):
External calls:
- distributeDividend(shareholder) (#736)
- (success) = address(shareholder).call{value: amount}() (#810)
- ROUTER.swapExactETHForTokens{value: amount}(0,path,shareholder,block.timestamp) (#825-838)
State variables written after the call(s):
- shares[shareholder].amount = amount (#746)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#747)
Apply the check-effects-interactions pattern.
Additional information: link
Altimatum.recoverERC20(IERC20,address) (#1188-1193) ignores return value by token.transfer(recipient,amount) (#1191)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Contract ownership is not renounced (belongs to a wallet)
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.
Function IDexRouter.WETH() (#649) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
DividendDistributor.setGasLimit(uint256) (#884-889) uses literals with too many digits:
- require(bool,string)(gas <= 750000 && gas >= 100000,Gas limit out of bounds) (#885)
Altimatum.constructor(address) (#966-982) uses literals with too many digits:
- isDividendExempt[0x000000000000000000000000000000000000dEaD] = true (#978)
Altimatum._swapBack(uint256) (#1067-1112) uses literals with too many digits:
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
Altimatum.setIsDividendExempt(address,bool) (#1200-1217) uses literals with too many digits:
- require(bool,string)(account != pair && account != address(this) && account != 0x000000000000000000000000000000000000dEaD && account != presaleAddress,Invalid parameter) (#1201-1207)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
DividendDistributor.dividendsPerShareAccuracyFactor (#700) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
Contract ticker ($ALTI) contains non-alphanumeric characters.
Not a direct threat, but may indicate unreliable intentions of developer. Non-alphanumeric chars (,.;!#*&") are extremely rare among low risk tokens.
Context._msgData() (#122-124) is never used and should be removed
ERC20._burn(address,uint256) (#398-413) is never used and should be removed
Remove unused functions.
Additional information: link
Reentrancy in Altimatum._swapBack(uint256) (#1067-1112):
External calls:
- ROUTER.swapExactTokensForETH(amountToSwap,0,path,address(this),block.timestamp) (#1077-1083)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
External calls sending eth:
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
State variables written after the call(s):
- _approve(address(this),address(ROUTER),liquidityTokens) (#1100)
- _allowances[owner][spender] = amount (#436)
Reentrancy in Altimatum._transfer(address,address,uint256) (#988-1023):
External calls:
- _handleJackpotSizeLimit() (#997)
- distributor.deposit{value: rewardBNB}() (#1129-1131)
- _handleJackpot() (#1000)
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
State variables written after the call(s):
- _handleJackpot() (#1000)
- previousJackpot = jackpot (#1142)
- _handleJackpot() (#1000)
- previousWinner = winner (#1143)
Reentrancy in Altimatum._transfer(address,address,uint256) (#988-1023):
External calls:
- _handleJackpotSizeLimit() (#997)
- distributor.deposit{value: rewardBNB}() (#1129-1131)
- _handleJackpot() (#1000)
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
- _swapBack(swapAmount) (#1010)
- ROUTER.swapExactTokensForETH(amountToSwap,0,path,address(this),block.timestamp) (#1077-1083)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
External calls sending eth:
- _handleJackpotSizeLimit() (#997)
- distributor.deposit{value: rewardBNB}() (#1129-1131)
- _handleJackpot() (#1000)
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
- _swapBack(swapAmount) (#1010)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
State variables written after the call(s):
- _swapBack(swapAmount) (#1010)
- _allowances[owner][spender] = amount (#436)
Reentrancy in Altimatum.constructor(address) (#966-982):
External calls:
- pair = IDexFactory(ROUTER.factory()).createPair(address(this),ROUTER.WETH()) (#970)
State variables written after the call(s):
- _mint(msg.sender,10 * 10 ** 6 * 10 ** 18) (#981)
- _balances[account] += amount (#381)
- _mint(msg.sender,10 * 10 ** 6 * 10 ** 18) (#981)
- _totalSupply += amount (#380)
- isDividendExempt[msg.sender] = true (#975)
- isDividendExempt[pair] = true (#977)
- isDividendExempt[0x000000000000000000000000000000000000dEaD] = true (#978)
- isDividendExempt[address(this)] = true (#979)
- isTaxExempt[msg.sender] = true (#974)
- isWhitelisted[msg.sender] = true (#973)
- marketingWallet = marketing (#971)
Reentrancy in DividendDistributor.distributeDividend(address) (#804-841):
External calls:
- (success) = address(shareholder).call{value: amount}() (#810)
State variables written after the call(s):
- shareholderClaims[shareholder] = block.timestamp (#813)
- totalDistributed += amount (#812)
Reentrancy in DividendDistributor.distributeDividend(address) (#804-841):
External calls:
- ROUTER.swapExactETHForTokens{value: amount}(0,path,shareholder,block.timestamp) (#825-838)
State variables written after the call(s):
- shareholderClaims[shareholder] = block.timestamp (#832)
- totalDistributed += amount (#831)
Reentrancy in DividendDistributor.setShare(address,uint256) (#734-750):
External calls:
- distributeDividend(shareholder) (#736)
- (success) = address(shareholder).call{value: amount}() (#810)
- ROUTER.swapExactETHForTokens{value: amount}(0,path,shareholder,block.timestamp) (#825-838)
State variables written after the call(s):
- addShareholder(shareholder) (#740)
- shareHolders.push(shareholder) (#849)
- removeShareholder(shareholder) (#742)
- shareHolders[shareholderIndexes[shareholder]] = shareHolders[shareHolders.length - 1] (#853)
- shareHolders.pop() (#855)
- addShareholder(shareholder) (#740)
- shareholderIndexes[shareholder] = shareHolders.length (#848)
- removeShareholder(shareholder) (#742)
- shareholderIndexes[shareHolders[shareHolders.length - 1]] = shareholderIndexes[shareholder] (#854)
- totalShares = totalShares - shares[shareholder].amount + amount (#745)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in Altimatum._handleJackpot() (#1134-1153):
External calls:
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
Event emitted after the call(s):
- AwardJackpot(winner,jackpot) (#1147)
Reentrancy in Altimatum._handleJackpot() (#1134-1153):
External calls:
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
Event emitted after the call(s):
- DepositMarketing(marketingWallet,jackpot) (#1151)
Reentrancy in Altimatum._handleJackpotSizeLimit() (#1127-1132):
External calls:
- distributor.deposit{value: rewardBNB}() (#1129-1131)
Event emitted after the call(s):
- DepositRewards(rewardBNB) (#1130)
Reentrancy in Altimatum._swapBack(uint256) (#1067-1112):
External calls:
- ROUTER.swapExactTokensForETH(amountToSwap,0,path,address(this),block.timestamp) (#1077-1083)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
External calls sending eth:
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
Event emitted after the call(s):
- DepositMarketing(marketingWallet,amountBNBMarketing) (#1093)
Reentrancy in Altimatum._swapBack(uint256) (#1067-1112):
External calls:
- ROUTER.swapExactTokensForETH(amountToSwap,0,path,address(this),block.timestamp) (#1077-1083)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
External calls sending eth:
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#437)
- _approve(address(this),address(ROUTER),liquidityTokens) (#1100)
- DepositRewards(amountBNBRewards) (#1096)
Reentrancy in Altimatum._swapBack(uint256) (#1067-1112):
External calls:
- ROUTER.swapExactTokensForETH(amountToSwap,0,path,address(this),block.timestamp) (#1077-1083)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
External calls sending eth:
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
Event emitted after the call(s):
- AutoLiquidity(amountBNBLiquidity,liquidityTokens) (#1109)
Reentrancy in Altimatum._transfer(address,address,uint256) (#988-1023):
External calls:
- _handleJackpotSizeLimit() (#997)
- distributor.deposit{value: rewardBNB}() (#1129-1131)
- _handleJackpot() (#1000)
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
Event emitted after the call(s):
- AwardJackpot(winner,jackpot) (#1147)
- _handleJackpot() (#1000)
- DepositMarketing(marketingWallet,jackpot) (#1151)
- _handleJackpot() (#1000)
Reentrancy in Altimatum._transfer(address,address,uint256) (#988-1023):
External calls:
- _handleJackpotSizeLimit() (#997)
- distributor.deposit{value: rewardBNB}() (#1129-1131)
- _handleJackpot() (#1000)
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
- _swapBack(swapAmount) (#1010)
- ROUTER.swapExactTokensForETH(amountToSwap,0,path,address(this),block.timestamp) (#1077-1083)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
External calls sending eth:
- _handleJackpotSizeLimit() (#997)
- distributor.deposit{value: rewardBNB}() (#1129-1131)
- _handleJackpot() (#1000)
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
- _swapBack(swapAmount) (#1010)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#437)
- _swapBack(swapAmount) (#1010)
- AutoLiquidity(amountBNBLiquidity,liquidityTokens) (#1109)
- _swapBack(swapAmount) (#1010)
- DepositMarketing(marketingWallet,amountBNBMarketing) (#1093)
- _swapBack(swapAmount) (#1010)
- DepositRewards(amountBNBRewards) (#1096)
- _swapBack(swapAmount) (#1010)
- Transfer(from,to,amount) (#361)
- super._transfer(sender,recipient,amountReceived) (#1017)
- Transfer(from,to,amount) (#361)
- amountReceived = _takeTax(sender,recipient,amount) (#1014)
Reentrancy in Altimatum.constructor(address) (#966-982):
External calls:
- pair = IDexFactory(ROUTER.factory()).createPair(address(this),ROUTER.WETH()) (#970)
Event emitted after the call(s):
- Transfer(address(0),account,amount) (#382)
- _mint(msg.sender,10 * 10 ** 6 * 10 ** 18) (#981)
Reentrancy in DividendDistributor.distributeDividend(address) (#804-841):
External calls:
- (success) = address(shareholder).call{value: amount}() (#810)
Event emitted after the call(s):
- DividendDistributed(shareholder,amount) (#816)
- DividendDistributionFailed(shareholder) (#818)
Reentrancy in DividendDistributor.distributeDividend(address) (#804-841):
External calls:
- ROUTER.swapExactETHForTokens{value: amount}(0,path,shareholder,block.timestamp) (#825-838)
Event emitted after the call(s):
- DividendDistributed(shareholder,amount) (#835)
- DividendDistributionFailed(shareholder) (#837)
Reentrancy in Altimatum.preparePresale(address) (#1171-1179):
External calls:
- distributor.setShare(presaleAddress,0) (#1177)
Event emitted after the call(s):
- PreparePresale(presaleAddress) (#1178)
Reentrancy in Altimatum.recoverERC20(IERC20,address) (#1188-1193):
External calls:
- token.transfer(recipient,amount) (#1191)
Event emitted after the call(s):
- RecoverERC20(address(token),recipient,amount) (#1192)
Reentrancy in Altimatum.setIsDividendExempt(address,bool) (#1200-1217):
External calls:
- distributor.setShare(account,0) (#1211)
- distributor.setShare(account,balanceOf(account)) (#1213)
Event emitted after the call(s):
- SetIsDividendExempt(account,exempt) (#1216)
Reentrancy in DividendDistributor.setShare(address,uint256) (#734-750):
External calls:
- distributeDividend(shareholder) (#736)
- (success) = address(shareholder).call{value: amount}() (#810)
- ROUTER.swapExactETHForTokens{value: amount}(0,path,shareholder,block.timestamp) (#825-838)
Event emitted after the call(s):
- SetShare(shareholder,amount) (#749)
Reentrancy in Altimatum.triggerSwapBack(bool,uint256) (#1248-1252):
External calls:
- _swapBack(tokenAmount) (#1250)
- ROUTER.swapExactTokensForETH(amountToSwap,0,path,address(this),block.timestamp) (#1077-1083)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
External calls sending eth:
- _swapBack(tokenAmount) (#1250)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
- distributor.deposit{value: amountBNBRewards}() (#1095-1097)
- ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
Event emitted after the call(s):
- TriggerSwapBack(tokenAmount) (#1251)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.shouldDistribute(address) (#799-802) uses timestamp for comparisons
Dangerous comparisons:
- shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution (#800-801)
Altimatum.getDynamicBuyTax() (#1031-1040) uses timestamp for comparisons
Dangerous comparisons:
- endingTime > block.timestamp (#1034)
Altimatum._takeTax(address,address,uint256) (#1042-1049) uses timestamp for comparisons
Dangerous comparisons:
- taxAmount > 0 (#1046)
Altimatum._shouldSwapBack(address) (#1063-1065) uses timestamp for comparisons
Dangerous comparisons:
- recipient == pair && swapEnabled && balanceOf(address(this)) >= swapThreshold (#1064)
Altimatum._swapBack(uint256) (#1067-1112) uses timestamp for comparisons
Dangerous comparisons:
- liquidityTokens > 0 (#1099)
Avoid relying on block.timestamp.
Additional information: link
Pragma version0.8.15 (#3) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
solc-0.8.15 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
DividendDistributor.process().iterations (#760) is a local variable never initialized
DividendDistributor.process().avgGasCost (#759) is a local variable never initialized
DividendDistributor.process().gasUsed (#758) 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
DividendDistributor.distributeDividend(address) (#804-841) ignores return value by ROUTER.swapExactETHForTokens{value: amount}(0,path,shareholder,block.timestamp) (#825-838)
Altimatum._swapBack(uint256) (#1067-1112) ignores return value by ROUTER.swapExactTokensForETH(amountToSwap,0,path,address(this),block.timestamp) (#1077-1083)
Altimatum._swapBack(uint256) (#1067-1112) ignores return value by ROUTER.addLiquidityETH{value: amountBNBLiquidity}(address(this),liquidityTokens,0,0,0x000000000000000000000000000000000000dEaD,block.timestamp) (#1101-1110)
Ensure that all the return values of the function calls are used.
Additional information: link
Altimatum.preparePresale(address).presale (#1171) lacks a zero-check on :
- presaleAddress = presale (#1173)
Check that the address is not zero.
Additional information: link
DividendDistributor.distributeDividend(address) (#804-841) has external calls inside a loop: reward == ROUTER.WETH() (#809)
DividendDistributor.distributeDividend(address) (#804-841) has external calls inside a loop: (success) = address(shareholder).call{value: amount}() (#810)
DividendDistributor.distributeDividend(address) (#804-841) has external calls inside a loop: path[0] = ROUTER.WETH() (#822)
DividendDistributor.distributeDividend(address) (#804-841) has external calls inside a loop: ROUTER.swapExactETHForTokens{value: amount}(0,path,shareholder,block.timestamp) (#825-838)
Favor pull over push strategy for external calls.
Additional information: link
DividendDistributor.process() (#752-779) has costly operations inside a loop:
- currentIndex = 0 (#764)
ReentrancyGuard.nonReentrant() (#626-638) has costly operations inside a loop:
- _status = _ENTERED (#631)
ReentrancyGuard.nonReentrant() (#626-638) has costly operations inside a loop:
- _status = _NOT_ENTERED (#637)
DividendDistributor.distributeDividend(address) (#804-841) has costly operations inside a loop:
- totalDistributed += amount (#812)
DividendDistributor.distributeDividend(address) (#804-841) has costly operations inside a loop:
- totalDistributed += amount (#831)
DividendDistributor.process() (#752-779) has costly operations inside a loop:
- currentIndex ++ (#773)
Use a local variable to hold the loop computation result.
Additional information: link
Low level call in DividendDistributor.distributeDividend(address) (#804-841):
- (success) = address(shareholder).call{value: amount}() (#810)
Low level call in Altimatum._swapBack(uint256) (#1067-1112):
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: amountBNBMarketing}() (#1092)
Low level call in Altimatum._handleJackpot() (#1134-1153):
- (success) = address(winner).call{gas: transferGas,value: jackpot}() (#1145)
- (marketingSuccess) = address(marketingWallet).call{gas: transferGas,value: jackpot}() (#1150)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
name() should be declared external:
- ERC20.name() (#180-182)
symbol() should be declared external:
- ERC20.symbol() (#188-190)
totalSupply() should be declared external:
- ERC20.totalSupply() (#212-214)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#231-235)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#254-258)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#276-285)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#299-303)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#319-328)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#557-559)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#565-568)
Use the external attribute for functions never called from the contract.
Additional information: link
BscScan page for the token does not contain additional info: website, socials, description, etc.
Additional information: link
Unable to find token contract audit
Unable to find KYC or doxxing proof
Unable to find audit link on the website
Token is not listed at Mobula.Finance
Additional information: link
Unable to find token on CoinHunt
Additional information: link
Unable to find code repository for the project
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Unable to find Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account