BlockMonsters Token - Smart Contract Audit Report

Summary

BlockMonsters Audit Report BlockMonsters ($MNSTRS) is a new community-driven DeFi token on the Binance Smart Chain.

BlockMonsters Token contract is deployed at 0x287db351d5230716246cfb46af8153025eda6a0a on the Binance Smartchain mainnet.

Notes on the Contract:
  • The total supply of the token is set to 500 million $MNSTRS [500,000,000].
  • No minting or burn functions are present; though the circulating supply can be reduced by sending tokens to the 0x..dead address, if desired.
  • At the time of writing this report, 42.45% of the total $MNSTRS token supply is stored in the BlockMonsterWallet contract.
  • 12.3% of the total supply is in Pancakeswap liquidity.
  • Of that liquidity, 99.63% of the LP tokens have been burned.
  • 8% of the total $MNSTRS token supply is stored in the BlockMonsterVestedWallet contract.
  • 4.2% of the total $MNSTRS token supply is stored in the BuyStarterReplacementV2 contract.
  • The BlockMonsterWallet, BlockMonsterVestedWallet, and BuyStarterReplacementV2 contracts were all out of scope for the purpose of this audit.

  • There is a 4% operations fee and a 1% rewards fee on all transactions for any address that participates in a transfer when buying or selling to Pancakeswap.
  • The operations fee collected on transactions is stored in the contract and, once a threshold value (determined by the owner) is met, is swapped for BNB and sent back to the contract. The BNB is then sent from the contract to the team's operations wallet.
  • The tokens collected from the rewards fee are sent directly to the team's rewards wallet.
  • As the project is implemented with Solidity v0.8.0, it is protected from overflows.

  • Ownership Controls:
  • Ownership has not been renounced.
  • The owner has the ability to activate/deactivate transfer fees at any time.
  • The owner has the ability to withdraw any BNB or $MNSTRS tokens from the contract address at any time.
  • The owner has the ability to change the Pancakeswap Router address as well as the Pancakeswap Pair address to a new address at any time.
  • The owner has the ability to update the operations wallet and rewards wallet to any address at any time.
Audit Findings Summary
  • No external threats were identified.
  • Date: September 29th, 2021

Audit Results

Vulnerability CategoryNotesResult
Arbitrary Storage WriteN/APASS
Arbitrary JumpN/APASS
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

Function Graph

ERC20 Token Graph


Inheritence Chart

Multi-file Token


Functions Overview


 ($) = payable function
 # = non-constant function
 
 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Int] IERC20Metadata (IERC20)
    - [Ext] name
    - [Ext] symbol
    - [Ext] decimals

 +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 +  ERC20 (Context, IERC20, IERC20Metadata)
    - [Pub]  #
    - [Pub] name
    - [Pub] symbol
    - [Pub] decimals
    - [Pub] totalSupply
    - [Pub] balanceOf
    - [Pub] transfer #
    - [Pub] allowance
    - [Pub] approve #
    - [Pub] transferFrom #
    - [Pub] increaseAllowance #
    - [Pub] decreaseAllowance #
    - [Int] _transfer #
    - [Int] _mint #
    - [Int] _burn #
    - [Int] _approve #
    - [Int] _beforeTokenTransfer #
    - [Int] _afterTokenTransfer #

 +  Ownable (Context)
    - [Pub]  #
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner
    - [Prv] _setOwner #

 + [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

 + [Int] IPancakePair 
    - [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] IPancakeRouter01 
    - [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] IPancakeRouter02 (IPancakeRouter01)
    - [Ext] removeLiquidityETHSupportingFeeOnTransferTokens #
    - [Ext] removeLiquidityETHWithPermitSupportingFeeOnTransferTokens #
    - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
    - [Ext] swapExactETHForTokensSupportingFeeOnTransferTokens ($)
    - [Ext] swapExactTokensForETHSupportingFeeOnTransferTokens #

 +  MNSTRS (IERC20, Ownable)
    - [Pub]  #
    - [Ext]  ($)
    - [Pub] name
    - [Pub] symbol
    - [Pub] decimals
    - [Pub] totalSupply
    - [Pub] balanceOf
    - [Pub] allowance
    - [Ext] transfer #
    - [Ext] transferFrom #
    - [Pub] increaseAllowance #
    - [Pub] decreaseAllowance #
    - [Int] distributeFees #
    - [Int] _transfer #
    - [Ext] approve #
    - [Prv] _approve #
    - [Pub] setPairAddress #
       - modifiers: onlyOwner
    - [Pub] setRouterAddress #
       - modifiers: onlyOwner
    - [Ext] setOperationsVaultAddress #
       - modifiers: onlyOwner
    - [Ext] setRewardsVaultAddress #
       - modifiers: onlyOwner
    - [Ext] setPreSaleAddress #
       - modifiers: onlyOwner
    - [Ext] setPrivateSaleAddress #
       - modifiers: onlyOwner
    - [Ext] activateFeesOnTransfer #
       - modifiers: onlyOwner
    - [Ext] deactivateFeesOnTransfer #
       - modifiers: onlyOwner
    - [Ext] setSwapThreshold #
       - modifiers: onlyOwner
    - [Int] _calculateFees
    - [Int] _shouldTakeFee
    - [Int] _claimTransfer
    - [Int] _swapTokensForNative #
       - modifiers: liquiditySemaphore
    - [Ext] withdrawNative #
       - modifiers: onlyOwner
    - [Ext] withdrawToken #
       - modifiers: onlyOwner