Qrkita security record

BNB Chaintokoqrt.com

As of 3 Nov 2026, Qrkita has 1 audit report on Trustblock, by CertiK, dated 30 May 2023. 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
Qrkita ExchangeSecurity firm: CertiKDate: Scope: 1 address on BNB ChainNo open critical findingsOpen · skynet.certik.com

Findings17

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

SeverityOpenAcknowledgedFixed
Critical000
High022
Medium004
Low207
HighCentralized risk in `addLiquidity`Qrkita Exchange · CertiK · 30 May 2023Fixed

```solidity=1043 // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); ``` The `addLiquidity` function calls the `uniswapV2Router.addLiquidityETH` function with the `to` address specified as `owner()` for acquiring the generated LP tokens from the `QRT-BNB` pool. As a result, over time the `_owner` address will accumulate a significant portion of LP tokens. If the `_owner` is an EOA (Externally Owned Account), mishandling of its private key can have devastating consequences to the project as a whole.

Open the report
HighContract gains non-withdrawable BNB via the `swapQrkita Exchange · CertiK · 30 May 2023Fixed

The `swapAndLiquify` function converts half of the `contractTokenBalance` QRT tokens to BNB. The other half of QRT tokens and part of the converted BNB are deposited into the QRT-BNB pool on pancakeswap as liquidity. For every `swapAndLiquify` function call, a small amount of BNB leftover in the contract. This is because the price of QRT drops after swapping the first half of QRT tokens into BNBs, and the other half of QRT tokens require less than the converted BNB to be paired with it when adding liquidity. The contract doesn't appear to provide a way to withdraw those BNB, and they will be locked in the contract forever.

Open the report
Medium`_previousBurnFee` is updated to `_taxFee` in mulQrkita Exchange · CertiK · 30 May 2023Fixed

The following 4 functions set different fee rates for the 4 types of fee, and updates the corresponding "previous fee" variable. During the process, `_previousBurnFee` is updated to `_taxFee` instead of `_burnFee`. - `enableDefaultFees()` - `enableLowFees()` - `enableHighFees()` - `disableAllFees()` ```solidity=1133 function enableDefaultFees() external onlyOwner() { _taxFee = 12; _previousTaxFee = _taxFee; _liquidityFee = 5; _previousLiquidityFee = _liquidityFee; _burnFee = 4; _previousBurnFee = _taxFee; _marketingFee = 3; // Marketing fee is to energize the token development and also a buyback & burn program. _previousmarketingFee = _marketingFee; inSwapAndLiquify = true; emit SwapAndLiquifyEnabledUpdated(true); } ```

Open the report
Medium`restoreAllFee()` sets fee rates to default fee rQrkita Exchange · CertiK · 30 May 2023Fixed

In function `_tokenTransfer()`, if the sender or receiver is excluded from fees, the code will call `removeAllFee()` to set all the fee to 0 before the transfer. When token transfer finishes, the code will call `restoreAllFee()` to set the fees back. Function `restoreAllFee()` does not restore the fees from the 4 "previous fees"; instead, it updates the fee to a fixed value. This set of values seem to be the default rate, as it matches the setting in function `enableDefaultFees()`. This could be a problem because the contract also allows for other sets of fee rates. Once an excluded account makes/receives a transfer, the fee rate will be reset to default, whatever the previous fee rate. ```solidity=949 function restoreAllFee() private { _taxFee = 12; _liquidityFee = 5; _burnFee = 4; _marketingFee = 3; } ```

Open the report
MediumPancake Pair not Excluded From RewardsQrkita Exchange · CertiK · 30 May 2023Fixed

Generally, deflationary tokens are incompatible with DEX and special rules need to be coded for DEX addresses eg. excluding them from reward. Otherwise, a hacker can exploit the protocol using the reflection mechanism.

Open the report
MediumProblematic design of `_burnFee`Qrkita Exchange · CertiK · 30 May 2023Fixed

Contract `QrkitaToken` introduces `_burnFee` and `_marketingFee` along with the tax fee and liquidity fee. In function `_tokenTransfer`, the corresponding percentage of burn fee and marketing fee is deducted from the total transfer amount. Marketing fee is then transferred to `marketingWallet` without fees. On the other hand, no action is taken on burn fee, and it'll stay in the sender's wallet. For example, for a `_burnFee` of 4, only 96% of the requested transfer amount will be transferred out to the recepient or collected as fees; the remaining 4% will stay in the sender's wallet.

Open the report
LowComment inconsistent with codeQrkita Exchange · CertiK · 30 May 2023Fixed

At the beginning of the contract, the comment describes a 4% fee, which does not match with the code. ```solidity=3 /** Website: https://qrkita.exchange # qrkita features: ⤏ 1% fee distributed to all holders every transaction ⤏ 1% fee auto added to the liquidity pool every transaction ⤏ 1% Partnerships wallet ⤏ 1% Charity Wallet */ ```

Open the report
LowMinor typosQrkita Exchange · CertiK · 30 May 2023Fixed

There are several typos in the code and comments. 1. Event `SwapAndLiquify`: `tokensIntoLiqudity` should be `tokensIntoLiquidity`. ```solidity=724 event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); ``` 2. Comment on line 876: `recieve` should be `receive` and `swaping` should be `swapping`. ```solidity=876 //to recieve ETH from uniswapV2Router when swaping ``` 3. Function on line 455: `geUnlockTime()` should be `getUnlockTime()`. ```solidity=455 function geUnlockTime() public view returns (uint256) { return _lockTime; } ``` 4. Require statement on line 851: "Account is already excluded" should be "Account is already included". ```solidity=850 function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); ... ```

Open the report
LowPossible to gain ownership after renouncing the cQrkita Exchange · CertiK · 30 May 2023Fixed

An owner is possible to gain ownership of the contract even if they calls function `renounceOwnership` to renounce the ownership. This can be achieved by performing the following operations: 1. Call `lock` to lock the contract. The variable `_previousOwner` is set to the current owner. 2. Call `unlock` to unlock the contract. 3. Call `renounceOwnership` to leave the contract without an owner. 4. Call `unlock` to regain ownership.

Open the report
LowPotential sandwich attacksQrkita Exchange · CertiK · 30 May 2023Fixed

A sandwich attack might happen when an attacker observes a transaction swapping tokens or adding liquidity without setting restrictions on slippage or minimum output amount. The attacker can manipulate the exchange rate by frontrunning (before the transaction being attacked) a transaction to purchase one of the assets and make profits by backrunning (after the transaction being attacked) a transaction to sell the asset. The following functions are called without setting restrictions on slippage or minimum output amount, so transactions triggering these functions are vulnerable to sandwich attacks, especially when the input amount is large: - `uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens()` - `uniswapV2Router.addLiquidityETH()`

Open the report
Show 3 more
LowRedundant codeQrkita Exchange · CertiK · 30 May 2023Fixed

In function `_tokenTransfer`, the condition `!_isExcluded[sender] && !_isExcluded[recipient]` can be included in `else` . ```solidity=1067 if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt))); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt))); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt))); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt))); } else { _transferStandard(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt))); } ```

Open the report
LowVariable `_rOwned[account]` Not Updated in FunctiQrkita Exchange · CertiK · 30 May 2023Fixed

```solidity function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } ``` Variable `_rOwned[account]` is not updated in the function `includeInReward()`, which will make the accounts included siphon off the tokens out of the balances of all token holders. The Rate was higher at the moment of the `excludeFromReward(account)` call, so the `_rOwned[account] / _tOwned[account]` ratio is bigger than expected for accounts included in the reward.

Open the report
LowVariables can be declared as constantQrkita Exchange · CertiK · 30 May 2023Fixed

The following variables could be declared as `constant` since these state variables are never to be changed. A big advantage of constant variables is that reading them is significantly cheaper than reading from regular state variables since will not be stored in storage. Still, values will directly insert the values into the runtime code. - `_tTotal` - `numTokensSellToAddToLiquidity` - `_name` - `_symbol` - `_decimals`

Open the report

Contracts1

AddressChainSource code
0x72b6887a46043c1299d3dae707893123d47cf73dChain: 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="qrkita"
></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