Panda Girl (PGIRL) is the utility token of the Panda Girl universe, called the Pandaverse. The Pandaverse consists of:
- Collectible, beautiful hand-drawn NFTs called Panda Girls. Each Panda Girl will have its own rarity index and will be tradeable amongst holders.
- Staking of PGIRL tokens to earn passive income
- NFT farming with rare NFTs providing higher yields
- Play-to-earn gaming
- Panda Swap
- Panda Girl merchandise store specific to NFTs minted.
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Reentrancy in PandaGirl._transfer(address,address,uint256) (#1036-1051):
External calls:
- amount = handleTax(sender,recipient,amount) (#1047)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
External calls sending eth:
- amount = handleTax(sender,recipient,amount) (#1047)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
State variables written after the call(s):
- super._transfer(sender,recipient,amount) (#1050)
- _balances[sender] = senderBalance - amount (#388)
- _balances[recipient] += amount (#390)
Reentrancy in PandaGirl.handleTax(address,address,uint256) (#930-1034):
External calls:
- _transfer(from,address(this),tax) (#945)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
External calls sending eth:
- _transfer(from,address(this),tax) (#945)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
State variables written after the call(s):
- charityTokens += baseUnit * buyTaxes[charity] (#951)
- devTokens += baseUnit * buyTaxes[dev] (#949)
- liquidityTokens += baseUnit * buyTaxes[liquidity] (#950)
- marketingTokens += baseUnit * buyTaxes[marketing] (#948)
Reentrancy in PandaGirl.handleTax(address,address,uint256) (#930-1034):
External calls:
- _transfer(from,address(this),tax) (#959)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
External calls sending eth:
- _transfer(from,address(this),tax) (#959)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
State variables written after the call(s):
- charityTokens += baseUnit * sellTaxes[charity] (#965)
- devTokens += baseUnit * sellTaxes[dev] (#963)
- liquidityTokens += baseUnit * sellTaxes[liquidity] (#964)
- marketingTokens += baseUnit * sellTaxes[marketing] (#962)
Reentrancy in PandaGirl.handleTax(address,address,uint256) (#930-1034):
External calls:
- _transfer(from,address(this),tax) (#959)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
External calls sending eth:
- _transfer(from,address(this),tax) (#959)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
State variables written after the call(s):
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- _balances[sender] = senderBalance - amount (#388)
- _balances[recipient] += amount (#390)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- charityTokens += baseUnit * buyTaxes[charity] (#951)
- charityTokens += baseUnit * sellTaxes[charity] (#965)
- charityTokens = 0 (#1025)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- devTokens += baseUnit * buyTaxes[dev] (#949)
- devTokens += baseUnit * sellTaxes[dev] (#963)
- devTokens = 0 (#1023)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- liquidityTokens += baseUnit * buyTaxes[liquidity] (#950)
- liquidityTokens += baseUnit * sellTaxes[liquidity] (#964)
- liquidityTokens = 0 (#1024)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- marketingTokens += baseUnit * buyTaxes[marketing] (#948)
- marketingTokens += baseUnit * sellTaxes[marketing] (#962)
- marketingTokens = 0 (#1022)
Reentrancy in PandaGirl.handleTax(address,address,uint256) (#930-1034):
External calls:
- _transfer(from,address(this),tax) (#959)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
External calls sending eth:
- _transfer(from,address(this),tax) (#959)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
State variables written after the call(s):
- charityTokens = 0 (#1025)
- devTokens = 0 (#1023)
- liquidityTokens = 0 (#1024)
- marketingTokens = 0 (#1022)
Apply the check-effects-interactions pattern.
Additional information: link
Contract ownership is not renounced (belongs to a wallet)
PandaGirl.handleTax(address,address,uint256) (#930-1034) uses a dangerous strict equality:
- taxSum == 0 (#969)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
PandaGirl.handleTax(address,address,uint256).tax (#936) 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
PandaGirl.handleTax(address,address,uint256) (#930-1034) ignores return value by uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
Ensure that all the return values of the function calls are used.
Additional information: link
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#678) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#679) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#696) is not in mixedCase
Function IUniswapV2Router01.WETH() (#732) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Reentrancy in PandaGirl.constructor() (#905-920):
External calls:
- uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this),uniswapV2Router02.WETH())) (#909)
State variables written after the call(s):
- _mint(msg.sender,initialSupply) (#918)
- _balances[account] += amount (#412)
- _mint(msg.sender,initialSupply) (#918)
- _totalSupply += amount (#411)
- setBuyTax(devTaxBuy,marketingTaxBuy,liquidityTaxBuy,charityTaxBuy) (#911)
- buyTaxes[dev] = dev (#1119)
- buyTaxes[marketing] = marketing (#1120)
- buyTaxes[liquidity] = liquidity (#1121)
- buyTaxes[charity] = charity (#1122)
- exclude(msg.sender) (#915)
- excludeList[account] = true (#1104)
- exclude(address(this)) (#916)
- excludeList[account] = true (#1104)
- setSellTax(devTaxSell,marketingTaxSell,liquidityTaxSell,charityTaxSell) (#912)
- sellTaxes[dev] = dev (#1130)
- sellTaxes[marketing] = marketing (#1131)
- sellTaxes[liquidity] = liquidity (#1132)
- sellTaxes[charity] = charity (#1133)
- taxStatus = true (#919)
- setTaxWallets(devTaxWallet,marketingTaxWallet,liquidityTaxWallet,charityTaxWallet) (#913)
- taxWallets[dev] = dev (#1140)
- taxWallets[marketing] = marketing (#1141)
- taxWallets[liquidity] = liquidity (#1142)
- taxWallets[charity] = charity (#1143)
Reentrancy in PandaGirl.handleTax(address,address,uint256) (#930-1034):
External calls:
- _transfer(from,address(this),tax) (#959)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
External calls sending eth:
- _transfer(from,address(this),tax) (#959)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
State variables written after the call(s):
- _approve(address(this),address(uniswapV2Router02),toSell) (#978)
- _allowances[owner][spender] = amount (#467)
Reentrancy in PandaGirl.handleTax(address,address,uint256) (#930-1034):
External calls:
- _transfer(from,address(this),tax) (#959)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
External calls sending eth:
- _transfer(from,address(this),tax) (#959)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
State variables written after the call(s):
- _approve(address(this),address(uniswapV2Router02),liquidityToken) (#997)
- _allowances[owner][spender] = amount (#467)
Reentrancy in PandaGirl.handleTax(address,address,uint256) (#930-1034):
External calls:
- _transfer(from,address(this),tax) (#959)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
External calls sending eth:
- _transfer(from,address(this),tax) (#959)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
State variables written after the call(s):
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- _allowances[owner][spender] = amount (#467)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in PandaGirl._transfer(address,address,uint256) (#1036-1051):
External calls:
- amount = handleTax(sender,recipient,amount) (#1047)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
External calls sending eth:
- amount = handleTax(sender,recipient,amount) (#1047)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (#392)
- super._transfer(sender,recipient,amount) (#1050)
Reentrancy in PandaGirl.constructor() (#905-920):
External calls:
- uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this),uniswapV2Router02.WETH())) (#909)
Event emitted after the call(s):
- Transfer(address(0),account,amount) (#413)
- _mint(msg.sender,initialSupply) (#918)
Reentrancy in PandaGirl.handleTax(address,address,uint256) (#930-1034):
External calls:
- _transfer(from,address(this),tax) (#959)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
External calls sending eth:
- _transfer(from,address(this),tax) (#959)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#468)
- _approve(address(this),address(uniswapV2Router02),toSell) (#978)
Reentrancy in PandaGirl.handleTax(address,address,uint256) (#930-1034):
External calls:
- _transfer(from,address(this),tax) (#959)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
External calls sending eth:
- _transfer(from,address(this),tax) (#959)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#468)
- _approve(address(this),address(uniswapV2Router02),liquidityToken) (#997)
Reentrancy in PandaGirl.handleTax(address,address,uint256) (#930-1034):
External calls:
- _transfer(from,address(this),tax) (#959)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- uniswapV2Router02.swapExactTokensForETH(toSell,0,sellPath,address(this),block.timestamp) (#980-986)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
External calls sending eth:
- _transfer(from,address(this),tax) (#959)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- (amountToken,amountETH,liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(address(this),liquidityToken,0,0,taxWallets[liquidity],block.timestamp) (#999-1006)
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#468)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
- Transfer(sender,recipient,amount) (#392)
- _transfer(address(this),taxWallets[dev],remainingTokens) (#1011)
Apply the check-effects-interactions pattern.
Additional information: link
PandaGirl.handleTax(address,address,uint256) (#930-1034) uses timestamp for comparisons
Dangerous comparisons:
- tax > 0 (#944)
- tax > 0 (#958)
- taxSum == 0 (#969)
- ethValue >= swapThreshold (#973)
- remainingTokens > 0 (#1010)
- ethGained - (marketingETH + devETH + liquidityETH + charityETH) > 0 (#1018)
Avoid relying on block.timestamp.
Additional information: link
Context._msgData() (#160-162) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.9 (#43) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
solc-0.8.10 is not recommended for deployment
Deploy with any of the following Solidity versions: 0.5.16 - 0.5.17, 0.6.11 - 0.6.12, 0.7.5 - 0.7.6 Use a simple pragma version that allows any of these versions. Consider using the latest version of Solidity for testing.
Additional information: link
Low level call in PandaGirl.handleTax(address,address,uint256) (#930-1034):
- taxWallets[marketing].call{value: marketingETH}() (#1014)
- taxWallets[dev].call{value: devETH}() (#1015)
- taxWallets[charity].call{value: charityETH}() (#1016)
- taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#737) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#738)
Prevent variables from having similar names.
Additional information: link
PandaGirl.slitherConstructorVariables() (#865-1178) uses literals with too many digits:
- swapThreshold = 500000000000 (#873)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
PandaGirl.charityTaxBuy (#878) should be constant
PandaGirl.charityTaxSell (#883) should be constant
PandaGirl.charityTaxWallet (#888) should be constant
PandaGirl.denominator (#871) should be constant
PandaGirl.devTaxBuy (#875) should be constant
PandaGirl.devTaxSell (#880) should be constant
PandaGirl.devTaxWallet (#885) should be constant
PandaGirl.initialSupply (#869) should be constant
PandaGirl.liquidityTaxBuy (#877) should be constant
PandaGirl.liquidityTaxSell (#882) should be constant
PandaGirl.liquidityTaxWallet (#887) should be constant
PandaGirl.marketingTaxBuy (#876) should be constant
PandaGirl.marketingTaxSell (#881) should be constant
PandaGirl.marketingTaxWallet (#886) should be constant
PandaGirl.swapThreshold (#873) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
name() should be declared external:
- ERC20.name() (#216-218)
symbol() should be declared external:
- ERC20.symbol() (#224-226)
decimals() should be declared external:
- ERC20.decimals() (#241-243)
totalSupply() should be declared external:
- ERC20.totalSupply() (#248-250)
balanceOf(address) should be declared external:
- ERC20.balanceOf(address) (#255-257)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#267-270)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (#275-277)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#286-289)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#304-318)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#332-335)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#351-359)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#558-560)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#566-569)
triggerTax() should be declared external:
- PandaGirl.triggerTax() (#1056-1058)
pause() should be declared external:
- PandaGirl.pause() (#1063-1066)
unpause() should be declared external:
- PandaGirl.unpause() (#1071-1074)
burn(uint256) should be declared external:
- PandaGirl.burn(uint256) (#1079-1081)
enableBlacklist(address) should be declared external:
- PandaGirl.enableBlacklist(address) (#1086-1089)
disableBlacklist(address) should be declared external:
- PandaGirl.disableBlacklist(address) (#1094-1097)
removeExclude(address) should be declared external:
- PandaGirl.removeExclude(address) (#1110-1113)
enableTax() should be declared external:
- PandaGirl.enableTax() (#1149-1152)
disableTax() should be declared external:
- PandaGirl.disableTax() (#1157-1160)
Use the external attribute for functions never called from the contract.
Additional information: link
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-tax += baseUnit * buyTaxes[marketing] (#939)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-tax += baseUnit * sellTaxes[marketing] (#953)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-tax += baseUnit * buyTaxes[dev] (#940)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-tax += baseUnit * sellTaxes[dev] (#954)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-tax += baseUnit * buyTaxes[liquidity] (#941)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-tax += baseUnit * sellTaxes[liquidity] (#955)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-tax += baseUnit * buyTaxes[charity] (#942)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-tax += baseUnit * sellTaxes[charity] (#956)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-marketingTokens += baseUnit * buyTaxes[marketing] (#948)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-devTokens += baseUnit * buyTaxes[dev] (#949)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-marketingTokens += baseUnit * sellTaxes[marketing] (#962)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-devTokens += baseUnit * sellTaxes[dev] (#963)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-liquidityTokens += baseUnit * buyTaxes[liquidity] (#950)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-liquidityTokens += baseUnit * sellTaxes[liquidity] (#964)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-charityTokens += baseUnit * buyTaxes[charity] (#951)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-baseUnit = amount / denominator (#937)
-charityTokens += baseUnit * sellTaxes[charity] (#965)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-liquidityETH = (ethGained * ((liquidityTokens / 2 * 10 ** 6) / taxSum)) / 10 ** 6 (#991)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-marketingETH = (ethGained * ((marketingTokens * 10 ** 6) / taxSum)) / 10 ** 6 (#993)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-devETH = (ethGained * ((devTokens * 10 ** 6) / taxSum)) / 10 ** 6 (#994)
PandaGirl.handleTax(address,address,uint256) (#930-1034) performs a multiplication on the result of a division:
-charityETH = (ethGained * ((charityTokens * 10 ** 6) / taxSum)) / 10 ** 6 (#995)
Consider ordering multiplication before division.
Additional information: link
PandaGirl._transfer(address,address,uint256) (#1036-1051) uses tx.origin for authorization: require(bool,string)(! isBlacklisted(tx.origin),Panda Girl: sender blacklisted) (#1044)
Do not use tx.origin for authorization.
Additional information: link
PandaGirl.handleTax(address,address,uint256) (#930-1034) ignores return value by taxWallets[marketing].call{value: marketingETH}() (#1014)
PandaGirl.handleTax(address,address,uint256) (#930-1034) ignores return value by taxWallets[dev].call{value: devETH}() (#1015)
PandaGirl.handleTax(address,address,uint256) (#930-1034) ignores return value by taxWallets[charity].call{value: charityETH}() (#1016)
PandaGirl.handleTax(address,address,uint256) (#930-1034) ignores return value by taxWallets[marketing].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}() (#1019)
Ensure that the return value of a low-level call is checked or logged.
Additional information: link
Young tokens have high risks of price dump / death
Young tokens have high risks of price dump / death
Token has relatively low CoinMarketCap rank
Unable to find Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account