Thetan Gem - Smart Contract Audit Report

Summary

Thetan Gem Audit Report Thetan Gem ($THG) is a new BEP20 token that is used to support the team's blockchain based gaming platform.

The Thetan Gem Token contract is deployed at 0x9fd87aefe02441b123c3c32466cd9db4c578618f on the Binance Smart Chain Mainnet.


Notes of the contract:
  • The total supply of the token is set to 420 million [420,000,000] $THG.
  • No minting functions are present beyond deployment.
  • Any user can burn their own tokens to reduce the total supply.
  • At the time of writing this report, 100% of the total supply is in possession of the owner.

  • The owner has the ability to utilize the BEP20 Snapshot feature which records holder's balances and the total supply at the time a Snapshot was taken.
  • The owner has the ability to pause (and unpause) the contract at any time. When the contract is paused no transfers of the token can occur.
  • The getBurnedAmountTotal() function has the potential to return an inaccurate amount if token holders elect to burn their tokens by sending them to the 0x…Dead address, instead of utilizing the burn function.
  • The contract complies with the BEP20 standard.
  • As the project is deployed with Solidity v0.8.0, it is protected from overflows.
Audit Findings Summary
  • No external threats were identified.
  • Date: September 8th, 2021
  • Updated: September 12th, 2021 to reflect the token's mainnet deployment.

Audit Results

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

ERC20 Token Graph

Multi-file Token


 ($) = payable function
 # = non-constant function
 
 Int = Internal
 Ext = External
 Pub = Public

 + [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 #

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

 + [Lib] Arrays 
    - [Int] findUpperBound

 + [Lib] Counters 
    - [Int] current
    - [Int] increment #
    - [Int] decrement #
    - [Int] reset #

 +  ERC20Snapshot (ERC20)
    - [Int] _snapshot #
    - [Int] _getCurrentSnapshotId
    - [Pub] balanceOfAt
    - [Pub] totalSupplyAt
    - [Int] _beforeTokenTransfer #
    - [Prv] _valueAt
    - [Prv] _updateAccountSnapshot #
    - [Prv] _updateTotalSupplySnapshot #
    - [Prv] _updateSnapshot #
    - [Prv] _lastSnapshotId

 + [Lib] SafeMath 
    - [Int] tryAdd
    - [Int] trySub
    - [Int] tryMul
    - [Int] tryDiv
    - [Int] tryMod
    - [Int] add
    - [Int] sub
    - [Int] mul
    - [Int] div
    - [Int] mod
    - [Int] sub
    - [Int] div
    - [Int] mod

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

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

 +  THGToken (ERC20, ERC20Burnable, ERC20Snapshot, Ownable, Pausable)
    - [Pub]  #
       - modifiers: ERC20
    - [Pub] snapshot #
       - modifiers: onlyOwner
    - [Pub] pause #
       - modifiers: onlyOwner
    - [Pub] unpause #
       - modifiers: onlyOwner
    - [Int] _beforeTokenTransfer #
       - modifiers: whenNotPaused
    - [Ext] getBurnedAmountTotal