DeFiChain security record

BNB Chain, Ethereumdefichain.comXGitHub

As of 3 Nov 2026, DeFiChain has 1 audit report on Trustblock, by CertiK, dated 10 Mar 2023. That report lists no open critical findings.

Critical findings
No open critical findings
In 1 report.
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.

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Quantum bridgeSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOpen · skynet.certik.com

Findings8

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

SeverityOpenAcknowledgedFixed
Critical000
High200
Medium001
Low005
MediumPotential Damage Due to Unprotected InitializerQuantum bridge · CertiK · 10 Mar 2023Fixed

The `bridgeV1` contract does not protect its initialize function. An attacker can call the initializer and assume ownership of the logic contract, whereby he can perform privileged operations that either indirectly break the proxy by destroying the logic contract or trick unsuspecting users into believing that he is the owner of the upgradeable contract. ```solidity=221 function initialize( address _initialAdmin, address _initialOperational, address _relayerAddress, address _communityWallet, uint256 _fee, address _flushReceiveAddress, uint256 _acceptableRemainingDays ) external initializer { __UUPSUpgradeable_init(); __EIP712_init(name, version); _grantRole(DEFAULT_ADMIN_ROLE, _initialAdmin); _grantRole(OPERATIONAL_ROLE, _initialOperational); communityWallet = _communityWallet; relayerAddress = _relayerAddress; transactionFee = _fee; flushReceiveAddress = _flushReceiveAddress; acceptableRemainingDays = _acceptableRemainingDays; }

Open the report
LowMissing proper sanity checks on `_newResetTimeStQuantum bridge · CertiK · 10 Mar 2023Fixed

The current implementation lacks proper sanity checks for the function argument `_newResetTimeStamp`. Setting `_newResetTimeStamp` to an excessively large value would cause the `bridgeToDeFiChain` operation to revert due to the `STILL_IN_CHANGE_ALLOWANCE_PERIOD` error. ```solidity=349 function changeDailyAllowance( address _tokenAddress, uint256 _dailyAllowance, uint256 _newResetTimeStamp ) external { if (!checkRoles()) revert NON_AUTHORIZED_ADDRESS(); if (!supportedTokens.contains(_tokenAddress)) revert ONLY_SUPPORTED_TOKENS(); if (_newResetTimeStamp < block.timestamp + 1 days) revert INVALID_RESET_EPOCH_TIME(); tokenAllowances[_tokenAddress].dailyAllowance = _dailyAllowance; uint256 prevTimeStamp = tokenAllowances[_tokenAddress].latestResetTimestamp; tokenAllowances[_tokenAddress].latestResetTimestamp = _newResetTimeStamp; tokenAllowances[_tokenAddress].currentDailyUsage = 0; emit CHANGE_DAILY_ALLOWANCE(_tokenAddress, _dailyAllowance, prevTimeStamp, _newResetTimeStamp); } ```

Open the report
LowNo Upper Limits for FeesQuantum bridge · CertiK · 10 Mar 2023Fixed

There are no upper boundaries for transaction fee in function `changeTxFee()` . It is possible to set the total transaction fee rate up to 100%. ```solidity=435 function changeTxFee(uint256 fee) external onlyRole(DEFAULT_ADMIN_ROLE) { uint256 oldTxFee = transactionFee; transactionFee = fee; emit TRANSACTION_FEE_CHANGED(oldTxFee, transactionFee); } ```

Open the report
LowOut of Scope DependencyQuantum bridge · CertiK · 10 Mar 2023Fixed

The `BridgeV1` contract serves as the underlying entity to interact with the external dependency `relayer`. The relayer can sign instructions for fund claiming, which users can submit to the blockchain. The scope of the audit treats component that is out of scope as black boxes and assumes their functional correctness.

Open the report
LowPotential Gas ExhaustionQuantum bridge · CertiK · 10 Mar 2023Fixed

The computation for each iteration is complex. It could lead to Out-of-gas exception when the number of supported tokens is large. ```solidity=378 function flushFund() external { for (uint256 i = 0; i < supportedTokens.length(); ++i) { address supToken = supportedTokens.at(i); if ( (IERC20(supToken).balanceOf(address(this)) > acceptableRemainingDays * tokenAllowances[supToken].dailyAllowance) && // the same logic as in bridgeToDeFiChain applies here, if we are still // in the period for addingSupport or changingDailyAllowance, we will not flush for that particular token (tokenAllowances[supToken].latestResetTimestamp <= block.timestamp) ) { uint256 amountToFlush = IERC20(supToken).balanceOf(address(this)) - acceptableRemainingDays * tokenAllowances[supToken].dailyAllowance; IERC20(supToken).transfer(flushReceiveAddress, amountToFlush); } } emit FLUSH_FUND(); } ```

Open the report
LowUnchecked ERC-20 `transfer()`/`transferFrom()` CaQuantum bridge · CertiK · 10 Mar 2023Fixed

The return value of the transfer()/transferFrom() call is not checked in the following lines. ```solidity=265 IERC20(_tokenAddress).transfer(_to, _amount); ``` --- ```solidity=300 IERC20(_tokenAddress).transferFrom(msg.sender, address(this), netAmountInWei); ``` --- ```solidity=301 IERC20(_tokenAddress).transferFrom(msg.sender, communityWallet, netTxFee); ``` --- ```solidity=370 IERC20(_tokenAddress).transfer(msg.sender, amount); ``` --- ```solidity=391 IERC20(supToken).transfer(flushReceiveAddress, amountToFlush); ```

Open the report

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