Files
smom-dbis-138/script/DeployWETHWithCCIP.s.sol

112 lines
4.3 KiB
Solidity
Raw Permalink Normal View History

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {WETH} from "../contracts/tokens/WETH.sol";
import {WETH10} from "../contracts/tokens/WETH10.sol";
import {CCIPWETH9Bridge} from "../contracts/ccip/CCIPWETH9Bridge.sol";
import {CCIPWETH10Bridge} from "../contracts/ccip/CCIPWETH10Bridge.sol";
/**
* @title Deploy WETH9, WETH10, and CCIP Bridges
* @notice Complete deployment script for WETH contracts with CCIP cross-chain support
*/
contract DeployWETHWithCCIP is Script {
struct DeploymentConfig {
address ccipRouter;
address feeToken; // LINK token
bool deployWETH9;
bool deployWETH10;
bool deployBridges;
}
function run() external {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
address deployer = vm.addr(deployerPrivateKey);
// Get configuration from environment
DeploymentConfig memory config = DeploymentConfig({
ccipRouter: vm.envAddress("CCIP_ROUTER"),
feeToken: vm.envAddress("CCIP_FEE_TOKEN"),
deployWETH9: vm.envBool("DEPLOY_WETH9"),
deployWETH10: vm.envBool("DEPLOY_WETH10"),
deployBridges: vm.envBool("DEPLOY_BRIDGES")
});
console.log("=== WETH with CCIP Deployment ===");
console.log("Deployer:", deployer);
console.log("CCIP Router:", config.ccipRouter);
console.log("Fee Token (LINK):", config.feeToken);
console.log("Deploy WETH9:", config.deployWETH9);
console.log("Deploy WETH10:", config.deployWETH10);
console.log("Deploy Bridges:", config.deployBridges);
vm.startBroadcast(deployerPrivateKey);
address weth9Address = address(0);
address weth10Address = address(0);
address weth9BridgeAddress = address(0);
address weth10BridgeAddress = address(0);
// Deploy WETH9
if (config.deployWETH9) {
console.log("\n--- Deploying WETH9 ---");
WETH weth9 = new WETH();
weth9Address = address(weth9);
console.log("WETH9 deployed at:", weth9Address);
console.log("WETH9 name:", weth9.name());
console.log("WETH9 symbol:", weth9.symbol());
}
// Deploy WETH10
if (config.deployWETH10) {
console.log("\n--- Deploying WETH10 ---");
WETH10 weth10 = new WETH10();
weth10Address = address(weth10);
console.log("WETH10 deployed at:", weth10Address);
console.log("WETH10 name:", weth10.name());
console.log("WETH10 symbol:", weth10.symbol());
console.log("WETH10 decimals:", weth10.decimals());
}
// Deploy Bridges
if (config.deployBridges) {
// Use deployed addresses or environment variables
address weth9 = config.deployWETH9 ? weth9Address : vm.envAddress("WETH9_ADDRESS");
address weth10 = config.deployWETH10 ? weth10Address : vm.envAddress("WETH10_ADDRESS");
require(weth9 != address(0), "WETH9 address required");
require(weth10 != address(0), "WETH10 address required");
// Deploy WETH9 Bridge
console.log("\n--- Deploying CCIPWETH9Bridge ---");
CCIPWETH9Bridge weth9Bridge = new CCIPWETH9Bridge(
config.ccipRouter,
weth9,
config.feeToken
);
weth9BridgeAddress = address(weth9Bridge);
console.log("CCIPWETH9Bridge deployed at:", weth9BridgeAddress);
// Deploy WETH10 Bridge
console.log("\n--- Deploying CCIPWETH10Bridge ---");
CCIPWETH10Bridge weth10Bridge = new CCIPWETH10Bridge(
config.ccipRouter,
weth10,
config.feeToken
);
weth10BridgeAddress = address(weth10Bridge);
console.log("CCIPWETH10Bridge deployed at:", weth10BridgeAddress);
}
console.log("\n=== Deployment Summary ===");
console.log("WETH9:", weth9Address);
console.log("WETH10:", weth10Address);
console.log("CCIPWETH9Bridge:", weth9BridgeAddress);
console.log("CCIPWETH10Bridge:", weth10BridgeAddress);
vm.stopBroadcast();
}
}