Manga Token - Smart Contract Audit Report

Summary

Manga Token Manga Token is building a new token, yield farming platform, and exchange on the Binance Smart Chain.

We reviewed Manga Token's contracts in the following GitHub repositories at the listed commits:

  • Token and LP Mining Contracts - Commit 104acfee92761d802ff61f62c69333b4efa6a96d
  • ERC1155 Implementation - Commit 89e188347f29948f85a4b30f848e36ebef078130
  • Wyvern Exchange - Commit aa4d3f578f41c9920306e022c5e3500a974e2274
  • Notes on the Manga Token Contract:
  • The initial supply of the token is 0.
  • The token can be minted by its owner, which is designed to be the Masterchef staking contract for the purpose of provisioning rewards to stakers.
  • The owner of the token can also burn tokens from any address without prior permission. Once ownership has been transferred to the MasterChef, this function will not be accessible to the team.
  • The token is designed to be a governance token where 1 token = 1 vote, but the BEP20 transfer function does not move governance delegates so the governance functionalities will not work as intended.

  • Notes on the MasterChef Staking and Referral Contracts:
  • Users can stake various tokens in this contract to earn rewards in the form of the project's native Manga Token token.
  • There is a fee associated with making a deposit to the contract, set on a per-asset basis by the team.
  • Fees are directed into a deployment of the LinearRelease locker contract controlled by the team.
  • Users can also earn further token rewards to the tune of up to 30% of deposits by refering others to deposit into the contract. Referral information is tracked in an external Farm Referral contract.
  • The team will set the reward rate for each pool when added and can update it at any time. Rewards are created by minting tokens.
  • The team must exercise caution when adding tokens to avoid fee-on-transfer and ERC777-compliant tokens.

  • Notes on the TreasuryVest and LinearRelease contracts:
  • These contracs allow the deployer to set a token to be released to a set recepient gradually over time.
  • Upon deployment, the token amount and vesting start time will be specified.
  • For the TreasuryVest contract the vesting cliff period will also be specified, allowing the recepient to able to claim a portion of the tokens held in the contract after each period.
  • Upon deployment of the LinearRelease contract, an end time will also be specified and tokens will be released gradually and become claimable over time.
  • The recepient of a TreasuryVest contract can also set a new address to be the recepient.

  • Notes on the MyCollectible Contract:
  • This contract is an ERC-1155 contract, which means its can represent multiple types of tokens where tokens within a type are interchangable.
  • Only the owner of the contract has the ability to create new tokens.
  • The creator of a token can set its serial code, which can only be set once, and can mint that token.
  • The setCreator function does not check that the caller is the creator of a token; allowing anyone to hijack control of a token.

  • Notes on the Wyvern Exchange Contract:
  • The Wyvern exchange allows users to exchange nonfugible digital assets like NFTs.
  • Users can list their assets for sale either as an auction or as a fixed price offering.
  • Purchasers of assets can make offers or immediately purchase direct listings from the exchange as well.
  • Offers can be made in any form, such as ERC20 tokens or other NFTs.
  • The owner of the contract has the ability to alter fee amounts at any time.
  • The Wyvern Exchange contract will be deployed behind an Admin Upgradability Proxy, allowing the team to change out the code used by the contract at any time.

  • General Notes Across All Contracts:
  • Utilization of SafeMath throughout the platform to prevent overflow issues.
  • Some gas optimizations can be achieved through marking functions external instead of public and by setting some variables constant.


  • Audit Findings Summary
  • The movement of governance delegates is not connected to the token's transfer function, rendering the governance functionality unusable.
  • The ERC-1155 tokens can be hijacked via the setCreator function.
  • Ensure trust in the team as they have substantial control in the ecosystem.
  • Date: August 22nd, 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
    Unchecked RetvalN/APASS
    User Supplied AssertionN/APASS
    Critical Solidity CompilerN/APASS
    Overall Contract Safety PASS

    Details: AuthenticatedProxy

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     +  Ownable 
        - [Pub]  #
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
    
     +  ERC20Basic 
        - [Pub] totalSupply
        - [Pub] balanceOf
        - [Pub] transfer #
    
     +  ERC20 (ERC20Basic)
        - [Pub] allowance
        - [Pub] transferFrom #
        - [Pub] approve #
    
     +  ProxyRegistry (Ownable)
        - [Pub] startGrantAuthentication #
           - modifiers: onlyOwner
        - [Pub] endGrantAuthentication #
           - modifiers: onlyOwner
        - [Pub] revokeAuthentication #
           - modifiers: onlyOwner
        - [Pub] registerProxy #
    
     +  TokenRecipient 
        - [Pub] receiveApproval #
        - [Pub]  ($)
    
     +  OwnedUpgradeabilityStorage 
        - [Pub] upgradeabilityOwner
        - [Int] setUpgradeabilityOwner #
        - [Pub] implementation
        - [Pub] proxyType
    
     +  AuthenticatedProxy (TokenRecipient, OwnedUpgradeabilityStorage)
        - [Pub] initialize #
        - [Pub] setRevoke #
        - [Pub] proxy #
        - [Pub] proxyAssert #
    
     +  Proxy 
        - [Pub] implementation
        - [Pub] proxyType
        - [Pub]  ($)
    
     +  OwnedUpgradeabilityProxy (Proxy, OwnedUpgradeabilityStorage)
        - [Int] _upgradeTo #
        - [Pub] proxyOwner
        - [Pub] transferProxyOwnership #
           - modifiers: onlyProxyOwner
        - [Pub] upgradeTo #
           - modifiers: onlyProxyOwner
        - [Pub] upgradeToAndCall ($)
           - modifiers: onlyProxyOwner
    
     +  OwnableDelegateProxy (OwnedUpgradeabilityProxy)
        - [Pub]  #
    


    Details: Farm Referral

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [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
    
     + [Lib] Address 
        - [Int] isContract
        - [Int] sendValue #
        - [Int] functionCall #
        - [Int] functionCall #
        - [Int] functionCallWithValue #
        - [Int] functionCallWithValue #
        - [Int] functionStaticCall
        - [Int] functionStaticCall
        - [Int] functionDelegateCall #
        - [Int] functionDelegateCall #
        - [Prv] _verifyCallResult
    
     + [Lib] SafeBEP20 
        - [Int] safeTransfer #
        - [Int] safeTransferFrom #
        - [Int] safeApprove #
        - [Int] safeIncreaseAllowance #
        - [Int] safeDecreaseAllowance #
        - [Prv] _callOptionalReturn #
    
     + [Int] IFarmReferral 
        - [Ext] recordReferral #
        - [Ext] recordReferralCommission #
        - [Ext] getReferrer
    
     +  Context 
        - [Int] _msgSender
        - [Int] _msgData
    
     +  Ownable (Context)
        - [Int]  #
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
    
     +  FarmReferral (IFarmReferral, Ownable)
        - [Pub] recordReferral #
           - modifiers: onlyOperator
        - [Pub] recordReferralCommission #
           - modifiers: onlyOperator
        - [Pub] getReferrer
        - [Ext] updateOperator #
           - modifiers: onlyOwner
        - [Ext] drainBEP20Token #
           - modifiers: onlyOwner


    Details: LinearRelease

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     +  Context 
        - [Int] _msgSender
        - [Int] _msgData
    
     +  Ownable (Context)
        - [Int]  #
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
    
     +  ReentrancyGuard 
        - [Int]  #
    
     + [Int] IERC20 
        - [Ext] totalSupply
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [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
    
     + [Lib] Address 
        - [Int] isContract
        - [Int] sendValue #
        - [Int] functionCall #
        - [Int] functionCall #
        - [Int] functionCallWithValue #
        - [Int] functionCallWithValue #
        - [Int] functionStaticCall
        - [Int] functionStaticCall
        - [Int] functionDelegateCall #
        - [Int] functionDelegateCall #
        - [Prv] _verifyCallResult
    
     + [Lib] SafeERC20 
        - [Int] safeTransfer #
        - [Int] safeTransferFrom #
        - [Int] safeApprove #
        - [Int] safeIncreaseAllowance #
        - [Int] safeDecreaseAllowance #
        - [Prv] _callOptionalReturn #
    
     + [Int] ILocker 
        - [Ext] calLockAmount #
        - [Ext] lockOf #
        - [Ext] lock #
        - [Ext] pendingTokens #
        - [Ext] claim #
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [Int] IMasterChef 
        - [Ext] poolLength
        - [Ext] bep20TokenPerBlock
        - [Ext] totalAllocPoint
        - [Ext] poolInfo
        - [Ext] add #
        - [Ext] set #
        - [Ext] pendingBep20Token
        - [Ext] updatePool #
        - [Ext] deposit #
        - [Ext] withdraw #
        - [Ext] harvest #
    
     +  LinearRelease (Ownable, ReentrancyGuard)
        - [Pub]  #
        - [Pub] calLockAmount
           - modifiers: onlyChef
        - [Pub] lockOf
        - [Pub] lock #
           - modifiers: nonReentrant,onlyChef
        - [Pub] pendingTokens
        - [Pub] claim #
           - modifiers: nonReentrant


    Details: Manga Token

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     +  Context 
        - [Int] _msgSender
        - [Int] _msgData
    
     +  Ownable (Context)
        - [Int]  #
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [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
    
     +  BEP20 (Context, IBEP20, Ownable)
        - [Pub]  #
        - [Ext] getOwner
        - [Pub] name
        - [Pub] symbol
        - [Pub] decimals
        - [Pub] totalSupply
        - [Pub] balanceOf
        - [Pub] transfer #
        - [Pub] allowance
        - [Pub] approve #
        - [Pub] transferFrom #
        - [Pub] increaseAllowance #
        - [Pub] decreaseAllowance #
        - [Pub] mint #
           - modifiers: onlyOwner
        - [Int] _transfer #
        - [Int] _mint #
        - [Int] _burn #
        - [Int] _approve #
        - [Int] _burnFrom #
    
     +  Managa (BEP20)
        - [Pub] mint #
           - modifiers: onlyOwner
        - [Pub] burn #
           - modifiers: onlyOwner
        - [Ext] delegates
        - [Ext] delegate #
        - [Ext] delegateBySig #
        - [Ext] getCurrentVotes
        - [Ext] getPriorVotes
        - [Int] _delegate #
        - [Int] _moveDelegates #
        - [Int] _writeCheckpoint #
        - [Int] safe32
        - [Int] getChainId


    Details: MasterChef

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     + [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
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [Lib] Address 
        - [Int] isContract
        - [Int] sendValue #
        - [Int] functionCall #
        - [Int] functionCall #
        - [Int] functionCallWithValue #
        - [Int] functionCallWithValue #
        - [Int] functionStaticCall
        - [Int] functionStaticCall
        - [Int] functionDelegateCall #
        - [Int] functionDelegateCall #
        - [Prv] _verifyCallResult
    
     + [Lib] SafeBEP20 
        - [Int] safeTransfer #
        - [Int] safeTransferFrom #
        - [Int] safeApprove #
        - [Int] safeIncreaseAllowance #
        - [Int] safeDecreaseAllowance #
        - [Prv] _callOptionalReturn #
    
     + [Int] IERC20 
        - [Ext] totalSupply
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [Int] ILocker 
        - [Ext] calLockAmount #
        - [Ext] lockOf #
        - [Ext] lock #
        - [Ext] pendingTokens #
        - [Ext] claim #
    
     +  Context 
        - [Int] _msgSender
        - [Int] _msgData
    
     +  Ownable (Context)
        - [Int]  #
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
    
     +  ReentrancyGuard 
        - [Int]  #
    
     + [Int] IFarmReferral 
        - [Ext] recordReferral #
        - [Ext] recordReferralCommission #
        - [Ext] getReferrer
    
     +  ChefMangaToken (Ownable, ReentrancyGuard)
        - [Pub]  #
        - [Ext] poolLength
        - [Pub] add #
           - modifiers: onlyOwner,nonDuplicated
        - [Pub] set #
           - modifiers: onlyOwner
        - [Pub] getMultiplier
        - [Ext] pendingMANGAToken
        - [Pub] massUpdatePools #
        - [Pub] updatePool #
        - [Pub] deposit #
           - modifiers: nonReentrant
        - [Pub] withdraw #
           - modifiers: nonReentrant
        - [Pub] harvest #
        - [Int] _harvest #
        - [Pub] emergencyWithdraw #
           - modifiers: nonReentrant
        - [Int] safeMANGATokenTransfer #
        - [Pub] dev #
        - [Pub] setFeeAddress #
        - [Pub] updateEmissionRate #
           - modifiers: onlyOwner
        - [Pub] updateFinalBlockReward #
           - modifiers: onlyOwner
        - [Pub] setFarmReferral #
           - modifiers: onlyOwner
        - [Int] payReferralCommission #


    Details: Referral Contract

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     + [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
    
     + [Lib] Address 
        - [Int] isContract
        - [Int] sendValue #
        - [Int] functionCall #
        - [Int] functionCall #
        - [Int] functionCallWithValue #
        - [Int] functionCallWithValue #
        - [Int] functionStaticCall
        - [Int] functionStaticCall
        - [Int] functionDelegateCall #
        - [Int] functionDelegateCall #
        - [Prv] _verifyCallResult
    
     + [Lib] SafeBEP20 
        - [Int] safeTransfer #
        - [Int] safeTransferFrom #
        - [Int] safeApprove #
        - [Int] safeIncreaseAllowance #
        - [Int] safeDecreaseAllowance #
        - [Prv] _callOptionalReturn #
    
     + [Int] IFarmReferral 
        - [Ext] recordReferral #
        - [Ext] recordReferralCommission #
        - [Ext] getReferrer
    
     +  Context 
        - [Int] _msgSender
        - [Int] _msgData
    
     +  Ownable (Context)
        - [Int]  #
        - [Pub] owner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
    
     +  FarmReferral (IFarmReferral, Ownable)
        - [Pub] recordReferral #
           - modifiers: onlyOperator
        - [Pub] recordReferralCommission #
           - modifiers: onlyOperator
        - [Pub] getReferrer
        - [Ext] updateOperator #
           - modifiers: onlyOwner
        - [Ext] drainBEP20Token #
           - modifiers: onlyOwner


    Details: MyCollectible

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     + [Int] IERC165 
        - [Ext] supportsInterface
    
     + [Lib] SafeMath 
        - [Int] mul
        - [Int] div
        - [Int] sub
        - [Int] add
        - [Int] mod
    
     + [Int] IERC1155TokenReceiver 
        - [Ext] onERC1155Received #
        - [Ext] onERC1155BatchReceived #
        - [Ext] supportsInterface
    
     + [Int] IERC1155 
        - [Ext] safeTransferFrom #
        - [Ext] safeBatchTransferFrom #
        - [Ext] balanceOf
        - [Ext] balanceOfBatch
        - [Ext] setApprovalForAll #
        - [Ext] isApprovedForAll
    
     + [Lib] Address 
        - [Int] isContract
    
     +  ERC1155 (IERC165, IERC1155)
        - [Pub] safeTransferFrom #
        - [Pub] safeBatchTransferFrom #
        - [Int] _safeTransferFrom #
        - [Int] _callonERC1155Received #
        - [Int] _safeBatchTransferFrom #
        - [Int] _callonERC1155BatchReceived #
        - [Ext] setApprovalForAll #
        - [Pub] isApprovedForAll
        - [Pub] balanceOf
        - [Pub] balanceOfBatch
        - [Ext] supportsInterface
    
     +  ERC1155Metadata 
        - [Pub] uri
        - [Int] _logURIs #
        - [Int] _setBaseMetadataURI #
        - [Int] _uint2str
    
     +  ERC1155MintBurn (ERC1155)
        - [Int] _mint #
        - [Int] _batchMint #
        - [Int] _burn #
        - [Int] _batchBurn #
    
     + [Lib] Strings 
        - [Int] strConcat
        - [Int] strConcat
        - [Int] strConcat
        - [Int] strConcat
        - [Int] uint2str
    
     +  Ownable 
        - [Int]  #
        - [Pub] owner
        - [Pub] isOwner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
        - [Int] _transferOwnership #
    
     +  OwnableDelegateProxy 
    
     +  ProxyRegistry 
    
     +  ERC1155Tradable (ERC1155, ERC1155MintBurn, ERC1155Metadata, Ownable)
        - [Pub]  #
        - [Pub] uri
        - [Pub] totalSupply
        - [Pub] getProxyRegistryAddress
        - [Pub] setBaseMetadataURI #
           - modifiers: onlyOwner
        - [Ext] create #
           - modifiers: onlyOwner
        - [Pub] mint #
           - modifiers: creatorOnly
        - [Pub] batchMint #
        - [Pub] setCreator #
        - [Pub] isApprovedForAll
        - [Int] _setCreator #
           - modifiers: creatorOnly
        - [Int] _exists
        - [Prv] _getNextTokenID
        - [Prv] _incrementTokenTypeId #
    
     +  SozoComicsCollectible (ERC1155Tradable)
        - [Pub]  #
           - modifiers: ERC1155Tradable
        - [Pub] setSerialCode #
           - modifiers: creatorOnly
        - [Pub] getTokenSerialCode


    Details: TokenTransferProxy

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     +  Ownable 
        - [Pub]  #
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
    
     +  ERC20Basic 
        - [Pub] totalSupply
        - [Pub] balanceOf
        - [Pub] transfer #
    
     +  ERC20 (ERC20Basic)
        - [Pub] allowance
        - [Pub] transferFrom #
        - [Pub] approve #
    
     +  TokenRecipient 
        - [Pub] receiveApproval #
        - [Pub]  ($)
    
     +  ProxyRegistry (Ownable)
        - [Pub] startGrantAuthentication #
           - modifiers: onlyOwner
        - [Pub] endGrantAuthentication #
           - modifiers: onlyOwner
        - [Pub] revokeAuthentication #
           - modifiers: onlyOwner
        - [Pub] registerProxy #
    
     +  TokenTransferProxy 
        - [Pub] transferFrom #
    
     +  WyvernTokenTransferProxy (TokenTransferProxy)
        - [Pub]  #
    
     +  OwnedUpgradeabilityStorage 
        - [Pub] upgradeabilityOwner
        - [Int] setUpgradeabilityOwner #
        - [Pub] implementation
        - [Pub] proxyType
    
     +  AuthenticatedProxy (TokenRecipient, OwnedUpgradeabilityStorage)
        - [Pub] initialize #
        - [Pub] setRevoke #
        - [Pub] proxy #
        - [Pub] proxyAssert #
    
     +  Proxy 
        - [Pub] implementation
        - [Pub] proxyType
        - [Pub]  ($)
    
     +  OwnedUpgradeabilityProxy (Proxy, OwnedUpgradeabilityStorage)
        - [Int] _upgradeTo #
        - [Pub] proxyOwner
        - [Pub] transferProxyOwnership #
           - modifiers: onlyProxyOwner
        - [Pub] upgradeTo #
           - modifiers: onlyProxyOwner
        - [Pub] upgradeToAndCall ($)
           - modifiers: onlyProxyOwner
    
     +  OwnableDelegateProxy (OwnedUpgradeabilityProxy)
        - [Pub]  #


    Details: TreasuryVester

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     + [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
    
     + [Int] IBEP20 
        - [Ext] totalSupply
        - [Ext] decimals
        - [Ext] symbol
        - [Ext] name
        - [Ext] getOwner
        - [Ext] balanceOf
        - [Ext] transfer #
        - [Ext] allowance
        - [Ext] approve #
        - [Ext] transferFrom #
    
     +  TreasuryVester 
        - [Pub]  #
        - [Pub] setRecipient #
        - [Pub] claim #


    Details: WyvernCore

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     + [Lib] SafeMath 
        - [Int] mul
        - [Int] div
        - [Int] sub
        - [Int] add
    
     +  Ownable 
        - [Pub]  #
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
    
     +  ERC20Basic 
        - [Pub] totalSupply
        - [Pub] balanceOf
        - [Pub] transfer #
    
     +  ERC20 (ERC20Basic)
        - [Pub] allowance
        - [Pub] transferFrom #
        - [Pub] approve #
    
     + [Lib] ArrayUtils 
        - [Int] guardedArrayReplace
        - [Int] arrayEq
        - [Int] unsafeWriteBytes
        - [Int] unsafeWriteAddress
        - [Int] unsafeWriteUint
        - [Int] unsafeWriteUint8
    
     +  ReentrancyGuarded 
    
     +  TokenRecipient 
        - [Pub] receiveApproval #
        - [Pub]  ($)
    
     +  ExchangeCore (ReentrancyGuarded, Ownable)
        - [Pub] changeMinimumMakerProtocolFee #
           - modifiers: onlyOwner
        - [Pub] changeMinimumTakerProtocolFee #
           - modifiers: onlyOwner
        - [Pub] changeProtocolFeeRecipient #
           - modifiers: onlyOwner
        - [Int] transferTokens #
        - [Int] chargeProtocolFee #
        - [Pub] staticCall
        - [Int] sizeOf
        - [Int] hashOrder
        - [Int] hashToSign
        - [Int] requireValidOrder
        - [Int] validateOrderParameters
        - [Int] validateOrder
        - [Int] approveOrder #
        - [Int] cancelOrder #
        - [Int] calculateCurrentPrice
        - [Int] calculateMatchPrice
        - [Int] executeFundsTransfer #
        - [Int] ordersCanMatch
        - [Int] atomicMatch #
           - modifiers: reentrancyGuard
    
     +  Exchange (ExchangeCore)
        - [Pub] guardedArrayReplace
        - [Pub] testCopy
        - [Pub] testCopyAddress
        - [Pub] calculateFinalPrice
        - [Pub] hashOrder_
        - [Pub] hashToSign_
        - [Pub] validateOrderParameters_
        - [Pub] validateOrder_
        - [Pub] approveOrder_ #
        - [Pub] cancelOrder_ #
        - [Pub] calculateCurrentPrice_
        - [Pub] ordersCanMatch_
        - [Pub] orderCalldataCanMatch
        - [Pub] calculateMatchPrice_
        - [Pub] atomicMatch_ ($)
    
     +  WyvernExchange (Exchange)
        - [Pub]  #
    
     + [Lib] SaleKindInterface 
        - [Int] validateParameters
        - [Int] canSettleOrder
        - [Int] calculateFinalPrice
    
     +  ProxyRegistry (Ownable)
        - [Pub] startGrantAuthentication #
           - modifiers: onlyOwner
        - [Pub] endGrantAuthentication #
           - modifiers: onlyOwner
        - [Pub] revokeAuthentication #
           - modifiers: onlyOwner
        - [Pub] registerProxy #
    
     +  TokenTransferProxy 
        - [Pub] transferFrom #
    
     +  OwnedUpgradeabilityStorage 
        - [Pub] upgradeabilityOwner
        - [Int] setUpgradeabilityOwner #
        - [Pub] implementation
        - [Pub] proxyType
    
     +  AuthenticatedProxy (TokenRecipient, OwnedUpgradeabilityStorage)
        - [Pub] initialize #
        - [Pub] setRevoke #
        - [Pub] proxy #
        - [Pub] proxyAssert #
    
     +  Proxy 
        - [Pub] implementation
        - [Pub] proxyType
        - [Pub]  ($)
    
     +  OwnedUpgradeabilityProxy (Proxy, OwnedUpgradeabilityStorage)
        - [Int] _upgradeTo #
        - [Pub] proxyOwner
        - [Pub] transferProxyOwnership #
           - modifiers: onlyProxyOwner
        - [Pub] upgradeTo #
           - modifiers: onlyProxyOwner
        - [Pub] upgradeToAndCall ($)
           - modifiers: onlyProxyOwner
    
     +  OwnableDelegateProxy (OwnedUpgradeabilityProxy)
        - [Pub]  #


    Details: WyvernProxyRegistry

    ERC20 Token Graph

    Multi-file Token

    
     ($) = payable function
     # = non-constant function
     
     Int = Internal
     Ext = External
     Pub = Public
    
     +  Ownable 
        - [Pub]  #
        - [Pub] transferOwnership #
           - modifiers: onlyOwner
        - [Pub] renounceOwnership #
           - modifiers: onlyOwner
    
     +  ERC20Basic 
        - [Pub] totalSupply
        - [Pub] balanceOf
        - [Pub] transfer #
    
     +  ERC20 (ERC20Basic)
        - [Pub] allowance
        - [Pub] transferFrom #
        - [Pub] approve #
    
     +  TokenRecipient 
        - [Pub] receiveApproval #
        - [Pub]  ($)
    
     +  ProxyRegistry (Ownable)
        - [Pub] startGrantAuthentication #
           - modifiers: onlyOwner
        - [Pub] endGrantAuthentication #
           - modifiers: onlyOwner
        - [Pub] revokeAuthentication #
           - modifiers: onlyOwner
        - [Pub] registerProxy #
    
     +  WyvernProxyRegistry (ProxyRegistry)
        - [Pub]  #
        - [Pub] grantInitialAuthentication #
           - modifiers: onlyOwner
    
     +  OwnedUpgradeabilityStorage 
        - [Pub] upgradeabilityOwner
        - [Int] setUpgradeabilityOwner #
        - [Pub] implementation
        - [Pub] proxyType
    
     +  AuthenticatedProxy (TokenRecipient, OwnedUpgradeabilityStorage)
        - [Pub] initialize #
        - [Pub] setRevoke #
        - [Pub] proxy #
        - [Pub] proxyAssert #
    
     +  Proxy 
        - [Pub] implementation
        - [Pub] proxyType
        - [Pub]  ($)
    
     +  OwnedUpgradeabilityProxy (Proxy, OwnedUpgradeabilityStorage)
        - [Int] _upgradeTo #
        - [Pub] proxyOwner
        - [Pub] transferProxyOwnership #
           - modifiers: onlyProxyOwner
        - [Pub] upgradeTo #
           - modifiers: onlyProxyOwner
        - [Pub] upgradeToAndCall ($)
           - modifiers: onlyProxyOwner
    
     +  OwnableDelegateProxy (OwnedUpgradeabilityProxy)
        - [Pub]  #