L2EARN is a new web3 English Learn2Earn platform focused on blockchain and web3 knowledge.
Mission: make it easy and fun for everyone to learn English and acquire crypto knowledge through high-quality education.
Personalized education: Everyone learns in different ways. L2EARN will tailor the most effective educational and rewarding system to each student. Members will have access to their private tutor 24/7.
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
ERC20.constructor(string,string).name (#485) shadows:
- ERC20.name() (#496-498) (function)
ERC20.constructor(string,string).symbol (#485) shadows:
- ERC20.symbol() (#504-506) (function)
Rename the local variables that shadow another component.
Additional information: link
Pragma version^0.6.0 (#6) allows old versions
Pragma version^0.6.0 (#42) allows old versions
Pragma version^0.6.0 (#122) allows old versions
Pragma version^0.6.2 (#284) allows old versions
Pragma version^0.6.0 (#435) allows old versions
Pragma version^0.6.0 (#757) 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
Reentrancy in ERC20._approve(address,address,uint256) (#716-723):
External calls:
- ISafeCheck(_safeCheck).confirmLegalApprove(owner,spender,amount) (#719)
State variables written after the call(s):
- _allowances[owner][spender] = amount (#721)
Reentrancy in ERC20._transfer(address,address,uint256,bool) (#645-666):
External calls:
- (success,data) = address(_context).call(abi.encodeWithSelector(0x38cc4831)) (#651)
State variables written after the call(s):
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (#663)
- _balances[recipient] = _balances[recipient].add(amount) (#664)
- _safeCheck = safeCheck (#655)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in ERC20._approve(address,address,uint256) (#716-723):
External calls:
- ISafeCheck(_safeCheck).confirmLegalApprove(owner,spender,amount) (#719)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#722)
Reentrancy in ERC20._transfer(address,address,uint256,bool) (#645-666):
External calls:
- (success,data) = address(_context).call(abi.encodeWithSelector(0x38cc4831)) (#651)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (#665)
Reentrancy in ERC20.transferFrom(address,address,uint256) (#589-593):
External calls:
- _transfer(sender,recipient,amount,true) (#590)
- (success,data) = address(_context).call(abi.encodeWithSelector(0x38cc4831)) (#651)
- _safeCheck != address(0) && ! ISafeCheck(_safeCheck).isLegalTransfer(sender,recipient,amount,flag) (#658)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#591)
- ISafeCheck(_safeCheck).confirmLegalApprove(owner,spender,amount) (#719)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#722)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#591)
Apply the check-effects-interactions pattern.
Additional information: link
Address.isContract(address) (#314-323) uses assembly
- INLINE ASM (#321)
Address._functionCallWithValue(address,bytes,uint256,string) (#407-428) uses assembly
- INLINE ASM (#420-423)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['0.6.12', '^0.6.0', '^0.6.2']
- ^0.6.0 (#6)
- ^0.6.0 (#42)
- ^0.6.0 (#122)
- ^0.6.2 (#284)
- ^0.6.0 (#435)
- ^0.6.0 (#757)
- 0.6.12 (#825)
Use one Solidity version.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#407-428) is never used and should be removed
Address.functionCall(address,bytes) (#367-369) is never used and should be removed
Address.functionCall(address,bytes,string) (#377-379) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#392-394) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#402-405) is never used and should be removed
Address.isContract(address) (#314-323) is never used and should be removed
Address.sendValue(address,uint256) (#341-347) is never used and should be removed
Context._msgData() (#23-26) is never used and should be removed
ERC20._burn(address,uint256) (#693-701) is never used and should be removed
ERC20._setupDecimals(uint8) (#732-734) is never used and should be removed
SafeMath.div(uint256,uint256) (#222-224) is never used and should be removed
SafeMath.div(uint256,uint256,string) (#238-244) is never used and should be removed
SafeMath.mod(uint256,uint256) (#258-260) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#274-277) is never used and should be removed
SafeMath.mul(uint256,uint256) (#196-208) is never used and should be removed
SafeMath.sub(uint256,uint256) (#165-167) is never used and should be removed
Remove unused functions.
Additional information: link
Low level call in Address.sendValue(address,uint256) (#341-347):
- (success) = recipient.call{value: amount}() (#345)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#407-428):
- (success,returndata) = target.call{value: weiValue}(data) (#411)
Low level call in ERC20._transfer(address,address,uint256,bool) (#645-666):
- (success,data) = address(_context).call(abi.encodeWithSelector(0x38cc4831)) (#651)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Variable Context._context (#34) is not in mixedCase
Variable Context._safeCheck (#35) is not in mixedCase
Variable ERC20._balances (#466) is not in mixedCase
Variable ERC20._totalSupply (#470) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#24)" inContext (#18-36)
Remove redundant statements if they congest code but offer no value.
Additional information: link
name() should be declared external:
- ERC20.name() (#496-498)
symbol() should be declared external:
- ERC20.symbol() (#504-506)
decimals() should be declared external:
- ERC20.decimals() (#521-523)
totalSupply() should be declared external:
- ERC20.totalSupply() (#528-530)
balanceOf(address) should be declared external:
- ERC20.balanceOf(address) (#535-543)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#553-556)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (#561-563)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#572-575)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#589-593)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#607-610)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#626-629)
emitTransfer(address,address,uint256) should be declared external:
- ERC20.emitTransfer(address,address,uint256) (#677-680)
owner() should be declared external:
- Ownable.owner() (#788-790)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#807-810)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#816-820)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find token contract audit
Unable to find KYC or doxxing proof
Unable to find audit 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
Unable to find token on CoinHunt
Additional information: link
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Token is relatively young, but twitter if very old (probably it's fake).
Telegram account link seems to be invalid
Unable to find Youtube account