Round is the world’s first combined Move2Earn and Ride2Earn web3 Lifestyle App that integrates Social-Fi and Game-Fi elements.
Our vision is to push our community toward a healthier lifestyle.
✅ SAFU ✅AUDIT ✅ KYC ✅0% Buy/sell Tax ✅ A lot of AMAs and huge marketing ✅ Partnership with DefiApetalk ✅ Partnership with CryptoCat ✅ Chinese and Asian Marketing ✅ CEX listing confirmed (Name will be announced soon) ✅ ROUND mobile app will be available before launch
Round.addLiquidity(uint256,uint256) (#666-679) sends eth to arbitrary user
Dangerous calls:
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in Round._transfer(address,address,uint256) (#503-592):
External calls:
- Liquify(feeswap,currentTaxes) (#580)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
- (success) = recipient.call{value: amount}() (#313)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#657-663)
- address(marketingWallet).sendValue(marketingAmt) (#627)
- address(opsWallet).sendValue(opsAmt) (#632)
- address(devWallet).sendValue(devAmt) (#637)
- address(treasuryWallet).sendValue(treasuryAmt) (#642)
External calls sending eth:
- Liquify(feeswap,currentTaxes) (#580)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
- (success) = recipient.call{value: amount}() (#313)
State variables written after the call(s):
- super._transfer(sender,recipient,amount - fee) (#583)
- _balances[sender] = senderBalance - amount (#266)
- _balances[recipient] += amount (#267)
- super._transfer(sender,address(this),feeAmount) (#588)
- _balances[sender] = senderBalance - amount (#266)
- _balances[recipient] += amount (#267)
Apply the check-effects-interactions pattern.
Additional information: link
Too many vulnerabilities (Unchecked transfer, Reentrancy vulnerability, etc.). High risk of a scam. DYOR & manual audit are advised.
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Round.rescueBSC20(address,uint256) (#781-784) ignores return value by IBEP20(tokenAdd).transfer(owner(),amount) (#783)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Round._transfer(address,address,uint256).fee (#541) is written in both
fee = 0 (#550)
fee = (amount * feesum) / 100 (#576)
Fix or remove the writes.
Additional information: link
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)
Round.Liquify(uint256,Round.Taxes) (#594-646) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - swapTaxes.liquidity) (#617)
-ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity (#618)
Round.Liquify(uint256,Round.Taxes) (#594-646) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - swapTaxes.liquidity) (#617)
-marketingAmt = unitBalance * 2 * swapTaxes.marketing (#625)
Round.Liquify(uint256,Round.Taxes) (#594-646) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - swapTaxes.liquidity) (#617)
-opsAmt = unitBalance * 2 * swapTaxes.ops (#630)
Round.Liquify(uint256,Round.Taxes) (#594-646) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - swapTaxes.liquidity) (#617)
-devAmt = unitBalance * 2 * swapTaxes.dev (#635)
Round.Liquify(uint256,Round.Taxes) (#594-646) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - swapTaxes.liquidity) (#617)
-treasuryAmt = unitBalance * 2 * swapTaxes.treasury (#640)
Consider ordering multiplication before division.
Additional information: link
Round._transfer(address,address,uint256).currentTaxes (#542) is a local variable never initialized
Round._transfer(address,address,uint256).feesum (#540) is a local variable never initialized
Round._transfer(address,address,uint256).feeswap (#539) 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
Round.addLiquidity(uint256,uint256) (#666-679) ignores return value by router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
Ensure that all the return values of the function calls are used.
Additional information: link
Round.updateLiquidityTreshhold(uint256) (#686-690) should emit an event for:
- tokenLiquidityThreshold = new_amount * 10 ** decimals() (#689)
Round.updatedeadline(uint256) (#726-730) should emit an event for:
- deadline = _deadline (#729)
Round.updateCooldown(bool,uint256) (#752-756) should emit an event for:
- coolDownTime = time * 1 (#753)
Round.updateMaxTxLimit(uint256,uint256,uint256) (#768-775) should emit an event for:
- maxBuyLimit = maxBuy * 10 ** decimals() (#772)
- maxSellLimit = maxSell * 10 ** decimals() (#773)
- maxWalletLimit = maxWallet * 10 ** decimals() (#774)
Emit an event for critical parameter changes.
Additional information: link
Round.updateRouterAndPair(address,address).newPair (#714) lacks a zero-check on :
- pair = newPair (#716)
Check that the address is not zero.
Additional information: link
Modifier Round.lockTheSwap() (#429-435) does not always execute _; or revert
All the paths in a modifier must execute _ or revert.
Additional information: link
Reentrancy in Round.Liquify(uint256,Round.Taxes) (#594-646):
External calls:
- swapTokensForETH(toSwap) (#614)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#657-663)
- addLiquidity(tokensToAddLiquidityWith,ethToAddLiquidityWith) (#622)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
External calls sending eth:
- addLiquidity(tokensToAddLiquidityWith,ethToAddLiquidityWith) (#622)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
State variables written after the call(s):
- addLiquidity(tokensToAddLiquidityWith,ethToAddLiquidityWith) (#622)
- _allowances[owner][spender] = amount (#304)
Reentrancy in Round.constructor() (#437-456):
External calls:
- _pair = IFactory(_router.factory()).createPair(address(this),_router.WETH()) (#443)
State variables written after the call(s):
- exemptFee[address(this)] = true (#447)
- exemptFee[marketingWallet] = true (#448)
- exemptFee[opsWallet] = true (#449)
- exemptFee[devWallet] = true (#450)
- exemptFee[treasuryWallet] = true (#451)
- exemptFee[deadWallet] = true (#452)
- exemptFee[0xD152f549545093347A162Dce210e7293f1452150] = true (#453)
- exemptFee[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true (#454)
- pair = _pair (#446)
- router = _router (#445)
Reentrancy in Round.transferFrom(address,address,uint256) (#463-475):
External calls:
- _transfer(sender,recipient,amount) (#468)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
- (success) = recipient.call{value: amount}() (#313)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#657-663)
- address(marketingWallet).sendValue(marketingAmt) (#627)
- address(opsWallet).sendValue(opsAmt) (#632)
- address(devWallet).sendValue(devAmt) (#637)
- address(treasuryWallet).sendValue(treasuryAmt) (#642)
External calls sending eth:
- _transfer(sender,recipient,amount) (#468)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
- (success) = recipient.call{value: amount}() (#313)
State variables written after the call(s):
- _approve(sender,_msgSender(),currentAllowance - amount) (#472)
- _allowances[owner][spender] = amount (#304)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in Round.Liquify(uint256,Round.Taxes) (#594-646):
External calls:
- swapTokensForETH(toSwap) (#614)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#657-663)
- addLiquidity(tokensToAddLiquidityWith,ethToAddLiquidityWith) (#622)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
External calls sending eth:
- addLiquidity(tokensToAddLiquidityWith,ethToAddLiquidityWith) (#622)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#305)
- addLiquidity(tokensToAddLiquidityWith,ethToAddLiquidityWith) (#622)
Reentrancy in Round._transfer(address,address,uint256) (#503-592):
External calls:
- Liquify(feeswap,currentTaxes) (#580)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
- (success) = recipient.call{value: amount}() (#313)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#657-663)
- address(marketingWallet).sendValue(marketingAmt) (#627)
- address(opsWallet).sendValue(opsAmt) (#632)
- address(devWallet).sendValue(devAmt) (#637)
- address(treasuryWallet).sendValue(treasuryAmt) (#642)
External calls sending eth:
- Liquify(feeswap,currentTaxes) (#580)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
- (success) = recipient.call{value: amount}() (#313)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (#269)
- super._transfer(sender,address(this),feeAmount) (#588)
- Transfer(sender,recipient,amount) (#269)
- super._transfer(sender,recipient,amount - fee) (#583)
Reentrancy in Round.transferFrom(address,address,uint256) (#463-475):
External calls:
- _transfer(sender,recipient,amount) (#468)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
- (success) = recipient.call{value: amount}() (#313)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#657-663)
- address(marketingWallet).sendValue(marketingAmt) (#627)
- address(opsWallet).sendValue(opsAmt) (#632)
- address(devWallet).sendValue(devAmt) (#637)
- address(treasuryWallet).sendValue(treasuryAmt) (#642)
External calls sending eth:
- _transfer(sender,recipient,amount) (#468)
- router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadWallet,block.timestamp) (#671-678)
- (success) = recipient.call{value: amount}() (#313)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#305)
- _approve(sender,_msgSender(),currentAllowance - amount) (#472)
Apply the check-effects-interactions pattern.
Additional information: link
Round._transfer(address,address,uint256) (#503-592) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(timePassed >= coolDownTime,Cooldown enabled) (#534)
Avoid relying on block.timestamp.
Additional information: link
Context._msgData() (#10-13) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.8 (#3) is known to contain severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
solc-0.8.8 is known to contain severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
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 Address.sendValue(address,uint256) (#310-315):
- (success) = recipient.call{value: amount}() (#313)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Variable BEP20._balances (#56) is not in mixedCase
Variable BEP20._allowances (#58) is not in mixedCase
Function IRouter.WETH() (#359) is not in mixedCase
Function Round.Liquify(uint256,Round.Taxes) (#594-646) is not in mixedCase
Parameter Round.updateLiquidityTreshhold(uint256).new_amount (#686) is not in mixedCase
Function Round.SetBuyTaxes(uint256,uint256,uint256,uint256,uint256) (#692-701) is not in mixedCase
Parameter Round.SetBuyTaxes(uint256,uint256,uint256,uint256,uint256)._marketing (#693) is not in mixedCase
Parameter Round.SetBuyTaxes(uint256,uint256,uint256,uint256,uint256)._liquidity (#694) is not in mixedCase
Parameter Round.SetBuyTaxes(uint256,uint256,uint256,uint256,uint256)._ops (#695) is not in mixedCase
Parameter Round.SetBuyTaxes(uint256,uint256,uint256,uint256,uint256)._dev (#696) is not in mixedCase
Parameter Round.SetBuyTaxes(uint256,uint256,uint256,uint256,uint256)._treasury (#697) is not in mixedCase
Function Round.SetSellTaxes(uint256,uint256,uint256,uint256,uint256) (#703-712) is not in mixedCase
Parameter Round.SetSellTaxes(uint256,uint256,uint256,uint256,uint256)._marketing (#704) is not in mixedCase
Parameter Round.SetSellTaxes(uint256,uint256,uint256,uint256,uint256)._liquidity (#705) is not in mixedCase
Parameter Round.SetSellTaxes(uint256,uint256,uint256,uint256,uint256)._ops (#706) is not in mixedCase
Parameter Round.SetSellTaxes(uint256,uint256,uint256,uint256,uint256)._dev (#707) is not in mixedCase
Parameter Round.SetSellTaxes(uint256,uint256,uint256,uint256,uint256)._treasury (#708) is not in mixedCase
Function Round.EnableTrading() (#719-724) is not in mixedCase
Parameter Round.updatedeadline(uint256)._deadline (#726) is not in mixedCase
Parameter Round.updateExemptFee(address,bool)._address (#758) is not in mixedCase
Variable Round.genesis_block (#401) is not in mixedCase
Constant Round.deadWallet (#409) is not in UPPER_CASE_WITH_UNDERSCORES
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#11)" inContext (#5-14)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Round.slitherConstructorConstantVariables() (#386-789) uses literals with too many digits:
- deadWallet = 0x000000000000000000000000000000000000dEaD (#409)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Round.launchtax (#403) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
name() should be declared external:
- BEP20.name() (#82-84)
symbol() should be declared external:
- BEP20.symbol() (#90-92)
totalSupply() should be declared external:
- BEP20.totalSupply() (#114-116)
transfer(address,uint256) should be declared external:
- BEP20.transfer(address,uint256) (#133-141)
- Round.transfer(address,uint256) (#498-501)
allowance(address,address) should be declared external:
- BEP20.allowance(address,address) (#146-154)
approve(address,uint256) should be declared external:
- BEP20.approve(address,uint256) (#163-166)
- Round.approve(address,uint256) (#458-461)
transferFrom(address,address,uint256) should be declared external:
- BEP20.transferFrom(address,address,uint256) (#181-193)
- Round.transferFrom(address,address,uint256) (#463-475)
increaseAllowance(address,uint256) should be declared external:
- BEP20.increaseAllowance(address,uint256) (#207-214)
- Round.increaseAllowance(address,uint256) (#477-484)
decreaseAllowance(address,uint256) should be declared external:
- BEP20.decreaseAllowance(address,uint256) (#230-240)
- Round.decreaseAllowance(address,uint256) (#486-496)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#336-338)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#340-343)
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 verify that token and website are owned by the same team (no listings + unable to find contract on website)
BscScan page for the token does not contain additional info: website, socials, description, etc.
Additional information: link
Unable to verify token contract address on the website
Unable to find audit link on the website
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
Unable to find code repository for the project
Unable to find token on CoinGecko
Additional information: link
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
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Youtube account
Unable to find Discord account