Able Finance - Smart Contract Audit Report

Summary

Able Finances Audit Report Able Finance is a DeFi project that automatically provides rewards to users who hold the token via frictionless fee redistribution.

For this audit we reviewed the projects smart contract using code that was provided to us by the team.


Notes on the Contract:
  • Able Finance's code implements and builds upon the fee-redistribution features that were pioneered by Reflect Finance.
  • The total supply of the token is 500 million [500,000,000].
  • As the token has not yet been deployed to the mainnet, there was no token allocation for our team to analyze.
  • No mint functions are present in the contract beyond deployment. The burn mechanism of the contract is limited to either sending tokens to the 0x..dead address or using the reflect function and electing to burn.
  • There is a 3% reflect fee applied on all transfers for any non-excluded address that participates in a transfer. Half of the reflect fee is used for reflection rewards. The other half will be burned.
  • The owner has the ability to exclude and include users from the fee mechanism.
  • Some gas optimizations can be achieved through declaring functions external instead of public and some variables constant. As this contract is already deployed, this is merely informational.
  • As the project is implemented with Solidity v0.8.4, it is protected from overflows.

Audit Findings Summary
  • No external threats were identified.
  • As with any presale, ensure trust in the team prior to investing as they have some control in the ecosystem.
  • Date: July 30th, 2021

Audit 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


Inheritence Chart

Multi-file Token


Functions Overview


 ($) = payable function
 # = non-constant function
 
    - [Int] _msgData

 +  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 #
    - [Prv] _functionCallWithValue #

 +  Ownable (Context)
    - [Pub]  #
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner

 +  AbleFinance (Context, IERC20, Ownable)
    - [Pub]  #
    - [Pub] name
    - [Pub] symbol
    - [Pub] decimals
    - [Pub] totalSupply
    - [Pub] balanceOf
    - [Pub] transfer #
    - [Pub] allowance
    - [Pub] approve #
    - [Pub] transferFrom #
    - [Pub] increaseAllowance #
    - [Pub] decreaseAllowance #
    - [Pub] isExcluded
    - [Pub] totalFees
    - [Pub] totalBurned
    - [Pub] startedAt
    - [Pub] reflect #
    - [Pub] burn #
    - [Pub] reflectionFromToken
    - [Pub] tokenFromReflection
    - [Ext] excludeAccount #
       - modifiers: onlyOwner
    - [Ext] includeAccount #
       - modifiers: onlyOwner
    - [Prv] _approve #
    - [Prv] _transfer #
    - [Prv] _transferStandard #
    - [Prv] _transferToExcluded #
    - [Prv] _transferFromExcluded #
    - [Prv] _transferBothExcluded #
    - [Prv] _distributeFee #
    - [Prv] _reflectFee #
    - [Prv] _getValues
    - [Prv] _getTValues
    - [Prv] _getRValues
    - [Prv] _getRate
    - [Prv] _getCurrentSupply
    - [Prv] _getTotalSupply
    - [Prv] _getInflatedSupply
    - [Prv] _getElapsedSeconds