La Bytex- Smart Contract Audit Report

Summary

La Bytex Logo La Bytex is a decentralized autonomous organization (DAO) building a series of DApps on the Binance Smart Chain.

We audited La Bytex's contracts at commit 94d23b97a2ad5e69b3332a6abfc73431314a9e27 and later at commit a6549b4b50eb6c2d65d12a2184e23521c7a67730 on GitHub.

Notes on the Token Contracts:
  • Besides the name, symbol, decimals, and total supply; the two token's code is the same.
  • The total supply of the Bytex token (BYX) is 20,000,000 and the BytexCasino token (BYT) is also 100,000,000
  • No ownership-restricted functions are present.
  • Anyone can burn tokens to reduce the total/circulating supply.`
  • Utilization of SafeMath to prevent overflows.


  • Notes on the Staking Contract:
  • Three pools currently exist, though the codebase for them is the same: - WBNB, BYX/BNB, and BYC/BNB.
  • Users can deposit the above-referenced tokens in order to earn rewards in BYX token.
  • There is a fee charged on user's deposits when they withdraw from the pool. The team can update this fee at any time, up to a maximum of 5%.
  • Different 'levels' for rewards exist, with each level possibly providing a different reward rate and expiring after an amount of time set by the team
  • Upon perfomring a withdraw, a user's rewards will be added to their balance and withdrawn.
  • If a user wishes to increase their stake, when staking the second time accrued rewards will be added to their balance.
  • The team has worked with us to resolve some minor logic issues and implement gas optimizations.


  • Notes on the Roulette Contract:
  • This contract is a game in which users can can place a wager and if their number is selected, they will the pool up to the maximum payout.
  • Users can wager between 0.01 and 1 BNB on each game round and 20-2,000 BYX tokens. This can be updated by the owner.
  • The maximum payout a user will receive is 10 BNB and 20,000 BYX tokens. This can also be updated by the owner.
  • Users will also receive rewards in BYC token as well.

  • The contract attempts to achieve some level of randomness through the getPayout() function, but as all the information used in the calculation is stored on chain or provided by the team, the team as well as miners & bots in the memory pool may be able to predict the results and may take action accordingly to secure profits.
  • The "Croupier", or person controlling the table, can provide data to select and confirm the winner of the lottery. The croupier is set by the team.
  • The owner can transfer any amount BNB and tokens not includeed in user's stakes (profits only) out of the contract at any time.
  • The team has worked with us to resolve some minor logic issues and implement gas optimizations.


  • Audit Findings Summary:
  • Concerns exist surrounding the randomness used to select winners of the game.
  • As with any presale, ensure trust in the team prior to investing.
  • Further, ensure trust in the project team as they have notable control in the ecosystem.
  • Date: March 16th, 2021.
  • Update Date: March 24th, 2021 - Incorporation of recommendations..
  • Vulnerability CategoryNotesResult
    Arbitrary Storage WriteN/APASS
    Arbitrary JumpN/APASS
    Delegate Call to Untrusted ContractN/APASS
    Dependence on Predictable VariablesThe randomOracle relies on predictable environment variables. This is not best practice,
    but the probability of miners maliciously changing these variables is extremley low.
    Warning
    Deprecated OpcodesN/APASS
    Ether/Token ThiefN/APASS
    ExceptionsN/APASS
    External CallsN/APASS
    Integer Over/UnderflowN/APASS
    Multiple SendsN/APASS
    OracleThe project uses a pseudo random contract to determine winners of the game as opposed to verifiably random input.
    Chainlink's VRF is the emerging industry standard, but the team's contract will provide randomness.
    Warning
    SuicideN/APASS
    State Change External CallsN/APASS
    Unchecked RetvalN/APASS
    User Supplied AssertionN/APASS
    Critical Solidity CompilerN/APASS
    Overall Contract Safety ----->PASS

    Function Graph

    Smart Contract Graph

    Inheritence Chart

    Smart Contract Inheritance

    Functions Overview

    
    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     +  Context 
        - [Int]  #
        - [Int] _msgSender
        - [Int] _msgData
    
     + [Lib] SafeMath 
        - [Int] add
        - [Int] sub
        - [Int] sub
        - [Int] mul
        - [Int] div
        - [Int] div
        - [Int] mod
        - [Int] mod
    
     +  Ownable (Context)
        - [Int]  #
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
        - [Int] _transferOwnership #
    
     +  BEP20Token (Context, IBEP20, Ownable)
        - [Pub]  #
        - [Ext] getOwner
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] totalSupply
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
        - [Pub] increaseAllowance #
        - [Pub] decreaseAllowance #
        - [Pub] mint #
           - modifiers: onlyOwner
        - [Int] _transfer #
        - [Int] _mint #
        - [Int] _burn #
        - [Int] _approve #
        - [Int] _burnFrom #
    
    							

    Source Code



    Click here to download the source code as a .sol file.


    Function Graph

    Smart Contract Graph

    Inheritence Chart

    Smart Contract Inheritance

    Functions Overview

    
    
     + [Lib] SafeMath 
        - [Int] add
        - [Int] sub
        - [Int] sub
        - [Int] mul
        - [Int] div
        - [Int] div
        - [Int] mod
        - [Int] mod
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     +  Context 
        - [Int]  #
        - [Int] _msgSender
        - [Int] _msgData
    
     +  Ownable (Context)
        - [Int]  #
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
        - [Int] _transferOwnership #
    
     +  StakeWrapper (Ownable)
        - [Pub]  #
        - [Pub] stake #
        - [Int] stakeHelper #
        - [Int] register #
        - [Pub] unstake #
        - [Pub] unstake #
        - [Pub] claimReward #
        - [Int] updateAlloted #
        - [Int] claimRewardHelper #
        - [Pub] claimableReward
        - [Pub] claimableReward
        - [Pub] withdrawFees #
           - modifiers: onlyOwner
        - [Pub] withdrawFees #
           - modifiers: onlyOwner
        - [Pub] user
        - [Pub] stats
        - [Int] safeTokenTransfer #
    
     +  BytexBYCBNBPool (StakeWrapper)
        - [Pub]  #
           - modifiers: StakeWrapper
    
    							

    Source Code



    Click here to download the source code as a .sol file.


    Function Graph

    Smart Contract Graph

    Inheritence Chart

    Smart Contract Inheritance

    Functions Overview

    
    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     +  Context 
        - [Int]  #
        - [Int] _msgSender
        - [Int] _msgData
    
     +  Ownable (Context)
        - [Int]  #
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
        - [Int] _transferOwnership #
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [Lib] RoulettePayout 
        - [Int] getPayout
    
     +  BytexRoulette (Ownable)
        - [Pub]  #
        - [Pub] addCroupier #
           - modifiers: onlyOwner
        - [Pub] removeCroupier #
           - modifiers: onlyOwner
        - [Pub] updateBetConf #
           - modifiers: onlyOwner
        - [Pub] updateBYCRate #
           - modifiers: onlyOwner
        - [Ext]  ($)
        - [Pub] playGame ($)
        - [Pub] playGameWithBYX #
        - [Int] _playGame #
        - [Pub] confirm #
           - modifiers: onlyCroupier
        - [Pub] choiceHash
        - [Pub] stats
        - [Pub] collectProfit #
           - modifiers: onlyOwner
        - [Pub] emergencyWithdrawal #
           - modifiers: onlyOwner
        - [Int] safeBNBTransfer #
        - [Int] safeRewardTokenTransfer #
        - [Int] safeTokenTransfer #
        - [Int] add
    							

    Source Code



    Click here to download the source code as a .sol file.