MetaBusdCoin is a deflationary reward token, rewarding holders in a stable coin pegged to the Binance Smart Chain. This allows all holders to enjoy their rewards without having a negative impact on MetaBusdCoin.
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
MetaBUSDCoin.swapBack() (#703-759) sends eth to arbitrary user
Dangerous calls:
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
DividendDistributor.distributeDividend(address) (#448-459) ignores return value by BUSD.transfer(shareholder,amount) (#454)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Reentrancy in MetaBUSDCoin._transferFrom(address,address,uint256) (#615-644):
External calls:
- swapBack() (#623)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#714-758)
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
External calls sending eth:
- swapBack() (#623)
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
State variables written after the call(s):
- _balances[sender] = _balances[sender].sub(amount,Insufficient Balance) (#632)
- _balances[recipient] = _balances[recipient].add(amountReceived) (#635)
- amountReceived = takeFee(sender,amount) (#634)
- _balances[address(this)] = _balances[address(this)].add(finalFee) (#680)
- _balances[DEAD] = _balances[DEAD].add(burnAmount) (#681)
Apply the check-effects-interactions pattern.
Additional information: link
Combination 1: Reentrancy vulnerabilities + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
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.
Contract ownership is not renounced (belongs to a wallet)
MetaBUSDCoin.isSell(address) (#688-694) is never used and should be removed
Remove unused functions.
Additional information: link
MetaBUSDCoin.BUSD (#495) is never used in MetaBUSDCoin (#492-876)
Remove unused state variables.
Additional information: link
MetaBUSDCoin.setMaxHoldPercentage(uint256) (#852-854) performs a multiplication on the result of a division:
-_maxHold = (_totalSupply / 100) * percent (#853)
MetaBUSDCoin.takeFee(address,uint256) (#674-686) performs a multiplication on the result of a division:
-feeAmount = amount.mul(getTotalFee()).div(feeDenominator) (#675)
-burnAmount = feeAmount.mul(burnFee).div(totalFee) (#677)
Consider ordering multiplication before division.
Additional information: link
Reentrancy in DividendDistributor.process(uint256) (#417-441):
External calls:
- distributeDividend(shareholders[currentIndex]) (#433)
- BUSD.transfer(shareholder,amount) (#454)
State variables written after the call(s):
- currentIndex ++ (#438)
Reentrancy in DividendDistributor.distributeDividend(address) (#448-459):
External calls:
- BUSD.transfer(shareholder,amount) (#454)
State variables written after the call(s):
- shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount) (#456)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#457)
Reentrancy in DividendDistributor.setShare(address,uint256) (#381-395):
External calls:
- distributeDividend(shareholder) (#383)
- BUSD.transfer(shareholder,amount) (#454)
State variables written after the call(s):
- shares[shareholder].amount = amount (#393)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#394)
Apply the check-effects-interactions pattern.
Additional information: link
MBCAuth.constructor(address).i (#150) is a local variable never initialized
MetaBUSDCoin.swapBack().e (#754) is a local variable never initialized
MBCAuth.unauthorizeForMultiplePermissions(address,string[]).i (#229) is a local variable never initialized
MBCAuth.transferOwnership(address).i (#263) is a local variable never initialized
MBCAuth.authorizeForMultiplePermissions(address,string[]).i (#205) 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
MetaBUSDCoin.swapBack() (#703-759) ignores return value by router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
Ensure that all the return values of the function calls are used.
Additional information: link
MetaBUSDCoin.setTxLimit(uint256,bool) (#774-782) should emit an event for:
- _maxTxAmount = amount (#777)
- _maxTxAmount = amount (#780)
MetaBUSDCoin.setFees(uint256,uint256,uint256,uint256,uint256,uint256) (#806-814) should emit an event for:
- liquidityFee = _liquidityFee (#807)
- reflectionFee = _reflectionFee (#808)
- marketingFee = _marketingFee (#809)
- buybackFee = _buybackFee (#810)
- burnFee = _burnFee (#811)
- totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee).add(_buybackFee).add(_burnFee) (#812)
- feeDenominator = _feeDenominator (#813)
MetaBUSDCoin.setLaunchedAt(uint256) (#872-874) should emit an event for:
- launchedAt = launched_ (#873)
MetaBUSDCoin.setSwapBackSettings(bool,uint256) (#822-825) should emit an event for:
- swapThreshold = _amount (#824)
DividendDistributor.setDistributionCriteria(uint256,uint256) (#376-379) should emit an event for:
- minPeriod = _minPeriod (#377)
- minDistribution = _minDistribution (#378)
Emit an event for critical parameter changes.
Additional information: link
MetaBUSDCoin.setFeeReceivers(address,address,address)._autoLiquidityReceiver (#816) lacks a zero-check on :
- autoLiquidityReceiver = _autoLiquidityReceiver (#817)
MetaBUSDCoin.clearStuckBNB(address).wallet (#848) lacks a zero-check on :
- address(wallet).transfer(address(this).balance) (#849)
MBCAuth.transferOwnership(address).adr (#260) lacks a zero-check on :
- owner = adr (#262)
MetaBUSDCoin.setFeeReceivers(address,address,address)._marketingFeeReceiver (#816) lacks a zero-check on :
- marketingFeeReceiver = _marketingFeeReceiver (#818)
MetaBUSDCoin.setFeeReceivers(address,address,address)._buybackFeeReciever (#816) lacks a zero-check on :
- buybackFeeReceiver = _buybackFeeReciever (#819)
MetaBUSDCoin.constructor().owner_ (#565) lacks a zero-check on :
- autoLiquidityReceiver = owner_ (#577)
Check that the address is not zero.
Additional information: link
Variable 'MetaBUSDCoin.swapBack().e (#754)' in MetaBUSDCoin.swapBack() (#703-759) potentially used before declaration: SwapBackFailed(string(abi.encodePacked(SwapBack failed with error ,e))) (#755)
Move all variable declarations prior to any usage of the variable, and ensure that reaching a variable declaration does not depend on some conditional if it is used unconditionally.
Additional information: link
Reentrancy in MetaBUSDCoin._transferFrom(address,address,uint256) (#615-644):
External calls:
- swapBack() (#623)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#714-758)
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
External calls sending eth:
- swapBack() (#623)
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
State variables written after the call(s):
- launch() (#625)
- launchedAt = block.number (#766)
Reentrancy in DividendDistributor.distributeDividend(address) (#448-459):
External calls:
- BUSD.transfer(shareholder,amount) (#454)
State variables written after the call(s):
- shareholderClaims[shareholder] = block.timestamp (#455)
Reentrancy in DividendDistributor.setShare(address,uint256) (#381-395):
External calls:
- distributeDividend(shareholder) (#383)
- BUSD.transfer(shareholder,amount) (#454)
State variables written after the call(s):
- addShareholder(shareholder) (#387)
- shareholderIndexes[shareholder] = shareholders.length (#481)
- removeShareholder(shareholder) (#389)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#487)
- addShareholder(shareholder) (#387)
- shareholders.push(shareholder) (#482)
- removeShareholder(shareholder) (#389)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#486)
- shareholders.pop() (#488)
- totalShares = totalShares.sub(shares[shareholder].amount).add(amount) (#392)
Reentrancy in DividendDistributor.deposit() (#397-415):
External calls:
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(0,path,address(this),block.timestamp) (#404-409)
State variables written after the call(s):
- dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)) (#414)
- totalDividends = totalDividends.add(amount) (#413)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in MetaBUSDCoin.swapBack() (#703-759):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#714-758)
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
External calls sending eth:
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
Event emitted after the call(s):
- BuybackTransfer(buybackSuccess) (#736)
- MarketTransfer(marketSuccess) (#735)
Reentrancy in MetaBUSDCoin.swapBack() (#703-759):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#714-758)
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
External calls sending eth:
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
Event emitted after the call(s):
- AutoLiquify(amountToLiquify,amountBNBLiquidity) (#747)
- AutoLiquify(0,0) (#749)
- SwapBackSuccess(amountToSwap) (#753)
Reentrancy in MetaBUSDCoin._transferFrom(address,address,uint256) (#615-644):
External calls:
- swapBack() (#623)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#714-758)
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
- distributor.setShare(sender,_balances[sender]) (#637)
- distributor.setShare(recipient,_balances[recipient]) (#638)
- distributor.process(distributorGas) (#640)
External calls sending eth:
- swapBack() (#623)
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
Event emitted after the call(s):
- Transfer(sender,recipient,amountReceived) (#642)
Reentrancy in MetaBUSDCoin.swapBack() (#703-759):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#714-758)
Event emitted after the call(s):
- SwapBackFailed(string(abi.encodePacked(SwapBack failed with error ,e))) (#755)
- SwapBackFailed(SwapBack failed without an error message from pancakeSwap) (#757)
Reentrancy in MetaBUSDCoin._transferFrom(address,address,uint256) (#615-644):
External calls:
- swapBack() (#623)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#714-758)
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
External calls sending eth:
- swapBack() (#623)
- distributor.deposit{value: amountBNBReflection}() (#731)
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#739-750)
Event emitted after the call(s):
- Launched(block.number,block.timestamp) (#767)
- launch() (#625)
- Transfer(sender,DEAD,burnAmount) (#682)
- amountReceived = takeFee(sender,amount) (#634)
- Transfer(sender,address(this),finalFee) (#683)
- amountReceived = takeFee(sender,amount) (#634)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.shouldDistribute(address) (#443-446) uses timestamp for comparisons
Dangerous comparisons:
- shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution (#444-445)
MBCAuth.unlockPermission(string) (#304-309) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp > getPermissionUnlockTime(permissionName),Permission is locked until the expiry time.) (#305)
Avoid relying on block.timestamp.
Additional information: link
DividendDistributor.process(uint256) (#417-441) has costly operations inside a loop:
- currentIndex ++ (#438)
DividendDistributor.distributeDividend(address) (#448-459) has costly operations inside a loop:
- totalDistributed = totalDistributed.add(amount) (#453)
DividendDistributor.process(uint256) (#417-441) has costly operations inside a loop:
- currentIndex = 0 (#429)
Use a local variable to hold the loop computation result.
Additional information: link
MetaBUSDCoin.swapThreshold (#545) is set pre-construction with a non-constant function or state variable:
- _totalSupply / 5000
MetaBUSDCoin._maxHold (#508) is set pre-construction with a non-constant function or state variable:
- _totalSupply / 1000
MetaBUSDCoin._maxTxAmount (#505) is set pre-construction with a non-constant function or state variable:
- _totalSupply / 10000
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 MetaBUSDCoin.swapBack() (#703-759):
- (marketSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#732)
- (buybackSuccess) = address(buybackFeeReceiver).call{gas: 30000,value: amountBNBBuyback}() (#733)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Parameter MetaBUSDCoin.setFees(uint256,uint256,uint256,uint256,uint256,uint256)._reflectionFee (#806) is not in mixedCase
Variable MetaBUSDCoin.ZERO (#498) is not in mixedCase
Function IDEXRouter.WETH() (#71) is not in mixedCase
Constant MetaBUSDCoin._decimals (#502) is not in UPPER_CASE_WITH_UNDERSCORES
Parameter MetaBUSDCoin.setFees(uint256,uint256,uint256,uint256,uint256,uint256)._marketingFee (#806) is not in mixedCase
Variable MetaBUSDCoin.DEAD (#497) is not in mixedCase
Variable MetaBUSDCoin.BUSD (#495) is not in mixedCase
Parameter MetaBUSDCoin.freeze(bool)._freeze (#770) is not in mixedCase
Parameter MetaBUSDCoin.setFees(uint256,uint256,uint256,uint256,uint256,uint256)._liquidityFee (#806) is not in mixedCase
Parameter MetaBUSDCoin.setFeeReceivers(address,address,address)._marketingFeeReceiver (#816) is not in mixedCase
Variable DividendDistributor.BUSD (#337) is not in mixedCase
Variable MetaBUSDCoin.freeze_contract (#539) is not in mixedCase
Parameter MetaBUSDCoin.setFees(uint256,uint256,uint256,uint256,uint256,uint256)._feeDenominator (#806) is not in mixedCase
Parameter MetaBUSDCoin.setDistributionCriteria(uint256,uint256)._minPeriod (#831) is not in mixedCase
Variable MetaBUSDCoin._allowances (#511) is not in mixedCase
Variable MetaBUSDCoin._balances (#510) is not in mixedCase
Parameter MetaBUSDCoin.setFeeReceivers(address,address,address)._buybackFeeReciever (#816) is not in mixedCase
Parameter MetaBUSDCoin.setFeeReceivers(address,address,address)._autoLiquidityReceiver (#816) is not in mixedCase
Parameter MetaBUSDCoin.setFees(uint256,uint256,uint256,uint256,uint256,uint256)._burnFee (#806) is not in mixedCase
Variable MetaBUSDCoin._totalSupply (#504) is not in mixedCase
Parameter MetaBUSDCoin.setFees(uint256,uint256,uint256,uint256,uint256,uint256)._buybackFee (#806) is not in mixedCase
Parameter MetaBUSDCoin.setSwapBackSettings(bool,uint256)._amount (#822) is not in mixedCase
Variable MetaBUSDCoin._maxHold (#508) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minDistribution (#376) is not in mixedCase
Variable MetaBUSDCoin.WBNB (#496) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minPeriod (#376) is not in mixedCase
Constant MetaBUSDCoin._symbol (#501) is not in UPPER_CASE_WITH_UNDERSCORES
Parameter MetaBUSDCoin.setLiquifyEnabled(bool)._enabled (#827) is not in mixedCase
Parameter MetaBUSDCoin.setFeesOnNormalTransfers(bool)._enabled (#864) is not in mixedCase
Variable DividendDistributor._token (#329) is not in mixedCase
Variable MetaBUSDCoin._maxTxAmount (#505) is not in mixedCase
Variable DividendDistributor.WBNB (#338) is not in mixedCase
Constant MetaBUSDCoin._name (#500) is not in UPPER_CASE_WITH_UNDERSCORES
Parameter MetaBUSDCoin.setSwapBackSettings(bool,uint256)._enabled (#822) is not in mixedCase
Parameter MetaBUSDCoin.setTxLimit(uint256,bool)._withCSupply (#774) is not in mixedCase
Parameter MetaBUSDCoin.setDistributionCriteria(uint256,uint256)._minDistribution (#831) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#76) is too similar to IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#77)
Prevent variables from having similar names.
Additional information: link
MetaBUSDCoin.slitherConstructorVariables() (#492-876) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#497)
MetaBUSDCoin.setDistributorSettings(uint256) (#835-838) uses literals with too many digits:
- require(bool)(gas <= 1000000) (#836)
MetaBUSDCoin.slitherConstructorVariables() (#492-876) uses literals with too many digits:
- distributorGas = 600000 (#542)
MetaBUSDCoin.slitherConstructorVariables() (#492-876) uses literals with too many digits:
- ZERO = 0x0000000000000000000000000000000000000000 (#498)
MetaBUSDCoin.slitherConstructorVariables() (#492-876) uses literals with too many digits:
- _totalSupply = 500000000000000000000000000000000 (#504)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
MetaBUSDCoin.ZERO (#498) should be constant
MetaBUSDCoin.BUSD (#495) should be constant
MetaBUSDCoin.WBNB (#496) should be constant
MetaBUSDCoin.DEAD (#497) should be constant
DividendDistributor.dividendsPerShareAccuracyFactor (#351) should be constant
DividendDistributor.WBNB (#338) should be constant
MetaBUSDCoin._totalSupply (#504) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
unauthorizeForMultiplePermissions(address,string[]) should be declared external:
- MBCAuth.unauthorizeForMultiplePermissions(address,string[]) (#226-234)
transferOwnership(address) should be declared external:
- MBCAuth.transferOwnership(address) (#260-268)
lockPermission(string,uint64) should be declared external:
- MBCAuth.lockPermission(string,uint64) (#294-299)
getPermissionNameToIndex(string) should be declared external:
- MBCAuth.getPermissionNameToIndex(string) (#273-275)
authorizeForMultiplePermissions(address,string[]) should be declared external:
- MBCAuth.authorizeForMultiplePermissions(address,string[]) (#204-210)
isAuthorizedFor(address,string) should be declared external:
- MBCAuth.isAuthorizedFor(address,string) (#246-248)
isLocked(string) should be declared external:
- MBCAuth.isLocked(string) (#287-289)
authorizeFor(address,string) should be declared external:
- MBCAuth.authorizeFor(address,string) (#195-199)
unauthorizeFor(address,string) should be declared external:
- MBCAuth.unauthorizeFor(address,string) (#215-221)
unlockPermission(string) should be declared external:
- MBCAuth.unlockPermission(string) (#304-309)
Use the external attribute for functions never called from the contract.
Additional information: link
DividendDistributor.distributeDividend(address) (#448-459) has external calls inside a loop: BUSD.transfer(shareholder,amount) (#454)
Favor pull over push strategy for external calls.
Additional information: link
Token has relatively low CoinGecko rank
Token has relatively low CoinMarketCap rank
Twitter account link seems to be invalid
Unable to find Youtube account