|Arbitrary Storage Write||N/A||PASS|
|Delegate Call to Untrusted Contract||N/A||PASS|
|Dependence on Predictable Variables||N/A||PASS|
|State Change External Calls||N/A||PASS|
|User Supplied Assertion||N/A||PASS|
|Critical Solidity Compiler||N/A||PASS|
|Overall Contract Safety||PASS|
PuppyDoge - Audit Report
PuppyDoge is a new token with automatic liquidity adds that pays users dividends in BNB.We audited PuppyDoge Finance's token contract at 0x19983df692be8fa81c60fd27d6fc91e8928fa97a on the Binance Smart Chain mainnet.
Overview of the Contract:
Audit Findings Summary
- The total supply of the token is set to one quadrillion.
- No mint or burn functions are present; though the circulating supply can be reduced by sending tokens to the 0x..dead address, if desired.
- At the time of writing this report, 81.53% of the total supply is stored in an unverified contract.
- The top 5 token holders control 5.17% of the total supply.
- The fixed sale is hardcoded to start on Aug 2, 2021 at 18:00 UTC and lasts for 10 minutes or until there has been 600 fixed sale buyers.
- During the fixed sale, only the bounce fixed sale wallet controlled by the team can perform transfers to fixed sale early participants.
- Trading is enabled for everyone starting on Aug 4, 2021 at 18:00 UTC.
- There is a maximum transaction amount of 1 trillion tokens during sell transactions to PancakeSwap; this does not apply to addresses excluded from fees and during liquidity-adds.
- There is a 20% tax fee charged on each transaction that is stored in the contract balance; fees are increased by a factor of 1.2x on sell tranasctions to PancakeSwap.
- Once a threshold value is met, 25% of the contract balance is 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 newly created LP tokens are locked forever in the 0x..dead address.
- The remaining tokens in the contract balance are swapped for BNB and are automatically distributed as dividends to the token holders eligible for dividends.
- A user must hold 10 billion PUPPY tokens (0.001% of the total supply) to be eligible for dividends.
- 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 of 1800 seconds (0.5 hours) between claiming dividend rewards.
- Claimed dividends are sent to the user's wallet address.
- The owner is able to exclude any address from dividends or fees at any time.
- The owner is able to update the Dividend Tracker and UniswapV2Router contract addresses at any time.
- The owner is able to update the maximum amount of gas used for processing 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 0.5 and 24 hours (in seconds).
- The owner is able to add any address as a fixed sale early participant at any time.
- Some functions could have been declared external and some state variables could have been declared constant for gas optimization.
- The contract utilizes the SafeMath library to prevent overflows along with following the ERC20 standard.
- No security threats from outside attackers were identified.
- As with any presale, ensure trust in the team prior to investing.
- Further, ensure trust in the team as they have some control in the ecosystem.
- Date: August 4th, 2021
($) = payable function # = non-constant function + [Lib] SafeMath - [Int] add - [Int] sub - [Int] sub - [Int] mul - [Int] div - [Int] div - [Int] mod - [Int] mod + [Lib] IterableMapping - [Pub] get - [Pub] getIndexOfKey - [Pub] getKeyAtIndex - [Pub] size - [Pub] set # - [Pub] remove # + Context - [Int] _msgSender - [Int] _msgData + Ownable (Context) - [Pub]
# - [Pub] owner - [Pub] renounceOwnership # - modifiers: onlyOwner - [Pub] transferOwnership # - modifiers: onlyOwner + [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 # + [Int] IUniswapV2Factory - [Ext] feeTo - [Ext] feeToSetter - [Ext] getPair - [Ext] allPairs - [Ext] allPairsLength - [Ext] createPair # - [Ext] setFeeTo # - [Ext] setFeeToSetter # + [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] IERC20 - [Ext] totalSupply - [Ext] balanceOf - [Ext] transfer # - [Ext] allowance - [Ext] approve # - [Ext] transferFrom # + [Int] IERC20Metadata (IERC20) - [Ext] name - [Ext] symbol - [Ext] decimals + 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 + PuppyDoge (ERC20, Ownable) - [Pub] # - modifiers: ERC20 - [Ext] ($) - [Pub] updateDividendTracker # - modifiers: onlyOwner - [Pub] updateUniswapV2Router # - modifiers: onlyOwner - [Pub] excludeFromFees # - modifiers: onlyOwner - [Pub] excludeMultipleAccountsFromFees # - modifiers: onlyOwner - [Pub] setAutomatedMarketMakerPair # - modifiers: onlyOwner - [Prv] _setAutomatedMarketMakerPair # - [Pub] updateLiquidityWallet # - modifiers: onlyOwner - [Pub] updateGasForProcessing # - modifiers: onlyOwner - [Ext] updateClaimWait # - modifiers: onlyOwner - [Ext] getClaimWait - [Ext] getTotalDividendsDistributed - [Pub] isExcludedFromFees - [Pub] withdrawableDividendOf - [Pub] dividendTokenBalanceOf - [Ext] getAccountDividendsInfo - [Ext] getAccountDividendsInfoAtIndex - [Ext] processDividendTracker # - [Ext] claim # - [Ext] getLastProcessedIndex - [Ext] getNumberOfDividendTokenHolders - [Int] _transfer # - [Prv] swapETHForTokens # - [Prv] swapAndLiquify # - [Prv] swapTokensForEth # - [Prv] addLiquidity # - [Prv] swapAndSendDividends # - [Pub] setSwapAndLiquifyEnabled # - modifiers: onlyOwner + DividendPayingToken (ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface) - [Pub] # - modifiers: ERC20 - [Ext] ($) - [Pub] distributeDividends ($) - [Pub] withdrawDividend # - [Int] _withdrawDividendOfUser # - [Pub] dividendOf - [Pub] withdrawableDividendOf - [Pub] withdrawnDividendOf - [Pub] accumulativeDividendOf - [Int] _transfer # - [Int] _mint # - [Int] _burn # - [Int] _setBalance # + TIKIDividendTracker (DividendPayingToken, Ownable) - [Pub] # - modifiers: DividendPayingToken - [Int] _transfer # - [Pub] withdrawDividend # - [Ext] excludeFromDividends # - modifiers: onlyOwner - [Ext] updateClaimWait # - modifiers: onlyOwner - [Ext] getLastProcessedIndex - [Ext] getNumberOfTokenHolders - [Pub] getAccount - [Pub] getAccountAtIndex - [Prv] canAutoClaim - [Ext] setBalance # - modifiers: onlyOwner - [Pub] process # - [Pub] processAccount # - modifiers: onlyOwner