Solv Protocol security record

As of 30 Oct 2026, Solv Protocol has 6 audit reports by 3 security firms on Trustblock; the latest is by Quantstamp, dated 15 Dec 2025. Those reports list no open critical findings. It also holds 2 deployed contracts on 1 chain.

Critical findings
No open critical findings
Across 6 reports.
Open the latest report
Your label, live
Get the label for your site

Record last updated . It holds audits and findings, contracts and incidents up to Oct 2026. Trustblock does not review code.

Audits6

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Solv Protocol - BTC RedemptionSecurity firm: QuantstampDate: Scope: Not recorded (see the report)No open critical findingsOpen · certificate.quantstamp.com
Audit Report (SolvBTC)Security firm: PaladinDate: Scope: 2 addresses on EthereumNo open critical findingsOpen · IPFS
Solv Protocol - SolvBTCSecurity firm: QuantstampDate: Scope: Repository at commit eafc741No open critical findingsOpen · certificate.quantstamp.com
Solv Yield - Bearing TokensSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOpen · skynet.certik.com
Solv Protocol- Vault GuardianSecurity firm: QuantstampDate: Scope: Repository at commit 80300acNo open critical findingsOpen · certificate.quantstamp.com
Solv Protocol stUSD - AuditSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOpen · skynet.certik.com

Findings55

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

SeverityOpenAcknowledgedFixed
Critical000
High214
Medium303
Low71025
HighCentralized Control of Contract UpgradeSolv Yield - Bearing Tokens · CertiK · 8 Apr 2024Acknowledged

The `SftWrapRouter` contract inherits upgradeable contracts, indicating that it is part of an upgradeable system. Upgradeable contracts often pair with a proxy contract that is responsible for managing contract upgrades. The privileged roles of the proxy often have the authority to update the implementation contract. Any compromise to the privileged account may allow a hacker to take advantage of this authority and change the implementation contract which is pointed by proxy and therefore execute potential malicious functionality in the implementation contract.

Open the report
LowIf adapter receives native funds, they will get stuckAudit Report (SolvBTC) · Paladin · 9 Dec 2024Acknowledged

The report gives no description here.

Open the report
LowUser is required to approve the adapter to use send()Audit Report (SolvBTC) · Paladin · 9 Dec 2024Acknowledged

The report gives no description here.

Open the report
LowOracle May Return Outdated Nav InformationSolv Protocol - SolvBTC · Quantstamp · 15 Aug 2024Acknowledged

The `getNav()` function of `SolvBTCYieldTokenOracleForSFT` returns the latest NAV of the specified ERC-20 token but ignores the latest set NAV time. Without validating that the returned NAV time is within a reasonable range, there may be risks of using outdated information. An outdated NAV value may affect the conversion rate between shares and assets of a `SolvBTCYieldToken`.

Open the report
LowPotential Mismatch in `beacon` ContractSolv Protocol - SolvBTC · Quantstamp · 15 Aug 2024Acknowledged

When calling `importProductProxy()`, the `productTypes[productType_].beacon` may be different from the beacon address used by the imported proxy. Therefore, the imported proxy may not upgrade since it is pointing to a different beacon.

Open the report
LowUnimplemented Interfaces in `SolvBTCMultiAssetPool`Solv Protocol - SolvBTC · Quantstamp · 15 Aug 2024Acknowledged

According to the protocol design, the `SolvBTCMultiAssetPool` contract may receive ERC-3525 tokens. Therefore, it is best practice to implement the ERC-165 interface and define the `onERC721Received()` and `onERC3525Received()` functions to return the corresponding magic values. Some SFT implementations, such as `OpenFundShareDelegate`, allow the ERC-3525 receiver to revert on the ERC-165 `supportsInterface()` call and consider the receiver capable of receiving ERC-3525 tokens. However, this behavior is not guaranteed in other SFT implementations.

Open the report
LowGuardian Function Selector Insufficient for Upgradeable ContractSolv Protocol- Vault Guardian · Quantstamp · 25 Mar 2024Acknowledged

The `FunctionAuthorization._checkSingleTx()` of the Solv Vault Guardian relies on a static mapping of function selectors before proceeding with ACL checks to validate transactions. This design does not accommodate the mutable design of upgradeable contracts, where function selectors might change after upgrades. Particularly for upgradeable contracts with payable fallback functions, this static mapping approach can lead to erroneous behavior, as the guardian may authorize or block transactions based on outdated information. Additionally, if an upgradeable contract were approved, the implementation of the approved function is subject to change.

Open the report
LowInconsistent Native Transfer Checks in Solv Vault GuardianSolv Protocol- Vault Guardian · Quantstamp · 25 Mar 2024Acknowledged

The Solv Vault Guardian implements a mechanism to validate native token transfers, through the `_checkNativeTransfer()` function to validate transactions based on a list of approved receivers `nativeTokenReceiver`. This check is invoked only when the transaction's calldata is empty. However, this approach does not account for payable functions where the calldata is non empty, thereby bypassing the `_checkNativeTransfer()` validation when `msg.value` is sent alongside calldata. This design choice introduces a discrepancy in how native token transfers are validated, potentially allowing for native token disbursements without proper authorization checks when calldata is present.

Open the report
LowInsufficient Protection Against Slippage AttacksSolv Protocol- Vault Guardian · Quantstamp · 25 Mar 2024Acknowledged

The Solv protocol introduces guardian checks through the Authorization mechanism before transactions of the Safe are executed. These checks, depending on the protocol the Safe is interacting with, primarily focus on assessing tokens in, tokens out, and the recipients of swapped funds. The aim is to ensure transactions comply with the allowed types and adhere to the rules set by the Authorization contract. However, the framework does not effectively guard against slippage attacks. It allows Safe owners to set potentially exploitative transaction parameters, such as a zero minimum for tokens out during swaps, potentially bypassing the protective intent of the Authorization checks.

Open the report
LowIt Is Not Possible to Add or Remove Tokens From WhitelistSolv Protocol- Vault Guardian · Quantstamp · 25 Mar 2024Acknowledged

Currently, some of the ACL implementations that allow token whitelisting only allow them to be added via `_addTokenWhitelist()` during deployment. There is no way to modify this token whitelist following deployment. This could be an issue if one of the tokens becomes compromised or is no longer supported, or, if there are additional tokens that would want to be supported by Solv in the future.

Open the report
Show 1 more
LowPrivileged Roles and OwnershipSolv Protocol- Vault Guardian · Quantstamp · 25 Mar 2024Acknowledged

Smart contracts will often have `owner` variables to designate the person with special privileges to make modifications to the smart contract. Although all of the functions below can be invoked by the Governor role, we would like to note that actually invoking the functions that are added to the guard still has to go through the multisig process, which significantly mitigates the privilege this Governor has. The Governor can invoke the following functions on the Solv Vault Guard defined in `SolvVaultGaurdianForSafe`: - `setGuardAllowed()` to toggle whether an address for the Guard of the Safe can be assigned or not. - `setNativeTokenTransferAllowed()` to toggle whether direct native token transfers can be invoked from the Safe or not. - `addNativeTokenReceiver()` and `removeNativeTokenReceiver()` to define the set of addresses can be transferred native token directly. - `addAuthorizations()` and `removeAuthorizations()` to define the set of Authorizations stored in the contract. - `setAuthorizationEnabled()` allowing the Governor to specify which of the Authorizations stored in the contract will be enabled and therefore enforced. - `transferGovernance()` to a new address. - `forbidGovernance()` preventing any Governor privileged calls to ever be called again. <br> For all Authorizations reviewed, the Governor can invoke the following functions: - `addContractFuncs()`, `removeContractFuncs()`, `addContractFuncSig()`, and `removeContractFuncSig()` to define a set of contracts and functions in those contracts that can be invoked by the Safe. - `setContractACL()` to define the address of the ACL that will be used to further verify transactions. - `transferGovernance()` to a new address. - `forbidGovernance()` preventing any Governor privileged calls to ever be called again. <br> In `SolvMasterFundAuthorizationACL`, the Governor can invoke the following functions: - `addPoolIdWhitelist()` and `removePoolIdWhitelist()` to define the set of Solv pool Ids that will be supported by the Guard. <br> In `ERC3525ApproveAuthorization` and `ERC20ApproveAuthorization` the Governor can invoke the following functions to change the state of the ACL: - `addTokenSpenders()` and `removeTokenSpenders()`to define the set of addresses that can be approved to spend tokens from the Safe. <br> In `ERC20TransferAuthorization` the Governor can invoke the following functions: - `addTokenReceivers()` and `removeTokenReceivers()` to define the set of which tokens can be transferred to which addresses from the Safe.

Open the report

Contracts2

AddressChainSource code
0x2265a8e449ea5ff78ee4c115370e9b5957358a68Chain: EthereumSource code: Verified source
0xb12979ff302ac903849948037a51792cf7186e8eChain: EthereumSource code: Verified source

All 2 addresses and the files the reports name

Show this on your site

Is this your project? Show this record on your own website. The label states what the record holds, links to this page and updates by itself. It is free and needs no sign-in.

Content

Facts

Automatic: the three strongest facts of this project’s own record (its last audit and two more), highlighted. They update with the record. Picking a fact turns Automatic off.

Fixed as
Language

Style

Layout
Theme
Accent
Corners

Format

Size
Date
Embed as
HTML
<head>
<script src="https://widget.trustblock.run/project-widget.min.js" defer></script>
</head>
<body>
<div
data-tb-project-widget
data-tb-project-slug="solv-protocol"
></div>
</body>

Paste the code where the label should appear. It uses no API credit and updates by itself.

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