BSCLaunchpad Token - Smart Contract Audit Report

Summary

BSCLaunchpad Audit Report BSCLaunchpad intends to build a launchpad for projects on the Binance Smart Chain.

We reviewed BSCLaunchpad's contract using code provided to us by the team.
Please note we have not seen or reviewed the project's upcoming launchpad platform.


Notes on the Contract:

  • The initial total supply of the token is 0.
  • At the time of deployment all tokens are delivered to the deployer's address.
  • The team intends to be able to distribute tokens manually via a whitelist where they will assign addresses any number of tokens.

  • The contract uses the Openzeppelin Upgradable ERC20 standard; meaning the team has the ability to upgrade the token contract to a new one at any time.
  • The owner can set addresses which will be on the Launch whitelist and the duration of the whitelist period.
  • The owner can set and update the whitelist at any time, essentially allowing for the minting of tokens.

  • On each transfer the contract will check the timestamps and senders to determine whether or not to distribute funds to individuals on th ewhitelist. This will waste gas on every call after the whitelist sale concluses, so we advise moving this logic into a separate function.
  • The logic to distribute whitelisted funds only works if both the sender and receiver has been marked as an exchange by the owner. This is improperly implemented and will prevent this logic from being executed unless every whitelist participant is also considered an exchange.

  • Some gas can be saved via marking functions external instead of public.
  • The contract utilizes SafeMath to prevent overflow issues.


  • Audit Findings Summary:
    • No security issues from outside attackers were identified; though logic issues exist which will prevent the contract from functioning.
    • As with any presale, ensure trust in the team prior to investing.
    • Ensure trust in the team as they can mint arbitrarily using the whitelist and change the contract's code at any time via an upgrade.
    • Date: March 3rd, 2021.

    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
    Integer Over/UnderflowN/APASS
    Multiple SendsN/APASS
    SuicideN/APASS
    State Change External CallsN/APass
    Unchecked RetvalN/APASS
    User Supplied AssertionN/APASS
    Critical Solidity CompilerN/APASS
    Overall Contract Safety PASS

    Smart Contract Graph

    Contract Inheritance

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
     
     + [Lib] AddressUpgradeable 
        - [Int] isContract
        - [Int] sendValue #
        - [Int] functionCall #
        - [Int] functionCall #
        - [Int] functionCallWithValue #
        - [Int] functionCallWithValue #
        - [Int] functionStaticCall
        - [Int] functionStaticCall
        - [Prv] _verifyCallResult
    
     +  Initializable 
        - [Prv] _isConstructor
    
     +  ContextUpgradeable (Initializable)
        - [Int] __Context_init #
           - modifiers: initializer
        - [Int] __Context_init_unchained #
           - modifiers: initializer
        - [Int] _msgSender
        - [Int] _msgData
    
     + [Int] IERC20Upgradeable 
        - [Ext] totalSupply
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [Lib] SafeMathUpgradeable 
        - [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
    
     +  ERC20Upgradeable (Initializable, ContextUpgradeable, IERC20Upgradeable)
        - [Int] __ERC20_init #
           - modifiers: initializer
        - [Int] __ERC20_init_unchained #
           - modifiers: initializer
        - [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] _setupDecimals #
        - [Int] _beforeTokenTransfer #
    
     +  OwnableUpgradeable (Initializable, ContextUpgradeable)
        - [Int] __Ownable_init #
           - modifiers: initializer
        - [Int] __Ownable_init_unchained #
           - modifiers: initializer
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
    
     + [Lib] Address 
        - [Int] isContract
        - [Int] sendValue #
    
     + [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
    
     +  BSCPAD (ERC20Upgradeable, OwnableUpgradeable)
        - [Pub] initialize #
           - modifiers: initializer
        - [Pub] setExchanger #
           - modifiers: onlyOwner
        - [Ext] setLaunchWhiteList #
           - modifiers: onlyOwner
        - [Int] _beforeTokenTransfer #
    							

    Click here to download the source code as a .sol file.