Solv Protocol - SolvBTC

QuantstampRepository at commit eafc741

Quantstamp reviewed Solv Protocol (Solv Protocol - SolvBTC) on 15 Aug 2024: 7 findings, 0 critical; 3 marked fixed, 3 acknowledged, 1 open.

No open critical findings
Open the reportOpen Solv Protocol’s security record

Report hosted on certificate.quantstamp.com.

Trustblock does not review code.

Findings7

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

SeverityOpenAcknowledgedFixed
Critical000
High000
Medium100
Low033
LowDisconnected Upgrade ProcessFixed

The `admin` of the `SftWrappedTokenFactory` contract can upgrade the implementation contract for a given `productType_` by calling `setImplementation()` followed by a call to `upgradeBeacon()`. However, if `upgradeBeacon()` is not called, the `productTypes` mapping in the `SftWrappedTokenFactory` contract will have a mismatched `implementation` address than what is set in the beacon contract.

LowInability to Restrict SFT Slot DepositsFixed

When the contract admin attempts to remove an SFT slot from the `SolvBTCMultiAssetPool`, the pool contract must have a zero balance of the given SFT slot before removal. Therefore, if even one user fails to withdraw their SFT, the admin will be unable to remove the slot, which allows other users to deposit the SFT slot continually into the contract.

LowInability to Stake Non-Legacy SFT SlotsFixed

When executing `stake()` in the `SftWrapRouter` contract, the SFT wrapped token registered for the SFT slot in the `SftWrappedTokenFactory` contract is obtained via a call to `SftWrappedTokenFactory.sftWrappedTokens()`. If the returned `sftWrappedToken` address is the zero address, execution will fail, and staking cannot occur for the given SFT slot. This check prevents users from staking SFT slots that are only registered in the `SolvBTVMultiAssetPool` and not registered in `SftWrappedTokenFactory`. Further, the function `_stakeSft()`, which is executed after the `SftWrapRouter` contract receives the SFT, only deposits into the legacy `SftWrappedToken` contract if the `SolvBTCMultiAssetPool` contract disallows the SFT slot. Therefore, the zero address check in `stake()` will prevent non-legacy-supported SFT slots from being staked.

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

  • https://github.com/solv-finance/SolvBTC/contracts/SftWrappedTokenFactory.sol at commit eafc741
  • https://github.com/solv-finance/SolvBTC/contracts/SolvBTCMultiAssetPool.sol at commit eafc741
  • https://github.com/solv-finance/SolvBTC/contracts/SftWrapRouter.sol at commit eafc741
  • https://github.com/solv-finance/SolvBTC/contracts/SolvBTCYieldToken.sol at commit eafc741
  • https://github.com/solv-finance/SolvBTC/contracts/SolvBTC.sol at commit eafc741

Part of Solv Protocol’s security record

Solv Protocol
Audits6 audits by 3 firmsLast audit Dec 2025, by Quantstamp.
Critical findingsNo open critical findingsAcross 6 reports.
Open Solv Protocol’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