Matrix Fan Token (Test) - Smart Contract Audit Report

Summary

Matrix Fan Token (Test) Audit Report Matrix Fan Token (Test) ($MATRIX) is a new BEP20 token on the Binance Smart Chain that pays out static rewards to holders.

We reviewed the MatrixFanTokenTEST contract at 0x93F3Ac93C39901d4933C96AF3BDC3d8812Ac905E on the Binance Smart Chain mainnet.

Notes on the Contract:
  • The total supply of the token is set to 1 trillion $MATRIX [1,000,000,000,000].
  • No mint functions are accessible beyond deployment.
  • The owner can burn their own tokens to reduce the total supply.
  • At the time of writing this report, 100% of the total supply belongs to the owner.

  • There is a tax fee, buyback fee, charity fee, and marketing fee on all transfers via Pancakeswap where neither the sender nor the recipient is excluded from fees.
  • The tokens collected from the tax fee are removed from the circulating supply; This serves as a frictionless fee redistribution which automatically benefits all token holders at the time of each transaction.
  • The tokens collected from the buyback fee, charity fee, and marketing fee are stored in the contract address balance. Once the threshold number of tokens (determined by the owner) is met, the tokens are swapped for BNB. A portion of that BNB is split between the team's Marketing and Charity wallets. The remaining portion of BNB is swapped back to $MATRIX and remains in the contract address.
  • Although the Safemath library is utilized, the contract is deployed with Solidity v0.8.0 which has built-in overflow checks. Safemath could be safely removed to reduce contract size and increase gas savings.

  • Ownership Controls:
  • The owner can modify the tax fee, buyback fee, charity fee, and marketing fee to any percentages at any time.
  • The owner can exclude and include accounts from transfer fees and reward distribution.
  • The owner can withdraw any BNB and BEP20 tokens from the contract address at any time.
  • The owner can pause/unpause all trading at any time.
  • The owner can enable/disable transfer fees at any time.
  • The owner can set and update a maximum sell limit at any time, which will impose a limit to the number of tokens that can be sold via Pancakeswap.
  • The owner can enable/disable the automatic swapping functionality at any time.
  • The owner can update the threshold number of tokens that triggers the automatic swapping functionality to any value at any time.
Audit Findings Summary
  • No external threats were identified.
  • Please ensure trust in the team prior to investing as they have substantial control in the ecosystem and currently own 100% of the total supply.
  • Date: January 10th, 2022

Audit Results

Vulnerability CategoryNotesResult
Arbitrary Storage WriteN/APASS
Arbitrary JumpN/APASS
Centralization of Control
  • The team can set each fee percentage up to 100%.
  • The owner currently owns 100% of the total supply.
  • WARNING
    Delegate Call to Untrusted ContractN/APASS
    Dependence on Predictable VariablesN/APASS
    Deprecated OpcodesN/APASS
    Ether ThiefN/APASS
    ExceptionsN/APASS
    External CallsN/APASS
    Flash LoansN/APASS
    Integer Over/UnderflowN/APASS
    Multiple SendsN/APASS
    OraclesN/APASS
    SuicideN/APASS
    State Change External CallsN/APASS
    Unchecked RetvalN/APASS
    User Supplied AssertionN/APASS
    Critical Solidity CompilerN/APASS
    Overall Contract Safety PASS

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] balanceOf
        - [Ext] burn #
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [Int] IBEP20Metadata (IBEP20)
        - [Ext] name
        - [Ext] symbol
        - [Ext] decimals
    
     +  Context 
        - [Int] _msgSender
        - [Int] _msgData
    
     +  Pausable (Context)
        - [Pub]  #
        - [Pub] paused
        - [Int] _pause #
           - modifiers: whenNotPaused
        - [Int] _unpause #
           - modifiers: whenPaused
    
     +  Ownable (Context, Pausable)
        - [Pub]  #
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner,whenNotPaused
        - [Pub] transferOwnership #
           - modifiers: onlyOwner,whenNotPaused
    
     + [Lib] SafeMath 
        - [Int] tryAdd
        - [Int] trySub
        - [Int] tryMul
        - [Int] tryDiv
        - [Int] tryMod
        - [Int] add
        - [Int] sub
        - [Int] mul
        - [Int] div
        - [Int] mod
        - [Int] sub
        - [Int] div
        - [Int] mod
    
     + [Lib] Address 
        - [Int] isContract
        - [Int] sendValue #
        - [Int] functionCall #
        - [Int] functionCall #
        - [Int] functionCallWithValue #
        - [Int] functionCallWithValue #
        - [Int] functionStaticCall
        - [Int] functionStaticCall
        - [Int] functionDelegateCall #
        - [Int] functionDelegateCall #
        - [Prv] _verifyCallResult
    
     + [Int] IUniswapV2Factory 
        - [Ext] feeTo
        - [Ext] feeToSetter
        - [Ext] getPair
        - [Ext] allPairs
        - [Ext] allPairsLength
        - [Ext] createPair #
        - [Ext] setFeeTo #
        - [Ext] setFeeToSetter #
    
     + [Int] IUniswapV2Pair 
        - [Ext] name
        - [Ext] symbol
        - [Ext] decimals
        - [Ext] totalSupply
        - [Ext] balanceOf
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transfer #
        - [Ext] transferFrom #
        - [Ext] DOMAIN_SEPARATOR
        - [Ext] PERMIT_TYPEHASH
        - [Ext] nonces
        - [Ext] permit #
        - [Ext] MINIMUM_LIQUIDITY
        - [Ext] factory
        - [Ext] token0
        - [Ext] token1
        - [Ext] getReserves
        - [Ext] price0CumulativeLast
        - [Ext] price1CumulativeLast
        - [Ext] kLast
        - [Ext] mint #
        - [Ext] burn #
        - [Ext] swap #
        - [Ext] skim #
        - [Ext] sync #
        - [Ext] initialize #
    
     + [Int] IUniswapV2Router01 
        - [Ext] factory
        - [Ext] WETH
        - [Ext] addLiquidity #
        - [Ext] addLiquidityETH ($)
        - [Ext] removeLiquidity #
        - [Ext] removeLiquidityETH #
        - [Ext] removeLiquidityWithPermit #
        - [Ext] removeLiquidityETHWithPermit #
        - [Ext] swapExactTokensForTokens #
        - [Ext] swapTokensForExactTokens #
        - [Ext] swapExactETHForTokens ($)
        - [Ext] swapTokensForExactETH #
        - [Ext] swapExactTokensForETH #
        - [Ext] swapETHForExactTokens ($)
        - [Ext] quote
        - [Ext] getAmountOut
        - [Ext] getAmountIn
        - [Ext] getAmountsOut
        - [Ext] getAmountsIn
    
     + [Int] IUniswapV2Router02 (IUniswapV2Router01)
        - [Ext] removeLiquidityETHSupportingFeeOnTransferTokens #
        - [Ext] removeLiquidityETHWithPermitSupportingFeeOnTransferTokens #
        - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
        - [Ext] swapExactETHForTokensSupportingFeeOnTransferTokens ($)
        - [Ext] swapExactTokensForETHSupportingFeeOnTransferTokens #
    
     +  MatrixFanTokenTEST (Context, IBEP20, IBEP20Metadata, Pausable, Ownable)
        - [Pub]  #
        - [Ext] name
        - [Ext] symbol
        - [Ext] decimals
        - [Ext] totalSupply
        - [Pub] balanceOf
        - [Ext] isExcludedFromDexFee
        - [Ext] isExcludedFromReward
        - [Ext] totalFees
        - [Ext] transfer #
           - modifiers: whenNotPaused
        - [Ext] allowance
           - modifiers: whenNotPaused
        - [Ext] approve #
           - modifiers: whenNotPaused
        - [Ext] transferFrom #
           - modifiers: whenNotPaused
        - [Ext] increaseAllowance #
           - modifiers: whenNotPaused
        - [Ext] decreaseAllowance #
           - modifiers: whenNotPaused
        - [Ext] pauseContract #
           - modifiers: onlyOwner
        - [Ext] unPauseContract #
           - modifiers: onlyOwner
        - [Ext] burn #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] excludeFromReward #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] includeInReward #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] excludeFromDexFee #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] includeInDexFee #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setTaxFeePercent #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setMarketingFeePercent #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setCharityFeePercent #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setBuyBackFeePercent #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setMarketingSwapEnabled #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setCharitySwapEnabled #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setBuyBackSwapEnabled #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setMaximumSellLimitUniswap #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setMinimumTokensBeforeSwap #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setEnableFee #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] setEnableMaxSellLimit #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] withdrawToken #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext] withdrawBNBFromContract #
           - modifiers: onlyOwner,whenNotPaused
        - [Ext]  ($)
        - [Int] _approve #
        - [Int] _transfer #
        - [Int] _burn #
        - [Int] _tokenTransfer #
        - [Int] _transferStandard #
        - [Int] _transferBothExcluded #
        - [Int] _transferToExcluded #
        - [Int] _transferFromExcluded #
        - [Int] getTValues
        - [Int] getRValues
        - [Int] calculateTaxFee
        - [Int] calculateSwapFee
        - [Int] takeReflectionFee #
        - [Int] takeSwapFee #
        - [Int] removeAllFee #
        - [Int] restoreAllFee #
        - [Int] distributeFee #
        - [Int] transferBNBToAddress #
        - [Int] swapTokensForEth #
        - [Int] swapETHForTokens #
        - [Int] tokenFromReflection
        - [Int] getRate
        - [Int] getCurrentSupply