Nunchi engaged Guardian to review the security of their Nunchi SY & Genesis Vaults. From the 3rd of November to the 5th of November, an auditor reviewed the source code in scope.
- Published
- Review window
- November 3 to 5, 2025
- Language
- Solidity
- Chains
- Hyperliquid
- Sector
- Yield and vaults, Perpetuals
- 0 Critical
- 2 High
- 0 Medium
- 4 Low
- 0 Informational
Scope
-
github.com/Nunchi-trade
e03566d054697f05b70c
Overview
Nunchi engaged Guardian to review the security of their Nunchi SY & Genesis Vaults. From the 3rd of November to the 5th of November, an auditor reviewed the source code in scope.
Findings 6
-
H-01 High exchangeRate Doesn’t Follow ERC5115 Standard Unexpected Behavior Resolved
Description
As described in the ERC 5115 ERC document: https://eips.ethereum.org/EIPS/eip-5115 The
exchangeRatefunction MUST returnExchangeRate(t_now)such thatExchangeRate(t_now) *syBalance / 1e18 = assetBalance.And, that the
exchangeRatemethod updates and returns the latest exchange rate, which is the exchange rate from SY token amount into asset amount, scaled by a fixed scaling factor of 1e18.The PRICER contract however returns a rate with 8 decimals of precision, and the SY token balances are using 6 decimals as derived from the vault token decimals of 6.
Therefore the
exchangeRatefunction is non-compliant and will almost always round to zero if adjusted by a scaling factor of 1e18.Recommendation
Consider scaling the
exchangeRateresult by 1e10 to be compliant with the ERC 5115 standard.Resolution
Nunchi Team: The issue was resolved in PR#26.
-
H-02 High Incorrect Interface Bricks The System DoS Resolved
Description
The
IDepositorinterface includes a deposit function interface that is supposed to includereturndatafor auint256value, however the implementation of theDEPOSITORat the address0x0868A605661440e5D58453f16BDB64795B2Da176onHyperEVMdoes not return anything.This ultimately results in a decoding revert as no return data was provided while some was expected, thus DoSing the entire deposit flow.
Recommendation
Remove the
uint256return value from theIDepositorinterface.Resolution
Nunchi Team: The issue was resolved in PR#26.
-
L-01 Low Native Value Not Handled Validation Resolved
Description
The
depositfunction in theSYBaseUpgV2contract ispayable, however the overridden_depositfunction in theNunchiHyperbeatVaultSYcontract does not handlemsg.value.Recommendation
Add a validation in the
_depositfunction to revert if nonzeromsg.valuehas been provided.Resolution
Nunchi Team: The issue was resolved in PR#26.
-
L-02 Low getTokensIn Is Hardcoded Configuration Acknowledged
Description
getTokensIn()returns a static array[VAULT_TOKEN, USDC, USDT0]for simplicity while deposit validation usesDEPOSITOR.isDepositToken().If
DEPOSITORchanges supported tokens, integrators relying ongetTokensInmay route deposits to unsupported tokens and revert, degrading UX and composability.Recommendation
Keep
getTokensInsynchronized withDEPOSITOR.isDepositToken, or remove/hard-deprecate the static list and instead expose a function that queries the depositor’s current set. Document thatgetTokensInis non-authoritative if kept.Resolution
Nunchi Team: Acknowledged.
-
L-03 Low No Rescue Functionality Warning Resolved
Description
The
SYBaseUpgV2contract implements a receive function, however there is no rescue logic to recover any Ether that may have been accidentally sent to the contract.Recommendation
Consider if a rescue function should be implemented.
Resolution
Nunchi Team: The issue was resolved in PR#26.
-
L-04 Low PreviewDeposit Misleading Result Warning Resolved
Description
The
previewDepositfunction does not take into account the deposit cap that is implemented on the underlyingDepositorcontract, and as a result this can be misleading for any consumers of this function.Recommendation
Consider checking the
Depositorfor the deposit cap to surface to the user whether the requested deposit will fail.Resolution
Nunchi Team: The issue was resolved in PR#26.
No findings match.
More from Nunchi
Put your code through the same review.
This review started with a conversation about scope. Tell us what you are building and we will plan yours with you.
