Reentrancy in babyfrog._transfer(address,address,uint256) (#764-853):
External calls:
- swapAndLiquify(contractTokenBalance) (#830)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#900-906)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#830)
- wallet.transfer(amount) (#869)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#973)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#974)
- _tOwned[address(this)] = _tOwned[address(this)].add(tDev) (#975)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- txCount ++ (#962)
Apply the check-effects-interactions pattern.
Additional information: link
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Contract ownership is not renounced (belongs to a wallet)
babyfrog.blacklist_Add_Wallets(address[]).gasUsed (#639) is a local variable never initialized
babyfrog.blacklist_Remove_Wallets(address[]).i (#659) is a local variable never initialized
babyfrog.blacklist_Remove_Wallets(address[]).gasUsed (#657) is a local variable never initialized
babyfrog.blacklist_Add_Wallets(address[]).i (#641) is a local variable never initialized
Initialize all the variables. If a variable is meant to be initialized to zero, explicitly set it to zero to improve code readability.
Additional information: link
babyfrog.allowance(address,address).owner (#523) shadows:
- Ownable.owner() (#151-153) (function)
babyfrog._approve(address,address,uint256).owner (#756) shadows:
- Ownable.owner() (#151-153) (function)
Rename the local variables that shadow another component.
Additional information: link
babyfrog._set_Fees(uint256,uint256) (#584-590) should emit an event for:
- _sellFee = Sell_Fee (#587)
- _buyFee = Buy_Fee (#588)
babyfrog.set_Number_Of_Transactions_Before_Liquify_Trigger(uint8) (#614-616) should emit an event for:
- swapTrigger = number_of_transactions (#615)
babyfrog.set_Max_Transaction_Percent(uint256) (#720-722) should emit an event for:
- _maxTxAmount = _tTotal * maxTxPercent_x100 / 10000 (#721)
babyfrog.set_Max_Wallet_Percent(uint256) (#725-727) should emit an event for:
- _maxWalletToken = _tTotal * maxWallPercent_x100 / 10000 (#726)
Emit an event for critical parameter changes.
Additional information: link
babyfrog.Wallet_Update_Dev(address).wallet (#595) lacks a zero-check on :
- Wallet_Dev = wallet (#596)
babyfrog.set_New_Pair_Address(address).newPair (#945) lacks a zero-check on :
- uniswapV2Pair = newPair (#946)
Check that the address is not zero.
Additional information: link
Reentrancy in babyfrog._transfer(address,address,uint256) (#764-853):
External calls:
- swapAndLiquify(contractTokenBalance) (#830)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#900-906)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#830)
- wallet.transfer(amount) (#869)
State variables written after the call(s):
- _TotalFee = _buyFee (#850)
- _TotalFee = _sellFee (#850)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _TotalFee = _previousTotalFee (#748)
- _TotalFee = 0 (#741)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _buyFee = _previousBuyFee (#749)
- _buyFee = 0 (#739)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _previousBuyFee = _buyFee (#736)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _previousSellFee = _sellFee (#737)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _previousTotalFee = _TotalFee (#738)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _sellFee = _previousSellFee (#750)
- _sellFee = 0 (#740)
Reentrancy in babyfrog.constructor() (#474-489):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#481-482)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (#484)
- _isExcludedFromFee[address(this)] = true (#485)
- _isExcludedFromFee[Wallet_Dev] = true (#486)
- uniswapV2Router = _uniswapV2Router (#483)
Reentrancy in babyfrog.set_New_Router_and_Make_Pair(address) (#932-936):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_newPCSRouter.factory()).createPair(address(this),_newPCSRouter.WETH()) (#934)
State variables written after the call(s):
- uniswapV2Router = _newPCSRouter (#935)
Reentrancy in babyfrog.transferFrom(address,address,uint256) (#532-536):
External calls:
- _transfer(sender,recipient,amount) (#533)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#900-906)
External calls sending eth:
- _transfer(sender,recipient,amount) (#533)
- wallet.transfer(amount) (#869)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#534)
- _allowances[owner][spender] = amount (#759)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in babyfrog._transfer(address,address,uint256) (#764-853):
External calls:
- swapAndLiquify(contractTokenBalance) (#830)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#900-906)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#830)
- wallet.transfer(amount) (#869)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#976)
- _tokenTransfer(from,to,amount,takeFee) (#852)
Reentrancy in babyfrog.constructor() (#474-489):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#481-482)
Event emitted after the call(s):
- Transfer(address(0),owner(),_tTotal) (#488)
Reentrancy in babyfrog.transferFrom(address,address,uint256) (#532-536):
External calls:
- _transfer(sender,recipient,amount) (#533)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#900-906)
External calls sending eth:
- _transfer(sender,recipient,amount) (#533)
- wallet.transfer(amount) (#869)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#760)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#534)
Apply the check-effects-interactions pattern.
Additional information: link
Address.isContract(address) (#71-75) uses assembly
- INLINE ASM (#73)
Address._verifyCallResult(bool,bytes,string) (#123-136) uses assembly
- INLINE ASM (#128-131)
Do not use evm assembly.
Additional information: link
Address._verifyCallResult(bool,bytes,string) (#123-136) is never used and should be removed
Address.functionCall(address,bytes) (#83-85) is never used and should be removed
Address.functionCall(address,bytes,string) (#87-89) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#91-93) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#95-100) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#113-115) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#117-121) is never used and should be removed
Address.functionStaticCall(address,bytes) (#102-104) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#106-110) is never used and should be removed
Address.isContract(address) (#71-75) is never used and should be removed
Address.sendValue(address,uint256) (#77-81) is never used and should be removed
Context._msgData() (#62-65) is never used and should be removed
SafeMath.div(uint256,uint256) (#35-37) is never used and should be removed
SafeMath.div(uint256,uint256,string) (#46-51) is never used and should be removed
SafeMath.mul(uint256,uint256) (#31-33) is never used and should be removed
Remove unused functions.
Additional information: link
babyfrog._previousTotalFee (#420) is set pre-construction with a non-constant function or state variable:
- _TotalFee
babyfrog._previousBuyFee (#421) is set pre-construction with a non-constant function or state variable:
- _buyFee
babyfrog._previousSellFee (#422) is set pre-construction with a non-constant function or state variable:
- _sellFee
babyfrog._maxWalletToken (#431) is set pre-construction with a non-constant function or state variable:
- _tTotal.mul(3).div(100)
babyfrog._previousMaxWalletToken (#432) is set pre-construction with a non-constant function or state variable:
- _maxWalletToken
babyfrog._maxTxAmount (#436) is set pre-construction with a non-constant function or state variable:
- _tTotal.mul(3).div(100)
babyfrog._previousMaxTxAmount (#437) is set pre-construction with a non-constant function or state variable:
- _maxTxAmount
Remove any initialization of state variables via non-constant state variables or function calls. If variables must be set upon contract deployment, locate initialization in the constructor instead.
Additional information: link
Low level call in Address.sendValue(address,uint256) (#77-81):
- (success) = recipient.call{value: amount}() (#79)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#95-100):
- (success,returndata) = target.call{value: value}(data) (#98)
Low level call in Address.functionStaticCall(address,bytes,string) (#106-110):
- (success,returndata) = target.staticcall(data) (#108)
Low level call in Address.functionDelegateCall(address,bytes,string) (#117-121):
- (success,returndata) = target.delegatecall(data) (#119)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#199) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#200) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#213) is not in mixedCase
Function IUniswapV2Router01.WETH() (#230) is not in mixedCase
Contract babyfrog (#363-993) is not in CapWords
Function babyfrog._set_Fees(uint256,uint256) (#584-590) is not in mixedCase
Parameter babyfrog._set_Fees(uint256,uint256).Buy_Fee (#584) is not in mixedCase
Parameter babyfrog._set_Fees(uint256,uint256).Sell_Fee (#584) is not in mixedCase
Function babyfrog.Wallet_Update_Dev(address) (#595-598) is not in mixedCase
Function babyfrog.set_Swap_And_Liquify_Enabled(bool) (#608-611) is not in mixedCase
Parameter babyfrog.set_Swap_And_Liquify_Enabled(bool).true_or_false (#608) is not in mixedCase
Function babyfrog.set_Number_Of_Transactions_Before_Liquify_Trigger(uint8) (#614-616) is not in mixedCase
Parameter babyfrog.set_Number_Of_Transactions_Before_Liquify_Trigger(uint8).number_of_transactions (#614) is not in mixedCase
Function babyfrog.blacklist_Add_Wallets(address[]) (#636-649) is not in mixedCase
Function babyfrog.blacklist_Remove_Wallets(address[]) (#654-667) is not in mixedCase
Function babyfrog.blacklist_Switch(bool) (#681-683) is not in mixedCase
Parameter babyfrog.blacklist_Switch(bool).true_or_false (#681) is not in mixedCase
Function babyfrog.set_Transfers_Without_Fees(bool) (#698-700) is not in mixedCase
Parameter babyfrog.set_Transfers_Without_Fees(bool).true_or_false (#698) is not in mixedCase
Function babyfrog.set_Max_Transaction_Percent(uint256) (#720-722) is not in mixedCase
Parameter babyfrog.set_Max_Transaction_Percent(uint256).maxTxPercent_x100 (#720) is not in mixedCase
Function babyfrog.set_Max_Wallet_Percent(uint256) (#725-727) is not in mixedCase
Parameter babyfrog.set_Max_Wallet_Percent(uint256).maxWallPercent_x100 (#725) is not in mixedCase
Function babyfrog.process_Tokens_Now(uint256) (#883-890) is not in mixedCase
Parameter babyfrog.process_Tokens_Now(uint256).percent_Of_Tokens_To_Process (#883) is not in mixedCase
Function babyfrog.remove_Random_Tokens(address,address,uint256) (#916-921) is not in mixedCase
Parameter babyfrog.remove_Random_Tokens(address,address,uint256).random_Token_Address (#916) is not in mixedCase
Parameter babyfrog.remove_Random_Tokens(address,address,uint256).send_to_wallet (#916) is not in mixedCase
Parameter babyfrog.remove_Random_Tokens(address,address,uint256).number_of_tokens (#916) is not in mixedCase
Function babyfrog.set_New_Router_and_Make_Pair(address) (#932-936) is not in mixedCase
Function babyfrog.set_New_Router_Address(address) (#939-942) is not in mixedCase
Function babyfrog.set_New_Pair_Address(address) (#945-947) is not in mixedCase
Variable babyfrog._isExcludedFromFee (#371) is not in mixedCase
Variable babyfrog._isBlacklisted (#374) is not in mixedCase
Variable babyfrog.Wallet_Dev (#386) is not in mixedCase
Variable babyfrog.Wallet_Burn (#387) is not in mixedCase
Variable babyfrog.Wallet_zero (#388) is not in mixedCase
Variable babyfrog._TotalFee (#414) is not in mixedCase
Variable babyfrog._buyFee (#415) is not in mixedCase
Variable babyfrog._sellFee (#416) is not in mixedCase
Variable babyfrog._maxWalletToken (#431) is not in mixedCase
Variable babyfrog._maxTxAmount (#436) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#63)" inContext (#57-66)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Reentrancy in babyfrog._transfer(address,address,uint256) (#764-853):
External calls:
- swapAndLiquify(contractTokenBalance) (#830)
- wallet.transfer(amount) (#869)
State variables written after the call(s):
- _TotalFee = _buyFee (#850)
- _TotalFee = _sellFee (#850)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _TotalFee = _previousTotalFee (#748)
- _TotalFee = 0 (#741)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _buyFee = _previousBuyFee (#749)
- _buyFee = 0 (#739)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _previousBuyFee = _buyFee (#736)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _previousSellFee = _sellFee (#737)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _previousTotalFee = _TotalFee (#738)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _sellFee = _previousSellFee (#750)
- _sellFee = 0 (#740)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#973)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#974)
- _tOwned[address(this)] = _tOwned[address(this)].add(tDev) (#975)
- _tokenTransfer(from,to,amount,takeFee) (#852)
- txCount ++ (#962)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#976)
- _tokenTransfer(from,to,amount,takeFee) (#852)
Reentrancy in babyfrog.transferFrom(address,address,uint256) (#532-536):
External calls:
- _transfer(sender,recipient,amount) (#533)
- wallet.transfer(amount) (#869)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#534)
- _allowances[owner][spender] = amount (#759)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#760)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#534)
Apply the check-effects-interactions pattern.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#234) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#235)
Prevent variables from having similar names.
Additional information: link
babyfrog.slitherConstructorVariables() (#363-993) uses literals with too many digits:
- Wallet_Burn = address(0x000000000000000000000000000000000000dEaD) (#387)
babyfrog.slitherConstructorVariables() (#363-993) uses literals with too many digits:
- Wallet_zero = address(0x0000000000000000000000000000000000000000) (#388)
babyfrog.slitherConstructorVariables() (#363-993) uses literals with too many digits:
- _tTotal = 1000000 * 10 ** 18 (#401)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
babyfrog.Wallet_zero (#388) is never used in babyfrog (#363-993)
babyfrog._tFeeTotal (#402) is never used in babyfrog (#363-993)
babyfrog._previousMaxWalletToken (#432) is never used in babyfrog (#363-993)
babyfrog._previousMaxTxAmount (#437) is never used in babyfrog (#363-993)
Remove unused state variables.
Additional information: link
babyfrog.Wallet_Burn (#387) should be constant
babyfrog.Wallet_zero (#388) should be constant
babyfrog._decimals (#400) should be constant
babyfrog._name (#398) should be constant
babyfrog._symbol (#399) should be constant
babyfrog._tFeeTotal (#402) should be constant
babyfrog._tTotal (#401) should be constant
babyfrog.maxPossibleFee (#410) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#162-165)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#168-172)
name() should be declared external:
- babyfrog.name() (#498-500)
symbol() should be declared external:
- babyfrog.symbol() (#502-504)
decimals() should be declared external:
- babyfrog.decimals() (#506-508)
totalSupply() should be declared external:
- babyfrog.totalSupply() (#510-512)
transfer(address,uint256) should be declared external:
- babyfrog.transfer(address,uint256) (#518-521)
allowance(address,address) should be declared external:
- babyfrog.allowance(address,address) (#523-525)
approve(address,uint256) should be declared external:
- babyfrog.approve(address,uint256) (#527-530)
transferFrom(address,address,uint256) should be declared external:
- babyfrog.transferFrom(address,address,uint256) (#532-536)
increaseAllowance(address,uint256) should be declared external:
- babyfrog.increaseAllowance(address,uint256) (#538-541)
decreaseAllowance(address,uint256) should be declared external:
- babyfrog.decreaseAllowance(address,uint256) (#543-546)
excludeFromFee(address) should be declared external:
- babyfrog.excludeFromFee(address) (#565-567)
includeInFee(address) should be declared external:
- babyfrog.includeInFee(address) (#570-572)
Wallet_Update_Dev(address) should be declared external:
- babyfrog.Wallet_Update_Dev(address) (#595-598)
set_Swap_And_Liquify_Enabled(bool) should be declared external:
- babyfrog.set_Swap_And_Liquify_Enabled(bool) (#608-611)
set_Number_Of_Transactions_Before_Liquify_Trigger(uint8) should be declared external:
- babyfrog.set_Number_Of_Transactions_Before_Liquify_Trigger(uint8) (#614-616)
blacklist_Switch(bool) should be declared external:
- babyfrog.blacklist_Switch(bool) (#681-683)
process_Tokens_Now(uint256) should be declared external:
- babyfrog.process_Tokens_Now(uint256) (#883-890)
set_New_Router_and_Make_Pair(address) should be declared external:
- babyfrog.set_New_Router_and_Make_Pair(address) (#932-936)
set_New_Router_Address(address) should be declared external:
- babyfrog.set_New_Router_Address(address) (#939-942)
set_New_Pair_Address(address) should be declared external:
- babyfrog.set_New_Pair_Address(address) (#945-947)
Use the external attribute for functions never called from the contract.
Additional information: link
Contract ticker ($BFROG) contains non-alphanumeric characters.
Not a direct threat, but may indicate unreliable intentions of developer. Non-alphanumeric chars (,.;!#*&") are extremely rare among low risk tokens.
Average 30d PancakeSwap liquidity is less than $100. Token is either dead or inactive.
Average 30d PancakeSwap volume is less than $100. Token is either dead or inactive.
Number of Binance Smart Chain (BSC) token holders is less than 100. Token is either dead or inactive. Ignore for presale.
Contract has 8% buy tax and 10% sell tax.
Taxes are low but contract ownership is not renounced. Token has a high risk of becoming a honeypot.
Average 30d number of PancakeSwap swaps is low.
Token is deployed only at one blockchain
Token has only one trading pair
Unable to find website, listings and other project-related information
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Telegram and Twitter accounts