Hawk Protocol provides a decentralized financial asset which rewards it's holders with a sustainable fixed compound interest model through use of it's unique protocol. The Auto Staking Protocol is a new financial protocol that makes staking easier, more efficient and awards Hawk Coin holders the highest stable returns directly in their wallets.
Hawk.swapBack() (#725-763) sends eth to arbitrary user
Dangerous calls:
- (success) = address(treasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(treasuryFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#751-756)
- (success,None) = address(hawkInsuranceFundReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(hawkInsuranceFundFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#757-762)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in Hawk._transferFrom(address,address,uint256) (#611-650):
External calls:
- rebase() (#623)
- pairContract.sync() (#570)
- addLiquidity() (#627)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#702-708)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#713-720)
- swapBack() (#631)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#739-745)
- (success) = address(treasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(treasuryFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#751-756)
- (success,None) = address(hawkInsuranceFundReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(hawkInsuranceFundFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#757-762)
External calls sending eth:
- addLiquidity() (#627)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#713-720)
- swapBack() (#631)
- (success) = address(treasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(treasuryFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#751-756)
- (success,None) = address(hawkInsuranceFundReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(hawkInsuranceFundFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#757-762)
State variables written after the call(s):
- _gonBalances[sender] = _gonBalances[sender].sub(gonAmount) (#635)
- _gonBalances[recipient] = _gonBalances[recipient].add(gonAmountReceived) (#639-641)
- gonAmountReceived = takeFee(sender,recipient,gonAmount) (#636-638)
- _gonBalances[firePit] = _gonBalances[firePit].add(gonAmount.div(feeDenominator).mul(firePitFee)) (#667-669)
- _gonBalances[address(this)] = _gonBalances[address(this)].add(gonAmount.div(feeDenominator).mul(_treasuryFee.add(hawkInsuranceFundFee))) (#670-672)
- _gonBalances[autoLiquidityReceiver] = _gonBalances[autoLiquidityReceiver].add(gonAmount.div(feeDenominator).mul(liquidityFee)) (#673-675)
- swapBack() (#631)
- inSwap = true (#489)
- inSwap = false (#491)
Apply the check-effects-interactions pattern.
Additional information: link
Hawk._name (#446) shadows:
- ERC20Detailed._name (#412)
Hawk._symbol (#447) shadows:
- ERC20Detailed._symbol (#413)
Hawk._decimals (#448) shadows:
- ERC20Detailed._decimals (#414)
Remove the state variable shadowing.
Additional information: link
Too many vulnerabilities (Unchecked transfer, Reentrancy vulnerability, etc.). High risk of a scam. DYOR & manual audit are advised.
Hawk.swapBack().success (#751) is written in both
(success) = address(treasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(treasuryFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#751-756)
(success,None) = address(hawkInsuranceFundReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(hawkInsuranceFundFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#757-762)
Fix or remove the writes.
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.
Contract ownership is not renounced (belongs to a wallet)
Hawk.rebase() (#542-573) performs a multiplication on the result of a division:
-times = deltaTime.div(900) (#548)
-epoch = times.mul(15) (#549)
Hawk.rebase() (#542-573) performs a multiplication on the result of a division:
-times = deltaTime.div(900) (#548)
-_lastRebasedTime = _lastRebasedTime.add(times.mul(900)) (#568)
Hawk.takeFee(address,address,uint256) (#652-679) performs a multiplication on the result of a division:
-feeAmount = gonAmount.div(feeDenominator).mul(_totalFee) (#665)
Hawk.takeFee(address,address,uint256) (#652-679) performs a multiplication on the result of a division:
-_gonBalances[firePit] = _gonBalances[firePit].add(gonAmount.div(feeDenominator).mul(firePitFee)) (#667-669)
Hawk.takeFee(address,address,uint256) (#652-679) performs a multiplication on the result of a division:
-_gonBalances[address(this)] = _gonBalances[address(this)].add(gonAmount.div(feeDenominator).mul(_treasuryFee.add(hawkInsuranceFundFee))) (#670-672)
Hawk.takeFee(address,address,uint256) (#652-679) performs a multiplication on the result of a division:
-_gonBalances[autoLiquidityReceiver] = _gonBalances[autoLiquidityReceiver].add(gonAmount.div(feeDenominator).mul(liquidityFee)) (#673-675)
Hawk.getLiquidityBacking(uint256) (#917-925) performs a multiplication on the result of a division:
-liquidityBalance = _gonBalances[pair].div(_gonsPerFragment) (#922)
-accuracy.mul(liquidityBalance.mul(2)).div(getCirculatingSupply()) (#923-924)
Consider ordering multiplication before division.
Additional information: link
Hawk.rebase().rebaseRate (#545) 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
Hawk.addLiquidity() (#681-723) ignores return value by router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#713-720)
Ensure that all the return values of the function calls are used.
Additional information: link
Hawk.setFeeReceivers(address,address,address,address)._autoLiquidityReceiver (#906) lacks a zero-check on :
- autoLiquidityReceiver = _autoLiquidityReceiver (#911)
Hawk.setFeeReceivers(address,address,address,address)._treasuryReceiver (#907) lacks a zero-check on :
- treasuryReceiver = _treasuryReceiver (#912)
Hawk.setFeeReceivers(address,address,address,address)._hawkInsuranceFundReceiver (#908) lacks a zero-check on :
- hawkInsuranceFundReceiver = _hawkInsuranceFundReceiver (#913)
Hawk.setFeeReceivers(address,address,address,address)._firePit (#909) lacks a zero-check on :
- firePit = _firePit (#914)
Hawk.setPairAddress(address)._pairAddress (#936) lacks a zero-check on :
- pairAddress = _pairAddress (#937)
Check that the address is not zero.
Additional information: link
Reentrancy in Hawk.addLiquidity() (#681-723):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#702-708)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#713-720)
External calls sending eth:
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#713-720)
State variables written after the call(s):
- _lastAddLiquidityTime = block.timestamp (#722)
Reentrancy in Hawk.constructor() (#511-540):
External calls:
- pair = IPancakeSwapFactory(router.factory()).createPair(router.WETH(),address(this)) (#514-517)
State variables written after the call(s):
- _allowedFragments[address(this)][address(router)] = uint256(- 1) (#524)
- _autoAddLiquidity = true (#534)
- _autoRebase = false (#533)
- _gonBalances[treasuryReceiver] = TOTAL_GONS (#529)
- _gonsPerFragment = TOTAL_GONS.div(_totalSupply) (#530)
- _initRebaseStartTime = block.timestamp (#531)
- _isFeeExempt[treasuryReceiver] = true (#535)
- _isFeeExempt[address(this)] = true (#536)
- _lastRebasedTime = block.timestamp (#532)
- _transferOwnership(treasuryReceiver) (#538)
- _owner = newOwner (#407)
- _totalSupply = INITIAL_FRAGMENTS_SUPPLY (#528)
- autoLiquidityReceiver = 0xB7bC12f28Cf4976db59665cd19303bc134746A1F (#519)
- firePit = 0xC126d7F407cA38b12eC9c8B17Ba42b96B42D2Aa9 (#522)
- hawkInsuranceFundReceiver = 0xbAD20b1cd5609B685eaA4d3Cc89FAEb326636722 (#521)
- pairAddress = pair (#525)
- pairContract = IPancakeSwapPair(pair) (#526)
- treasuryReceiver = 0x08F1b376630157b747690D4666A5A05C10feb1d9 (#520)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in Hawk._transferFrom(address,address,uint256) (#611-650):
External calls:
- rebase() (#623)
- pairContract.sync() (#570)
- addLiquidity() (#627)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#702-708)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#713-720)
- swapBack() (#631)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#739-745)
- (success) = address(treasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(treasuryFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#751-756)
- (success,None) = address(hawkInsuranceFundReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(hawkInsuranceFundFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#757-762)
External calls sending eth:
- addLiquidity() (#627)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#713-720)
- swapBack() (#631)
- (success) = address(treasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(treasuryFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#751-756)
- (success,None) = address(hawkInsuranceFundReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(hawkInsuranceFundFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#757-762)
Event emitted after the call(s):
- Transfer(sender,address(this),feeAmount.div(_gonsPerFragment)) (#677)
- gonAmountReceived = takeFee(sender,recipient,gonAmount) (#636-638)
- Transfer(sender,recipient,gonAmountReceived.div(_gonsPerFragment)) (#644-648)
Reentrancy in Hawk.constructor() (#511-540):
External calls:
- pair = IPancakeSwapFactory(router.factory()).createPair(router.WETH(),address(this)) (#514-517)
Event emitted after the call(s):
- OwnershipTransferred(_owner,newOwner) (#406)
- _transferOwnership(treasuryReceiver) (#538)
- Transfer(address(0x0),treasuryReceiver,_totalSupply) (#539)
Reentrancy in Hawk.rebase() (#542-573):
External calls:
- pairContract.sync() (#570)
Event emitted after the call(s):
- LogRebase(epoch,_totalSupply) (#572)
Apply the check-effects-interactions pattern.
Additional information: link
Hawk.rebase() (#542-573) uses timestamp for comparisons
Dangerous comparisons:
- deltaTimeFromInit < (31536000) (#551)
- deltaTimeFromInit >= (31536000) (#553)
- deltaTimeFromInit >= ((15 * 31536000) / 10) (#555)
- deltaTimeFromInit >= (7 * 31536000) (#557)
- i < times (#561)
Hawk.shouldRebase() (#791-798) uses timestamp for comparisons
Dangerous comparisons:
- _autoRebase && (_totalSupply < MAX_SUPPLY) && msg.sender != pair && ! inSwap && block.timestamp >= (_lastRebasedTime + 900) (#792-797)
Hawk.shouldAddLiquidity() (#800-806) uses timestamp for comparisons
Dangerous comparisons:
- _autoAddLiquidity && ! inSwap && msg.sender != pair && block.timestamp >= (_lastAddLiquidityTime + 172800) (#801-805)
Avoid relying on block.timestamp.
Additional information: link
Hawk.isContract(address) (#952-956) uses assembly
- INLINE ASM (#954)
Do not use evm assembly.
Additional information: link
SafeMath.mod(uint256,uint256) (#134-137) is never used and should be removed
SafeMathInt.abs(int256) (#79-82) is never used and should be removed
SafeMathInt.add(int256,int256) (#73-77) is never used and should be removed
SafeMathInt.div(int256,int256) (#61-65) is never used and should be removed
SafeMathInt.mul(int256,int256) (#53-59) is never used and should be removed
SafeMathInt.sub(int256,int256) (#67-71) is never used and should be removed
Remove unused functions.
Additional information: link
Hawk.totalFee (#470-473) is set pre-construction with a non-constant function or state variable:
- liquidityFee.add(treasuryFee).add(hawkInsuranceFundFee).add(firePitFee)
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.7.4 (#47) allows old versions
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 Hawk.swapBack() (#725-763):
- (success) = address(treasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(treasuryFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#751-756)
- (success,None) = address(hawkInsuranceFundReceiver).call{gas: 30000,value: amountETHToTreasuryAndHIF.mul(hawkInsuranceFundFee).div(treasuryFee.add(hawkInsuranceFundFee))}() (#757-762)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IPancakeSwapPair.DOMAIN_SEPARATOR() (#184) is not in mixedCase
Function IPancakeSwapPair.PERMIT_TYPEHASH() (#185) is not in mixedCase
Function IPancakeSwapPair.MINIMUM_LIQUIDITY() (#202) is not in mixedCase
Function IPancakeSwapRouter.WETH() (#222) is not in mixedCase
Parameter Hawk.setAutoRebase(bool)._flag (#814) is not in mixedCase
Parameter Hawk.setAutoAddLiquidity(bool)._flag (#823) is not in mixedCase
Parameter Hawk.checkFeeExempt(address)._addr (#886) is not in mixedCase
Parameter Hawk.setFeeReceivers(address,address,address,address)._autoLiquidityReceiver (#906) is not in mixedCase
Parameter Hawk.setFeeReceivers(address,address,address,address)._treasuryReceiver (#907) is not in mixedCase
Parameter Hawk.setFeeReceivers(address,address,address,address)._hawkInsuranceFundReceiver (#908) is not in mixedCase
Parameter Hawk.setFeeReceivers(address,address,address,address)._firePit (#909) is not in mixedCase
Parameter Hawk.setWhitelist(address)._addr (#927) is not in mixedCase
Parameter Hawk.setBotBlacklist(address,bool)._botAddress (#931) is not in mixedCase
Parameter Hawk.setBotBlacklist(address,bool)._flag (#931) is not in mixedCase
Parameter Hawk.setPairAddress(address)._pairAddress (#936) is not in mixedCase
Parameter Hawk.setLP(address)._address (#940) is not in mixedCase
Variable Hawk._name (#446) is not in mixedCase
Variable Hawk._symbol (#447) is not in mixedCase
Variable Hawk._decimals (#448) is not in mixedCase
Variable Hawk._isFeeExempt (#451) is not in mixedCase
Variable Hawk.DEAD (#476) is not in mixedCase
Variable Hawk.ZERO (#477) is not in mixedCase
Variable Hawk._autoRebase (#499) is not in mixedCase
Variable Hawk._autoAddLiquidity (#500) is not in mixedCase
Variable Hawk._initRebaseStartTime (#501) is not in mixedCase
Variable Hawk._lastRebasedTime (#502) is not in mixedCase
Variable Hawk._lastAddLiquidityTime (#503) is not in mixedCase
Variable Hawk._totalSupply (#504) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IPancakeSwapRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#227) is too similar to IPancakeSwapRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#228)
Prevent variables from having similar names.
Additional information: link
Hawk.slitherConstructorVariables() (#439-960) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#476)
Hawk.slitherConstructorVariables() (#439-960) uses literals with too many digits:
- ZERO = 0x0000000000000000000000000000000000000000 (#477)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
SafeMathInt.MAX_INT256 (#51) is never used in SafeMathInt (#49-83)
Remove unused state variables.
Additional information: link
Hawk.DEAD (#476) should be constant
Hawk.ZERO (#477) should be constant
Hawk._decimals (#448) should be constant
Hawk._name (#446) should be constant
Hawk._symbol (#447) should be constant
Hawk.feeDenominator (#474) should be constant
Hawk.firePitFee (#469) should be constant
Hawk.hawkInsuranceFundFee (#467) should be constant
Hawk.liquidityFee (#465) should be constant
Hawk.sellFee (#468) should be constant
Hawk.swapEnabled (#484) should be constant
Hawk.treasuryFee (#466) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
owner() should be declared external:
- Ownable.owner() (#382-384)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#395-398)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#400-402)
name() should be declared external:
- ERC20Detailed.name() (#426-428)
symbol() should be declared external:
- ERC20Detailed.symbol() (#430-432)
decimals() should be declared external:
- ERC20Detailed.decimals() (#434-436)
getLiquidityBacking(uint256) should be declared external:
- Hawk.getLiquidityBacking(uint256) (#917-925)
setPairAddress(address) should be declared external:
- Hawk.setPairAddress(address) (#936-938)
Use the external attribute for functions never called from the contract.
Additional information: link
BscScan page for the token does not contain additional info: website, socials, description, etc.
Additional information: link
Unable to find whitepaper link on the website
Unable to find token on CoinGecko
Additional information: link
Unable to find token on CoinMarketCap
Additional information: link
Token is not listed at Mobula.Finance
Additional information: link
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Young tokens have high risks of price dump / death
Telegram account link seems to be invalid
Unable to find Youtube account