ZNS Token Upgrade security record

Ethereumzns.domains

As of 24 Oct 2026, ZNS Token Upgrade has 2 audit reports by 1 security firm on Trustblock; the latest is by Quantstamp, dated 17 Nov 2023. 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. Trustblock does not review code.

Audits2

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Zero Name Service (ZNS)Security firm: QuantstampDate: Scope: Repository at commit 46f632eNo open critical findingsOpen · certificate.quantstamp.com
ZNS Token UpgradeSecurity firm: QuantstampDate: Scope: Files named in the reportNo open critical findingsOpen · certificate.quantstamp.com

Findings24

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

SeverityOpenAcknowledgedFixed
Critical000
High001
Medium033
Low1610
MediumDomain Pricer Contract Can Charge More than Expected when Purchasing DomainZero Name Service (ZNS) · Quantstamp · 17 Nov 2023Acknowledged

The `ZNSSubRegistrar` contract provides a setter function, `setPricerContractForDomain()`, allowing the domain owner/operator to change the pricer contract for a specific domain. With this ability, a malicious domain owner could potentially front-run a domain purchase transaction, swapping out the pricer contract for one that charges an unexpectedly high price. This is problematic if a user purchasing the domain approves a transaction for a significantly higher amount than required or unlimited approval, as they may end up being charged much more than anticipated.

Open the report
MediumPrecision Loss Can Result in Lower than Expected Purchase PriceZero Name Service (ZNS) · Quantstamp · 17 Nov 2023Acknowledged

The primary concern identified in the `ZNSCurvePricer._getPrice()` function is the potential incompatibility between the `precisionMultiplier` and the token's decimals, leading to incorrect pricing calculations. This incompatibility can result in a significant loss of precision, especially evident when using a high `precisionMultiplier` (e.g., 10^18) with tokens that have a lower decimal precision (e.g., USDC with 6 decimal places). This precision loss can result in the computed price being truncated to zero, as demonstrated in the given exploit scenario.

Open the report
MediumRisk of Insolvency Due to Inaccurate Accounting with Deflationary or Rebasing TokensZero Name Service (ZNS) · Quantstamp · 17 Nov 2023Acknowledged

The `ZNSTreasury.stakeForDomain()` function accounts for staked amounts based on the tokens deposited. If deflationary tokens, which automatically subtract fees on transfer, or rebasing tokens, which can adjust balances algorithmically, are used, this can lead to discrepancies between the recorded `stakedForDomain.stakedAmount` and the actual reserve. Furthermore, since the protocol accepts any token, a malicious token could exacerbate this discrepancy. These inaccuracies can lead to insolvency issues during unstaking.

Open the report
LowDeviation From Traditional Domain and Subdomain RepresentationZero Name Service (ZNS) · Quantstamp · 17 Nov 2023Acknowledged

The documentation denotes the structure `wilder.wapes`, indicating that `wilder` is the root domain and `wapes` is its subdomain. This portrayal is in contrast with the traditional way domains and subdomains are represented. Typically, given the full string `wilder.wapes`, `wilder` would be the subdomain, and `wapes` would be the domain.

Open the report
LowPotential for Disrupted Access Control Due to Registry MismatchZero Name Service (ZNS) · Quantstamp · 17 Nov 2023Acknowledged

The protocol contracts contain a setter function to update the registry contract. If the address of the registry contract is updated and missed for one of the contracts, it can lead to a mismatched registry across the different contracts. This mismatch is concerning since the registry plays a pivotal role in determining privileged roles, domain ownership, and associated operations. Consequently, if the registry is mismatched, it could disrupt the control and permissions system, affecting which functions are accessible when updating configurations. This is an information issue because it is a limitation of the design choice.

Open the report
LowPrevious Owner Can Update Domain ConfigurationZero Name Service (ZNS) · Quantstamp · 17 Nov 2023Acknowledged

The ownership transfer process of a `domainHash` in the protocol requires two distinct actions: transferring the corresponding ERC721 token and calling the `ZNSRootRegistrar.reclaimDomain()` function. This approach introduces a potential oversight issue. If an owner transfers the ERC721 token but the new owner fails to immediately invoke `reclaimDomain()`, there exists a window of time where the original owner or operator, despite not having the ERC721 token, retains the ability to make impactful changes via the `ZNSSubRegistrar` contract. During this window, the previous owner or operator could, for instance, update configuration settings through methods such as `setDistributionConfigForDomain()` and `setPricerContractForDomain()`.

Open the report
LowUpgradabilityZero Name Service (ZNS) · Quantstamp · 17 Nov 2023Acknowledged

While upgradeability is not a vulnerability in itself, users of the ZNS protocol should be aware that many contracts in the system can be upgraded at any time. This carries certain risks, as upgrading contracts is a delicate operation that can introduce bugs, regressions, and other undesirable code. It is important to note that this audit does not guarantee the behavior of future contracts that the protocol may be upgraded to. Here is a list of contracts that have been explicitly marked as upgradeable (please note that the list might not be exhaustive): ```bash ▶ grep -rl --exclude="I*" --exclude-dir="mocks" "function initialize" contracts contracts/token/ZNSDomainToken.sol contracts/registrar/ZNSSubRegistrar.sol contracts/registrar/ZNSRootRegistrar.sol contracts/price/ZNSFixedPricer.sol contracts/price/ZNSCurvePricer.sol contracts/registry/ZNSRegistry.sol contracts/treasury/ZNSTreasury.sol contracts/resolver/ZNSAddressResolver.sol ```

Open the report
LowAccidental Token Burn Risks in New Transfer-to-Token Contract MechanismZNS Token Upgrade · Quantstamp · 27 Oct 2023Acknowledged

The new implementation `MeowToken` introduces a token burn mechanism for direct transfers to the token's address, which is different from the previous implementation where transferred tokens were locked when transferred to the token address. This mechanism alters the token supply upon transfer to the token contract, which poses a risk of accidental burns during misdirected transfers. Furthermore, this change incurs a slight gas inefficiency due to the additional address check during each transfer when validating the `to` address.

Open the report
LowUpgradabilityZNS Token Upgrade · Quantstamp · 27 Oct 2023Acknowledged

While upgradability is not a vulnerability in itself, token holders should be aware that the token contract can be upgraded at any given time. This audit does not guarantee the behavior of future contracts that the token may be upgraded to.

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="zns-token-upgrade"
></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