Virtualness security record

As of 14 Oct 2026, Virtualness has 1 audit report on Trustblock, by QuillAudits, dated 24 Jul 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 and findings, contracts and incidents up to Oct 2026. Statuses are the security firms’ own. Trustblock does not review code.

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
VirtualnessSecurity firm: QuillAuditsDate: Scope: Files named in the reportNo open critical findingsOpen · quillaudits.com

Findings41

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

SeverityOpenAcknowledgedFixed
Critical000
High100
Medium203
Low19016
HighUser can use mintData created and signed for different order:Virtualness · QuillAudits · 24 Jul 2023Not fixed

A mint data signed for one order can be used for another order.If sell.order.trader and sell.order.collection.tokenId are matching with mintData.creators[0].account and mintData.tokenId respectively then other mintData can be used for another order for which that wasn't created. here because other data from the mintData like uri,supply etc is not getting checked ( because the mintData is the way owner/minter provides it) user would be able to change the uri,supply to the other mintData's uri and supply if they use different mintData

Open the report
MediumCentralization in isApprovedForAllVirtualness · QuillAudits · 24 Jul 2023Not fixed

isApprovedForAll returns true for all the addresses which have a minter role. This can be problematic where a malicious person with minter role tries to transfer tokens from someone's ( user’s) account to another account using tansferFrom() as the malicious address would be able to transfer even without having approvals.On the other side from the user's perspective users would like to have more control over their token approvals.

Open the report
MediumCentralization in isApprovedForAllVirtualness · QuillAudits · 24 Jul 2023Not fixed

isApprovedForAll returns true for all the addresses which have a minter role. This can be problematic where a malicious person with minter role tries to transfer tokens from someone's ( user’s) account to another account using tansferFrom() as the malicious address would be able to transfer even without having approvals.On the other side from the user's perspective users would like to have more control over their token approvals.

Open the report
LowAbsence of setBaseURIVirtualness · QuillAudits · 24 Jul 2023Not fixed

base Uri is not getting set in the initialize function , and the contract is doesn't has internal setBaseURI() from ERC1155URIStorageUpgradeable exposed with public function. So that authorized address can call it .While setting uri for tokenIds the _setURI is getting used, where full uri needs to be set.

Open the report
LowAdd extra check for zero address signerVirtualness · QuillAudits · 24 Jul 2023Not fixed

It can happen that invalid signature may end up recovering invalid signer as the zero address. The used openzeppelin’s ECDSAUpgradeable should revert in the case where it recovers zero address. But it's a good idea to have an extra check in place for handling this situation in lazyMint().

Open the report
LowAdd extra check for zero address signerVirtualness · QuillAudits · 24 Jul 2023Not fixed

It can happen that invalid signature may end up recovering invalid signer as the zero address. The used openzeppelin’s ECDSAUpgradeable should revert in the case where it recovers zero address. But it's a good idea to have an extra check in place for handling this situation in lazyMint().

Open the report
Lowcare needs to be taken for the addresses while removing minter roleVirtualness · QuillAudits · 24 Jul 2023Not fixed

In the scenario where address having minter role signs the mintData and later minter role of that address gets removed then while executing the order with that mintData the transaction can revert when lazyMint() checks the signer recovered is owner or the address having minter role, As at that moment the address won’t have the minter role.This scenario should be noted while performing actions such as removing minter role.

Open the report
Lowcare needs to be taken for the addresses while removing minter roleVirtualness · QuillAudits · 24 Jul 2023Not fixed

In the scenario where address having minter role signs the mintData and later minter role of that address gets removed then while executing the order with that mintData the transaction can revert when lazyMint() checks the signer recovered is owner or the address having minter role, As at that moment the address won’t have the minter role.This scenario should be noted while performing actions such as removing minter role.

Open the report
LowCheck the fixed supply of token logicVirtualness · QuillAudits · 24 Jul 2023Not fixed

(This issue is for information regarding implemented logic and can be acknowledged if this is the intentional logic)Code implements logic for keeping supply limited according to what it gets assigned first. mint_() checks for the case where the amount exceeds the defined supply while minting the tokenId amount.  And because of this in mint(), delegateMint() and in lazyMint() it restricts the supply from exceeding the supply amount that was set earlier.

Open the report
LowConsideration for the scenarioVirtualness · QuillAudits · 24 Jul 2023Not fixed

The team should note that the scenario like this can happen because of the logic of the code, where the user creates a second order while the first order is still there, e.g first user creates an order for 100 tokens and then again for 100 tokens while the old order is still there.

Open the report
Show 10 more
LowLack of test cases for the contractVirtualness · QuillAudits · 24 Jul 2023Not fixed

The contract VirtualnessV1Core lacks proper test cases. Having less test cases makes contract miss issues if there are any also it makes it hard for other devs to understand proper working and functionality of the contract.

Open the report
LowLimit for fees can be addedVirtualness · QuillAudits · 24 Jul 2023Not fixed

Currently the fees have no limit so the fee rate can be anything. Fee limit can be added in the contract so that it can't exceed a certain limit. in this way the user would be assured about the fees that they are not getting exceeded from a certain limit.

Open the report
Lownonce is getting used as OrderId while emitting OrdersMatchedVirtualness · QuillAudits · 24 Jul 2023Not fixed

nonce is getting used as OrderId while emitting OrdersMatched in matchAndTransfer() and matchAndLazyMint()

Open the report
LowPass receiveAmount instead of priceVirtualness · QuillAudits · 24 Jul 2023Not fixed

Pass the receiveAmount instead of price in royaltyInfo(). As the order fee was transferred and receiveAmount was calculated ( that is price - totalFee from _transferFees()) so user would be receiving receiveAmount amount, now while calculating royalty amount the royaltyInfo() will calculate royalty amount with price which would be more than the amount if that would be calculated with receiveAmount.

Open the report
LowSeller can manipulate the seller order before signing it. Description:Virtualness · QuillAudits · 24 Jul 2023Not fixed

While discussing with developers we came to know that the platform fees (fees array) in the seller order are getting added by the dapp backend (similar to other things that the backend would be adding in the mintOrder).Here, malicious signer can manipulate the content that he is signing in some cases.

Open the report
Lowtotal variable is not getting usedVirtualness · QuillAudits · 24 Jul 2023Not fixed

In function _saveCreators() where creators of the collection are getting assigned and stored. The variable total is used to calculate value/share but the total variable then is not used in any of the other calculations making it redundant.

Open the report
LowtransferOwnership should be two step processVirtualness · QuillAudits · 24 Jul 2023Not fixed

In contract ERC721Virtualness there is function transferOwnership() for transferring the ownership to another user but it is just a single function which is prone to some issues if the address to which the ownership is to be transferred is not correct or is malicious.

Open the report
LowUnused importsVirtualness · QuillAudits · 24 Jul 2023Not fixed

In the contract ERC1155Upgradeable.sol is not getting inherited.

Open the report
LowUnused parameter in LazyMintVirtualness · QuillAudits · 24 Jul 2023Not fixed

LazyMint() function takes a parameter but it's not getting used. Unused parameter should be removed.

Open the report
LowUnused parameter in LazyMintVirtualness · QuillAudits · 24 Jul 2023Not fixed

LazyMint() function takes a parameter but it's not getting used. Unused parameter should be removed.

Open the report
Show 2 more
LowUse of fee on transfer token in contractVirtualness · QuillAudits · 24 Jul 2023Not fixed

It is quite possible that users can use a fee on transfer tokens for buying/selling. The issue with the token is that with each functionality(transfer) that happens it takes some fees out of it. Example if userA has 100 tokens he transfers to userB then userB will only get 95 tokens if the fee is 5%. In that way the seller and creator with royalties will get less than what is expected.

Open the report
LowVariable is set but not usedVirtualness · QuillAudits · 24 Jul 2023Not fixed

In the struct OrderParameters isLazy boolean value is used and it is getting used in _hashOrder() function in ProtocolEIP712 contract but is not used for checking if the nft is minted using lazyMint function. If it's true then the order will be fulfilled with fulfillLazyMintOrder() function otherwise by fulfillOrder() function but as the variable is not used it might create confusion.

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