Core Contracts

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

Decimal Precision Mismatch in ZENO Token Redemption Leads to Incorrect USDC Transfer Amounts

Summary:

The ZENO contract's redeem() function fails to handle decimal precision differences between ZENO (18 decimals) and USDC (6 decimals) tokens, potentially causing transfers of 1000x more USDC than intended or failed redemptions.

Vulnerability Details:

In the ZENO contract:

function redeem(uint amount) external nonReentrant {
// ... validation checks ...
totalZENORedeemed += amount;
burn(msg.sender, amount);
// ❌ WRONG: Direct transfer without decimal adjustment
USDC.safeTransfer(msg.sender, amount); // Attempts to transfer with wrong decimals
}

Example 1: Redeeming 1.0 ZENO

  • amount = 1e18 (1 ZENO)

  • Current transfer: 1e18 USDC (1 trillion USDC)

  • Expected transfer: 1e6 USDC (1 USDC)

Example 2: Redeeming 100 ZENO

  • amount = 100e18 (100 ZENO)

  • Current transfer: 100e18 USDC (100 trillion USDC)

  • Expected transfer: 100e6 USDC (100 USDC)

Impact:

  • Failed redemptions due to insufficient USDC balance

  • Potential for massive unintended USDC transfers

  • Broken redemption mechanism

  • Users unable to redeem their ZENO tokens

  • Protocol's USDC reserves at risk if sufficient balance exists

Tools Used:

Manual code review

Recommendations:

Add decimal adjustment when transferring USDC

Updates

Lead Judging Commences

inallhonesty Lead Judge 3 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.