Wodo Gaming Token - Audit Report

Audit Summary

Wodo Gaming Token Audit Report Wodo Gaming ($XWGT) is building a new BEP-20 token on the Binance Smart Chain that features a vesting mechanism.

We reviewed the WodoGamingToken contract at 0x62D7C4E3566f7f4033fc8e01b4d8e9BBc01c0760 on the Binance Smart Chain mainnet and the WodoVestingWallet at commit d2505238b1320aa0e9c0d131a9be186c77dfec74 on the team's Github repository.

Audit Findings

Please ensure trust in the team as they have notable control in the ecosystem and will be minted 100% of the total supply upon deployment.
Date: January 25th, 2022.
Updated: January 31st, 2022 to reflect the contract's new deployed mainnet address.

Contracts Overview

WodoGamingToken Contract:
  • The total supply of the token is set to 1 billion $XWGT [1,000,000,000].
  • No mint functions are accessible beyond deployment.
  • The contract utilizes a Burner role that allows the assigned address to burn their own tokens at any time.
  • The assigned Burner can also burn tokens on any user's behalf if an allowance has been granted.
  • At the time of writing this report, 100% of the total supply belongs to the deployer.

  • There are no fees associated with transferring tokens.
  • As the contract is deployed with Solidity v0.8.9, it is protected from overflows/underflows.
  • The contract complies with the BEP-20 token standard.
WodoVestingWallet contract:
  • This contract is intended to be used by the project team to facilitate a token or BNB vesting structure.
  • The tokens or BNB deposited in this contract are all subject to a single vesting schedule, no matter when they were deposited.
  • On deployment, the project team specifies a beneficiary's address, start time, and release date.
  • The owner can elect to extend the start time by any value (in seconds) if vesting has not already started.
  • The owner can start releasing the tokens or BNB once the start time has passed. If the owner releases tokens or BNB before the release date has passed, the beneficiary will receive an amount of tokens or BNB in proportion to the total vesting time.

External Threat Results

Vulnerability CategoryNotesResult
Arbitrary Storage WriteN/APASS
Arbitrary JumpN/APASS
Centralization of ControlN/APASS
Delegate Call to Untrusted ContractN/APASS
Dependence on Predictable VariablesN/APASS
Deprecated OpcodesN/APASS
Ether ThiefN/APASS
ExceptionsN/APASS
External CallsN/APASS
Flash LoansN/APASS
Integer Over/UnderflowN/APASS
Logical IssuesN/APASS
Multiple SendsN/APASS
OraclesN/APASS
SuicideN/APASS
State Change External CallsN/APASS
Unchecked RetvalN/APASS
User Supplied AssertionN/APASS
Critical Solidity CompilerN/APASS
Overall Contract Safety PASS

WodoGamingToken Contract

BEP20 Token Graph

Multi-file Token

												
($) = payable function
 # = non-constant function

 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Int] IERC20Metadata (IERC20)
    - [Ext] name
    - [Ext] symbol
    - [Ext] decimals

 +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 +  ERC20 (Context, IERC20, IERC20Metadata)
    - [Pub]  #
    - [Pub] name
    - [Pub] symbol
    - [Pub] decimals
    - [Pub] totalSupply
    - [Pub] balanceOf
    - [Pub] transfer #
    - [Pub] allowance
    - [Pub] approve #
    - [Pub] transferFrom #
    - [Pub] increaseAllowance #
    - [Pub] decreaseAllowance #
    - [Int] _transfer #
    - [Int] _mint #
    - [Int] _burn #
    - [Int] _approve #
    - [Int] _beforeTokenTransfer #
    - [Int] _afterTokenTransfer #

 +  ERC20Burnable (Context, ERC20)
    - [Pub] burn #
    - [Pub] burnFrom #

 +  Pausable (Context)
    - [Pub]  #
    - [Pub] paused
    - [Int] _pause #
       - modifiers: whenNotPaused
    - [Int] _unpause #
       - modifiers: whenPaused

 + [Int] IAccessControl 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 + [Int] IAccessControlEnumerable (IAccessControl)
    - [Ext] getRoleMember
    - [Ext] getRoleMemberCount

 + [Lib] Strings 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165 
    - [Ext] supportsInterface

 +  ERC165 (IERC165)
    - [Pub] supportsInterface

 +  AccessControl (Context, IAccessControl, ERC165)
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Int] _grantRole #
    - [Int] _revokeRole #

 + [Lib] EnumerableSet 
    - [Prv] _add #
    - [Prv] _remove #
    - [Prv] _contains
    - [Prv] _length
    - [Prv] _at
    - [Prv] _values
    - [Int] add #
    - [Int] remove #
    - [Int] contains
    - [Int] length
    - [Int] at
    - [Int] values
    - [Int] add #
    - [Int] remove #
    - [Int] contains
    - [Int] length
    - [Int] at
    - [Int] values
    - [Int] add #
    - [Int] remove #
    - [Int] contains
    - [Int] length
    - [Int] at
    - [Int] values

 +  AccessControlEnumerable (IAccessControlEnumerable, AccessControl)
    - [Pub] supportsInterface
    - [Pub] getRoleMember
    - [Pub] getRoleMemberCount
    - [Int] _grantRole #
    - [Int] _revokeRole #

 +  WodoGamingToken (ERC20, ERC20Burnable, AccessControlEnumerable)
    - [Pub]  #
       - modifiers: ERC20
    - [Pub] burn #
       - modifiers: onlyRole
    - [Pub] burnFrom #
       - modifiers: onlyRole
	   
	   

WodoVestingWallet Contract

BEP20 Token Graph

Multi-file Token

												
($) = payable function
 # = non-constant function

 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 + [Lib] Math 
    - [Int] max
    - [Int] min
    - [Int] average
    - [Int] ceilDiv

 +  Ownable (Context)
    - [Pub]  #
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner
    - [Int] _transferOwnership #

 +  VestingWallet (Context)
    - [Pub]  #
    - [Ext]  ($)
    - [Pub] beneficiary
    - [Pub] start
    - [Pub] duration
    - [Pub] released
    - [Pub] released
    - [Pub] release #
    - [Pub] release #
    - [Pub] vestedAmount
    - [Pub] vestedAmount
    - [Int] _vestingSchedule

 +  WodoVestingWallet (VestingWallet, Ownable)
    - [Pub]  #
       - modifiers: VestingWallet
    - [Pub] release #
       - modifiers: onlyOwner
    - [Pub] release #
       - modifiers: onlyOwner
    - [Int] _vestingSchedule
    - [Ext] extendLockPeriod #
       - modifiers: onlyOwner
    - [Pub] start
    - [Pub] additionalStartTime