Thetan Gem - Smart Contract Audit Report
Summary
Thetan Gem ($THG) is a new BEP20 token that is used to support the team's blockchain based gaming platform.
Notes of the contract:Audit Findings Summary
- 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.
- No external threats were identified.
- Date: September 8th, 2021
- Updated: September 12th, 2021 to reflect the token's mainnet deployment.
Audit Results
Vulnerability Category | Notes | Result |
---|---|---|
Arbitrary Storage Write | N/A | PASS |
Arbitrary Jump | 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 |
Integer Over/Underflow | N/A | PASS |
Multiple Sends | 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 |
($) = 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