// SPDX-License-Identifier: MIT pragma solidity ^0.8.20;
// Core Aggregator Contract contract CrossChainAggregator { mapping(bytes32 => bool) public processedHashes; mapping(uint256 => address) public validators; uint256 public validatorCount;
event CrossChainSwap( bytes32 indexed swapId, address indexed user, uint256 sourceChain, uint256 destChain, uint256 amount );
modifier onlyValidator() { require(validators[block.chainid] == msg.sender, "Not validator"); _; }
function initiateSwap( address token, uint256 amount, uint256 destChainId ) external returns (bytes32 swapId) { swapId = keccak256(abi.encodePacked(msg.sender, token, amount, block.timestamp)); require(!processedHashes[swapId], "Already processed");
// Lock tokens IERC20(token).transferFrom(msg.sender, address(this), amount);
emit CrossChainSwap(swapId, msg.sender, block.chainid, destChainId, amount); return swapId; }
function finalizeSwap( bytes32 swapId, address user, uint256 amount, bytes calldata signature ) external onlyValidator {…