Saddle security record

Arbitrum, Ethereum, Fantom, Optimismsaddle.financeXGitHub

As of 3 Nov 2026, Saddle has 4 audit reports by 2 security firms on Trustblock; the latest is by Quantstamp, dated 24 Sep 2021. Those reports list no open critical findings. It also holds 2 incidents (latest 29 Apr 2022).

Critical findings
No open critical findings
Across 4 reports.
Incident
Incident 29 Apr 2022
Source: De.Fi incident database. No audit on Trustblock is dated after it. See the incidents
Open the latest report
Your label, live
Get the label for your site

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

Audits4

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Saddle TokenSecurity firm: QuantstampDate: Scope: Files named in the reportNo open critical findingsOpen · certificate.quantstamp.com
Saddle Finance VirtualSwapSecurity firm: QuantstampDate: Scope: Files named in the reportNo open critical findingsOpen · certificate.quantstamp.com
Saddle Contracts AuditSecurity firm: OpenZeppelinDate: Scope: Files named in the reportNo open critical findingsOpen · blog.openzeppelin.com
Saddle FinanceSecurity firm: QuantstampDate: Scope: Files named in the reportNo open critical findingsOpen · certificate.quantstamp.com

Findings48

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

SeverityOpenAcknowledgedFixed
Critical000
High001
Medium126
Low3629
MediumLoss-Making Updates to ASaddle Finance · Quantstamp · 3 Nov 2020Acknowledged

This [economic attack](https://medium.com/@peter_4205/curve-vulnerability-report-a1d7630140ec) on the Curve contracts was discovered by Peter Zeitz. Since the Saddle Finance contracts are a Solidity implementation of the Curve contracts they are also vulnerable to the same attack.

Open the report
MediumThe value of the A parameter can be influenced by `block.timestamp`Saddle Finance · Quantstamp · 3 Nov 2020Acknowledged

Projects may rely on block timestamps for various purposes. However, it's important to realize that miners individually set the timestamp of a block, and attackers may be able to manipulate timestamps for their own purposes. If a smart contract relies on a timestamp, it must take this into account. The following functions which are used to determine the value of the A parameter use the block timestamp: * `SwapUtils._getAPrecise` * `SwapUtils.rampA` * `SwapUtils.stopRampA` The value of A is used to compute a large number of other crucial amounts in the system, including the values of D, the virtual price and the amount of tokens added/withdrawn. It is important to note that a malicious miner can change the value of `block.timestamp` with up to 900 seconds.

Open the report
LowExternal DependenciesSaddle Token · Quantstamp · 24 Sep 2021Acknowledged

According to *natspec* in `L33` the Merkle root to check for eligibility is generated off-chain and registered in `constructor()`. It is not clear if this critical piece of software is secure or if the design is sound for the participants generating proofs that will be sent with function `verifyAndClaimReward()`.

Open the report
LowAccidental overwriting of multipliersSaddle Finance · Quantstamp · 3 Nov 2020Acknowledged

In function `Allowlist.setMultipliers`, duplicate addresses in the input arrays will cause overwrites of multipliers (in the case of human errors), during execution.

Open the report
LowAllowed amount could be higher than pool capSaddle Finance · Quantstamp · 3 Nov 2020Acknowledged

There is no check that constrains the owner of the `Allowlist` contract from setting the `multipliers`, `poolCaps` and `accountLimits` to such values which would result in a call to `getAllowedAmount` for some pool to be greater than `getPoolCap` for the same pool. Would this be acceptable? <br> Similarly the values of `multipliers` can be greater than the value of `DENOMINATOR`. Would this be acceptable?

Open the report
LowBlock Timestamp ManipulationSaddle Finance · Quantstamp · 3 Nov 2020Acknowledged

Projects may rely on block timestamps for various purposes. However, it's important to realize that miners individually set the timestamp of a block, and attackers may be able to manipulate timestamps for their own purposes. If a smart contract relies on a timestamp, it must take this into account. The following functions/modifiers use the block timestamp: * `Swap.deadlineCheck` * `SwapUtils.calculateCurrentWithdrawFee` * `SwapUtils.updateUserWithdrawFee` * `SwapUtils._getAPrecise` * `SwapUtils.rampA` * `SwapUtils.stopRampA`

Open the report
LowIncreased loss of precision due to multiplication after divisionSaddle Finance · Quantstamp · 3 Nov 2020Acknowledged

The accuracy of the return value of the `SwapUtils.getD(uint256[] memory xp, uint256 _A)` function could be affected by the loss of precision that occurs with the repeated divisions that occur on L241 (inside the `for`-loop), which are all performed before the multiplications in the subsequent iterations of the loop and the multiplication of `dP` with `numTokens` on L244 (after the `for`-loop). ``` L240: for (uint j = 0; j < numTokens; j++) { L241: dP = dP.mul(D).div(xp[j].mul(numTokens).add(1)); L242: } L243: prevD = D; L244: D = nA.mul(s).add(dP.mul(numTokens)).mul(D).div( L245: nA.sub(1).mul(D).add(numTokens.add(1).mul(dP))); ```

Open the report
LowPrivileged Roles and OwnershipSaddle Finance · Quantstamp · 3 Nov 2020Acknowledged

Smart contracts will often have `owner` variables to designate the person with special privileges to make modifications to the smart contract. The following instances were identified in this project: 1. The owner of the `Allowlist` contract can perform the following actions: * Set the multipliers for any addresses to any value, any number of times. * Set the account limits for any pool to any value, any number of times. * Set the pool cap for any pool to any value, any number of times. 1. The owner of the `LPToken` contract can mint any amount of tokens to any address. There is no cap. 1. The owner of the `Swap` contract can: * Set admin fee values and withdraw the admin fees at any point in time as many times as they want. * Set the swap fee values at any point in time as many times as they want. * Set the default withdrawal fee values at any point in time as many times as they want. * Set the guarded status of the deposits. If set to `false` the pool will allow deposits over the allowed limit per user and will allow the TVL to go over the pool cap.

Open the report

Incidents2

Attached through a shared contract address. Our incident data ends in Oct 2026.

Incident

Incident,

Source: De.Fi incident database.

Audits before it
4.
Audits since
None on Trustblock.
Incident

Incident,

After the Saddle Finance official launch, some pools were arbitraged for millions within hours of launch.

Source: De.Fi incident database.

Audits before it
2.
Audits since
2, the latest dated 24 Sep 2021.

Contracts

No deployed address is recorded for these audits.

The reports name a repository or files. Open a report to see its scope.

The repositories and 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="saddle-finance"
></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