Spheron V2

QuillAuditsFiles named in the report

Audit · firm’s term: audit report

QuillAudits reviewed Spheron Network (Spheron V2) on 5 Mar 2025: 13 findings, 0 critical; 10 marked fixed, 3 open.

No open critical findings
Open the reportOpen Spheron Network’s security record

Report hosted on quillaudits.com.

Trustblock does not review code.

Findings13

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

SeverityOpenAcknowledgedFixed
Critical000
High003
Medium004
Low303
LowclaimPenaltyAssets lacks onlyOwner modifierOpen

The above function should only be called by owner but it lacks modifier onlyOwner so anyone can initiate claiming of penaltyAssets, although the assets are being transferred to the owner so this is a low issue. And emit PenaltyAssetsDistributed(msg.sender, penaltyAssets); event is emitted with msg.sender which is wrong if anyone else apart from the owner calls this function.<br><code>solidity function claimPenaltyAssets() external { require(penaltyShares > 0, "No penalty shares"); uint256 penaltyAssets = pToken.convertToAssets(penaltyShares); penaltyShares = 0; pToken.transfer(owner(), penaltyAssets); emit PenaltyAssetsDistributed(msg.sender, penaltyAssets); } </code>

LowupdateCollateralConfig can trigger sudden liquidations.Open

<code>solidity function updateCollateralConfig(CollateralConfig memory _collateralConfig) external onlyOwner { _updateCollateralConfig(_collateralConfig); } function _updateCollateralConfig(CollateralConfig memory _collateralConfig) internal { if (!CoreLogic.validateCollateralConfig(_collateralConfig, PARAM_PRECISION)) revert InvalidCol lateralConfig(); slashingBuffer = _collateralConfig.slashingBuffer; isSlashingBufferAbsoluteValue = _collateralConfig.isSlashingBufferAbsoluteValue; liquidationThreshold = _collateralConfig.liquidationThreshold; collateralFactor = _collateralConfig.collateralFactor; emit CollateralConfigUpdated(_collateralConfig); } </code><br>The above function. is called by owner to update the collateral config, It updates certain important states including liquidationThreshold , the problem is when liquidationThreshold is updated it can trigger sudden liquidation for healthy positions too If we take a look at coreLogic.startLiquidation() it has a check and when liquidationThreshold is changed the check can be bypassed suddenly and healthy positions can become unhealthy and become prone to sudden liquidation.<br><code>solidity if (fullRepayTokenAmount < (collateralValue * liquidationThreshold) / paramPrecision) { revert CannotLiquidateHealthyAgent(); } </code>

Lowweth address is hardcodedOpen

IWETH constant weth = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); // need to manually update for each chain//@audit [L] hardcoded address for weth, WETH has diff address on diff chains

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

  • AirdropPool.sol
  • Wrapper.sol
  • com/spheronFdn/airdrop-staking-contracts/blob/main/src/AirdropPool.sol
  • com/spheronFdn/airdrop-staking-contracts/blob/main/src/core/Core.sol
  • DelegationPool.sol
  • Pool.sol

Part of Spheron Network’s security record

Spheron Network
Audits3 audits by 1 firmLast audit Mar 2025, by QuillAudits.
Critical findingsNo open critical findingsAcross 3 reports.
Open Spheron Network’s security record

Security firm

QuillAudits

350 projects reviewed · 459 reports · latest Apr 2025

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