Spectrum Protocol - Audit

CertiKFiles named in the report

CertiK reviewed Kroma (Spectrum Protocol - Audit) on 3 Apr 2024: 16 findings, 0 critical; 10 marked fixed, 4 acknowledged, 2 open.

No open critical findings
Open the reportOpen Kroma’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings16

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

SeverityOpenAcknowledgedFixed
Critical000
High020
Medium023
Low207
LowInherited Contracts Not Initialized In InitializeOpen

- Contract ·`ERC20MetadataUpgradeable`· extends `ERC20Upgradeable` - contract `EcoERC20Upgradeable`· extends `ERC20PermitUpgradeable` - contract `ERC20MintableUpgradeable`· extends `ERC20Upgradeable` and `ERC20BurnableUpgradeable` - contract `WETH`· extends `ERC20BurnableUpgradeable` - contract `EcoOwnable` extends `Ownable2StepUpgradeable` - contract `SelectorRoleControlUpgradeable` extends `PausableUpgradeable` and `AccessControlEnumerableUpgradeable` - contract `EcoProxyAdmin` extends `MulticallUpgradeable` but these extended contracts are not initialized by the current contracts. Generally, the initializer function of a contract should always call all the initializer functions of the contracts that they extends.

LowMissing check to ensure that the return value `idOpen

In the functions `_fundReceiveFrom()` and `_stakeReceiveFrom()`, there is no check to ensure that the value retrieved from `$.underlyingToIdx[$.info.fundUnderlying]` exists in the `$.idxAssetList`. This could result in the use of the incorrect `idxAsset` and `idxAmount`, leading to the receipt of incorrect amounts of tokens. ```solidity=211 function _fundReceiveFrom( address requestedAsset, address from, uint256 amount ) internal returns (address idxAsset, uint256 idxAmount) { SpectrumCoreStorage storage $ = _getSpectrumCoreStorage(); if (requestedAsset != $.info.fundUnderlying) revert Spectrum(SpectrumErrors.InValidFund); if (from != _msgSender()) revert Spectrum(SpectrumErrors.InValidFrom); idxAmount = IstETH(payable(requestedAsset)).submit{ value: amount }(address(0)); idxAsset = $.underlyingToIdx[requestedAsset]; IEcoERC20(requestedAsset).safeIncreaseAllowance(idxAsset, idxAmount); idxAmount = IidxAssetWrapper(idxAsset).wrap(idxAmount); } ```

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 (18)

  • contracts/proxy/transparent.sol
  • contracts/access/CallOrder.sol
  • contracts/token/ERC20/ERC20MintableUpgradeable.sol
  • contracts/proxy/admin.sol
  • contracts/access/SelectorRoleControlUpgradeable.sol
  • contracts/spectrum/core/SpectrumCoreLogic.sol
  • contracts/spectrum/core/SpectrumCoreUtils.sol
  • contracts/access/EcoOwnable.sol
  • contracts/token/ERC20/ERC20L2BridgedUpgradeable.sol
  • contracts/token/ERC20/WETH.sol
  • contracts/spectrum/core/SpectrumCoreEntry.sol
  • contracts/token/ERC20/EcoERC20Upgradeable.sol
  • contracts/spectrum/core/SpectrumCore.sol
  • contracts/access/SlotOrder.sol
  • contracts/utils/BasisPointRateMath.sol
  • contracts/spectrum/core/SpectrumCoreState.sol
  • contracts/spectrum/SpectrumETH.sol
  • contracts/token/ERC20/ERC20MetadataUpgradeable.sol

Part of Kroma’s security record

Kroma
Audits3 audits by 1 firmLast audit Dec 2024, by CertiK.
Critical findingsNo open critical findingsAcross 3 reports.
Open Kroma’s security record

Security firm

CertiK

1,044 projects reviewed · 1,375 reports · latest May 2025

See CertiK’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