DBTC security record

BNB Chaindogpet.worldX

As of 3 Nov 2026, DBTC has 1 audit report on Trustblock, by CertiK, dated 26 Sep 2024. That report lists no open critical findings. It also holds 1 deployed contract on 1 chain.

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
DBTCSecurity firm: CertiKDate: Scope: 1 address on BNB ChainNo open critical findingsOpen · skynet.certik.com

Findings28

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

SeverityOpenAcknowledgedFixed
Critical000
High020
Medium035
Low8010
MediumIncorrect `super.transferFrom` UsageDBTC · CertiK · 26 Sep 2024Fixed

The `autoBurnLiquidityPairTokens` function uses `super.transferFrom` to transfer `DBTC` tokens from the pair address to a dead address. However, the function may revert due to insufficient allowance. Since `_mainPair` refers to the deployed pair address for `DBTC` and the `currency`, there is no method to set `allowance[_mainPair][address(this)]` within the `_mainPair` contract, which is required for `super.transferFrom` to execute successfully. As a result, whenever the `fundAddress` calls the `burnLiquidityPairTokens` function to burn tokens from the pair address, the transaction will revert.

Open the report
MediumLack of Access Control in `burnLiquidityPairTokenDBTC · CertiK · 26 Sep 2024Fixed

The `burnLiquidityPairTokens` function is designed to burn `DBTC` tokens in the liquidity pair to potentially increase the value of `DBTC`. However, the function lacks proper access control, allowing any user to call it. Below is the relevant code snippet: ```solidity function burnLiquidityPairTokens() external { require(block.timestamp >= lastLpBurnTime + lpBurnFrequency, "Not yet"); autoBurnLiquidityPairTokens(); } ``` In contrast, the `_tokenTransfer` function restricts this operation to only be triggered by `sender == burnLiquidityAddress`. The absence of similar access control in `burnLiquidityPairTokens` allows any user to exploit this function, potentially manipulating the market to increase their profit from buying or selling `DBTC` tokens.

Open the report
MediumPotential Incorrect Fee Calculation During LiquidDBTC · CertiK · 26 Sep 2024Fixed

The `_tokenTransfer` function applies fees for both adding and removing liquidity, which can lead to users being charged both fees simultaneously. Below is the relevant code snippet: ```solidity if (isAdd || isRemove) { if (addLiquidityFee > 0) { uint256 fee = amount * addLiquidityFee / 10000; amount -= fee; _basicTransfer(sender, address(this), fee); } if (removeLiquidityFee > 0) { uint256 fee = amount * removeLiquidityFee / 10000; amount -= fee; _basicTransfer(sender, address(this), fee); } } ``` In scenarios where `isAdd` is true (indicating an adding liquidity transaction) and both `addLiquidityFee` and `removeLiquidityFee` are greater than zero, the contract will apply both fees. This results in an incorrect fee deduction, causing user's financial loss.

Open the report
MediumPotential Misjudgment in Adding/Removing LiquiditDBTC · CertiK · 26 Sep 2024Fixed

The `_isAddLiquidity()` function exhibits inaccuracies under specific conditions, making it difficult to determine if liquidity is being added or removed within a single transaction. 1. The returned result may vary depending on whether the token is token0 or token1 in the pair. 2. The returned result may also vary depending on whether the caller uses the Uniswap router or directly invokes the pair's `swap()`, `mint()`, or `burn()` functions. Executing a swap similar to a flash loan through the [linked code logic](https://github.com/Uniswap/v2-core/blob/1136544ac842ff48ae0b1b939701436598d74075/contracts/UniswapV2Pair.sol#L172) may allow an arbitrager to bypass the `_isAddLiquidity` check. Due to this misjudgment, the caller may avoid paying fees or gain other undue profits. The `_isRemoveLiquidity()` function has a similar issue.

Open the report
MediumUnused reentrancy flagDBTC · CertiK · 26 Sep 2024Fixed

The modifier `lockTheSwap` is never used and therefore can cause the contract to be vulnerable to potential reentrancy attacks when swaps and transfers are being processed.

Open the report
LowDiscussion on the `_tokenDistributor` SettingDBTC · CertiK · 26 Sep 2024Fixed

The `_tokenDistributor` acts as an intermediary to transfer the swapped `currency` to `address(this)`. If the allowance of `address(this)` is not correctly set in the new `distributor` contract, the `transferFrom` method will revert. ```solidity _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens( half, 0, path, address(_tokenDistributor), block.timestamp ) {} catch { emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(half); } uint256 newBal = _c.balanceOf(address(_tokenDistributor)); if (newBal != 0) { _c.transferFrom(address(_tokenDistributor), address(this), newBal); } ```

Open the report
LowFunction `balanceOf` of Contract `DBTCoinNew` FaiDBTC · CertiK · 26 Sep 2024Fixed

It is expected that the `balanceOf` function always succeeds, assuming that its execution does not run out of gas. However, the implementation of `balanceOf` in contract `DBTCoinNew` will revert in the following case: ```solidity if (account == _mainPair && msg.sender == _mainPair && antiSYNC) { require(super.balanceOf(_mainPair) > 0, "!sync"); } ``` Additionally, the `antiSYNC` variable can not completely prevent the price manipulation.

Open the report
LowInconsistent Comment and CodeDBTC · CertiK · 26 Sep 2024Fixed

The comment in the `calculateFee` is not consistent with the code. ```solidity function calculateFee(uint256 amount) public view returns (uint256 burnAmount) { if (dailyDropPercentage <= 500) { return (0); // 正常10%划点 } else if (dailyDropPercentage <= 1000) { return (amount * 500 / 10000); // 划点15%,其中5%销毁 } else if (dailyDropPercentage <= 1500) { return (amount * 1000 / 10000); // 划点20%,其中10%销毁 } else if (dailyDropPercentage <= 2000) { return (amount * 1500 / 10000); // 划点25%,其中15%销毁 } else if (dailyDropPercentage <= 3000) { return (amount * 2000 / 10000); // 划点30%,其中20%销毁 } else if (dailyDropPercentage <= 4000) { return (amount * 2500 / 10000); // 划点35%,其中25%销毁 } else { return (amount * 2500 / 10000); // 划点35%,其中25%销毁 } } ```

Open the report
LowIncorrect Allowance Update on Currency ChangeDBTC · CertiK · 26 Sep 2024Fixed

In the constructor, the token contract approves the router with the maximum allowance using the following code snippet: ```solidity IERC20(currency).approve(address(_swapRouter), MAX); ``` However, when the currency is updated, the relevant allowance is not updated accordingly. This can cause swap operations to fail since the new currency might not have the appropriate allowance set for the router.

Open the report
LowMissing Zero Address ValidationDBTC · CertiK · 26 Sep 2024Fixed

The cited addresses input lack a validation check to ensure they are not `address(0)`. This omission may result in the relevant addresses being set to an incorrect value, potentially causing adverse effects on the project.

Open the report
Show 5 more
LowPotential Double Transfer in `_tokenTransfer` FunDBTC · CertiK · 26 Sep 2024Fixed

In the `DBTCoinNew` contract, there is a potential issue in the `_tokenTransfer` function that could result in an unintended double transfer of tokens. ```solidity if (amount > 0) { _basicTransfer(sender, recipient, amount); } else { _basicTransfer(sender, recipient, tAmount); } ``` This `else` branch means that if the total amount after deducting all fees is zero, the original amount (`tAmount`) is transferred again from the `sender`. For example, if a sender intends to send 100 tokens to a receiver and the fee rate is set at 100% (with no cap on the fee setting), this function will end up transferring 200 tokens from the sender's account. If the sender doesn't have sufficient balance, the transfer operation will revert because the token balance is less than 200.

Open the report
LowPotential Inconsistency on Token Pair and RouterDBTC · CertiK · 26 Sep 2024Fixed

The `setMainPair` function allows the `owner` to set the `_mainPair` address, which represents the token pair involving the `DBTC` token and another currency. Additionally, the `setCurrency` function allows the `owner` to set the `currency` address, and the `setSwapRouter` function allows the `owner` to set the `_swapRouter` address, which is responsible for executing swap operations on the token pair. There is a potential risk if the `_mainPair`, `currency`, and `_swapRouter` addresses are not updated consistently. This could lead to incorrect pair configurations and swap operations, potentially causing financial loss or operational issues.

Open the report
LowPotential Loss of `_reflowAmount` Due to ImproperDBTC · CertiK · 26 Sep 2024Fixed

In the `_tokenTransfer` function, the `_reflowAmount` is reset to 0 after calling the `swapSellReflow` function, irrespective of whether the swap operation succeeds or fails. The relevant code snippet is as follows: ```solidity if (_reflowAmount > 0) { swapSellReflow(_reflowAmount); _reflowAmount = 0; } ``` The `swapSellReflow` function includes a try-catch block to handle potential errors without reverting the entire transaction. However, if the swap operation fails, `_reflowAmount` is still reset to 0. This can lead to the loss of `_reflowAmount` and may cause side effects, such as incorrect accounting or missed reflow operations.

Open the report
LowRouter should not be in the fee exempt whitelistDBTC · CertiK · 26 Sep 2024Fixed

Some restrictions can be bypassed by swapping tokens to the router and then retrieving them from it. When tokens are transferred to the router, the attacker exploits the router function ***`removeLiquidityETHSupportingFeeOnTransferTokens`***, which sends all specified tokens in the router to a designated address. This is possible because the router is not intended to hold tokens for any purpose other than removing liquidity.

Open the report
LowUsage of `transfer()`DBTC · CertiK · 26 Sep 2024Fixed

After [EIP-1884](https://eips.ethereum.org/EIPS/eip-1884) was included in the Istanbul hard fork, it is not recommended to use `.transfer()` or `.send()` for transferring ether as these functions have a hard-coded value for gas costs making them obsolete as they are forwarding a fixed amount of gas, specifically `2300`. This can cause issues in case the linked statements are meant to be able to transfer funds to other contracts instead of EOAs.

Open the report

Contracts1

AddressChainSource code
0xede744facd6c046ae3177238cb5afcda8a5b2920Chain: BNB ChainSource code: Verified source

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