Core Contracts

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

Zeno proceedings are transferred to the wrong address

Summary

After an auction ends, USDC can't be redeemed from Zeno.sol since all proceedings were sent elsewhere

Details

Whenever a bidder buys ZENO to participate in an auction, the cost is sent to a business address instead of ZENO

function buy(uint256 amount) external whenActive {
require(amount <= state.totalRemaining, "Not enough ZENO remaining");
uint256 price = getPrice();
uint256 cost = price * amount;
@> require(usdc.transferFrom(msg.sender, businessAddress, cost), "Transfer failed");
}

After the auction ends, bidders are allowed to redeem their ZENO at 1:1 ratio for USDC

function redeem(uint amount) external nonReentrant {
if (!isRedeemable()) {
revert BondNotRedeemable();
}
if (amount == 0) {
revert ZeroAmount();
}
uint256 totalAmount = balanceOf(msg.sender);
if (amount > totalAmount) {
revert InsufficientBalance();
}
totalZENORedeemed += amount;
_burn(msg.sender, amount);
USDC.safeTransfer(msg.sender, amount);
}

However, the redeemed USDC is sent from ZENO.sol, despite the contract not receiving any USDC.
Users won't be able to redeem their USDC until the contract is manually supplied.

Impact

Logic error, unexpected behaviour

Mitigation

Either the funds should've been split between Zeno.sol and the business address or redeems should be performed directly from the business address.

Updates

Lead Judging Commences

inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

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

Give us feedback!