Apyx – ApxUSD, ApyUSD, Bridged Token

QuantstampFiles named in the report

Quantstamp reviewed ApxUSD (Apyx – ApxUSD, ApyUSD, Bridged Token) on 30 Apr 2026: 4 findings, 0 critical; 2 acknowledged, 2 open.

No open critical findings
Open the reportOpen ApxUSD’s security record

Report hosted on certificate.quantstamp.com.

Trustblock does not review code.

Findings4

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

SeverityOpenAcknowledgedFixed
Critical000
High000
Medium000
Low220
Low`ApyUSD.setUnlockToken()` Accepts Incompatible Replacements and Can Brick WithdrawalsOpen

`ApyUSD.setUnlockToken()` only checks for a nonzero address. It does not verify that the replacement contract was deployed for the active vault or for the correct underlying asset. This is dangerous because the withdrawal path assumes the configured contract is a compatible `UnlockToken`. A mismatched replacement can make every `withdraw()` and `redeem()` revert once `ApyUSD` reaches the external deposit/request path. A single bad admin rotation can brick the entire exit path for current and future vault users until the pointer is corrected.

Low`setSupplyCap` Carries No Mandatory Delay and No Cap Parity Enforcement, Creating a CCIP Lane-Block ConditionOpen

When `BridgedApyxToken.mint()` is called by the CCIP pool, and the incoming amount would push `totalSupply` past `$.supplyCap`, the function reverts: ```solidity // src/bridge/BridgedApyxToken.sol:161-168 function mint(address account, uint256 amount) external onlyCCIPPool { BridgedApyxTokenStorage storage $ = _getStorage(); uint256 currentSupply = totalSupply(); if (currentSupply + amount > $.supplyCap) { revert SupplyCapExceeded(amount, $.supplyCap - currentSupply); } _mint(account, amount); } ``` Chainlink's CCIP `OffRamp` processes messages in strict sequence per lane. When a `mint()` call reverts, Chainlink's Smart Execution automation retries the failing message automatically for approximately 8 hours. During this entire window, every subsequent message on the same lane, regardless of sender, recipient, or amount, is blocked behind the stuck message. After the automatic retry window expires, the message remains in the queue indefinitely; a manual call to `manuallyExecute` on the `OffRamp` is required to unblock the lane, and only after the root cause (the supply cap violation) is resolved. This scenario can be triggered by either of two paths: 1. **Direct cap reduction:** `ADMIN_ROLE` calls `setSupplyCap()` on a `BridgedApyxToken` deployment with a value below the corresponding mainnet supply cap. If in-flight bridge messages carry amounts that would exceed the new, lower cap, the next `mint()` call reverts and the lane blocks. 2. **Mainnet cap increase without a bridged supply cap update:** If the mainnet `ApxUSD` supply cap is raised (to accommodate new collateral) without a corresponding increase to the destination-chain `BridgedApyxToken` supply cap, the bridged supply cap becomes the binding constraint. Users bridging amounts that would otherwise be permitted under the mainnet cap will encounter a `mint()` revert on the destination chain. The `IBridgedToken` NatSpec identifies both risks and makes two mitigation recommendations: ```solidity /// The cap SHOULD match the mainnet supply cap for the corresponding token. /// ... /// A delay on this function SHOULD be configured in the AccessManager to provide /// an observation window before any cap change takes effect. ``` Neither recommendation is enforced on-chain. `BridgeRoles.assignAdminTargetsFor()` assigns `setSupplyCap` to `ADMIN_ROLE` with no execution delay. `setTargetFunctionRole()` with no preceding `setTargetFunctionDelay()` call configures zero execution delay. A cap reduction takes effect in the same block it is submitted, with no observation window for operators to clear any in-flight bridge messages before the new cap becomes active.

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Repository and files the report names (5)

  • src/ApyUSD.sol
  • src/bridge/IBridgedToken.sol
  • src/ApxUSD.sol
  • src/bridge/BridgedApyxToken.sol
  • src/bridge/BridgeRoles.sol

Part of ApxUSD’s security record

ApxUSD
Audits2 audits by 1 firmLast audit Apr 2026, by Quantstamp.
Critical findingsNo open critical findingsAcross 2 reports.
Open ApxUSD’s security record

Security firm

Quantstamp

236 projects reviewed · 332 reports · latest Oct 2026

See Quantstamp’s audits

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