Able Finance - Smart Contract Audit Report
Able Finance is a DeFi project that automatically provides rewards to users who hold the token via frictionless fee redistribution.
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
|Arbitrary Storage Write||N/A||PASS|
|Delegate Call to Untrusted Contract||N/A||PASS|
|Dependence on Predictable Variables||N/A||PASS|
|State Change External Calls||N/A||PASS|
|User Supplied Assertion||N/A||PASS|
|Critical Solidity Compiler||N/A||PASS|
|Overall Contract Safety||PASS|
($) = 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