Totem - Smart Contract Audit Report

Summary

Totem Audit Report Totem Finance is a new project which aims to distribute NFTs and reward NFT holders via a transaction tax on the project's ERC20 token.

We audited Totem's token contract at 10732fc143aa7fb9771a4b0730b6834b92523ff3 on GitHub. It is deployed at 0xae95dC56a480ba3B1830cB760B43633D3f87Aa17 on the Ethereum Mainnet.

  • The total supply of the token is 4,316,539, delivered to the team uponn deployment.
  • As of the update date of this report, 60.5% of the tokens have been put up for presale on Unicrypt. 35% of the tokens have been locked by the team for 30 and 90 days. The team currently has control over 4.7% of the token's total supply.
  • There is a 1% fee on all transfers of the token. This fee will be activated once there is at least one NFT holder.
  • The fees collected from this mechanism are automatically redistributed among all NFT holders via a loop.
  • This redistribution loop will increase in cost with each additional NFT holder. As only 100 NFTs can be minted, this may become expensive but will not exceed the block's gas limt.
  • Logic has been implemented to ensure addresses are properly removed from the _totemOwners array in the NFT contract when their balance is 0.
  • The project team is exempt from transfer fees.
  • No ownership-restricted functions are present.
  • Gas can be saved via marking some functions external instead of public; and by marking some variables constant.
  • The tokens are ERC20 compliant and the NFTs are ERC721 compliant.
  • Utilization of SafeMath across all contracts to prevent overflows.


  • Audit Findings Summary:
    • No security issues from outside attackers were identified.
    • As with any presale, ensure trust in the team prior to investing.
    • KYC: No
    • Date: March 29th, 2021
    • Update Date: March 31st, 2021

    External Threat 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
    User Supplied AssertionN/APASS
    Critical Solidity CompilerN/APASS
    Overall Contract Safety PASS

    Inheritence Chart

    Smart Contract Inheritance

    Functions Graph

    Smart Contract Graph

    Functions Overview

    
    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     +  Context 
        - [Int] _msgSender
        - [Int] _msgData
    
     + [Int] IERC20 
        - [Ext] totalSupply
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [Lib] SafeMath 
        - [Int] add
        - [Int] sub
        - [Int] sub
        - [Int] mul
        - [Int] div
        - [Int] div
        - [Int] mod
        - [Int] mod
    
     + [Lib] Address 
        - [Int] isContract
        - [Int] sendValue #
        - [Int] functionCall #
        - [Int] functionCall #
        - [Int] functionCallWithValue #
        - [Int] functionCallWithValue #
        - [Int] functionStaticCall
        - [Int] functionStaticCall
        - [Prv] _verifyCallResult
    
     +  Ownable (Context)
        - [Int]  #
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
    
     + [Int] IERC165 
        - [Ext] supportsInterface
    
     + [Int] IERC721 (IERC165)
        - [Ext] balanceOf
        - [Ext] ownerOf
        - [Ext] safeTransferFrom #
        - [Ext] transferFrom #
        - [Ext] approve #
        - [Ext] getApproved
        - [Ext] setApprovalForAll #
        - [Ext] isApprovedForAll
        - [Ext] safeTransferFrom #
    
     + [Int] IERC721Metadata (IERC721)
        - [Ext] name
        - [Ext] symbol
        - [Ext] tokenURI
    
     + [Int] IERC721Enumerable (IERC721)
        - [Ext] totalSupply
        - [Ext] tokenOfOwnerByIndex
        - [Ext] tokenByIndex
    
     + [Int] IERC721Receiver 
        - [Ext] onERC721Received #
    
     +  ERC165 (IERC165)
        - [Int]  #
        - [Pub] supportsInterface
        - [Int] _registerInterface #
    
     + [Lib] EnumerableSet 
        - [Prv] _add #
        - [Prv] _remove #
        - [Prv] _contains
        - [Prv] _length
        - [Prv] _at
        - [Int] add #
        - [Int] remove #
        - [Int] contains
        - [Int] length
        - [Int] at
        - [Int] add #
        - [Int] remove #
        - [Int] contains
        - [Int] length
        - [Int] at
        - [Int] add #
        - [Int] remove #
        - [Int] contains
        - [Int] length
        - [Int] at
    
     + [Lib] EnumerableMap 
        - [Prv] _set #
        - [Prv] _remove #
        - [Prv] _contains
        - [Prv] _length
        - [Prv] _at
        - [Prv] _get
        - [Prv] _get
        - [Int] set #
        - [Int] remove #
        - [Int] contains
        - [Int] length
        - [Int] at
        - [Int] get
        - [Int] get
    
     + [Lib] Strings 
        - [Int] toString
    
     +  TotemNFT (Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable, Ownable)
        - [Pub]  #
        - [Pub] mint #
        - [Int] _mintWithTokenURI #
        - [Pub] totemOwnersNow
        - [Pub] isTotemOwner
        - [Pub] gettotemOwners
        - [Pub] balanceOf
        - [Pub] ownerOf
        - [Pub] name
        - [Pub] symbol
        - [Pub] tokenURI
        - [Pub] baseURI
        - [Pub] tokenOfOwnerByIndex
        - [Pub] totalSupply
        - [Pub] tokenByIndex
        - [Pub] approve #
        - [Pub] getApproved
        - [Pub] setApprovalForAll #
        - [Pub] isApprovedForAll
        - [Pub] transferFrom #
        - [Pub] safeTransferFrom #
        - [Pub] safeTransferFrom #
        - [Int] _safeTransfer #
        - [Int] _exists
        - [Int] _isApprovedOrOwner
        - [Int] _safeMint #
        - [Int] _safeMint #
        - [Int] _mint #
        - [Int] _burn #
        - [Int] _transfer #
        - [Int] _setTokenURI #
        - [Int] _setBaseURI #
        - [Prv] _checkOnERC721Received #
        - [Prv] _approve #
        - [Int] _beforeTokenTransfer #
    
     +  TotemToken (Context, IERC20, Ownable)
        - [Pub]  #
        - [Pub] name
        - [Pub] symbol
        - [Pub] decimals
        - [Pub] balanceOf
        - [Pub] totalSupply
        - [Pub] transfer #
        - [Pub] allowance
        - [Pub] approve #
        - [Pub] transferFrom #
        - [Pub] increaseAllowance #
        - [Pub] decreaseAllowance #
        - [Pub] accountRewards
        - [Pub] totalFees
        - [Prv] _approve #
        - [Prv] _transfer #
        - [Prv] _developtransfer #
        - [Prv] _transferStandard #
        - [Prv] _distFeeinRef #
        - [Prv] _getValues