Core Contracts

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

Event Emission Order Vulnerability in Treasury contract

Summary

A technical vulnerability was identified in the Treasury contract related to inconsistent ordering of state updates and event emissions. It's a low severity, but inconsistency could impact off-chain monitoring systems and smart contract integrations that rely on predictable event patterns.

Vulnerability Details

The Treasury contract exhibits inconsistent ordering between state modifications and event emissions across various functions. Specifically:

function deposit(address token, uint256 amount) external override nonReentrant {
_balances[token] += amount; // State update
_totalValue += amount; // State update
emit Deposited(token, amount); // Event emission
}
function withdraw(address token, uint256 amount, address recipient)
external override nonReentrant onlyRole(MANAGER_ROLE) {
_balances[token] -= amount; // State update
_totalValue -= amount; // State update
IERC20(token).transfer(recipient, amount); // External call
emit Withdrawn(token, amount, recipient); // Event emission
}

Impact

The inconsistent event emission ordering presents several risks:

  1. Off-chain Monitoring Disruption

  2. Integration Challenges

  • Smart contracts relying on event order for synchronization may malfunction

Tools Used

  1. Static Analysis Tools

  • Solidity-coverage for identifying pattern inconsistencies

  • Slither

Recommendations

  1. Standardize Event Ordering Pattern

function deposit(address token, uint256 amount) external override nonReentrant {
_balances[token] += amount;
_totalValue += amount;
// Emit events before external calls
emit Deposited(token, amount);
}
function withdraw(address token, uint256 amount, address recipient)
external override nonReentrant onlyRole(MANAGER_ROLE) {
_balances[token] -= amount;
_totalValue -= amount;
// Emit events before external calls
emit Withdrawn(token, amount, recipient);
IERC20(token).transfer(recipient, amount);
}
Updates

Lead Judging Commences

inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Too generic
inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Too generic

Support

FAQs

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

Give us feedback!