Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
TreasurePot.swapBack() (#559-598) sends eth to arbitrary user
Dangerous calls:
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in TreasurePot._transferFrom(address,address,uint256) (#489-515):
External calls:
- swapBack() (#500)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#570-576)
- distributor.deposit{value: amountBNBReflection}() (#583)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
- triggerAutoBuyback() (#501)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
External calls sending eth:
- swapBack() (#500)
- distributor.deposit{value: amountBNBReflection}() (#583)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
- triggerAutoBuyback() (#501)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
State variables written after the call(s):
- _balances[sender] = _balances[sender].sub(amount,Insufficient Balance) (#503)
- _balances[recipient] = _balances[recipient].add(amountReceived) (#506)
- amountReceived = takeFee(sender,recipient,amount) (#505)
- _balances[address(this)] = _balances[address(this)].add(feeAmount) (#546)
- triggerAutoBuyback() (#501)
- inSwap = true (#429)
- inSwap = false (#429)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.distributeDividend(address) (#316-327) ignores return value by rewardsToken.transfer(shareholder,amount) (#322)
DividendDistributor.rescueDividends(address) (#333-335) ignores return value by rewardsToken.transfer(to,rewardsToken.balanceOf(address(this))) (#334)
DividendDistributor.rescueToken(address,address) (#341-343) ignores return value by IBEP20(token).transfer(to,IBEP20(token).balanceOf(address(this))) (#342)
TreasurePot.rescueToken(address,address) (#737-739) ignores return value by IBEP20(token).transfer(to,IBEP20(token).balanceOf(address(this))) (#738)
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.
Reentrancy in DividendDistributor.distributeDividend(address) (#316-327):
External calls:
- rewardsToken.transfer(shareholder,amount) (#322)
State variables written after the call(s):
- shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount) (#324)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#325)
Reentrancy in DividendDistributor.process(uint256) (#285-309):
External calls:
- distributeDividend(shareholders[currentIndex]) (#301)
- rewardsToken.transfer(shareholder,amount) (#322)
State variables written after the call(s):
- currentIndex ++ (#306)
Reentrancy in DividendDistributor.setShare(address,uint256) (#249-263):
External calls:
- distributeDividend(shareholder) (#251)
- rewardsToken.transfer(shareholder,amount) (#322)
State variables written after the call(s):
- shares[shareholder].amount = amount (#261)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#262)
Apply the check-effects-interactions pattern.
Additional information: link
TreasurePot.swapBack() (#559-598) ignores return value by router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
Ensure that all the return values of the function calls are used.
Additional information: link
DividendDistributor.setDistributionCriteria(uint256,uint256) (#244-247) should emit an event for:
- minPeriod = _minPeriod (#245)
- minDistribution = _minDistribution (#246)
TreasurePot.setAutoBuybackSettings(bool,uint256,uint256,uint256,bool) (#649-657) should emit an event for:
- autoBuybackCap = _cap (#651)
- autoBuybackAmount = _amount (#653)
TreasurePot.setBuybackMultiplierSettings(uint256,uint256,uint256) (#659-663) should emit an event for:
- buybackMultiplierNumerator = numerator (#660)
- buybackMultiplierDenominator = denominator (#661)
- buybackMultiplierLength = length (#662)
TreasurePot.setTxLimit(uint256) (#665-668) should emit an event for:
- _maxTxAmount = amount (#667)
TreasurePot.setFees(uint256,uint256,uint256,uint256,uint256) (#688-695) should emit an event for:
- liquidityFee = _liquidityFee (#689)
- reflectionFee = _reflectionFee (#691)
- marketingFee = _marketingFee (#692)
- totalFee = _liquidityFee.add(_buybackFee).add(_reflectionFee).add(_marketingFee) (#693)
- feeDenominator = _feeDenominator (#694)
TreasurePot.setSwapBackSettings(bool,uint256) (#702-705) should emit an event for:
- swapThreshold = _amount (#704)
TreasurePot.setTargetLiquidity(uint256,uint256) (#707-710) should emit an event for:
- targetLiquidity = _target (#708)
- targetLiquidityDenominator = _denominator (#709)
Emit an event for critical parameter changes.
Additional information: link
Auth.transferOwnership(address).adr (#126) lacks a zero-check on :
- owner = adr (#127)
TreasurePot.setFeeReceivers(address,address)._autoLiquidityReceiver (#697) lacks a zero-check on :
- autoLiquidityReceiver = _autoLiquidityReceiver (#698)
TreasurePot.setFeeReceivers(address,address)._marketingFeeReceiver (#697) lacks a zero-check on :
- marketingFeeReceiver = _marketingFeeReceiver (#699)
Check that the address is not zero.
Additional information: link
DividendDistributor.distributeDividend(address) (#316-327) has external calls inside a loop: rewardsToken.transfer(shareholder,amount) (#322)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in TreasurePot._transferFrom(address,address,uint256) (#489-515):
External calls:
- swapBack() (#500)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#570-576)
- distributor.deposit{value: amountBNBReflection}() (#583)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
- triggerAutoBuyback() (#501)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
External calls sending eth:
- swapBack() (#500)
- distributor.deposit{value: amountBNBReflection}() (#583)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
- triggerAutoBuyback() (#501)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
State variables written after the call(s):
- triggerAutoBuyback() (#501)
- buybackMultiplierTriggeredAt = block.timestamp (#628)
Reentrancy in TreasurePot.constructor() (#431-450):
External calls:
- pair = IDEXFactory(router.factory()).createPair(WBNB,address(this)) (#433)
State variables written after the call(s):
- _allowances[address(this)][address(router)] = type()(uint256).max (#434)
- _balances[_presaler] = _totalSupply (#448)
- autoLiquidityReceiver = msg.sender (#445)
- distributor = new DividendDistributor(address(router)) (#436)
- isDividendExempt[pair] = true (#441)
- isDividendExempt[address(this)] = true (#442)
- isDividendExempt[DEAD] = true (#443)
- isFeeExempt[_presaler] = true (#439)
- isTxLimitExempt[_presaler] = true (#440)
- marketingFeeReceiver = msg.sender (#446)
Reentrancy in DividendDistributor.deposit() (#265-283):
External calls:
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(0,path,address(this),block.timestamp) (#272-277)
State variables written after the call(s):
- dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)) (#282)
- totalDividends = totalDividends.add(amount) (#281)
Reentrancy in DividendDistributor.distributeDividend(address) (#316-327):
External calls:
- rewardsToken.transfer(shareholder,amount) (#322)
State variables written after the call(s):
- shareholderClaims[shareholder] = block.timestamp (#323)
Reentrancy in DividendDistributor.setShare(address,uint256) (#249-263):
External calls:
- distributeDividend(shareholder) (#251)
- rewardsToken.transfer(shareholder,amount) (#322)
State variables written after the call(s):
- addShareholder(shareholder) (#255)
- shareholderIndexes[shareholder] = shareholders.length (#361)
- removeShareholder(shareholder) (#257)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#367)
- addShareholder(shareholder) (#255)
- shareholders.push(shareholder) (#362)
- removeShareholder(shareholder) (#257)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#366)
- shareholders.pop() (#368)
- totalShares = totalShares.sub(shares[shareholder].amount).add(amount) (#260)
Reentrancy in TreasurePot.triggerAutoBuyback() (#625-634):
External calls:
- buyTokens(autoBuybackAmount,DEAD) (#626)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
State variables written after the call(s):
- autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount) (#632)
- autoBuybackBlockLast = block.number (#631)
- autoBuybackEnabled = false (#633)
- buybackMultiplierTriggeredAt = block.timestamp (#628)
Reentrancy in TreasurePot.triggerManualBuyback(uint256,bool) (#608-614):
External calls:
- buyTokens(amount,DEAD) (#609)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
State variables written after the call(s):
- buybackMultiplierTriggeredAt = block.timestamp (#611)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in TreasurePot._transferFrom(address,address,uint256) (#489-515):
External calls:
- swapBack() (#500)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#570-576)
- distributor.deposit{value: amountBNBReflection}() (#583)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
- triggerAutoBuyback() (#501)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
External calls sending eth:
- swapBack() (#500)
- distributor.deposit{value: amountBNBReflection}() (#583)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
- triggerAutoBuyback() (#501)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
Event emitted after the call(s):
- BuybackMultiplierActive(buybackMultiplierLength) (#629)
- triggerAutoBuyback() (#501)
- Transfer(sender,address(this),feeAmount) (#547)
- amountReceived = takeFee(sender,recipient,amount) (#505)
Reentrancy in TreasurePot._transferFrom(address,address,uint256) (#489-515):
External calls:
- swapBack() (#500)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#570-576)
- distributor.deposit{value: amountBNBReflection}() (#583)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
- triggerAutoBuyback() (#501)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
- distributor.setShare(sender,_balances[sender]) (#508)
- distributor.setShare(recipient,_balances[recipient]) (#509)
- distributor.process(distributorGas) (#511)
External calls sending eth:
- swapBack() (#500)
- distributor.deposit{value: amountBNBReflection}() (#583)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
- triggerAutoBuyback() (#501)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
Event emitted after the call(s):
- Transfer(sender,recipient,amountReceived) (#513)
Reentrancy in TreasurePot.constructor() (#431-450):
External calls:
- pair = IDEXFactory(router.factory()).createPair(WBNB,address(this)) (#433)
Event emitted after the call(s):
- Transfer(address(0),_presaler,_totalSupply) (#449)
Reentrancy in TreasurePot.swapBack() (#559-598):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#570-576)
- distributor.deposit{value: amountBNBReflection}() (#583)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
External calls sending eth:
- distributor.deposit{value: amountBNBReflection}() (#583)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#588-595)
Event emitted after the call(s):
- AutoLiquify(amountBNBLiquidity,amountToLiquify) (#596)
Reentrancy in TreasurePot.triggerAutoBuyback() (#625-634):
External calls:
- buyTokens(autoBuybackAmount,DEAD) (#626)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
Event emitted after the call(s):
- BuybackMultiplierActive(buybackMultiplierLength) (#629)
Reentrancy in TreasurePot.triggerManualBuyback(uint256,bool) (#608-614):
External calls:
- buyTokens(amount,DEAD) (#609)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#641-646)
Event emitted after the call(s):
- BuybackMultiplierActive(buybackMultiplierLength) (#612)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.shouldDistribute(address) (#311-314) uses timestamp for comparisons
Dangerous comparisons:
- shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution (#312-313)
TreasurePot._transferFrom(address,address,uint256) (#489-515) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)((heldTokens + amount) <= _maxWalletToken,Total Holding is currently limited, you can not buy that much.) (#495)
TreasurePot.getTotalFee(bool) (#532-535) uses timestamp for comparisons
Dangerous comparisons:
- selling && buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp (#533)
TreasurePot.shouldSwapBack() (#552-557) uses timestamp for comparisons
Dangerous comparisons:
- msg.sender != pair && ! inSwap && swapEnabled && _balances[address(this)] >= swapThreshold (#553-556)
TreasurePot.isOverLiquified(uint256,uint256) (#758-760) uses timestamp for comparisons
Dangerous comparisons:
- getLiquidityBacking(accuracy) > target (#759)
Avoid relying on block.timestamp.
Additional information: link
DividendDistributor.process(uint256) (#285-309) has costly operations inside a loop:
- currentIndex = 0 (#297)
DividendDistributor.distributeDividend(address) (#316-327) has costly operations inside a loop:
- totalDistributed = totalDistributed.add(amount) (#321)
DividendDistributor.process(uint256) (#285-309) has costly operations inside a loop:
- currentIndex ++ (#306)
Use a local variable to hold the loop computation result.
Additional information: link
TreasurePot._maxTxAmount (#384) is set pre-construction with a non-constant function or state variable:
- (_totalSupply * 99) / 100
TreasurePot._maxWalletToken (#385) is set pre-construction with a non-constant function or state variable:
- (_totalSupply * 99) / 100
TreasurePot.swapThreshold (#427) is set pre-construction with a non-constant function or state variable:
- _totalSupply / 1000
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 TreasurePot.swapBack() (#559-598):
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#584)
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() (#141) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minPeriod (#244) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minDistribution (#244) is not in mixedCase
Parameter DividendDistributor.setRewardsToken(address)._rewardsToken (#337) is not in mixedCase
Variable DividendDistributor._token (#197) is not in mixedCase
Variable DividendDistributor.WBNB (#206) is not in mixedCase
Parameter TreasurePot.setAutoBuybackSettings(bool,uint256,uint256,uint256,bool)._enabled (#649) is not in mixedCase
Parameter TreasurePot.setAutoBuybackSettings(bool,uint256,uint256,uint256,bool)._cap (#649) is not in mixedCase
Parameter TreasurePot.setAutoBuybackSettings(bool,uint256,uint256,uint256,bool)._amount (#649) is not in mixedCase
Parameter TreasurePot.setAutoBuybackSettings(bool,uint256,uint256,uint256,bool)._period (#649) is not in mixedCase
Parameter TreasurePot.setAutoBuybackSettings(bool,uint256,uint256,uint256,bool)._autoBuybackMultiplier (#649) is not in mixedCase
Parameter TreasurePot.setFees(uint256,uint256,uint256,uint256,uint256)._liquidityFee (#688) is not in mixedCase
Parameter TreasurePot.setFees(uint256,uint256,uint256,uint256,uint256)._buybackFee (#688) is not in mixedCase
Parameter TreasurePot.setFees(uint256,uint256,uint256,uint256,uint256)._reflectionFee (#688) is not in mixedCase
Parameter TreasurePot.setFees(uint256,uint256,uint256,uint256,uint256)._marketingFee (#688) is not in mixedCase
Parameter TreasurePot.setFees(uint256,uint256,uint256,uint256,uint256)._feeDenominator (#688) is not in mixedCase
Parameter TreasurePot.setFeeReceivers(address,address)._autoLiquidityReceiver (#697) is not in mixedCase
Parameter TreasurePot.setFeeReceivers(address,address)._marketingFeeReceiver (#697) is not in mixedCase
Parameter TreasurePot.setSwapBackSettings(bool,uint256)._enabled (#702) is not in mixedCase
Parameter TreasurePot.setSwapBackSettings(bool,uint256)._amount (#702) is not in mixedCase
Parameter TreasurePot.setTargetLiquidity(uint256,uint256)._target (#707) is not in mixedCase
Parameter TreasurePot.setTargetLiquidity(uint256,uint256)._denominator (#707) is not in mixedCase
Parameter TreasurePot.setDistributionCriteria(uint256,uint256)._minPeriod (#717) is not in mixedCase
Parameter TreasurePot.setDistributionCriteria(uint256,uint256)._minDistribution (#717) is not in mixedCase
Parameter TreasurePot.setRewardsToken(address)._rewardsToken (#725) is not in mixedCase
Variable TreasurePot.WBNB (#375) is not in mixedCase
Variable TreasurePot.DEAD (#376) is not in mixedCase
Variable TreasurePot.ZERO (#377) is not in mixedCase
Constant TreasurePot._name (#379) is not in UPPER_CASE_WITH_UNDERSCORES
Constant TreasurePot._symbol (#380) is not in UPPER_CASE_WITH_UNDERSCORES
Constant TreasurePot._decimals (#381) is not in UPPER_CASE_WITH_UNDERSCORES
Variable TreasurePot._totalSupply (#383) is not in mixedCase
Variable TreasurePot._maxTxAmount (#384) is not in mixedCase
Variable TreasurePot._maxWalletToken (#385) is not in mixedCase
Variable TreasurePot._balances (#387) is not in mixedCase
Variable TreasurePot._allowances (#388) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#146) is too similar to IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#147)
Prevent variables from having similar names.
Additional information: link
TreasurePot.slitherConstructorVariables() (#372-765) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#376)
TreasurePot.slitherConstructorVariables() (#372-765) uses literals with too many digits:
- ZERO = 0x0000000000000000000000000000000000000000 (#377)
TreasurePot.slitherConstructorVariables() (#372-765) uses literals with too many digits:
- _totalSupply = 1000000000 * (10 ** _decimals) (#383)
TreasurePot.slitherConstructorVariables() (#372-765) uses literals with too many digits:
- distributorGas = 500000 (#424)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
DividendDistributor.WBNB (#206) should be constant
DividendDistributor.dividendsPerShareAccuracyFactor (#219) should be constant
TreasurePot.DEAD (#376) should be constant
TreasurePot.WBNB (#375) should be constant
TreasurePot.ZERO (#377) should be constant
TreasurePot._totalSupply (#383) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
authorize(address) should be declared external:
- Auth.authorize(address) (#98-100)
unauthorize(address) should be declared external:
- Auth.unauthorize(address) (#105-107)
transferOwnership(address) should be declared external:
- Auth.transferOwnership(address) (#126-130)
getUnpaidEarnings(address) should be declared external:
- TreasurePot.getUnpaidEarnings(address) (#741-743)
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