Zero Staking security record

As of 24 Oct 2026, Zero Staking has 1 audit report on Trustblock, by Quantstamp, dated 19 Jun 2024. 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. Trustblock does not review code.

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Zero StakingSecurity firm: QuantstampDate: Scope: Repository at commit 5f93318No open critical findingsOpen · certificate.quantstamp.com

Findings10

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

SeverityOpenAcknowledgedFixed
Critical000
High002
Medium002
Low042
LowCompromised Owner or Operators Can Steal All Users' Escrowed FundsZero Staking · Quantstamp · 19 Jun 2024Acknowledged

Suppose `A` is an address controlled by an owner (or operator). An owner (or operator) can create a match with high match fees and have one of the players being `A` and other players as victims. The owner (or operator) can then call `endMatch()` where the payout to `A` is the total of all the match fees from each player and every other player gets zero payouts, effectively stealing funds from all the other players. Per communication with the team, the operators are addresses owned by the team, not some third parties, so the risk here is considered acceptable.

Open the report
LowPrivileged Roles and OwnershipZero Staking · Quantstamp · 19 Jun 2024Acknowledged

In `StakingBase.sol`: `Owner`: - The owner can steal all the rewards (not just the leftovers) by using `withdrawLeftoverRewards()`. In `Escrow.sol`: `Owner and Operators`: - Can force sending funds back to users by calling `releaseFunds()`. In `Match.sol`: `Owner and Operators`: - Can start and end a match by calling `startMatch()` and `endMatch()`. Note that ZS-5 allows an owner or operator to steal all users' funds in the Escrow contract. In `OwnableOperable.sol`: `Owner`: - Can add and remove operators by calling `addOperator()`, `addOperators()`, and `removeOperator()`. - Can change and revoke ownership through `Ownable`. In `StakingERC721.sol`: `Owner`: - Can set the tokenURI and base tokenURI by calling `setTokenURI` and `setBaseURI` respectively.

Open the report
LowThere May Not Be Sufficient Funds in the Contract to Cover the Reward ClaimsZero Staking · Quantstamp · 19 Jun 2024Acknowledged

A user can only claim rewards from the contract if there are sufficient reward tokens in the staking contract. However, this heavily relies on the owner to provide funds to the contract to cover any user's claims. There may be times when there won't be sufficient funds in the contract to cover all user's claims.

Open the report
LowUser Can Stake a Small Amount Initially to Get an Early Unlock TimestampZero Staking · Quantstamp · 19 Jun 2024Acknowledged

Since the unlock timestamp is never updated after the initial staking (see below in `_checkRewards()`), a user can game the system by staking an initial small amount (e.g. 1 token) to get an early `unlockTimestamp` and stake more as needed in the future. ``` function _checkRewards(Staker storage staker) internal { if (staker.amountStaked > 0) { // It isn't their first stake, snapshot pending rewards staker.owedRewards = _getPendingRewards(staker); } else { // Log the time at which this stake becomes claimable or unstakable // This is only done once per user staker.unlockTimestamp = block.timestamp + timeLockPeriod; } } ``` Along the same line of reasoning, users could unstake all but 1 `wei` to bypass any unlock period in their next staking operation since the corresponding entry in the `stakers` mapping is not deleted.

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="zero-staking"
></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