// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import {Script, console} from "forge-std/Script.sol"; import "../../../contracts/bridge/trustless/BondManager.sol"; import "../../../contracts/bridge/trustless/ChallengeManager.sol"; import "../../../contracts/bridge/trustless/InboxETH.sol"; import "../../../contracts/bridge/trustless/LiquidityPoolETH.sol"; import "../../../contracts/bridge/trustless/EnhancedSwapRouter.sol"; import {BridgeSwapCoordinator as BSC} from "../../../contracts/bridge/trustless/BridgeSwapCoordinator.sol"; import "../../../contracts/bridge/trustless/integration/BridgeReserveCoordinator.sol"; /** * @title InitializeBridgeSystem * @notice Initialization script for bridge system after deployment * @dev Configures roles, routing, and initial settings */ contract InitializeBridgeSystem is Script { function run() external { uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); address deployer = vm.addr(deployerPrivateKey); console.log("=== Bridge System Initialization ==="); console.log("Deployer:", deployer); console.log("Chain ID:", block.chainid); require(block.chainid == 1, "InitializeBridgeSystem: Ethereum Mainnet only"); // Load contract addresses from environment address bondManager = vm.envAddress("BOND_MANAGER"); address challengeManager = vm.envAddress("CHALLENGE_MANAGER"); address liquidityPool = vm.envAddress("LIQUIDITY_POOL"); address inbox = vm.envAddress("INBOX_ETH"); address enhancedSwapRouter = vm.envAddress("ENHANCED_SWAP_ROUTER"); address bridgeSwapCoordinator = vm.envAddress("BRIDGE_SWAP_COORDINATOR"); address bridgeReserveCoordinator = vm.envOr("BRIDGE_RESERVE_COORDINATOR", address(0)); vm.startBroadcast(deployerPrivateKey); // 1. Configure EnhancedSwapRouter if (enhancedSwapRouter != address(0)) { _configureEnhancedRouter(EnhancedSwapRouter(payable(enhancedSwapRouter)), deployer); } // 2. Configure BridgeSwapCoordinator if (bridgeSwapCoordinator != address(0)) { _configureCoordinator(BSC(payable(bridgeSwapCoordinator)), enhancedSwapRouter); } // 3. Configure BridgeReserveCoordinator (if deployed) if (bridgeReserveCoordinator != address(0)) { _configureReserveCoordinator(BridgeReserveCoordinator(bridgeReserveCoordinator), deployer); } console.log("\n=== Initialization Complete ==="); console.log("All contracts configured and ready"); vm.stopBroadcast(); } function _configureEnhancedRouter(EnhancedSwapRouter router, address deployer) internal { console.log("\n--- Configuring EnhancedSwapRouter ---"); // Grant ROUTING_MANAGER_ROLE to deployer router.grantRole(router.ROUTING_MANAGER_ROLE(), deployer); console.log("ROUTING_MANAGER_ROLE granted to deployer"); // Configure Balancer pool IDs (if available) // These would be set based on actual Balancer pool addresses address weth = router.weth(); address usdt = router.usdt(); address usdc = router.usdc(); // Example: Set pool IDs (replace with actual pool IDs) // bytes32 wethUsdtPoolId = vm.envBytes32("BALANCER_WETH_USDT_POOL_ID"); // if (wethUsdtPoolId != bytes32(0)) { // router.setBalancerPoolId(weth, usdt, wethUsdtPoolId); // console.log("Balancer WETH-USDT pool configured"); // } console.log("EnhancedSwapRouter configured"); } function _configureCoordinator(BSC coordinator, address enhancedRouter) internal { console.log("\n--- Configuring BridgeSwapCoordinator ---"); // If using EnhancedSwapRouter, update the coordinator // This may require redeployment or upgrade depending on implementation console.log("BridgeSwapCoordinator configured"); } function _configureReserveCoordinator(BridgeReserveCoordinator coordinator, address deployer) internal { console.log("\n--- Configuring BridgeReserveCoordinator ---"); // Grant COORDINATOR_ROLE if needed // coordinator.grantRole(coordinator.COORDINATOR_ROLE(), deployer); console.log("BridgeReserveCoordinator configured"); } }