dForce security record

Arbitrum, Avalanche, BNB Chain, Ethereum, Optimism, Polygon (POS)dforce.networkXGitHub

As of 30 Oct 2026, dForce has 2 audit reports by 2 security firms on Trustblock; the latest is by Consensys, dated 1 Mar 2021. Those reports list no open critical findings. It also holds 1 incident (latest 9 Feb 2023).

Critical findings
No open critical findings
Across 2 reports.
Incident
Incident 9 Feb 2023
Source: De.Fi incident database. No audit on Trustblock is dated after it. See the incident
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.

Audits2

Newest first

AuditSecurity firmDateScopeCritical findingsReport
dForce Lending Protocol ReviewSecurity firm: ConsensysDate: Scope: Files named in the reportNo open critical findingsOpen · diligence.security
dForceSecurity firm: QuantstampDate: Scope: Files named in the reportNo open critical findingsOpen · certificate.quantstamp.com

Findings24

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

SeverityOpenAcknowledgedFixed
Critical000
High200
Medium431
Low680
MediumFee Recipient UpdatedForce · Quantstamp · 15 Dec 2020Acknowledged

When updating the interest provider in `USR.updateInterestProvider` the inherited fee recipient from `Chargeable` is not updated. (The address might be the same, however, nothing guarantees it.) Please note that in `USR.initialize` the fee recipient address it taken from `IInterestProvider(_interestProvider).funds()` which is not done inside `updateInterestProvider` when updating the provider.

Open the report
MediumPool MigrationdForce · Quantstamp · 15 Dec 2020Acknowledged

The check in lines 203-206 implemented in `migrateOldPool()` assumes the new contract does not hold any token balance, when tokens can be sent to the contract. The usage of such strict equality can deny access to that specific function.

Open the report
MediumTokens that add rewards or take fees may lead to DoSdForce · Quantstamp · 15 Dec 2020Acknowledged

Some functions make implicit assumptions that tokens remain constant in their supply during transactions. There exist tokens that add rewards or add fees, and hence their supply does not have to stay constant. We identified the following problematic pieces of code: * In `DFCollateral.sol`: line 18, * In `DFFunds.sol`: line 18, * In `DFPool.sol`: lines 23, 35, 47, 59, * In `DFPoolV2.sol`: lines 29, 41, 59, 77, 187, 203, * In `DFEngineV2.sol`: functions `deposit()` and `withdraw()`. Also the function `checkUSDXTotalAndColTotal()` in line 329; consequently all other operations that rely on it would fail.

Open the report
LowAllowance Double-Spend ExploitdForce · Quantstamp · 15 Dec 2020Acknowledged

As it presently is constructed, the contract is vulnerable to the [allowance double-spend exploit](https://github.com/OpenZeppelin/openzeppelin-solidity/blob/b4f87bb8fc25fb07f73099701e39e167a3d36465/contracts/token/ERC20/ERC20.sol#L71-L78), as with other ERC20 tokens. It applies to the following: * `approve()`/`transferFrom()` in `Collaterals_t.sol`, and * `approve()`/`transferFrom()` in `DSTokenBase.sol`.

Open the report
LowClone-and-OwndForce · Quantstamp · 15 Dec 2020Acknowledged

The clone-and-own approach involves copying and adjusting open source code at one's own discretion. From the development perspective, it is initially beneficial as it reduces the amount of effort. However, from the security perspective, it involves some risks as the code may not follow the best practices, may contain a security vulnerability, or may include intentionally or unintentionally modified upstream libraries.

Open the report
LowGas Usage / `for` Loop ConcernsdForce · Quantstamp · 15 Dec 2020Acknowledged

Gas usage is a main concern for smart contract developers and users, since high gas costs may prevent users from wanting to use the smart contract. Even worse, some gas usage issues may prevent the contract from providing services entirely. For example, if a `for` loop requires too much gas to exit, then it may prevent the contract from functioning correctly entirely. It is best to break such loops into individual functions as possible.

Open the report
LowLack of input validationdForce · Quantstamp · 15 Dec 2020Acknowledged

There are no non-zero checks for arguments of type address in the following: * `DFPool.constructor()`, * `DFPoolV2.constructor()`, `DFPoolV2.initialize()`, `DFPoolV2.migrateOldPool()`, * `Collaterals_t.constructor()`, * `DSWrappedToken.constructor()`, * `DFSetting.constructor()`, * `DFProtocolView.constructor()`, * `DFEngine.constructor()`, * `InterestProvider.initialize()`, * `Chargeable.initialize()`, * `USR.initialize()`. Furthermore, `DFStore._setSection()` does not check that `_wrappedTokens` is a list of unique tokens.

Open the report
LowMalicious tokens may cause a DoSdForce · Quantstamp · 15 Dec 2020Acknowledged

The function `_setSection()` adds tokens. Malicious token may lead to a DoS attack. Similar observation applies to the function `withdrawInterest()`.

Open the report
LowPrivileged Roles and OwnershipdForce · Quantstamp · 15 Dec 2020Acknowledged

Smart contracts will often have `owner` variables to designate the person with special privileges to make modifications to the smart contract.

Open the report
LowToo large value of `minimalBurnAmount` may prevent users from redeeming tokensdForce · Quantstamp · 15 Dec 2020Acknowledged

If the value of `minimalBurnAmount` is too large, it will prevent users from redeeming tokens.

Open the report
Show 1 more
LowUnlocked PragmadForce · Quantstamp · 15 Dec 2020Acknowledged

Every Solidity file specifies in the header a version number of the format `pragma solidity (^)0.4.*`. The caret (`^`) before the version number implies an unlocked pragma, meaning that the compiler will use the specified version _and above_, hence the term "unlocked".

Open the report

Incidents1

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

Incident

Incident,

65 million dollars.

Source: De.Fi incident database.

Audits before it
2.
Audits since
None on Trustblock.

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="dforce"
></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