MekaMiners Token - Smart Contract Audit Report

Summary

MekaMiners Audit Report

MekaMiners ($MEKA) is building a new BEP-20 token.

We reviewed the MekaMiners contract at 0xbA8545ceE81EA0f20002944FD3E1792eF3Bc58f8 on the Binance Smart Chain Testnet.

Notes on the Contract:
  • The total supply of the token is set to 200 million $MEKA [200,000,000].
  • No mint or burn functions are present; though the circulating supply can be reduced by sending tokens to the 0x..dead address if desired.
  • There was no token allocation for our team to analyze as the contract has yet to be deployed to the mainnet.

  • There is a fee charged on all transfers with Pancakeswap or any other approved DEX. A separate fee structure can be set by the team to apply a different fee percentage depending on whether the user is buying or selling during the transfer.
  • The tokens collected from the transfer fee are sent directly to the Fee wallet controlled by the team.
  • The contract features a cool-down mechanism that will prevent a user from trading with Pancakeswap (or any other approved DEX) if the cool-down time (set by the owner) since their last trade has not yet elapsed.
  • The contract features a blacklist mechanism that prevents accounts specified by the owner from being able to participate in transfers.
  • The contract complies with the BEP-20 token standard.
  • Although the SafeMath library is utilized, the contract is implemented with Solidity v0.8.11 which has built-in overflow checks. SafeMath could be safely removed to reduce contract size and deployment costs.
Ownership Controls:
  • The owner can update the transfer fees when either buying or selling via Pancakeswap to any percentages at any time.
  • The owner can enable/disable transfer fees and the cool-down mechanism at any time.
  • The owner can update the cool-down wait time to any value at any time.
  • The owner can pause all trading at any time.
  • The owner can manually add/remove accounts from the transfer blacklist at any time.
  • The owner can add or remove any address as an approved DEX pair or Router address at any time. The team can add any user's address to this list and the transfer fee will be applied on every transaction where the user is the sender or recipient.
  • The owner can update the team's Fee wallet to any address 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.
  • Date: January 17th, 2022

Audit Results

Vulnerability CategoryNotesResult
Arbitrary Storage WriteN/APASS
Arbitrary JumpN/APASS
Centralization of Control
  • The owner can set the transfer fee for both buys and sells via Pancakeswap (or any other approved DEX) up to 100%.
  • The owner can blacklist accounts from being able to participate in transfers.
  • The owner can pause all trading at any time.
  • 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

    Function Graph

    ERC20 Token Graph


    Inheritance Chart

    Multi-file Token


    Functions Overview

    
     ($) = payable function
     # = non-constant function
     
     +  Context 
        - [Pub]  #
        - [Int] _msgSender
        - [Int] _msgData
    
     +  Ownable (Context)
        - [Pub]  #
        - [Pub] owner
        - [Pub] isOwner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
        - [Int] _transferOwnership #
    
     +  Pausable (Ownable)
        - [Pub] _pause #
           - modifiers: onlyOwner,whenNotPaused
        - [Pub] _unpause #
           - modifiers: onlyOwner,whenPaused
    
     + [Int] IBEP20 
        - [Ext] name
        - [Ext] symbol
        - [Ext] decimals
        - [Ext] totalSupply
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [Lib] SafeMath 
        - [Int] add
        - [Int] sub
        - [Int] sub
        - [Int] mul
        - [Int] div
        - [Int] div
        - [Int] mod
        - [Int] mod
    
     +  BEP20 (IBEP20, Context, Pausable)
        - [Pub]  #
        - [Pub] name
        - [Pub] symbol
        - [Pub] decimals
        - [Pub] totalSupply
        - [Pub] balanceOf
        - [Pub] transfer #
           - modifiers: whenNotPaused
        - [Pub] allowance
        - [Pub] approve #
           - modifiers: whenNotPaused
        - [Pub] transferFrom #
           - modifiers: whenNotPaused
        - [Int] _transferFrom #
        - [Pub] increaseAllowance #
           - modifiers: whenNotPaused
        - [Pub] decreaseAllowance #
           - modifiers: whenNotPaused
        - [Int] _transfer #
        - [Int] _mint #
        - [Int] _burn #
        - [Int] _approve #
        - [Int] _beforeTokenTransfer #
        - [Int] _afterTokenTransfer #
    
     + [Int] IERC165 
        - [Ext] supportsInterface
    
     + [Int] IERC721 (IERC165)
        - [Ext] balanceOf
        - [Ext] ownerOf
        - [Ext] safeTransferFrom #
        - [Ext] transferFrom #
        - [Ext] approve #
        - [Ext] getApproved
        - [Ext] setApprovalForAll #
        - [Ext] isApprovedForAll
        - [Ext] safeTransferFrom #
    
     + [Int] IERC721Enumerable (IERC721)
        - [Ext] totalSupply
        - [Ext] tokenOfOwnerByIndex
        - [Ext] tokenOfOwner
        - [Ext] tokenByIndex
    
     +  MekaMiners (BEP20)
        - [Pub]  #
           - modifiers: BEP20
        - [Ext] setCooldownForTrades #
           - modifiers: onlyOwner
        - [Pub] setBuyFee #
           - modifiers: onlyOwner
        - [Pub] setSellFee #
           - modifiers: onlyOwner
        - [Ext] setFeeReceiveAddress #
           - modifiers: onlyOwner
        - [Pub] setPCSRouterdAddress #
           - modifiers: onlyOwner
        - [Ext] setLPAddress #
           - modifiers: onlyOwner
        - [Ext] getFees
        - [Pub] isAddressLP
        - [Ext] getFeeAddress
        - [Ext] isBlacklisted
           - modifiers: onlyOwner
        - [Ext] updateTokenLock #
           - modifiers: onlyOwner
        - [Ext] updateApplyFee #
           - modifiers: onlyOwner
        - [Ext] bulkBlackList #
           - modifiers: onlyOwner
        - [Ext] updateBlackList #
           - modifiers: onlyOwner
        - [Pub] transfer #
           - modifiers: whenNotPaused
        - [Pub] transferFrom #
           - modifiers: whenNotPaused
        - [Prv] computeCut
        - [Prv] isContract
        - [Int] _beforeTokenTransfer #