Green Life Energy Token Logo

GNL [Green Life Energy] Token

About GNL

Listings

Token 7 months
CoinMarketCap 46 days
white paper

Green Life Energy Global (GNL) is a
community token that allows users to make
payments based on renewable energy and
recycling products and services, share
assets, and send money between friends
and family.

A crypto-based token on renewable energy and recycling, GNL is about bringing the blockchain a bit further not just only creating the next big crypto asset, but also changing the whole financial sector on energy and recycling payments. Imagine a world where everything is powered by renewable energy? This is what we are building.

Use Cases: Crypto Miners and Household’s renewable energy power supply (Bill payments in GNL), GNL Wallet, Payments of Renewable Energy and Recycling Products and Services.

Social

Laser Scorebeta Last Audit: 14 May 2022

report
Token seems to be (relatively) fine. It still become a scam, but probability is moderate.

GreenLifeEnergy.contractSwap() (#447-485) sends eth to arbitrary user
Dangerous calls:
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
Ensure that an arbitrary user cannot withdraw unauthorized funds.

Additional information: link

Reentrancy in GreenLifeEnergy._transfer(address,address,uint256) (#395-445):
External calls:
- contractSwap() (#438)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#457-464)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
External calls sending eth:
- contractSwap() (#438)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
State variables written after the call(s):
- _finalizeTransfer(from,to,amount,takeFee,buy,sell,other) (#444)
- _liquidityHolders[from] = true (#496)
- _finalizeTransfer(from,to,amount,takeFee,buy,sell,other) (#444)
- _tOwned[from] -= amount (#540)
- _tOwned[to] += amountReceived (#542)
- _tOwned[destination] += tokenAmount (#563)
- _tOwned[address(this)] += feeAmount (#566)
- _finalizeTransfer(from,to,amount,takeFee,buy,sell,other) (#444)
- contractSwapEnabled = true (#499)
- lastSwap = block.timestamp (#439)
Reentrancy in GreenLifeEnergy.transferOwner(address) (#225-238):
External calls:
- _transfer(_owner,newOwner,balanceOf(_owner)) (#232)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#457-464)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
External calls sending eth:
- _transfer(_owner,newOwner,balanceOf(_owner)) (#232)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
State variables written after the call(s):
- _owner = newOwner (#235)
Apply the check-effects-interactions pattern.

Additional information: link


Contract ownership is not renounced (belongs to a wallet)


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.

GreenLifeEnergy.contractSwap() (#447-485) ignores return value by dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
Ensure that all the return values of the function calls are used.

Additional information: link

GreenLifeEnergy.setLpPair(address,bool) (#304-314) uses timestamp for comparisons
Dangerous comparisons:
- timeSinceLastPair != 0 (#308)
- require(bool,string)(block.timestamp - timeSinceLastPair > 259200,3 Day cooldown.!) (#309)
GreenLifeEnergy._transfer(address,address,uint256) (#395-445) uses timestamp for comparisons
Dangerous comparisons:
- lastSwap + contractSwapTimer < block.timestamp (#434)
Avoid relying on block.timestamp.

Additional information: link

GreenLifeEnergy.setLpPair(address,bool) (#304-314) compares to a boolean constant:
-enabled == false (#305)
Remove the equality to the boolean constant.

Additional information: link

Pragma version>=0.6.0<0.9.0 (#6) is too complex
solc-0.8.12 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

renounceOwnership() should be declared external:
- GreenLifeEnergy.renounceOwnership() (#240-244)
transfer(address,uint256) should be declared external:
- GreenLifeEnergy.transfer(address,uint256) (#260-263)
approve(address,uint256) should be declared external:
- GreenLifeEnergy.approve(address,uint256) (#265-268)
approveContractContingency() should be declared external:
- GreenLifeEnergy.approveContractContingency() (#278-281)
setNewRouter(address) should be declared external:
- GreenLifeEnergy.setNewRouter(address) (#291-302)
isExcludedFromLimits(address) should be declared external:
- GreenLifeEnergy.isExcludedFromLimits(address) (#348-350)
isExcludedFromFees(address) should be declared external:
- GreenLifeEnergy.isExcludedFromFees(address) (#352-354)
getMaxTX() should be declared external:
- GreenLifeEnergy.getMaxTX() (#360-362)
getMaxWallet() should be declared external:
- GreenLifeEnergy.getMaxWallet() (#364-366)
enableTrading() should be declared external:
- GreenLifeEnergy.enableTrading() (#504-511)
transferContractToken(address,address,uint256) should be declared external:
- GreenLifeEnergy.transferContractToken(address,address,uint256) (#518-520)
Use the external attribute for functions never called from the contract.

Additional information: link

GreenLifeEnergy.takeTaxes(address,bool,bool,uint256) (#548-570) performs a multiplication on the result of a division:
-feeAmount = amount * currentFee / masterTaxDivisor (#558)
-tokenAmount = (feeAmount * _ratios.tokens) / (_ratios.total) (#559)
Consider ordering multiplication before division.

Additional information: link

GreenLifeEnergy.setMaxTxPercent(uint256,uint256) (#334-337) should emit an event for:
- _maxTxAmount = (_tTotal * percent) / divisor (#336)
GreenLifeEnergy.setMaxWalletSize(uint256,uint256) (#339-342) should emit an event for:
- _maxWalletSize = (_tTotal * percent) / divisor (#341)
GreenLifeEnergy.setSwapSettings(uint256,uint256,uint256,uint256,uint256) (#368-372) should emit an event for:
- swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor (#369)
- swapAmount = (_tTotal * amountPercent) / amountDivisor (#370)
- contractSwapTimer = time (#371)
Emit an event for critical parameter changes.

Additional information: link

Reentrancy in GreenLifeEnergy._transfer(address,address,uint256) (#395-445):
External calls:
- contractSwap() (#438)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#457-464)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
External calls sending eth:
- contractSwap() (#438)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
State variables written after the call(s):
- _finalizeTransfer(from,to,amount,takeFee,buy,sell,other) (#444)
- _hasLiqBeenAdded = true (#497)
Reentrancy in GreenLifeEnergy.constructor() (#185-216):
External calls:
- lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(),address(this)) (#206)
State variables written after the call(s):
- _approve(_owner,address(dexRouter),type()(uint256).max) (#209)
- _allowances[sender][spender] = amount (#274)
- _approve(address(this),address(dexRouter),type()(uint256).max) (#210)
- _allowances[sender][spender] = amount (#274)
- _isExcludedFromFees[_owner] = true (#212)
- _isExcludedFromFees[address(this)] = true (#213)
- _isExcludedFromFees[DEAD] = true (#214)
- _liquidityHolders[_owner] = true (#215)
- lpPairs[lpPair] = true (#207)
Reentrancy in GreenLifeEnergy.setNewRouter(address) (#291-302):
External calls:
- lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this),_newRouter.WETH()) (#295)
State variables written after the call(s):
- _approve(address(this),address(dexRouter),type()(uint256).max) (#301)
- _allowances[sender][spender] = amount (#274)
- dexRouter = _newRouter (#300)
Apply the check-effects-interactions pattern.

Additional information: link

Reentrancy in GreenLifeEnergy._transfer(address,address,uint256) (#395-445):
External calls:
- contractSwap() (#438)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#457-464)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
External calls sending eth:
- contractSwap() (#438)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
Event emitted after the call(s):
- ContractSwapEnabledUpdated(true) (#500)
- _finalizeTransfer(from,to,amount,takeFee,buy,sell,other) (#444)
- Transfer(from,to,amountReceived) (#544)
- _finalizeTransfer(from,to,amount,takeFee,buy,sell,other) (#444)
- Transfer(from,destination,tokenAmount) (#564)
- _finalizeTransfer(from,to,amount,takeFee,buy,sell,other) (#444)
- Transfer(from,address(this),feeAmount) (#567)
- _finalizeTransfer(from,to,amount,takeFee,buy,sell,other) (#444)
Reentrancy in GreenLifeEnergy.constructor() (#185-216):
External calls:
- lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(),address(this)) (#206)
Event emitted after the call(s):
- Approval(sender,spender,amount) (#275)
- _approve(address(this),address(dexRouter),type()(uint256).max) (#210)
- Approval(sender,spender,amount) (#275)
- _approve(_owner,address(dexRouter),type()(uint256).max) (#209)
Reentrancy in GreenLifeEnergy.contractSwap() (#447-485):
External calls:
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#457-464)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
External calls sending eth:
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
Event emitted after the call(s):
- AutoLiquify(BNBToLP,amountToLiquify) (#483)
Reentrancy in GreenLifeEnergy.setNewRouter(address) (#291-302):
External calls:
- lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this),_newRouter.WETH()) (#295)
Event emitted after the call(s):
- Approval(sender,spender,amount) (#275)
- _approve(address(this),address(dexRouter),type()(uint256).max) (#301)
Reentrancy in GreenLifeEnergy.transferOwner(address) (#225-238):
External calls:
- _transfer(_owner,newOwner,balanceOf(_owner)) (#232)
- dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#457-464)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
External calls sending eth:
- _transfer(_owner,newOwner,balanceOf(_owner)) (#232)
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
- dexRouter.addLiquidityETH{value: BNBToLP}(address(this),amountToLiquify,0,0,address(this),block.timestamp) (#475-482)
Event emitted after the call(s):
- OwnershipTransferred(_owner,newOwner) (#236)
Apply the check-effects-interactions pattern.

Additional information: link

GreenLifeEnergy._checkLiquidityAdd(address,address) (#493-502) has costly operations inside a loop:
- _hasLiqBeenAdded = true (#497)
GreenLifeEnergy._checkLiquidityAdd(address,address) (#493-502) has costly operations inside a loop:
- contractSwapEnabled = true (#499)
Use a local variable to hold the loop computation result.

Additional information: link

Low level call in GreenLifeEnergy.contractSwap() (#447-485):
- (MarketingSuccess) = address(_taxWallets.swap).call{gas: 30000,value: amountBNBMarketing}() (#471)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence

Additional information: link

Function IRouter01.WETH() (#37) is not in mixedCase
Parameter GreenLifeEnergy.transferContractToken(address,address,uint256)._token (#518) is not in mixedCase
Parameter GreenLifeEnergy.transferContractToken(address,address,uint256)._to (#518) is not in mixedCase
Parameter GreenLifeEnergy.transferContractToken(address,address,uint256)._quant (#518) is not in mixedCase
Constant GreenLifeEnergy.startingSupply (#103) is not in UPPER_CASE_WITH_UNDERSCORES
Constant GreenLifeEnergy._name (#105) is not in UPPER_CASE_WITH_UNDERSCORES
Constant GreenLifeEnergy._symbol (#106) is not in UPPER_CASE_WITH_UNDERSCORES
Constant GreenLifeEnergy._decimals (#107) is not in UPPER_CASE_WITH_UNDERSCORES
Constant GreenLifeEnergy._tTotal (#109) is not in UPPER_CASE_WITH_UNDERSCORES
Variable GreenLifeEnergy._taxRates (#124-128) is not in mixedCase
Variable GreenLifeEnergy._ratios (#130-135) is not in mixedCase
Constant GreenLifeEnergy.maxBuyTaxes (#137) is not in UPPER_CASE_WITH_UNDERSCORES
Constant GreenLifeEnergy.maxSellTaxes (#138) is not in UPPER_CASE_WITH_UNDERSCORES
Constant GreenLifeEnergy.maxTransferTaxes (#139) is not in UPPER_CASE_WITH_UNDERSCORES
Constant GreenLifeEnergy.masterTaxDivisor (#140) is not in UPPER_CASE_WITH_UNDERSCORES
Variable GreenLifeEnergy._taxWallets (#151-154) is not in mixedCase
Variable GreenLifeEnergy._hasLiqBeenAdded (#167) is not in mixedCase
Follow the Solidity naming convention.

Additional information: link

Variable IRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#49) is too similar to IRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#50)
Prevent variables from having similar names.

Additional information: link

GreenLifeEnergy.slitherConstructorConstantVariables() (#91-572) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#144)
Use: Ether suffix, Time suffix, or The scientific notation

Additional information: link

Holders:

Contract has 4% buy tax and 4% sell tax.
Taxes are low but contract ownership is not renounced. Token has a high risk of becoming a honeypot.


Token is deployed only at one blockchain


Token has only one trading pair


Telegram account has relatively few subscribers


BscScan page for the token does not contain additional info: website, socials, description, etc.

Additional information: link


Unable to find audit link on the website


Unable to find whitepaper link on the website


Token is not listed at Mobula.Finance

Additional information: link


Unable to find token on CoinHunt

Additional information: link


Unable to find code repository for the project


Young tokens have high risks of scam / price dump / death


Young tokens have high risks of scam / price dump / death


Young tokens have high risks of scam / price dump / death


Young tokens have high risks of price dump / death


Young tokens have high risks of price dump / death


Token has relatively low CoinGecko rank

Price for GNL

News for GNL