Quantstamp reviewed Epoch Island (Epoch Island - LP Pool) on 7 Nov 2023: 14 findings, 0 critical; 6 marked fixed, 6 acknowledged, 2 open.
Report hosted on certificate.quantstamp.com.
Trustblock does not review code.
Statuses are the security firm’s own, from its report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 0 | 0 |
| Medium | 0 | 1 | 2 |
| Low | 2 | 5 | 4 |
The protocol's current architecture does not account for the unique behaviors of various specialized ERC20 tokens, including interest-bearing, deflationary, and rebasing tokens. These tokens are characterized by their dynamic balance mechanisms, where the token balance can autonomously change over time due to factors like transaction fees, re-distribution, or balance adjustments. This aspect contradicts the protocol's underlying assumption of static token balances, potentially leading to inaccurate calculations or unintended interactions within the contract. Additionally, the protocol's open design, which allows liquidity providers (LPs) to utilize any ERC20 token, poses a significant risk. This unrestricted approach could enable LPs to introduce malicious tokens, crafted specifically to exploit the contract's mechanics or defraud takers. Such tokens might be engineered to perform a rug-pull – abruptly devaluing or making the tokens non-transferable after a transaction – or to otherwise deceive and manipulate the takers. This vulnerability necessitates a more stringent approach to token vetting and validation within the contract, to safeguard against these deceptive strategies and ensure the integrity of transactions.
The owner of the contracts can call `transferOwnership()` to transfer the ownership to a new address. If an uncontrollable address is accidentally provided as the new owner address, then the contract will no longer have an active owner, and functions with the `onlyOwner` modifier can no longer be executed.
Two values were hard-coded into the code and, therefore, limited the flexibility: 1. The maximum LP fee that can ever be set is hard-coded into `supply()`. 1. The maximum protocol fee is hard-coded in `setProtocolFee()`.
It is important to validate inputs, even if they only come from trusted addresses, to avoid human error. The following functions do not have a proper validation of input parameters: 1. `EpochUpsidePoolV1.supply()`: 1. `_exchangeRate` not checked to be non-zero. Clarify if this is intended. 1. `_startDate` and `_endDate` not checked to be non-zero. 1. `_startDate` and `_endDate` not checked to be chronological. 1. `_startDate` and `_endDate` not checked to have a reasonable lower bound difference between each other. 1. `_feeBp` not checked to be non-zero. Clarify if this is intended. 1. `EpochUpsidePoolV1.setProtocolFee()`: 1. `_protocolFeeRecipientAddress` not checked to be different from `addresss(0x0)`. 1. `_protocolFeeMaxBp` not checked to be non-zero. Clarify if this is intended. 1. `EpochUpsidePoolV1.claimPositionFees()`: `_tokenAddresses` not checked to be the same length as `_tokenAmounts`.
If the owner renounces their ownership, all ownable contracts will be left without an owner. Consequently, any function guarded by the `onlyOwner` modifier will no longer be able to be executed.
Certain contracts have state variables, e.g., `owner`, which provide specific addresses with privileged roles. Such roles may pose a risk to end-users. For a detailed list of roles per contract, see the following list: The `EpochUpsidePoolV1.sol` contract contains the following privileged roles: 1. `_owner` (`Ownable` inheritance), as initialized during the execution of `constructor` to `msg.sender`: 1. Renounce the role (**and thereby prevent any future calls to the following listed functions!**) by calling `renounceOwnership()`. 1. Transfer the ownership to an arbitrary other address by calling `transferOwnership()`. 1. Change the protocol fee (up until `7001`, 7,001%) and fee receiver address by calling `setProtocolFee()`. A malicious or compromised owner could, in a worst-case scenario, unexpectedly change the protocol fee from zero to up to 7.001%.
The report names a repository or files. Open the report to see its scope.
Repository and files the report names (1)
236 projects reviewed · 332 reports · latest Oct 2026
See Quantstamp’s auditsSomething wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.
Tell us