Glitchy - Smart Contract Audit Report

Summary

Glitchy Audit Report Glitchy is a new token with automatic liquidity adds that pays users dividends in BNB or any desired token.

We audited the Glitchy token contract using code provided to us by the project team.

Overview of the Contract:
  • The total supply of the token is set to one billion, and is minted to the owner on deployment.
  • 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 is a 15% tax fee (can be set up to 27%) charged on each transaction that is stored in the contract balance.
  • Selling tokens to PancakeSwap can result in increased fees by a factor of 1.2x (up to 1.5x).
  • Once a threshold value in the contract balance is met, 13.34% of the contract's GLY tokens are used to fund PancakeSwap liquidity.
  • Liquidity-adds are funded by selling half of the tokens collected as fees, pairing the received BNB with the token, and adding it as liquidity to the BNB pair.
  • The recipient of the newly created LP tokens is the liquidity wallet controlled by the team.
  • The remaining tokens in the contract balance are swapped for BNB.
  • A portion of the BNB (up to 100%) is transferred to the give-away and the maintenance wallet controlled by the team, and the remaining part (if any) is automatically distributed to token holders as dividends.

  • Once dividends are distributed, they will need to be claimed; claiming happens automatically on each transfer for users who have enabled auto-claiming.
  • A user can enable auto-claiming as long as they hold 100 GLY tokens and the limit of auto-claiming accounts has not been reached; users can also disable auto-claiming, but must wait 24 hours between enabling and disabling.
  • Token holders who do not qualify for auto-claiming must manually claim dividends.
  • There is a wait-time of 3600 seconds (1 hour) between claiming dividend rewards.
  • Claimed dividends are sent to the user's wallet address.
  • Users who claim manually can choose to receive dividends in BNB, any token, or reinvested in GLY token.
  • Users who hold at least 50,000 GLY may experience reduced fees by up to 50% during reinvestment.
  • Users who hold less than 50,000 GLY may be excluded from fees on delivery during reinvestment.

  • The owner can set the total fees charged on transactions to any value up to 27% at any time.
  • The owner is able to exclude any address from fees at any time.
  • The owner can allocate any percentage of the fees to any fund (liquidity, give-away, maintenance, dividends) at any time.
  • The owner is able to set the threshold value needed for adding liquidity and distributing dividends to any amount of GLY tokens up to 200,000.
  • The owner is able to set the minimum tokens a user must hold to qualify for reduced fees during reinvestment to any value up to the total supply of the token.
  • The owner is able to toggle the increase-fee-on-sells functionality, the decrease-fee-on-reinvestment functionality, and the swap and liquify functionality at any time.
  • The owner is able to set the maximum amount of tokens a user can sell to PancakeSwap to any value at least 500,000 GLY at any time.
  • The owner can update the maximum number of accounts that can have auto-claiming enabled to any value at any time.
  • The owner is able to exclude any address from dividends at any time.
  • The owner is able to update the Dividend Tracker and PancakeSwap Router contract addresses at any time.
  • The owner is able to update the maximum amount of gas used for processing auto-claiming dividends to a value between 200,000 and 500,000 at any time; the initial value is 300,000.
  • The owner is able to update the amount of time a user must wait between claiming dividends to a value between 1 and 24 hours (in seconds).

  • Usage of ReentrancyGuard in applicable functions to prevent re-entrancy attacks.
  • The contract utilizes the SafeMath library to prevent overflows along with following the BEP20 standard.

Audit Findings Summary
  • No security issues from outside attackers were identified.
  • As with any presale, ensure trust in the team prior investing.
  • Further, ensure trust in the team as they have substantial power in the ecosystem.
  • Date: July 22nd, 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
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

BEP20 Token Graph

Multi-file Token

												
($) = 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

 + [Lib] SafeMath 
    - [Int] add
    - [Int] sub
    - [Int] sub
    - [Int] mul
    - [Int] div
    - [Int] div
    - [Int] mod
    - [Int] mod

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

 + [Lib] SafeMathUint 
    - [Int] toInt256Safe

 + [Lib] SafeMathInt 
    - [Int] mul
    - [Int] div
    - [Int] sub
    - [Int] add
    - [Int] abs
    - [Int] toUint256Safe

 + [Int] DividendPayingTokenInterface 
    - [Ext] dividendOf
    - [Ext] distributeDividends ($)
    - [Ext] withdrawDividend #

 + [Int] DividendPayingTokenOptionalInterface 
    - [Ext] withdrawableDividendOf
    - [Ext] withdrawnDividendOf
    - [Ext] accumulativeDividendOf

 + [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] IUniswapV2Pair 
    - [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 #

 +  DividendPayingToken (ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface)
    - [Pub]  #
       - modifiers: ERC20
    - [Ext]  ($)
    - [Pub] distributeDividends ($)
    - [Prv] swapBnbForToken #
    - [Pub] withdrawDividend #
    - [Int] _withdrawDividendOfUser #
    - [Int] _withdrawDividendOfUserAsToken #
    - [Int] _reinvestDividendOfUser #
    - [Pub] dividendOf
    - [Pub] withdrawableDividendOf
    - [Pub] withdrawnDividendOf
    - [Pub] accumulativeDividendOf
    - [Int] _transfer #
    - [Int] _mint #
    - [Int] _burn #
    - [Int] _setBalance #

 + [Lib] IterableMapping 
    - [Pub] get
    - [Pub] getIndexOfKey
    - [Pub] getKeyAtIndex
    - [Pub] size
    - [Pub] set #
    - [Pub] remove #

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

 + [Int] IUniswapV2Factory 
    - [Ext] feeTo
    - [Ext] feeToSetter
    - [Ext] getPair
    - [Ext] allPairs
    - [Ext] allPairsLength
    - [Ext] createPair #
    - [Ext] setFeeTo #
    - [Ext] setFeeToSetter #

 +  ReentrancyGuard 
    - [Pub]  #

 +  GLITCHY (ERC20, Ownable, ReentrancyGuard)
    - [Pub]  #
       - modifiers: ERC20
    - [Ext]  ($)
    - [Pub] updateDividendTracker #
       - modifiers: onlyOwner
    - [Pub] updateUniswapV2Router #
       - modifiers: onlyOwner
    - [Ext] setMaintenance #
       - modifiers: onlyOwner
    - [Ext] setLPWallet #
       - modifiers: onlyOwner
    - [Ext] setGiveaway #
       - modifiers: onlyOwner
    - [Ext] setAmountToInitiateSwap #
       - modifiers: onlyOwner
    - [Ext] setSellFeeIncreaseFactor #
       - modifiers: onlyOwner
    - [Ext] setReinvestDecreaseFeeFactor #
       - modifiers: onlyOwner
    - [Ext] setMinHoldingForReinvestFeeCalculation #
       - modifiers: onlyOwner
    - [Pub] excludeFromFees #
       - modifiers: onlyOwner
    - [Pub] excludeMultipleAccountsFromFees #
       - modifiers: onlyOwner
    - [Ext] setIncreaseFeeOnSells #
       - modifiers: onlyOwner
    - [Ext] setDecreaseFeeOnReinvest #
       - modifiers: onlyOwner
    - [Ext] setBNBRewardFee #
       - modifiers: onlyOwner
    - [Ext] setLiquiditFee #
       - modifiers: onlyOwner
    - [Ext] setCanTransferWhileMigrating #
       - modifiers: onlyOwner
    - [Ext] finishMigration #
       - modifiers: onlyOwner
    - [Ext] setMaxSellTxAmount #
       - modifiers: onlyOwner
    - [Pub] setAutomatedMarketMakerPair #
       - modifiers: onlyOwner
    - [Prv] _setAutomatedMarketMakerPair #
    - [Pub] updateGasForProcessing #
       - modifiers: onlyOwner
    - [Ext] updateClaimWait #
       - modifiers: onlyOwner
    - [Ext] updateMaxAutoClaimingAccounts #
       - modifiers: onlyOwner
    - [Ext] getClaimWait
    - [Ext] getTotalDividendsDistributed
    - [Ext] isExcludedFromFees
    - [Ext] withdrawableDividendOf
    - [Ext] isAutoClaim
    - [Ext] dividendTokenBalanceOf
    - [Ext] getAccountDividendsInfo
    - [Ext] getAccountDividendsInfoAtIndex
    - [Ext] processDividendTracker #
    - [Ext] claim #
       - modifiers: nonReentrant,isHuman
    - [Ext] claimAnyToken #
       - modifiers: nonReentrant,isHuman
    - [Ext] reinvest #
       - modifiers: nonReentrant,isHuman
    - [Ext] getLastProcessedIndex
    - [Ext] getNumberOfDividendTokenHolders
    - [Ext] getAllTimesHolders
    - [Ext] getAddressAtIndex
    - [Int] _transfer #
    - [Prv] swapAndLiquify #
    - [Prv] swapAndDistribute #
    - [Prv] swapTokensForEth #
    - [Prv] swapBnbForToken #
    - [Prv] addLiquidity #

 +  GLYDividendTracker (DividendPayingToken, Ownable, ReentrancyGuard)
    - [Pub]  #
       - modifiers: DividendPayingToken
    - [Int] _transfer
    - [Pub] withdrawDividend
    - [Ext] switchAccountAutoClaim #
       - modifiers: isHuman,nonReentrant
    - [Ext] excludeFromDividends #
       - modifiers: onlyOwner
    - [Ext] updateClaimWait #
       - modifiers: onlyOwner
    - [Ext] updateMaxAutoClaimingAccounts #
       - modifiers: onlyOwner
    - [Ext] getLastProcessedIndex
    - [Ext] getNumberOfTokenHolders
    - [Ext] getAllTimesHolders
    - [Pub] getAccount
    - [Pub] getAccountAtIndex
    - [Pub] getAddressAtIndex
    - [Pub] isAutoClaim
    - [Pub] canClaim
    - [Prv] canAutoClaim
    - [Ext] setBalance #
       - modifiers: onlyOwner
    - [Pub] process #
    - [Pub] processAccount #
       - modifiers: onlyOwner
    - [Pub] processAccountSpecialClaim #
       - modifiers: onlyOwner