inheritance AI - Smart Contract Audit Report

Summary

inheritance AI Audit Report inheritance AI ($iAI) is building a new ERC-20 token.

For this audit, we reviewed the iAI contract at commit dd04aaef1f6518c77ef1ff43c205e8b8c01e6cdd on the team's private GitHub repository.

Notes on the Contract:
  • The total supply of the token is set to 43.76 million $iAI [43,760,000].
  • The contract utilizes a minter role that allows the assigned address to mint any amount of tokens up to the total supply cap of 50 million.
  • No burn functions are present; though the circulating supply can be reduced by sending tokens to the 0x..dead address, if desired.
  • There was no token allocation for our team to analyze as the contract has yet to be deployed to the mainnet.

  • The contract complies with the ERC-20 token standard.
  • The contract utilizes a Pauser role that allows the assigned address to pause all trading at any time.
  • The Default admin can withdraw any ERC-20 tokens from the contract address at any time.
  • As the contract is implemented with Solidity v0.8.11, it is protected from overflows.
  • Some gas optimizations can be achieved through declaring functions external instead of public.
Audit Findings Summary
  • No external threats were identified.
  • As with any presale, please ensure trust in the team prior to investing.
  • Further ensure trust in the team as they have the ability to mint tokens up to the total supply cap of 50 million.
  • Date: December 23rd, 2021
  • Updated: December 28th, 2021 to reflect the latest GitHub commit.

Audit Results

Vulnerability CategoryNotesResult
Arbitrary Storage WriteN/APASS
Arbitrary JumpN/APASS
Centralization of Control
  • The team can mint tokens up to the total supply cap of 50 million.
  • WARNING
    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
    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

    Function Graph

    ERC20 Token Graph


    Inheritance Chart

    Multi-file Token


    Functions Overview

    
     ($) = 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 #
    
     +  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 #
    
     + [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 #
    
     +  iAI (ERC20, Pausable, AccessControl)
        - [Pub]  #
           - modifiers: ERC20
        - [Pub] pause #
           - modifiers: onlyRole
        - [Pub] unpause #
           - modifiers: onlyRole
        - [Pub] mint #
           - modifiers: onlyRole
    	- [Pub] withdrawERC20 #
           - modifiers: onlyRole
        - [Int] _beforeTokenTransfer #
           - modifiers: whenNotPaused