Epoch Island - LP Pool

QuantstampFiles named in the report

Quantstamp reviewed Epoch Island (Epoch Island - LP Pool) on 7 Nov 2023: 14 findings, 0 critical; 6 marked fixed, 6 acknowledged, 2 open.

No open critical findings
Open the reportOpen Epoch Island’s security record

Report hosted on certificate.quantstamp.com.

Trustblock does not review code.

Findings14

Statuses are the security firm’s own, from its report.

SeverityOpenAcknowledgedFixed
Critical000
High000
Medium012
Low254
MediumSpecially designed ERC20 tokens and malicious ERC20 tokens can cause loss of fundsAcknowledged

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.

LowCritical Role Transfer Not Following Two-Step PatternAcknowledged

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.

LowHard-coded values limit flexibilityAcknowledged

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()`.

LowMissing input validationAcknowledged

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`.

LowOwnership Can Be RenouncedAcknowledged

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.

LowPrivileged roles and ownershipAcknowledged

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%.

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Repository and files the report names (1)

  • EpochUpsidePoolV1.sol

Part of Epoch Island’s security record

Epoch Island
Audits2 audits by 1 firmLast audit Nov 2023, by Quantstamp.
Critical findingsNo open critical findingsAcross 2 reports.
Open Epoch Island’s security record

Security firm

Quantstamp

236 projects reviewed · 332 reports · latest Oct 2026

See Quantstamp’s audits

Something 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