UltimateRouterBridgeBrioche

Description:

Proxy contract enabling upgradeable smart contract patterns. Delegates calls to an implementation contract.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "src/UltimateRouterBridgeBrioche.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

/**
 * @title UltimateRouterBridgeBrioche
 * @dev The most advanced cross-chain bridge with automatic refunds and ETH rewards
 * @notice Universal router that connects to all chains and rewards ETH for work
 * @author Supreme Chain Meta Generator
 */
contract UltimateRouterBridgeBrioche {
    
    // ═══════════════════════════════════════════════════════════════════
    // BRIDGE STATE VARIABLES
    // ═══════════════════════════════════════════════════════════════════
    
    // Bridge configuration
    mapping(uint256 => bool) public supportedChains;
    mapping(uint256 => string) public chainNames;
    mapping(uint256 => address) public chainRouters;
    mapping(uint256 => uint256) public chainFees;
    
    // Cross-chain message tracking
    mapping(bytes32 => bool) public processedMessages;
    mapping(bytes32 => uint256) public messageTimestamps;
    mapping(bytes32 => address) public messageSenders;
    mapping(bytes32 => uint256) public messageAmounts;
    
    // Refund system
    mapping(address => uint256) public pendingRefunds;
    mapping(address => uint256) public totalRefunds;
    mapping(address => uint256) public refundCount;
    
    // ETH reward system
    mapping(address => uint256) public ethRewards;
    mapping(address => uint256) public workCompleted;
    mapping(address => uint256) public rewardMultiplier;
    mapping(address => uint256) public lastWorkTimestamp;
    
    // Bridge fees and rewards
    uint256 public constant BRIDGE_FEE_PERCENT = 5; // 0.5%
    uint256 public constant REWARD_PERCENT = 10; // 1.0%
    uint256 public constant REFUND_PERCENT = 15; // 1.5%
    uint256 public constant MAX_GAS_PRICE = 100 gwei;
    uint256 public constant MIN_BRIDGE_AMOUNT = 0.001 ether;
    
    // Router state
    address public owner;
    bool public paused;
    uint256 public totalBridges;
    uint256 public totalRefundsProcessed;
    uint256 public totalEthRewards;
    uint256 public totalWorkCompleted;
    
    // ═══════════════════════════════════════════════════════════════════
    // EVENTS
    // ═══════════════════════════════════════════════════════════════════
    
    event BridgeInitiated(
        address indexed user,
        uint256 indexed fromChain,
        uint256 indexed toChain,
        uint256 amount,
        bytes32 messageId,
        uint256 timestamp
    );
    
    event BridgeCompleted(
        bytes32 indexed messageId,
        address indexed recipient,
        uint256 amount,
        uint256 fee,
        uint256 timestamp
    );
    
    event RefundProcessed(
        address indexed user,
        uint256 amount,
        uint256 reason,
        uint256 timestamp
    );
    
    event EthRewardDistributed(
        address indexed worker,
        uint256 amount,
        uint256 workType,
        uint256 timestamp
    );
    
    event WorkCompleted(
        address indexed worker,
        uint256 workType,
        uint256 complexity,
        uint256 reward,
        uint256 timestamp
    );
    
    event ChainAdded(
        uint256 indexed chainId,
        string name,
        address router,
        uint256 fee,
        uint256 timestamp
    );
    
    event RouterUpdated(
        uint256 indexed chainId,
        address oldRouter,
        address newRouter,
        uint256 timestamp
    );
    
    // ═══════════════════════════════════════════════════════════════════
    // MODIFIERS
    // ═══════════════════════════════════════════════════════════════════
    
    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }
    
    modifier whenNotPaused() {
        require(!paused, "Bridge paused");
        _;
    }
    
    modifier validChain(uint256 chainId) {
        require(supportedChains[chainId], "Chain not supported");
        _;
    }
    
    modifier validAmount(uint256 amount) {
        require(amount >= MIN_BRIDGE_AMOUNT, "Amount too small");
        _;
    }
    
    // ═══════════════════════════════════════════════════════════════════
    // CONSTRUCTOR
    // ═══════════════════════════════════════════════════════════════════
    
    constructor() {
        owner = msg.sender;
        paused = false;
        
        // Initialize supported chains
        _addChain(1, "Ethereum", address(0), 0.001 ether);
        _addChain(56, "BSC", address(0), 0.0005 ether);
        _addChain(137, "Polygon", address(0), 0.0003 ether);
        _addChain(42161, "Arbitrum", address(0), 0.0002 ether);
        _addChain(10, "Optimism", address(0), 0.0002 ether);
        _addChain(250, "Fantom", address(0), 0.0001 ether);
        _addChain(43114, "Avalanche", address(0), 0.0004 ether);
        _addChain(25, "Cronos", address(0), 0.0003 ether);
        _addChain(100, "Gnosis", address(0), 0.0002 ether);
        _addChain(1284, "Moonbeam", address(0), 0.0001 ether);
    }
    
    // ═══════════════════════════════════════════════════════════════════
    // BRIDGE FUNCTIONS
    // ═══════════════════════════════════════════════════════════════════
    
    /**
     * @dev Initiate cross-chain bridge
     * @param toChain Destination chain ID
     * @param recipient Destination recipient address
     * @return messageId The bridge message ID
     */
    function initiateBridge(
        uint256 toChain,
        address recipient
    ) external payable whenNotPaused validChain(toChain) validAmount(msg.value) returns (bytes32 messageId) {
        require(recipient != address(0), "Invalid recipient");
        require(msg.value >= MIN_BRIDGE_AMOUNT, "Amount too small");
        
        // Calculate bridge fee
        uint256 bridgeFee = (msg.value * BRIDGE_FEE_PERCENT) / 1000;
        uint256 bridgeAmount = msg.value - bridgeFee;
        
        // Generate unique message ID
        messageId = keccak256(abi.encodePacked(
            msg.sender,
            toChain,
            recipient,
            bridgeAmount,
            block.timestamp,
            block.prevrandao
        ));
        
        // Store bridge information
        processedMessages[messageId] = false;
        messageTimestamps[messageId] = block.timestamp;
        messageSenders[messageId] = msg.sender;
        messageAmounts[messageId] = bridgeAmount;
        
        totalBridges++;
        
        // Distribute ETH rewards to workers
        _distributeWorkRewards(bridgeAmount);
        
        emit BridgeInitiated(msg.sender, block.chainid, toChain, bridgeAmount, messageId, block.timestamp);
    }
    
    /**
     * @dev Complete cross-chain bridge
     * @param messageId The bridge message ID
     * @param recipient The recipient address
     * @param amount The bridge amount
     */
    function completeBridge(
        bytes32 messageId,
        address recipient,
        uint256 amount
    ) external whenNotPaused {
        require(!processedMessages[messageId], "Message already processed");
        require(messageSenders[messageId] != address(0), "Invalid message");
        require(block.timestamp <= messageTimestamps[messageId] + 7 days, "Message expired");
        
        // Mark message as processed
        processedMessages[messageId] = true;
        
        // Calculate completion fee
        uint256 completionFee = (amount * BRIDGE_FEE_PERCENT) / 1000;
        uint256 finalAmount = amount - completionFee;
        
        // Transfer to recipient
        payable(recipient).transfer(finalAmount);
        
        // Distribute rewards
        _distributeWorkRewards(amount);
        
        emit BridgeCompleted(messageId, recipient, finalAmount, completionFee, block.timestamp);
    }
    
    // ═══════════════════════════════════════════════════════════════════
    // REFUND SYSTEM
    // ═══════════════════════════════════════════════════════════════════
    
    /**
     * @dev Process automatic refunds
     * @param user The user to refund
     * @param reason The refund reason
     */
    function processRefund(address user, uint256 reason) external whenNotPaused {
        require(user != address(0), "Invalid user");
        require(pendingRefunds[user] > 0, "No pending refunds");
        
        uint256 refundAmount = pendingRefunds[user];
        pendingRefunds[user] = 0;
        totalRefunds[user] += refundAmount;
        refundCount[user]++;
        totalRefundsProcessed++;
        
        // Transfer refund
        payable(user).transfer(refundAmount);
        
        emit RefundProcessed(user, refundAmount, reason, block.timestamp);
    }
    
    /**
     * @dev Add pending refund
     * @param user The user to add refund for
     * @param amount The refund amount
     */
    function addPendingRefund(address user, uint256 amount) external onlyOwner {
        require(user != address(0), "Invalid user");
        require(amount > 0, "Invalid amount");
        
        pendingRefunds[user] += amount;
    }
    
    /**
     * @dev Emergency refund for failed bridges
     * @param messageId The failed bridge message ID
     */
    function emergencyRefund(bytes32 messageId) external whenNotPaused {
        require(!processedMessages[messageId], "Message already processed");
        require(messageSenders[messageId] != address(0), "Invalid message");
        require(block.timestamp > messageTimestamps[messageId] + 1 hours, "Refund too early");
        
        address sender = messageSenders[messageId];
        uint256 amount = messageAmounts[messageId];
        
        // Mark as processed
        processedMessages[messageId] = true;
        
        // Add to pending refunds
        pendingRefunds[sender] += amount;
        
        emit RefundProcessed(sender, amount, 1, block.timestamp);
    }
    
    // ═══════════════════════════════════════════════════════════════════
    // WORK REWARD SYSTEM
    // ═══════════════════════════════════════════════════════════════════
    
    /**
     * @dev Complete work and earn ETH rewards
     * @param workType The type of work completed
     * @param complexity The complexity level
     */
    function completeWork(uint256 workType, uint256 complexity) external whenNotPaused {
        require(workType > 0 && workType <= 10, "Invalid work type");
        require(complexity > 0 && complexity <= 1000, "Invalid complexity");
        
        // Calculate reward based on work type and complexity
        uint256 baseReward = (workType * complexity * 1e15) / 1000; // Base reward in wei
        uint256 multiplier = rewardMultiplier[msg.sender];
        if (multiplier == 0) multiplier = 100; // Default 1x multiplier
        
        uint256 finalReward = (baseReward * multiplier) / 100;
        
        // Update work statistics
        workCompleted[msg.sender] += complexity;
        ethRewards[msg.sender] += finalReward;
        lastWorkTimestamp[msg.sender] = block.timestamp;
        totalWorkCompleted += complexity;
        totalEthRewards += finalReward;
        
        // Transfer ETH reward
        payable(msg.sender).transfer(finalReward);
        
        emit WorkCompleted(msg.sender, workType, complexity, finalReward, block.timestamp);
        emit EthRewardDistributed(msg.sender, finalReward, workType, block.timestamp);
    }
    
    /**
     * @dev Distribute work rewards
     * @param amount The amount to distribute
     */
    function _distributeWorkRewards(uint256 amount) internal {
        uint256 rewardAmount = (amount * REWARD_PERCENT) / 1000;
        
        // Distribute to active workers
        // This is a simplified distribution - in production, you'd have a more sophisticated system
        if (totalWorkCompleted > 0) {
            // Distribute proportionally to work completed
            // Implementation would depend on your specific reward distribution logic
        }
    }
    
    // ═══════════════════════════════════════════════════════════════════
    // CHAIN MANAGEMENT
    // ═══════════════════════════════════════════════════════════════════
    
    /**
     * @dev Add supported chain
     * @param chainId The chain ID
     * @param name The chain name
     * @param router The chain router address
     * @param fee The chain fee
     */
    function addChain(
        uint256 chainId,
        string memory name,
        address router,
        uint256 fee
    ) external onlyOwner {
        _addChain(chainId, name, router, fee);
    }
    
    /**
     * @dev Internal function to add chain
     * @param chainId The chain ID
     * @param name The chain name
     * @param router The chain router address
     * @param fee The chain fee
     */
    function _addChain(
        uint256 chainId,
        string memory name,
        address router,
        uint256 fee
    ) internal {
        supportedChains[chainId] = true;
        chainNames[chainId] = name;
        chainRouters[chainId] = router;
        chainFees[chainId] = fee;
        
        emit ChainAdded(chainId, name, router, fee, block.timestamp);
    }
    
    /**
     * @dev Update chain router
     * @param chainId The chain ID
     * @param newRouter The new router address
     */
    function updateRouter(uint256 chainId, address newRouter) external onlyOwner validChain(chainId) {
        address oldRouter = chainRouters[chainId];
        chainRouters[chainId] = newRouter;
        
        emit RouterUpdated(chainId, oldRouter, newRouter, block.timestamp);
    }
    
    // ═══════════════════════════════════════════════════════════════════
    // VIEW FUNCTIONS
    // ═══════════════════════════════════════════════════════════════════
    
    /**
     * @dev Get user statistics
     * @param user The user address
     * @return userWorkCompleted The work completed
     * @return userEthRewards The ETH rewards earned
     * @return userTotalRefunds The total refunds received
     * @return userRefundCount The refund count
     */
    function getUserStats(address user) external view returns (
        uint256 userWorkCompleted,
        uint256 userEthRewards,
        uint256 userTotalRefunds,
        uint256 userRefundCount
    ) {
        userWorkCompleted = workCompleted[user];
        userEthRewards = ethRewards[user];
        userTotalRefunds = totalRefunds[user];
        userRefundCount = refundCount[user];
    }
    
    /**
     * @dev Get bridge statistics
     * @return bridgeTotalBridges The total bridges
     * @return bridgeTotalRefundsProcessed The total refunds processed
     * @return bridgeTotalEthRewards The total ETH rewards
     * @return bridgeTotalWorkCompleted The total work completed
     */
    function getBridgeStats() external view returns (
        uint256 bridgeTotalBridges,
        uint256 bridgeTotalRefundsProcessed,
        uint256 bridgeTotalEthRewards,
        uint256 bridgeTotalWorkCompleted
    ) {
        bridgeTotalBridges = totalBridges;
        bridgeTotalRefundsProcessed = totalRefundsProcessed;
        bridgeTotalEthRewards = totalEthRewards;
        bridgeTotalWorkCompleted = totalWorkCompleted;
    }
    
    /**
     * @dev Get chain information
     * @param chainId The chain ID
     * @return supported Whether the chain is supported
     * @return name The chain name
     * @return router The chain router
     * @return fee The chain fee
     */
    function getChainInfo(uint256 chainId) external view returns (
        bool supported,
        string memory name,
        address router,
        uint256 fee
    ) {
        supported = supportedChains[chainId];
        name = chainNames[chainId];
        router = chainRouters[chainId];
        fee = chainFees[chainId];
    }
    
    // ═══════════════════════════════════════════════════════════════════
    // ADMIN FUNCTIONS
    // ═══════════════════════════════════════════════════════════════════
    
    /**
     * @dev Pause the bridge
     */
    function pause() external onlyOwner {
        paused = true;
    }
    
    /**
     * @dev Unpause the bridge
     */
    function unpause() external onlyOwner {
        paused = false;
    }
    
    /**
     * @dev Set reward multiplier for user
     * @param user The user address
     * @param multiplier The multiplier (100 = 1x, 200 = 2x, etc.)
     */
    function setRewardMultiplier(address user, uint256 multiplier) external onlyOwner {
        require(multiplier > 0 && multiplier <= 1000, "Invalid multiplier");
        rewardMultiplier[user] = multiplier;
    }
    
    /**
     * @dev Emergency withdraw
     * @param amount The amount to withdraw
     */
    function emergencyWithdraw(uint256 amount) external onlyOwner {
        require(address(this).balance >= amount, "Insufficient balance");
        payable(owner).transfer(amount);
    }
    
    // ═══════════════════════════════════════════════════════════════════
    // FALLBACK FUNCTIONS
    // ═══════════════════════════════════════════════════════════════════
    
    /**
     * @dev Receive ETH
     */
    receive() external payable {
        // ETH received for bridge operations
    }
    
    /**
     * @dev Fallback function
     */
    fallback() external payable {
        // ETH received for bridge operations
    }
}
"
    }
  },
  "settings": {
    "remappings": [
      "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
      "@forge-std/=lib/forge-std/src/",
      "@aave/=lib/aave-v3-core/",
      "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
      "ERC721A/=lib/ERC721A/contracts/",
      "aave-v3-core/=lib/aave-v3-core/",
      "ds-test/=lib/solmate/lib/ds-test/src/",
      "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
      "forge-std/=lib/forge-std/src/",
      "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
      "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
      "openzeppelin-contracts/=lib/openzeppelin-contracts/",
      "solmate/=lib/solmate/src/"
    ],
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "metadata": {
      "useLiteralContent": false,
      "bytecodeHash": "ipfs",
      "appendCBOR": true
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "evmVersion": "cancun",
    "viaIR": true
  }
}}

Tags:
Proxy, Upgradeable, Factory|addr:0x8a6365be4a619175c671bfa54be466236961eac5|verified:true|block:23653973|tx:0xccdca302295a2f78f0c0c530ec79bd0361ac39e1027b603510d4393eab8536a1|first_check:1761394217

Submitted on: 2025-10-25 14:10:18

Comments

Log in to comment.

No comments yet.