As of 15 Oct 2026, Petaverse has 1 audit report on Trustblock, by Quantstamp, dated 3 Mar 2023. That report lists no open critical findings.
Record last updated . It holds audits and findings, contracts and incidents up to Oct 2026. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| Petaverse | Security firm: Quantstamp | Date: | Scope: Files named in the report | No open critical findings | Open · certificate.quantstamp.com |
Statuses are the security firm’s own, from each report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 0 | 1 |
| Medium | 0 | 0 | 1 |
| Low | 1 | 6 | 10 |
Currently, the team describes that cloned Pets are transferred back to a holding contract if the original Pet is burned. Although these clones may be held by the team instead of individual accounts, they still exist on-chain and can have their clone status modified to be an original, therefore recreating a Pet that was already burned.
Open the reportCurrently, `Voucher.redeemVoucherTo()` does not support the redemption of Vouchers, as nothing is ensuring that the token for the specified `_voucherTokenId` is held by the contract before burning it. Therefore, calls to `redeemVoucherTo()` will fail if the token is not held by the contract.
Open the reportIn `Pet.multiMintTo()`, the mint function does not take into account the previous custodial status of the accounts being minted tokens to, allowing for it to be possible to overwrite the custodial status of a `to` address that has been previously assigned to be a custodian, as a result of some oversight.
Open the reportThe Admin role that belongs to the multisig wallet, as stated in the docs, can mark any address to be custodial. This means the address with the Custodial role, which is also the Admin address, can freely transfer the assets of Custodial wallets. Aside from possible exploits in the case of multisig compromise, this structure can damage the public view and reputation of the protocol, as it is highly centralized. The Cloner role also has full control over changing the clone status of an asset. This means that even though an asset is marked as a clone on one chain, it can be marked as original through the `setClone()` function by the Cloner role. changing from original to clone is also possible. This can cause more confusion for the admins and the end users, and affect the overall integrity of the protocol. Specifically, here is the full list of privileged roles: The Pet contract has a DEFAULT_ADMIN_ROLE who can: <ul> <li>Renounce their role and disable all of the following listed actions by calling renounceRole()</li> <li>Grant/Revoke roles</li> <li>setBaseURI(..)</li> <li>setCustodial(..)</li> <li>setOperatorFilterRegistry(..)</li> <li>setRoyaltyInfo(..)</li> <li>setIMX(..)</li> </ul> a MINTER_ROLE who can: <ul> <li>Renounce their role and disable all of the following listed actions by calling renounceRole()</li> <li>mintTo(..), multiMintTo(..)</li> <li>mintToContract(..), multiMintToContract(..))</li> <li>Approve addresses to transfer contract-owned Pets.</li> <li>Transfer contract owned Pets.</li> <li>Sign messages for Voucher minting.</li> </ul> a CLONER_ROLE who can: <ul> <li>Renounce their role and disable all of the following listed actions by calling renounceRole()</li> <li>setClone(..)</li> <li>Approve addresses to transfer any cloned Pet.</li> <li>Transfer any cloned Pet..</li> </ul> a CUSTODIAL_ROLE who can: <ul> <li>Renounce their role and disable all of the following listed actions by calling renounceRole().</li> <li>Approve addresses to transfer Pets from custodial accounts.</li> <li>Transfer any Pets from custodial accounts.</li> </ul> The Voucher contract has a DEFAULT_ADMIN_ROLE who can: <ul> <li>Renounce their role and disable all of the following listed actions by calling renounceRole().</li> <li>setBaseURI(..)</li> <li>setOperatorFilterRegistry(..)</li> <li>setRoyaltyInfo(..)</li> <li>Withdraw native tokens from the contract.</li> </ul> a REDEEMER_ROLE who can: <ul> <li>Renounce their role and disable all of the following listed actions by calling renounceRole().</li> <li>redeemVoucherTo(..)</li> </ul>
Open the reportIf the `DEFAULT_ADMIN_ROLE` is renounced without assigning a new admin, all the contracts will be left without an admin. Consequently, any function guarded by the `getRoleAdmin()`function will no longer be able to be executed.
Open the reportIt is possible for the same TokenId to be minted simultaneously cross-chain. Preventing the withdrawal of the newly minted L2 token to L1, due to the tokenId already existing. Note that this case is concerned with minting through ImmutableX L2.
Open the reportThe reports name a repository or files. Open a report to see its scope.
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.
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.
<head><script src="https://widget.trustblock.run/project-widget.min.js" defer></script></head><body><divdata-tb-project-widgetdata-tb-project-slug="petaverse-1"></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