LaikaDog - Smart Contract Audit Report

Summary

LaikaDog Audit Report LaikaDog ($LAI) is a new BEP20 token with automatic liquidity adds and a buyback system for burning supply that pays out dividends to holders.

We reviewed the LaikaDog contract that is deployed at 0x54A6663C6d4Efc27E76d369Cd14E4911a261ea39 on the Binance Smart Chain mainnet.

Notes on the Contract:

  • The total supply of the token is set to 1 trillion $LAI [1,000,000,000,000].
  • No mint or burn functions are present beyond deployment; though the circulating supply can be reduced by sending tokens to the 0x..dead address if desired.
  • At the time of writing this report, 100% of the total supply belongs to the owner as the contract was recently deployed.

  • There is a tax fee charged on each transaction that gets stored in the contract balance; fees can be increased during a sell to PancakeSwap up to a value proportional to the time left in the buyback multiplier period (if any). A separate fee structure exists that applies a different fee percentage when the user is buying tokens from Pancakeswap.
  • Once a threshold value of tokens in the contract balance is met, a portion of the contract balance is swapped for BNB and distributed as dividends, and another portion is sent to the team's Marketing wallet.
  • Another portion is allocated to funding PancakeSwap liquidity. Liquidity-adds are funded by selling half of the tokens allocated to funding liquidity, pairing the received BNB with the token, and adding it as liquidity to the BNB pair.
  • The newly created LP tokens are sent to an address controlled by the team. The team is responsible for locking these newly acquired LP tokens.
  • If the auto buyback functionality is enabled, and the amount of BNB in the contract reaches the autobuyback threshold value determined by the team, the BNB will be swapped for $LAI tokens and sent to the burn address.

  • Any user that holds any amount of $LAI tokens are eligible to claim dividends once the amount of dividends they are due reaches a minimum threshold value determined by team.
  • Once dividends are distributed, they will need to be claimed; claiming happens automatically on each transfer.
  • Dividend rewards can also be claimed manually by kicking off the claim cycle, which will process all eligible token holders.
  • Alternatively, a user can manually claim dividends as an individual.
  • There is a wait-time between claiming dividend rewards.
  • Claimed dividends are sent to the user's wallet address.

  • Ownership Controls:
  • The owner can update the dividend reward token at any time.
  • The owner can withdraw any BNB from the contract address at any time.
  • The owner can update the Dividend Distributor address at any time.
  • The owner can assign multiple addresses to an 'Authorized' role. The assigned addresses have access to specific functions in the contract.
  • Authorized addresses can set the total fees charged on transactions to any value up to 25% when selling, and any value up to 10% when buying.
  • Authorized addresses can set the percentage of the fees allocated to any fund (liquidity, marketing, buyback, dividends) at any time.
  • Authorized addresses can exclude any address from transfer fees and dividends at any time.
  • Authorized addresses can update the minimum threshold value of rewards needed that determines when a user can claim their dividends.
  • Authorized addresses can set a maximum transaction limit which is enforced during sell transactions to PancakeSwap. Any authorized address can also exclude accounts from this maximum transaction limit.
  • Authorized addresses can automatically trigger a buyback at any time.
  • Authorized addresses can set or disable the buyback fee multiplier at any time.
  • Authorized addresses can disable the autobuyback system and set any the threshold BNB value to trigger a buyback.
  • Authorized addresses can enable/disable the automatic liquidity adds at any time and set any threshold value related to it.
  • Authorized addresses can update the PancakeSwap Pair address at any time.
  • Authorized addresses can update the maximum amount of gas used for processing to a value up to 750,000 at any time.
  • Authorized addresses can update the amount of time a user must wait between claiming dividends to any value at any time.
Audit Findings Summary
  • No external threats were identified.
  • As with any presale, please ensure trust in the team prior to investing.
  • Further ensure trust in the team as they have substantial control in the ecosystem.
  • Date: December 17th, 2021
  • Updated: December 21st, 2021 to reflect mainnet deployment.

External Threat Results

Vulnerability CategoryNotesResult
Arbitrary Storage WriteN/APASS
Arbitrary JumpN/APASS
Centralization of Control
  • The team can set total sell fees up to 25% and total buy fees up to 10%.
  • PASS
    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
    
     + [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
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     +  Auth 
        - [Pub]  #
        - [Pub] authorize #
           - modifiers: onlyOwner
        - [Pub] unauthorize #
           - modifiers: onlyOwner
        - [Pub] isOwner
        - [Pub] isAuthorized
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
    
     + [Int] IDEXRouter 
        - [Ext] factory
        - [Ext] WETH
        - [Ext] addLiquidity #
        - [Ext] addLiquidityETH ($)
        - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
        - [Ext] swapExactETHForTokensSupportingFeeOnTransferTokens ($)
        - [Ext] swapExactTokensForETHSupportingFeeOnTransferTokens #
    
     + [Int] IDividendDistributor 
        - [Ext] setDistributionCriteria #
        - [Ext] setShare #
        - [Ext] deposit #
        - [Ext] process #
    
     + [Int] IDEXFactory 
        - [Ext] createPair #
    
     +  LaikaDog (IBEP20, Auth)
        - [Pub]  #
           - modifiers: Auth
        - [Ext]  ($)
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Pub] balanceOf
        - [Ext] allowance
        - [Ext] setDividendDistributor #
           - modifiers: onlyOwner
        - [Ext] setWhiteList #
           - modifiers: authorized
        - [Ext] setPair #
           - modifiers: authorized
        - [Pub] approve #
        - [Ext] approveMax #
        - [Ext] transfer #
        - [Ext] transferFrom #
        - [Int] _transferFrom #
        - [Int] _basicTransfer #
        - [Int] checkTxLimit
        - [Int] shouldTakeFee
        - [Pub] getTotalFee
        - [Pub] getMultipliedFee
        - [Int] takeFee #
        - [Int] shouldSwapBack
        - [Int] swapBack #
           - modifiers: swapping
        - [Int] shouldAutoBuyback
        - [Ext] triggerLaikaBuyback #
           - modifiers: authorized
        - [Ext] clearBuybackMultiplier #
           - modifiers: authorized
        - [Int] triggerAutoBuyback #
        - [Int] buyTokens #
           - modifiers: swapping
        - [Ext] setAutoBuybackSettings #
           - modifiers: authorized
        - [Ext] setBuybackMultiplierSettings #
           - modifiers: authorized
        - [Ext] setTxLimit #
           - modifiers: authorized
        - [Ext] setIsDividendExempt #
           - modifiers: authorized
        - [Ext] setIsFeeExempt #
           - modifiers: authorized
        - [Ext] setIsFeeExemptRecipient #
           - modifiers: authorized
        - [Ext] setIsTxLimitExempt #
           - modifiers: authorized
        - [Ext] setFees #
           - modifiers: authorized
        - [Ext] setBuyFee #
           - modifiers: authorized
        - [Ext] setFeeReceivers #
           - modifiers: authorized
        - [Ext] setSwapBackSettings #
           - modifiers: authorized
        - [Ext] setTargetLiquidity #
           - modifiers: authorized
        - [Ext] setDistributionCriteria #
           - modifiers: authorized
        - [Ext] setDistributorSettings #
           - modifiers: authorized
        - [Pub] getCirculatingSupply
        - [Pub] getLiquidityBacking
        - [Pub] isOverLiquified
        - [Ext] withdrawBNB #
           - modifiers: onlyOwner