Pyrrho is a utility token that is intended to be used for micropayments within a unique online ecosystem that will feature a database of blockchain projects. The system has been designed to build better communities around blockchain-based technologies. The software is under development.
Pyrrho.contractSwap(uint256) (#537-590) sends eth to arbitrary user
Dangerous calls:
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in Pyrrho._transfer(address,address,uint256) (#501-535):
External calls:
- contractSwap(contractTokenBalance) (#530)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(BNBAmt + BUSDAmt,0,path,address(this),block.timestamp) (#559-565)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- BUSD_ERC20.transfer(taxWallets.address1,BUSD_ERC20.balanceOf(address(this)) / 2) (#586)
- BUSD_ERC20.transfer(taxWallets.address2,BUSD_ERC20.balanceOf(address(this))) (#587)
External calls sending eth:
- contractSwap(contractTokenBalance) (#530)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
State variables written after the call(s):
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- _hasLiqBeenAdded = true (#596)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- _liquidityHolders[from] = true (#595)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- _tOwned[from] -= amount (#615)
- _tOwned[address(this)] += feeAmount (#633)
- _tOwned[to] += amountReceived (#617)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- contractSwapEnabled = true (#597)
Reentrancy in Pyrrho.contractSwap(uint256) (#537-590):
External calls:
- _transfer(address(this),taxWallets.address1,tokensAmt / 2) (#550)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(BNBAmt + BUSDAmt,0,path,address(this),block.timestamp) (#559-565)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- BUSD_ERC20.transfer(taxWallets.address1,BUSD_ERC20.balanceOf(address(this)) / 2) (#586)
- BUSD_ERC20.transfer(taxWallets.address2,BUSD_ERC20.balanceOf(address(this))) (#587)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(BNBAmt + BUSDAmt,0,path,address(this),block.timestamp) (#559-565)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- BUSD_ERC20.transfer(taxWallets.address1,BUSD_ERC20.balanceOf(address(this)) / 2) (#586)
- BUSD_ERC20.transfer(taxWallets.address2,BUSD_ERC20.balanceOf(address(this))) (#587)
External calls sending eth:
- _transfer(address(this),taxWallets.address1,tokensAmt / 2) (#550)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
State variables written after the call(s):
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- _allowances[address(this)][address(dexRouter)] = type()(uint256).max (#542)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- _hasLiqBeenAdded = true (#596)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- _liquidityHolders[from] = true (#595)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- _tOwned[from] -= amount (#615)
- _tOwned[address(this)] += feeAmount (#633)
- _tOwned[to] += amountReceived (#617)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- contractSwapEnabled = true (#597)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- inSwap = true (#266)
- inSwap = false (#268)
Reentrancy in Pyrrho.transferOwner(address) (#311-324):
External calls:
- _transfer(_owner,newOwner,balanceOf(_owner)) (#318)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(BNBAmt + BUSDAmt,0,path,address(this),block.timestamp) (#559-565)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- BUSD_ERC20.transfer(taxWallets.address1,BUSD_ERC20.balanceOf(address(this)) / 2) (#586)
- BUSD_ERC20.transfer(taxWallets.address2,BUSD_ERC20.balanceOf(address(this))) (#587)
External calls sending eth:
- _transfer(_owner,newOwner,balanceOf(_owner)) (#318)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
State variables written after the call(s):
- _owner = newOwner (#321)
Apply the check-effects-interactions pattern.
Additional information: link
Pyrrho.contractSwap(uint256) (#537-590) ignores return value by BUSD_ERC20.transfer(taxWallets.address1,BUSD_ERC20.balanceOf(address(this)) / 2) (#586)
Pyrrho.contractSwap(uint256) (#537-590) ignores return value by BUSD_ERC20.transfer(taxWallets.address2,BUSD_ERC20.balanceOf(address(this))) (#587)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Unable to verify that contract auditor is trusted: Certik, Quantstamp, Hacken, Solidity, Paladinsec, Openzeppelin, Verichains
Combination 1: Reentrancy vulnerabilities + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Combination 2: Unchecked transfer + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Combination 3: Reentrancy vulnerabilities + Unchecked transfer vulnerability. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Contract ownership is not renounced (belongs to a wallet)
Pyrrho.setMaxWalletSell(uint256) (#455-458) should emit an event for:
- _maxSellPercent = percent (#457)
Pyrrho.setSwapSettings(uint256,uint256,uint256,uint256) (#465-468) should emit an event for:
- swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor (#466)
- swapAmount = (_tTotal * amountPercent) / amountDivisor (#467)
Emit an event for critical parameter changes.
Additional information: link
Reentrancy in Pyrrho.constructor() (#276-298):
External calls:
- lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(),address(this)) (#283)
State variables written after the call(s):
- BNB = dexRouter.WETH() (#285)
- _approve(address(this),_routerAddress,type()(uint256).max) (#287)
- _allowances[sender][spender] = amount (#360)
- _isExcludedFromFees[owner()] = true (#289)
- _isExcludedFromFees[address(this)] = true (#290)
- _isExcludedFromFees[DEAD] = true (#291)
- _isExcludedFromSellLimits[owner()] = true (#292)
- _isExcludedFromSellLimits[address(this)] = true (#293)
- _isExcludedFromSellLimits[DEAD] = true (#294)
- _liquidityHolders[owner()] = true (#295)
- lpPairs[lpPair] = true (#284)
Reentrancy in Pyrrho.setNewRouter(address) (#391-402):
External calls:
- lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this),_newRouter.WETH()) (#395)
State variables written after the call(s):
- _approve(address(this),address(dexRouter),type()(uint256).max) (#401)
- _allowances[sender][spender] = amount (#360)
- dexRouter = _newRouter (#400)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in Pyrrho._transfer(address,address,uint256) (#501-535):
External calls:
- contractSwap(contractTokenBalance) (#530)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(BNBAmt + BUSDAmt,0,path,address(this),block.timestamp) (#559-565)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- BUSD_ERC20.transfer(taxWallets.address1,BUSD_ERC20.balanceOf(address(this)) / 2) (#586)
- BUSD_ERC20.transfer(taxWallets.address2,BUSD_ERC20.balanceOf(address(this))) (#587)
External calls sending eth:
- contractSwap(contractTokenBalance) (#530)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
Event emitted after the call(s):
- ContractSwapEnabledUpdated(true) (#598)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- Transfer(from,address(this),feeAmount) (#634)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- Transfer(from,to,amountReceived) (#619)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
Reentrancy in Pyrrho.constructor() (#276-298):
External calls:
- lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(),address(this)) (#283)
Event emitted after the call(s):
- Approval(sender,spender,amount) (#361)
- _approve(address(this),_routerAddress,type()(uint256).max) (#287)
- Transfer(address(0),_msgSender(),_tTotal) (#297)
Reentrancy in Pyrrho.contractSwap(uint256) (#537-590):
External calls:
- _transfer(address(this),taxWallets.address1,tokensAmt / 2) (#550)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(BNBAmt + BUSDAmt,0,path,address(this),block.timestamp) (#559-565)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- BUSD_ERC20.transfer(taxWallets.address1,BUSD_ERC20.balanceOf(address(this)) / 2) (#586)
- BUSD_ERC20.transfer(taxWallets.address2,BUSD_ERC20.balanceOf(address(this))) (#587)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(BNBAmt + BUSDAmt,0,path,address(this),block.timestamp) (#559-565)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- BUSD_ERC20.transfer(taxWallets.address1,BUSD_ERC20.balanceOf(address(this)) / 2) (#586)
- BUSD_ERC20.transfer(taxWallets.address2,BUSD_ERC20.balanceOf(address(this))) (#587)
External calls sending eth:
- _transfer(address(this),taxWallets.address1,tokensAmt / 2) (#550)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
Event emitted after the call(s):
- ContractSwapEnabledUpdated(true) (#598)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- Transfer(from,address(this),feeAmount) (#634)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- Transfer(from,to,amountReceived) (#619)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
Reentrancy in Pyrrho.setNewRouter(address) (#391-402):
External calls:
- lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this),_newRouter.WETH()) (#395)
Event emitted after the call(s):
- Approval(sender,spender,amount) (#361)
- _approve(address(this),address(dexRouter),type()(uint256).max) (#401)
Reentrancy in Pyrrho.transferOwner(address) (#311-324):
External calls:
- _transfer(_owner,newOwner,balanceOf(_owner)) (#318)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(BNBAmt + BUSDAmt,0,path,address(this),block.timestamp) (#559-565)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- BUSD_ERC20.transfer(taxWallets.address1,BUSD_ERC20.balanceOf(address(this)) / 2) (#586)
- BUSD_ERC20.transfer(taxWallets.address2,BUSD_ERC20.balanceOf(address(this))) (#587)
External calls sending eth:
- _transfer(_owner,newOwner,balanceOf(_owner)) (#318)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
Event emitted after the call(s):
- OwnershipTransferred(_owner,newOwner) (#322)
Apply the check-effects-interactions pattern.
Additional information: link
Pyrrho.setLpPair(address,bool) (#404-414) uses timestamp for comparisons
Dangerous comparisons:
- timeSinceLastPair != 0 (#408)
- require(bool,string)(block.timestamp - timeSinceLastPair > 259200,Cannot set a new pair this week!) (#409)
Avoid relying on block.timestamp.
Additional information: link
Pyrrho.setLpPair(address,bool) (#404-414) compares to a boolean constant:
-enabled == false (#405)
Remove the equality to the boolean constant.
Additional information: link
Context._msgData() (#16-19) is never used and should be removed
Remove unused functions.
Additional information: link
Pyrrho.BUSD_ERC20 (#218) is set pre-construction with a non-constant function or state variable:
- IERC20(BUSD)
Pyrrho._maxWalletSize (#240) is set pre-construction with a non-constant function or state variable:
- (_tTotal * maxWalletPercent) / maxWalletDivisor
Pyrrho.maxWalletSizeUI (#241) is set pre-construction with a non-constant function or state variable:
- (startingSupply * maxWalletPercent) / maxWalletDivisor
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
Pragma version>=0.8.0 (#2) allows old versions
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
Function IUniswapV2Router01.WETH() (#125) is not in mixedCase
Parameter Pyrrho.setContractSwapEnabled(bool)._enabled (#470) is not in mixedCase
Constant Pyrrho.startingSupply (#169) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Pyrrho._name (#171) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Pyrrho._symbol (#172) is not in UPPER_CASE_WITH_UNDERSCORES
Variable Pyrrho._taxRates (#192-195) is not in mixedCase
Variable Pyrrho._ratios (#197-202) is not in mixedCase
Constant Pyrrho._decimals (#211) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Pyrrho._tTotal (#212) is not in UPPER_CASE_WITH_UNDERSCORES
Variable Pyrrho.BNB (#216) is not in mixedCase
Variable Pyrrho.BUSD (#217) is not in mixedCase
Variable Pyrrho.BUSD_ERC20 (#218) is not in mixedCase
Constant Pyrrho._routerAddress (#221) is not in UPPER_CASE_WITH_UNDERSCORES
Variable Pyrrho._maxSellPercent (#243) is not in mixedCase
Variable Pyrrho._hasLiqBeenAdded (#248) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#17)" inContext (#11-20)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Reentrancy in Pyrrho._transfer(address,address,uint256) (#501-535):
External calls:
- contractSwap(contractTokenBalance) (#530)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
External calls sending eth:
- contractSwap(contractTokenBalance) (#530)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
State variables written after the call(s):
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- _hasLiqBeenAdded = true (#596)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- _liquidityHolders[from] = true (#595)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- _tOwned[from] -= amount (#615)
- _tOwned[address(this)] += feeAmount (#633)
- _tOwned[to] += amountReceived (#617)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- contractSwapEnabled = true (#597)
Event emitted after the call(s):
- ContractSwapEnabledUpdated(true) (#598)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- Transfer(from,address(this),feeAmount) (#634)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
- Transfer(from,to,amountReceived) (#619)
- _finalizeTransfer(from,to,amount,takeFee) (#534)
Reentrancy in Pyrrho.contractSwap(uint256) (#537-590):
External calls:
- _transfer(address(this),taxWallets.address1,tokensAmt / 2) (#550)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
External calls sending eth:
- _transfer(address(this),taxWallets.address1,tokensAmt / 2) (#550)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
State variables written after the call(s):
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- _allowances[address(this)][address(dexRouter)] = type()(uint256).max (#542)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- _hasLiqBeenAdded = true (#596)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- _liquidityHolders[from] = true (#595)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- _tOwned[from] -= amount (#615)
- _tOwned[address(this)] += feeAmount (#633)
- _tOwned[to] += amountReceived (#617)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- contractSwapEnabled = true (#597)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- inSwap = true (#266)
- inSwap = false (#268)
Event emitted after the call(s):
- ContractSwapEnabledUpdated(true) (#598)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- Transfer(from,address(this),feeAmount) (#634)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
- Transfer(from,to,amountReceived) (#619)
- _transfer(address(this),taxWallets.address2,tokensAmt - (tokensAmt / 2)) (#551)
Reentrancy in Pyrrho.transferOwner(address) (#311-324):
External calls:
- _transfer(_owner,newOwner,balanceOf(_owner)) (#318)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
External calls sending eth:
- _transfer(_owner,newOwner,balanceOf(_owner)) (#318)
- taxWallets.address1.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#570)
- taxWallets.address2.transfer(((swappedBNB * _ratios.bnb) / (_ratios.bnb + _ratios.busd)) / 2) (#571)
- dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(0,path,address(this),block.timestamp) (#579-584)
State variables written after the call(s):
- _owner = newOwner (#321)
Event emitted after the call(s):
- OwnershipTransferred(_owner,newOwner) (#322)
Apply the check-effects-interactions pattern.
Additional information: link
Pyrrho.slitherConstructorConstantVariables() (#152-639) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#223)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Pyrrho.MAX (#210) is never used in Pyrrho (#152-639)
Remove unused state variables.
Additional information: link
Pyrrho.BUSD (#217) should be constant
Pyrrho.allowedPresaleExclusion (#166) should be constant
Pyrrho.maxWalletDivisor (#239) should be constant
Pyrrho.maxWalletPercent (#238) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Pyrrho.renounceOwnership() (#326-330)
transfer(address,uint256) should be declared external:
- Pyrrho.transfer(address,uint256) (#346-349)
approve(address,uint256) should be declared external:
- Pyrrho.approve(address,uint256) (#351-354)
approveContractContingency() should be declared external:
- Pyrrho.approveContractContingency() (#364-367)
increaseAllowance(address,uint256) should be declared external:
- Pyrrho.increaseAllowance(address,uint256) (#377-380)
decreaseAllowance(address,uint256) should be declared external:
- Pyrrho.decreaseAllowance(address,uint256) (#382-385)
setNewRouter(address) should be declared external:
- Pyrrho.setNewRouter(address) (#391-402)
isExcludedFromFees(address) should be declared external:
- Pyrrho.isExcludedFromFees(address) (#416-418)
setExcludedFromWalletSize(address,bool) should be declared external:
- Pyrrho.setExcludedFromWalletSize(address,bool) (#428-430)
setExcludedFromSellLimits(address,bool) should be declared external:
- Pyrrho.setExcludedFromSellLimits(address,bool) (#436-438)
setContractSwapEnabled(bool) should be declared external:
- Pyrrho.setContractSwapEnabled(bool) (#470-473)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find code repository for the project
Unable to find audit link on the website
Young tokens have high risks of price dump / death
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of price dump / death
Token has relatively low CoinGecko rank
Token has relatively low CoinMarketCap rank
Young tokens have high risks of price dump / death
Young tokens have high risks of price dump / death
Twitter account has less than 100 followers
Telegram account has relatively few subscribers
Unable to find Youtube account
Twitter account has few posts