DebtProtocol - Smart Contract Audit Report

Summary

DebtProtocol created a platform where fees charged from transactions are shared among token holders. Fee sharing is instant, increasing the balance of all token holders with each transaction.

We reviewed Debt Protocol's token contract using code provided to us by the team.

Notes on the contract:
  • The total supply of the token is 100 billion.
  • No mint or burn functions exist, though the circulating supply can be decreased by sending tokens to 0x...dead.
  • The fee charged on token transfers is redistributed to existing token holders instantly and automatically at the time of each transaction.
  • Redistribution of fees happens accross tiers and based upon when the user last made a transaction.
  • When fees are taken, they are distributed among those users in the tier below the caller.
  • A user's tier is based on the number of tokens they hold. The team can add tiers at any time.
  • In addition to this transfer logic, once a day users in lower tiers will have a percentage of their stake distributed among those in the tier above them, up to a maximum of 10%.
  • Users who never sell will recieve extra from this daily redistribution, and users who perform a buy will have the event delayed for them. Users in the top tier are also exempt.
  • The owner can exclude any address from the fee mechanism.
  • Some minor gas optimizations can be achieved through declaring functions external instead of public and some variables constant.
  • Utilization of SafeMath to prevent overflows.
Audit Findings Summary:
  • No external threats were identified.
  • Be aware of the way the protocol operates - Value will flow upward towards large holders in the top tiers.
  • Date: May 20th, 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

Function Graph

ERC20 Token Graph


Inheritance Chart

Multi-file Token


Functions Overview


 ($) = 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] 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 #

 +  ERC20 (Context, IERC20)
    - [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] _setupDecimals #
    - [Int] _beforeTokenTransfer #

 + [Int] IUniswapV2Router02 
    - [Ext] factory
    - [Ext] WETH

 + [Int] IUniswapV2Factory 
    - [Ext] createPair #

 +  TestUNC (ERC20, Ownable)
    - [Pub]  #
       - modifiers: ERC20
    - [Pub] addTier #
       - modifiers: onlyOwner
    - [Pub] changeFeesOfTier #
       - modifiers: onlyOwner
    - [Pub] changeThresholdOfTier #
       - modifiers: onlyOwner
    - [Pub] changeHodlBoost #
       - modifiers: onlyOwner
    - [Pub] changeDebtLag #
       - modifiers: onlyOwner
    - [Pub] changeMinAmountDebtLag #
       - modifiers: onlyOwner
    - [Pub] setRedistributionPaused #
       - modifiers: onlyOwner
    - [Pub] excludeAccount #
       - modifiers: onlyOwner
    - [Pub] includeAccount #
       - modifiers: onlyOwner
    - [Pub] totalSupply
    - [Pub] balanceOf
    - [Pub] approve #
    - [Pub] increaseAllowance #
    - [Pub] decreaseAllowance #
    - [Pub] tierLength
    - [Pub] getTierOfUser
    - [Pub] getHodlingBoost
    - [Pub] pendingDebt
    - [Pub] pendingReward
    - [Pub] isExcluded
    - [Int] manageTier #
    - [Int] manageDebt #
    - [Int] manageFee #
    - [Int] manageReward #
    - [Pub] transfer #
    - [Pub] transferFrom #
    - [Int] _transfer #
    - [Prv] _transferStandard #
    - [Prv] _transferToExcluded #
    - [Prv] _transferFromExcluded #
    - [Prv] _transferBothExcluded #