Equalizer - Smart Contract Audit Report
Summary
Equalizer is building a platform enabling flash loans to equalize DeFi markets.
We previously reviewed their token deployments to Ethereum here and BSC here.
We reviewed the project's bridge logic at 0xC18685Aa9efBc77Fee907A124dA6221210163b3A on the Ethereum Testnet.
Notes on the Contract:The team has developed a cross-chain bridge which will allow users to deposits their native Equalizer tokens across the ETH or BSC blockchain. This contract serves as the on and off ramp for each chain. Users can send their tokens to the bridge contract on the ETH chain to bring those tokens over to the BSC chain, and vice versa. There is a fee that users must pay when initiating a cross-chain swap, by default in the amount of 5 tokens. The team can update the fee and claim the collected fees at any time. Cross-chain swaps involve some off-chain logic run by the team. Please note we have not reviewed the off-chain logic related to the bridge. Utilization of SafeMath to prevent overflows.
Audit Findings Summary:
- No security issues were identified.
- Users must trust the team as they will operate off-chain logic to power the bridge used for cross-chain transfers.
- Date: May 5th, 2021
- Date: May 11th, 2021 - Deployment to mainnet with minor improvements.
Combined External Threat Results
Vulnerability Category | Notes | Result |
---|---|---|
Arbitrary Storage Write | N/A | PASS |
Arbitrary Jump | N/A | PASS |
Delegate Call to Untrusted Contract | N/A | PASS |
Dependence on Predictable Variables | N/A | PASS |
Deprecated Opcodes | N/A | PASS |
Ether Thief | N/A | PASS |
Exceptions | N/A | PASS |
External Calls | N/A | PASS |
Integer Over/Underflow | N/A | PASS |
Multiple Sends | N/A | PASS |
Suicide | N/A | PASS |
State Change External Calls | N/A | PASS |
Unchecked Retval | N/A | PASS |
User Supplied Assertion | N/A | PASS |
Critical Solidity Compiler | N/A | PASS |
Overall Contract Safety | PASS |
Inheritence Chart
Function Graph
Functions Overview
($) = payable function
# = non-constant function
Int = Internal
Ext = External
Pub = Public
+ [Int] IBridgeV1
- [Ext] SwapOut #
- [Ext] SwapIn #
+ Context
- [Int] _msgSender
- [Int] _msgData
+ Ownable (Context)
- [Pub] #
- [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] 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
+ Bridge (IBridgeV1, Ownable)
- [Pub] #
- [Ext] SwapOut #
- [Ext] SwapIn #
- modifiers: onlyOwner
- [Ext] withdraw #
- modifiers: onlyOwner
- [Ext] updateFee #
- modifiers: onlyOwner
- [Ext] addLiquidity #