Kat-Chan - Smart Contract Audit Report
Kat-Chan ($KCHAN) is a new community-driven Defi token on the Binance Smart Chain that is an automatic liquidity providing protocol that pays out static rewards to holders and also claims to incentivize holders by providing 'hot' bonuses.
Notes on the Contract:
Audit Findings Summary
- The total supply of the token is set to one billion $KCHAN [1,000,000,000].
- No minting or burn functions are present; and holders are not allowed to send tokens to the burn address. Tokens can be sent to the burn address upon deployment. If the owner does not exclude the burn address after deploying, it will participate in the reward distribution (as a regular holder) and increase proportionally to the rewards it receives. This is often used as a deflationary mechanism.
- There is a 'taxfee' and a 'liquidity fee' on all transactions for any "non-excluded" address that participates in a transfer. The owner has the ability to modify the these fees at any time. The tax fee may range from 0.0% to 20.0%; while the liquidity fee may range from 0.0% to 20.0%.
- The 'tax fee' is redistributed to existing token holders instantly and automatically at the time of each transaction.
- The liquidity fee charged on transactions is stored in the contract and, once a threshold value is met, used to fund PancakeSwap liqudity.
- Liquidity-adds are funded by selling a portion of the tokens collected as fees (after a certain threshhold as determined by the owner is met), then 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 Owner of the contract.
- Kat-Chan implemented a cycle function, where every 5 minutes, the fee rates for reflection taxes and liquidity adds are alternated between two possible cycles. Cycle #1: LiquidityFee = 12% TaxFee = 0% | Cycle #2: LiquidityFee = 1% TaxFee = 1%.
- Please note that despite this cycle functionality, the owner can still override these fee allocations by setting them manually.
- The owner has the ability to set and change the "Max Wallet Percent" to any percentage of the total $KCHAN token supply ranging from 1% to 100% at any time. This functionality will prevent wallets (other than the owner) from participating in transactions if doing so will cause them to exceed the Wallet Limit.
- The owner of the contract can exclude and include accounts from tax and liquidity fees.
- The owner of the contract can exclude and include accounts from the reward distribution.
- The owner has the ability to set and update a maximum transaction percent at any time, which will impose a limit to the number of tokens that can be transferred during any given transaction.
- This maximum transaction amount does not apply to the owner during transactions where the owner is either the sender or the recipient.
- The owner has the ability to use the "lock" function in order to temporarily set ownership to address(0). Ownership is restored after the duration of time determined by the owner has passed and they use the 'unlock' function. Ownership can additionally be restored (even if ownership was previously renounced), by using the unlock function a second time.
- The contract utilizes SafeMath libraries along with following the BEP20 standard.
- No external threats were identified.
- We strongly recommend that the team renounces ownership after a successful launch.
- As with any presale, please ensure trust in the team prior to investing as they have substantial control in the ecosystem.
- Date: June 17th, 2021
|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|
($) = payable function # = non-constant function + [Int] IERC20 - [Ext] totalSupply - [Ext] balanceOf - [Ext] transfer # - [Ext] allowance - [Ext] approve # - [Ext] transferFrom # + [Lib] SafeMath - [Int] add - [Int] sub - [Int] sub - [Int] mul - [Int] div - [Int] div - [Int] mod - [Int] mod + Context - [Int] _msgSender - [Int] _msgData + [Lib] Address - [Int] isContract - [Int] sendValue # - [Int] functionCall # - [Int] functionCall # - [Int] functionCallWithValue # - [Int] functionCallWithValue # - [Prv] _functionCallWithValue # + Ownable (Context) - [Int]
# - [Pub] owner - [Pub] renounceOwnership # - modifiers: onlyOwner - [Pub] transferOwnership # - modifiers: onlyOwner - [Pub] geUnlockTime - [Pub] lock # - modifiers: onlyOwner - [Pub] unlock # + [Int] IUniswapV2Factory - [Ext] feeTo - [Ext] feeToSetter - [Ext] getPair - [Ext] allPairs - [Ext] allPairsLength - [Ext] createPair # - [Ext] setFeeTo # - [Ext] setFeeToSetter # + [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] 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 # + KatChan (Context, IERC20, Ownable) - [Pub] # - [Pub] name - [Pub] symbol - [Pub] decimals - [Pub] totalSupply - [Pub] balanceOf - [Pub] transfer # - [Pub] allowance - [Pub] approve # - [Pub] transferFrom # - [Ext] increaseAllowance # - [Pub] decreaseAllowance # - [Ext] isExcludedFromReward - [Ext] totalFees - [Ext] deliver # - [Ext] reflectionFromToken - [Pub] tokenFromReflection - [Ext] excludeFromReward # - modifiers: onlyOwner - [Ext] includeInReward # - modifiers: onlyOwner - [Prv] _transferBothExcluded # - [Ext] excludeFromFee # - modifiers: onlyOwner - [Pub] includeInFee # - modifiers: onlyOwner - [Ext] setTaxFeePercent # - modifiers: onlyOwner - [Ext] setLiquidityFeePercent # - modifiers: onlyOwner - [Ext] setCycleBool # - modifiers: onlyOwner - [Ext] setMaxTxPercent # - modifiers: onlyOwner - [Ext] setMaxWalletPercent # - modifiers: onlyOwner - [Ext] setSwapAndLiquifyEnabled # - modifiers: onlyOwner - [Ext] ($) - [Prv] _reflectFee # - [Prv] _getValues - [Prv] _getTValues - [Prv] _getRValues - [Prv] _getRate - [Prv] _getCurrentSupply - [Pub] _getCycleFeeBoolean - [Pub] _getBlockTime - [Prv] _takeLiquidity # - [Prv] calculateTaxFee - [Prv] calculateLiquidityFee - [Prv] removeAllFee # - [Prv] restoreAllFee # - [Ext] isExcludedFromFee - [Prv] _approve # - [Prv] _transfer # - [Prv] _setLiquidityCycleFeePercent # - [Prv] swapAndLiquify # - modifiers: lockTheSwap - [Prv] swapTokensForEth # - [Prv] addLiquidity # - [Prv] _tokenTransfer # - [Prv] _transferStandard # - [Prv] _transferToExcluded # - [Prv] _transferFromExcluded #