Hare - Smart Contract Audit Report
Summary
Hare ($HARE) is a new BEP-20 token that pays out static rewards to holders.
Notes on the Contract:Ownership Controls:
- 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.
Audit Findings Summary
- 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.
- 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 Category | Notes | Result |
---|---|---|
Arbitrary Storage Write | N/A | PASS |
Arbitrary Jump | N/A | PASS |
Centralization of Control | WARNING | |
Delegate Call to Untrusted Contract | N/A | PASS |
Dependence on Predictable Variables | N/A | PASS |
Deprecated Opcodes | N/A | PASS |
Ether Thief | N/A | PASS |
Exceptions | N/A | PASS |
External Calls | N/A | PASS |
Flash Loans | N/A | PASS |
Integer Over/Underflow | N/A | PASS |
Multiple Sends | N/A | PASS |
Oracles | N/A | PASS |
Suicide | N/A | PASS |
State Change External Calls | N/A | PASS |
Unchecked Retval | N/A | PASS |
User Supplied Assertion | N/A | PASS |
Critical Solidity Compiler | N/A | PASS |
Overall Contract Safety | PASS |
Function Graph
Inheritance Chart
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