Wodo Gaming Token - Audit Report
Audit Summary
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:WodoVestingWallet 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.
- 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 Category | Notes | Result |
---|---|---|
Arbitrary Storage Write | N/A | PASS |
Arbitrary Jump | N/A | PASS |
Centralization of Control | N/A | PASS |
Delegate Call to Untrusted Contract | N/A | PASS |
Dependence on Predictable Variables | N/A | PASS |
Deprecated Opcodes | N/A | PASS |
Ether Thief | N/A | PASS |
Exceptions | N/A | PASS |
External Calls | N/A | PASS |
Flash Loans | N/A | PASS |
Integer Over/Underflow | N/A | PASS |
Logical Issues | N/A | PASS |
Multiple Sends | N/A | PASS |
Oracles | N/A | PASS |
Suicide | N/A | PASS |
State Change External Calls | N/A | PASS |
Unchecked Retval | N/A | PASS |
User Supplied Assertion | N/A | PASS |
Critical Solidity Compiler | N/A | PASS |
Overall Contract Safety | PASS |
WodoGamingToken Contract
($) = 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
($) = 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