FolioWatch Token - Smart Contract Audit Report

Summary

FolioWatch Token Audit Report FolioWatch intends to build a smart Defi Dashboard with LP management on the Binance Smartchain.

For this audit we reviewed the project's token contract at 0x5CdCB6C1A30F59D59393D1629172634056E0461C on the Binance Smart Chain mainnet.

Notes of the Token Contract:
  • The total supply of the token is currently 167 million tokens.
  • The token can be minted at any time by the owner; the owner of the contrat is JulSwap for the purpose of minting purchased tokens.
  • Any user may burn their own tokens.
  • The top two addresses control 40% of the token's supply.
  • 10.8% of the token's supply is in the liquidity pool.
  • 99% of liquidity has been burned.
  • 10% of the token's supply is locked and will vest to the team.
  • The next largest holder has 9%.
  • The owner (JulSwap) can pause all transfers of the token at any time.
  • The owner of the contract can grant the roles discussed above to any address.
  • The contract utilizes SafeMath to prevent overflow issues.
Audit Findings Summary
  • No issues from external attackers were identified.
  • Ensure trust in the Julswap team as they have substantial control in the ecosystem.
  • Be aware of the wallets which hold a large number of tokens.
  • Date: May 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
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

ERC20 Token Graph

Multi-file Token


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

 +  Initializable 
    - [Prv] isConstructor

 +  Context (Initializable)
    - [Int]  #
    - [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

 +  ERC20 (Initializable, Context, IERC20)
    - [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] _burnFrom #

 +  ERC20Burnable (Initializable, Context, ERC20)
    - [Pub] burn #
    - [Pub] burnFrom #

 +  ERC20Detailed (Initializable, IERC20)
    - [Pub] initialize #
       - modifiers: initializer
    - [Pub] name
    - [Pub] symbol
    - [Pub] decimals

 + [Lib] Roles 
    - [Int] add #
    - [Int] remove #
    - [Int] has

 +  MinterRole (Initializable, Context)
    - [Pub] initialize #
       - modifiers: initializer
    - [Pub] isMinter
    - [Pub] addMinter #
       - modifiers: onlyMinter
    - [Pub] renounceMinter #
    - [Int] _addMinter #
    - [Int] _removeMinter #

 +  ERC20Mintable (Initializable, ERC20, MinterRole)
    - [Pub] initialize #
       - modifiers: initializer
    - [Pub] mint #
       - modifiers: onlyMinter

 +  PauserRole (Initializable, Context)
    - [Pub] initialize #
       - modifiers: initializer
    - [Pub] isPauser
    - [Pub] addPauser #
       - modifiers: onlyPauser
    - [Pub] renouncePauser #
    - [Int] _addPauser #
    - [Int] _removePauser #

 +  Pausable (Initializable, Context, PauserRole)
    - [Pub] initialize #
       - modifiers: initializer
    - [Pub] paused
    - [Pub] pause #
       - modifiers: onlyPauser,whenNotPaused
    - [Pub] unpause #
       - modifiers: onlyPauser,whenPaused

 +  ERC20Pausable (Initializable, ERC20, Pausable)
    - [Pub] initialize #
       - modifiers: initializer
    - [Pub] transfer #
       - modifiers: whenNotPaused
    - [Pub] transferFrom #
       - modifiers: whenNotPaused
    - [Pub] approve #
       - modifiers: whenNotPaused
    - [Pub] increaseAllowance #
       - modifiers: whenNotPaused
    - [Pub] decreaseAllowance #
       - modifiers: whenNotPaused

 +  Ownable (Initializable, Context)
    - [Pub] initialize #
       - modifiers: initializer
    - [Pub] owner
    - [Pub] isOwner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner
    - [Int] _transferOwnership #

 +  JulPadToken (Initializable, ERC20Burnable, ERC20Mintable, ERC20Pausable, ERC20Detailed, Ownable)
    - [Ext]  ($)
    - [Ext] initialize #
       - modifiers: initializer
    - [Ext] setOwner #
       - modifiers: onlyOwner