Hare - Smart Contract Audit Report

Summary

Hare Audit Report Hare ($HARE) is a new BEP-20 token that pays out static rewards to holders.

For this audit, we reviewed the Hare contract using code that was provided to us by the team.

Notes on the Contract:
  • The total supply of the token is set to 1 trillion $HARE [1,000,000,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.
  • There was no token allocation for our team to analyze as the contract has yet to be deployed to the mainnet.

  • There is a Reflection fee, Liquidity fee, Advisory fee, Marketing fee, and Development fee on all transfers 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 remaining four fees are stored in the contract address. On each transfer that takes place, the entire $HARE balance in the contract address will be swapped for BNB and distributed amongst the team's Liquidity wallet, Advisory wallet, Marketing wallet, and Development wallet.
  • The owner can call the addLiquidity() function at any time for the purpose of funding Pancakeswap liquidity.
  • Liquidity-adds are funded by pairing the contract's $HARE token balance with the contract's BNB balance and adding it as liquidity to the BNB pair.
  • The recipient of the newly created LP tokens is the owner. We recommend that the team locks these newly acquired LP tokens.
  • A maximum wallet amount is enforced on all transfers which ensures that the recipient's token balance does not exceed the limit number of tokens (determined by the owner) after the transfer takes place. The Pancakeswap Pair address should be excluded from this limit upon mainnet deployment.
  • Although the SafeMath library is utilized, the contract is deployed with Solidity v0.8.9 which has built-in overflow checks. SafeMath could be safely removed to reduce contract size and deployment costs.
  • The contract is upgradable, meaning the team can swap out the current contract for a new one at any time.
Ownership Controls:
  • Ownership has not been renounced.
  • The owner can modify the Reflection fee, Liquidity fee, Advisory fee, Marketing fee, and Development fee to any percentages at any time.
  • The owner can exclude and include accounts from transfer fees.
  • The owner can set and update a maximum transaction amount at any time, which will impose a limit to the number of tokens that can be transferred during any given transaction.
  • The owner can update the maximum wallet amount to any value at any time.
  • The owner can exclude and include accounts from the maximum transaction and maximum wallet limits at any time.
  • The owner can withdraw any BNB and BEP-20 tokens from the contract address at any time.
  • The owner can call the manualSwap() function to swap all of the $HARE in the contract for BNB.
  • The owner can call the manualSend() function to distribute all of the BNB in the contract amongst the four wallets controlled by the team.
  • The owner can enable/disable the automatic token swapping functionality at any time.
  • The owner can manually add liquidity to the Pancakeswap Pair address using the $HARE and BNB balance in the contract.
  • The owner can pause all buying transactions from Pancakeswap at any time.
  • The owner can update the team's Liquidity wallet, Advisory wallet, Marketing wallet, and Development wallet to any addresses at any time.
  • The owner can update the Pancakeswap Router and Pair addresses 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 can upgrade the contract at any time.
  • Date: January 17th, 2022

Audit Results

Vulnerability CategoryNotesResult
Arbitrary Storage WriteN/APASS
Arbitrary JumpN/APASS
Centralization of Control
  • The team can set each fee up to 100%.
  • The owner can swap out the current contract for a new one 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
     
     + [Lib] AddressUpgradeable 
        - [Int] isContract
        - [Int] sendValue #
        - [Int] functionCall #
        - [Int] functionCall #
        - [Int] functionCallWithValue #
        - [Int] functionCallWithValue #
        - [Int] functionStaticCall
        - [Int] functionStaticCall
        - [Int] verifyCallResult
    
     +  Initializable 
        - [Prv] _isConstructor
    
     +  ContextUpgradeable (Initializable)
        - [Int] __Context_init #
           - modifiers: onlyInitializing
        - [Int] __Context_init_unchained #
           - modifiers: onlyInitializing
        - [Int] _msgSender
        - [Int] _msgData
    
     +  OwnableUpgradeable (Initializable, ContextUpgradeable)
        - [Int] __Ownable_init #
           - modifiers: onlyInitializing
        - [Int] __Ownable_init_unchained #
           - modifiers: onlyInitializing
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
        - [Int] _transferOwnership #
    
     + [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
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [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 #
    
     + [Int] IUniswapV2Factory 
        - [Ext] feeTo
        - [Ext] feeToSetter
        - [Ext] getPair
        - [Ext] allPairs
        - [Ext] allPairsLength
        - [Ext] createPair #
        - [Ext] setFeeTo #
        - [Ext] setFeeToSetter #
        - [Ext] INIT_CODE_PAIR_HASH
    
     +  Hare (ContextUpgradeable, IBEP20, OwnableUpgradeable)
        - [Pub] initialize #
           - modifiers: initializer
        - [Ext] name
        - [Ext] symbol
        - [Ext] decimals
        - [Pub] totalSupply
        - [Pub] balanceOf
        - [Ext] manualSend #
           - modifiers: onlyOwner
        - [Ext] manualSwap #
           - modifiers: onlyOwner
        - [Pub] allowance
        - [Pub] approve #
        - [Prv] _approve #
        - [Pub] transfer #
        - [Prv] _transfer #
        - [Prv] swapTokensForEth #
           - modifiers: lockTheSwap
        - [Pub] transferFrom #
        - [Ext] setMaxTxAmountPerMille #
           - modifiers: onlyOwner
        - [Ext] setMaxWalletPerMille #
           - modifiers: onlyOwner
        - [Pub] excludeFromLimits #
           - modifiers: onlyOwner
        - [Pub] excludeFromFees #
           - modifiers: onlyOwner
        - [Prv] tokenFromReflection
        - [Prv] sendETHToFee #
        - [Ext] openLiquidity #
           - modifiers: onlyOwner
        - [Ext] openTrading #
           - modifiers: onlyOwner
        - [Ext] addLiquidity #
           - modifiers: onlyOwner
        - [Prv] _tokenTransfer #
        - [Prv] _transferStandard #
        - [Prv] _takeTeam #
        - [Prv] _reflectFee #
        - [Ext]  ($)
        - [Prv] _getValues
        - [Prv] _getTValues
        - [Prv] _getRValues
        - [Prv] _getRate
        - [Prv] _getCurrentSupply
        - [Pub] setPairAddress #
           - modifiers: onlyOwner
        - [Ext] updateRouterAddress #
           - modifiers: onlyOwner
        - [Ext] updateAdvisoryWalletAddress #
           - modifiers: onlyOwner
        - [Ext] updateDevelopmentWalletAddress #
           - modifiers: onlyOwner
        - [Ext] updateLiquidityWalletAddress #
           - modifiers: onlyOwner
        - [Ext] updateMarketingWalletAddress #
           - modifiers: onlyOwner
        - [Ext] setReflectionTaxPercent #
           - modifiers: onlyOwner
        - [Ext] setAdvisoryTaxPercent #
           - modifiers: onlyOwner
        - [Ext] setDevelopmentTaxPercent #
           - modifiers: onlyOwner
        - [Ext] setMarketingTaxPercent #
           - modifiers: onlyOwner
        - [Ext] setLiquidityTaxPercent #
           - modifiers: onlyOwner
        - [Prv] removeAllFee #
        - [Prv] restoreAllFee #
        - [Pub] sweepBNB #
           - modifiers: onlyOwner
        - [Pub] sweepTokens #
           - modifiers: onlyOwner