Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Contract ownership is not renounced (belongs to a wallet)
SadToken._transfer(address,address,uint256) (#418-446) performs a multiplication on the result of a division:
-amount = amount.div(100).mul(100 - shareFee) (#436)
SadToken._transfer(address,address,uint256) (#418-446) performs a multiplication on the result of a division:
-amount = amount.div(100).mul(100 - marketFee) (#440)
Consider ordering multiplication before division.
Additional information: link
ERC20.allowance(address,address).owner (#211) shadows:
- Ownable.owner() (#116-118) (function)
ERC20._approve(address,address,uint256).owner (#346) shadows:
- Ownable.owner() (#116-118) (function)
Rename the local variables that shadow another component.
Additional information: link
SadToken.changeFee(uint256,uint256) (#460-463) should emit an event for:
- shareFee = _shareFee (#461)
- marketFee = _marketFee (#462)
Emit an event for critical parameter changes.
Additional information: link
Reentrancy in SadToken.constructor() (#390-414):
External calls:
- _USDTPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),address(0x55d398326f99059fF775485246999027B3197955)) (#402-403)
- _BNBPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#405-406)
State variables written after the call(s):
- BNBPair = _BNBPair (#409)
- USDTPair = _USDTPair (#410)
- _mint(msg.sender,total) (#412)
- _balances[account] = _balances[account].add(amount) (#328)
- excludeFromFees(msg.sender,true) (#413)
- _isExcludedFromFees[account] = excluded (#449)
- _mint(msg.sender,total) (#412)
- _totalSupply = _totalSupply.add(amount) (#327)
- uniswapV2Router = _uniswapV2Router (#408)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in SadToken.constructor() (#390-414):
External calls:
- _USDTPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),address(0x55d398326f99059fF775485246999027B3197955)) (#402-403)
- _BNBPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#405-406)
Event emitted after the call(s):
- Transfer(address(0),account,amount) (#329)
- _mint(msg.sender,total) (#412)
Apply the check-effects-interactions pattern.
Additional information: link
Context._msgData() (#9-13) is never used and should be removed
ERC20._burn(address,uint256) (#332-343) is never used and should be removed
ERC20._transferr(address,address,uint256) (#293-307) is never used and should be removed
SafeMath.mod(uint256,uint256) (#70-72) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#74-81) is never used and should be removed
Remove unused functions.
Additional information: link
solc-0.8.14 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 IUniswapV2Router02.WETH() (#374) is not in mixedCase
Parameter SadToken.changeFee(uint256,uint256)._shareFee (#460) is not in mixedCase
Parameter SadToken.changeFee(uint256,uint256)._marketFee (#460) is not in mixedCase
Variable SadToken.USDTPair (#381) is not in mixedCase
Variable SadToken.BNBPair (#382) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#10)" inContext (#4-14)
Remove redundant statements if they congest code but offer no value.
Additional information: link
SadToken._marketAddress (#386) should be constant
SadToken._shareAddress (#385) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
owner() should be declared external:
- Ownable.owner() (#116-118)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#125-128)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#130-137)
name() should be declared external:
- ERC20.name() (#162-164)
symbol() should be declared external:
- ERC20.symbol() (#170-172)
decimals() should be declared external:
- ERC20.decimals() (#175-177)
totalSupply() should be declared external:
- ERC20.totalSupply() (#182-184)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#198-206)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (#211-219)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#222-230)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#233-248)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#251-262)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#264-278)
excludeMultipleAccountsFromFees(address[],bool) should be declared external:
- SadToken.excludeMultipleAccountsFromFees(address[],bool) (#452-457)
changeFee(uint256,uint256) should be declared external:
- SadToken.changeFee(uint256,uint256) (#460-463)
rescueToken(address,uint256) should be declared external:
- SadToken.rescueToken(address,uint256) (#465-467)
rescueEth(uint256) should be declared external:
- SadToken.rescueEth(uint256) (#469-471)
Use the external attribute for functions never called from the contract.
Additional information: link
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