Core Contracts

Regnum Aurum Acquisition Corp
HardhatReal World AssetsNFT
77,280 USDC
View results
Submission Details
Severity: high
Valid

ZENO Token Redemption Has Critical Decimal Precision Mismatch

Summary

The ZENO token's redeem function performs a direct 1:1 transfer of USDC without accounting for decimal differences between ZENO (18 decimals) and USDC (6 decimals), potentially causing massive overcharges or failed redemptions.

Vulnerability Details

The redeem function performs a direct transfer without decimal adjustment:

function redeem(uint amount) external nonReentrant {
if (!isRedeemable()) {
revert BondNotRedeemable();
}
// @audit - amount is in 18 decimals (ZENO)
totalZENORedeemed += amount;
_burn(msg.sender, amount);
// @audit - transfers same amount in USDC (6 decimals)
USDC.safeTransfer(msg.sender, amount);
}

Redeeming 1.0 ZENO:

  • Input: amount = 1e18 (1.0 ZENO)

  • Current: Transfers 1e18 USDC (1 trillion USDC!)

  • Should: Transfer 1e6 USDC (1 USDC)

Redeeming 1000 ZENO:

  • Input: amount = 1000e18

  • Current: Transfers 1000e18 USDC

  • Should: Transfer 1000e6 USDC

Impact

Users attempting to redeem ZENO tokens will have their transactions revert due to attempting to transfer 1000x more USDC than intended, completely breaking the token's redemption mechanism or could lead to Unintended large transfers if sufficient balance exists

Tools Used

  • Manual Review

Recommendations

Add decimal adjustment when transferring USDC

Updates

Lead Judging Commences

inallhonesty Lead Judge 2 months ago
Submission Judgement Published
Validated
Assigned finding tags:

Decimal precision mismatch between ZENO token (18 decimals) and USDC (6 decimals) not accounted for in redemption, causing calculation errors and incorrect payments

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.