OpenSea security record

BNB Chainopensea.ioX

As of 14 Oct 2026, OpenSea has 2 audit reports by 1 security firm on Trustblock; the latest is by Quantstamp, dated 2 Sep 2022. 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 Oct 2026. Statuses are the security firms’ own. Trustblock does not review code.

Audits2

Newest first

AuditSecurity firmDateScopeCritical findingsReport
NFT Market (PresetHTC, Auction, Store)Security firm: QuantstampDate: Scope: Files named in the reportNo open critical findingsOpen · certificate.quantstamp.com
NFTMarketSecurity firm: QuantstampDate: Scope: Files named in the reportNo open critical findingsOpen · certificate.quantstamp.com

Findings28

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

SeverityOpenAcknowledgedFixed
Critical000
High122
Medium042
Low386
HighCopy and Sell / Instantly Buy with Low PriceNFT Market (PresetHTC, Auction, Store) · Quantstamp · 2 Sep 2022Acknowledged

In contract `NFTStore.sol`, in function `launchProduct()`, LAUNCH_ROLE will add product into the system, and buyer can later pay for the product. The NFT contract will have to assign contract `NFTStore` as a mint role so that `NFTStore` can mint token for the buyer. However, such design can easily be exploited. This also applies to `NFTAuction.launchAuction()`.

Open the report
HighMissing Test SuiteNFTMarket · Quantstamp · 5 Apr 2022Acknowledged

The project has no test suite.

Open the report
MediumMultiple Auctions for Same Nft Leads to Lock of FundsNFT Market (PresetHTC, Auction, Store) · Quantstamp · 2 Sep 2022Acknowledged

There is no control that a unique token(combination of _contractAddr and _tokenId) is not launched in multiple auctions. If same token is listed in different actions, bidders send their funds to the contract on different auctions of the token. But the finalizeAuction will be executed successfully for just one of the auctions, and others will fail due to trying to mint an existing token and the funds get locked in the contract. Similar scenario leads to lock of the funds if a previousely minted token is launcehd in an auction.

Open the report
MediumSame Nft Tokenid in the Store/auctionNFT Market (PresetHTC, Auction, Store) · Quantstamp · 2 Sep 2022Acknowledged

In `NFTStore.sol`, Two product `A`, `B` can have the same contract address and `productTokenIds[A]`, `productTokenIds[B]` may have the same TokenID. So, when that token is minted in the product `A`. The token cannot be minted again in `B`, which means that product exists but is invalid to be bought. Although this would not harm the security, since the transaction will revert in the end. But this gives users bad using experience. Similarly in `NFTAuction.sol`, two auctions for the same NFT can exist at the same time. The situation in `NFTAuction` is even worse since this will result a waste of gas from multiple parties. And the seller has to cancel an auction to return ether to the bidder if the token can no longer be minted. If the seller refuse to cancel the auction, the fund used for bid will be **locked** in the contract.

Open the report
MediumDependence on external contracts through `fullSupportContract`NFTMarket · Quantstamp · 5 Apr 2022Acknowledged

It is not clear which contracts will be registered as “full support contracts”, however the function `acceptOffer()` performs external calls to upon these contracts to invoke and `creatorProfitOf(uint256)`. If the contract is malicious, it may return profit values arbitrarily high.

Open the report
MediumUse of External TokensNFTMarket · Quantstamp · 5 Apr 2022Acknowledged

External contracts are used throughout the project. If the external contracts do not behave as expected, an auction may be launched/finished/canceled without transferring the actual token (see lines 145 and 223, 441, 498, 525, 609, 687). Furthermore, the tokens may cause re-entrancy.

Open the report
LowClone-and-OwnNFT Market (PresetHTC, Auction, Store) · Quantstamp · 2 Sep 2022Acknowledged

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. In particular, OpenZeppelins `ReentrancyGuard` [code](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol) as well as `Pausable` [code](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/Pausable.sol) is cloned-and-owned inside `NFTAuction.sol` and `NFTStore.sol`.

Open the report
LowDangerous Use of `_isContract()`NFT Market (PresetHTC, Auction, Store) · Quantstamp · 2 Sep 2022Acknowledged

Functions `vipBuy()` and `Buy()` have the check `require(!_isContract(msg.sender), "Illegal operation from contract.");`. However, `_isContract()` will incorrectly return `false` for contracts calling from within the constructor, allowing them to bypass this check. The check should therefore not be relied upon as a security measure.

Open the report
LowUncapped FeesNFT Market (PresetHTC, Auction, Store) · Quantstamp · 2 Sep 2022Acknowledged

Functions `NFTAuction.setAuctionData()` and `NFTStore.setStoreData()` are having no further constraints on the `_storeProfit` other than 100%. Consequently, users can be subject to very high fees. This can subject users to high fees with no prior announcments.

Open the report
LowUninitialized ContractNFT Market (PresetHTC, Auction, Store) · Quantstamp · 2 Sep 2022Acknowledged

`NFTAuction.sol` and `NFTStore` contracts inherit from `AccessControlUpgradeable` contract which is never initialized. Although the `__AccessControl_init` has no implementation but the contract is upgradable and might change in future.

Open the report
Show 4 more
LowDangerous Use of `_isContract()` CheckNFTMarket · Quantstamp · 5 Apr 2022Acknowledged

Several functions such as `launchAuction()` and `bidOrBuy()` have the check `!_isContract(msg.sender)`. However, `_isContract()` will incorrectly return `false` for contracts that are still under construction, allowing new contracts to bypass this check. The check should therefore not be relied upon as a security measure.

Open the report
LowDefault Fees May Not Match SpecificationNFTMarket · Quantstamp · 5 Apr 2022Acknowledged

The specification states that the “contract also charges a handling fee of 3 percent at default”, and comments within the `AuctionInfo` struct on L62-63 suggest that 1% will go toward the creator and 2% will go to the store. However, the default `_creatorProfit` value is set to 0 on L154, and is only set to new value if `isFullSupportContract(_contractAddr)` is true. It is not clear based on the code provided if this correctly sets the creator fee to 1%.

Open the report
LowMissing Values in `getAuctionInfo()`NFTMarket · Quantstamp · 5 Apr 2022Acknowledged

The following `AuctionInfo` fields are missing from the return values: 1. `contractAddr` 1. `tokenID` 1. `createTime` Is this due to callstack limits? While `contractAddr` and `tokenId` can be obtained from `getAuctionContractInfo()`, `createTime` has no getter function and is not used anywhere.

Open the report
LowPrivileged Roles and OwnershipNFTMarket · Quantstamp · 5 Apr 2022Acknowledged

Smart contracts will often have `owner` variables to designate the person with special privileges to make modifications to the smart contract. Specifically, the owner may set future auction data, particularly the `storeDefaultProfit` value which may be arbitrarily high.

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