Equilibrium Quantum security record

BNB Chain, Ethereumeq2140.comXGitHub

As of 3 Nov 2026, Equilibrium Quantum has 2 audit reports by 1 security firm on Trustblock; the latest is by CertiK, dated 27 Nov 2024. Those reports list no open critical findings.

Critical findings
No open critical findings
Across 2 reports.
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 Nov 2026. Trustblock does not review code.

Audits2

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Equilibrium Quantum addendumSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOriginal removed
Equilibrium QuantumSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOriginal removed

Findings19

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

SeverityOpenAcknowledgedFixed
Critical000
High202
Medium001
Low509
HighIncomplete Deletion of Structs with Dynamic DataEquilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

Maps are never `empty` in Solidity. So if someone accesses an item which has been deleted, the transaction will not revert but instead return the zero value for that datatype. If a mapping (or dynamic array) is inside a struct and the struct is deleted, the mapping or array will not be deleted. With the exception of deleting an array, the delete keyword can only delete one storage slot. If the storage slot contains references to other storage slots, those won’t be deleted. Due to historical data(`action.signatures`) not being cleared, the owner is unable to execute previously executed calls. ```solidity require(!action.signatures[msg.sender], "Ownable: action already signed by caller"); ``` Reference: - https://www.rareskills.io/post/smart-contract-security - https://docs.soliditylang.org/en/latest/types.html#delete

Open the report
HighTransferFrom Uses More/Less Allowance For SpenderEquilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

The `transferFrom` function within the smart contract contains a critical security issue related to how allowances are handled. When a spender initiates a `transferFrom` call, the intention is for the smart contract to transfer an amount of tokens from the owner's balance to a third-party address, deducting the same amount from the spender's allowance. However, due to the current flawed implementation, the amount actually deducted from the spender's allowance can be more/less than the amount transferred if fees are involved. - For instance, if the spender is authorized to spend 100 tokens and they execute a `transferFrom` for that amount, the system may only reduce the allowance by 90 tokens to account for fees taken from the transferred amount, not from the spender's allowance. - For instance, if the spender wants to spend 90 tokens and they execute a `transferFrom` for that amount, the system may reduce the allowance by 100 tokens to account for fees. This creates a loophole where the spender can end up spending more/less allowance than expected.

Open the report
MediumSelling Operation Can Be Blocked MaliciouslyEquilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

The tokenomics of `EQToken` prohibit users from buying and selling `EQToken` within the same block. Specifically, when users purchase tokens, the current block number is recorded as `lastTransactionBlock[user]`. This block number is then used to determine if a selling operation is attempted within the same block. ```solidity if (to == pairAddress) { require( block.number != lastTransactionBlock[from], "Cannot buy/sell in the same block" ); taxFee = (amount * dexTaxFee) / 10_000; require(amount > taxFee, "Amount less than tax fee"); super._transfer(from, taxAddress, taxFee); emit TransferTaxPaid(from, taxAddress, taxFee); } if (from == pairAddress) { lastTransactionBlock[to] = block.number; // Update the last transaction block for the user } ``` However, when users try to sell tokens, malicious users can exploit this by swapping or skimming tokens to their own address, leading to a denial of service (DoS) for the seller.

Open the report
LowBase Uri Not UsedEquilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

Generally, the base URI for NFTs is used to specify the base path for all NFT metadata. It simplifies metadata management by allowing access to each NFT's specific metadata by appending the token ID to the base URI. This helps maintain consistency in organizing and accessing metadata. However, in the contract, the `baseURI` variable is assigned a value but is not used elsewhere.

Open the report
LowMeaningless `unchecked`Equilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

The purpose of the `unchecked` block is to explicitly skip overflow checks to improve performance. However, in the following code, the `unchecked` block itself doesn't perform any mathematical operations, so it is meaningless in this case. ```solidity uint256 nonce = userNonceList[_user]; uint256 newNonce = nonce + 1; unchecked { userNonceList[_user] = newNonce; } ```

Open the report
LowMeaningless JudgementEquilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

The `getAndIncrementUserNonce()` function already has the following requirements, and when `lockBlock` is 0, the two requirements are the same. ```solidity require( block.number >= lastBlock, "Current block number is less than last block." ); require( block.number - lockBlock >= lastBlock, "Operation locked for this block." ); ```

Open the report
LowMissing Zero Address ValidationEquilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

The cited address input is missing a check that it is not `address(0)`.

Open the report
LowPotential Incorrect Import PathEquilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

The `LPPool` contract and the `Store` contract have both imported the `ReentrancyGuard.sol` contract to utilize its anti-reentrancy functionality. However, their import paths differ, indicating that one of them may be incorrect.

Open the report
LowPotential Loss of PrecisionEquilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

The `buyGas()` function is responsible for distributing tokens that users have purchased. However, there is a potential precision loss issue when calculating related values by multiplying each ratio. ```solidity for (uint256 i = 0; i < 4; i++) { allocTokenAmountList[i] = (tokenAmount * buyGasAllocRatioList[i + 1]) / 10000; } ``` This can lead to a small amount of tokens being locked in the contract.

Open the report
LowPotential Reentrancy AttackEquilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

A reentrancy attack can occur when the contract creates a function that makes an external call to another untrusted contract before resolving any effects. If the attacker can control the untrusted contract, they can make a recursive call back to the original function, repeating interactions that would have otherwise not run after the external call resolved the effects.

Open the report
Show 2 more
LowPotential USDT Authorization FailureEquilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

In the `Store` contract, users can purchase tokens or NFTs using the `usdtTokenAddress`. However, it is important to note that the `approve()` function of the [`USDT`](https://etherscan.io/address/0xdac17f958d2ee523a2206206994597c13d831ec7#code) contract doesn't return a value, which makes it incompatible with the approve function in the OpenZeppelin IERC20 interface. If `usdtTokenAddress` is the `USDT` contract on the Ethereum chain, the call will fail. **USDT contract on the Ethereum chain:** ```solidity function approve(address _spender, uint _value) public onlyPayloadSize(2 * 32) ``` **IERC20 of the OpenZeppelin**: ```solidity function approve(address spender, uint256 amount) external returns (bool) ```

Open the report
LowUse `_safeMint` instead of `_mint`Equilibrium Quantum addendum · CertiK · 27 Nov 2024Fixed

According to the comments in the `_mint()` function from OpenZeppelin's `ERC721` contract, the use of `_mint` is discouraged. ```solidity /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } ```

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="equilibrium-quantum"
></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