Files
smom-dbis-138/script/deploy/bridge/DeployWETHBridges.s.sol
2026-03-02 12:14:09 -08:00

97 lines
4.6 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {Script, console} from "forge-std/Script.sol";
import {CCIPWETH9Bridge} from "../../../contracts/ccip/CCIPWETH9Bridge.sol";
import {CCIPWETH10Bridge} from "../../../contracts/ccip/CCIPWETH10Bridge.sol";
/**
* @title DeployWETHBridges
* @notice Deployment script for WETH9 and WETH10 bridges to ChainID 138
* @dev Deploys bridges with full interface including addDestination and getDestinationChains
*/
contract DeployWETHBridges is Script {
CCIPWETH9Bridge public weth9Bridge;
CCIPWETH10Bridge public weth10Bridge;
// Configuration
address public admin;
address public ccipRouter;
address public weth9;
address public weth10;
address public linkToken;
// Mainnet configuration (checksummed addresses)
uint64 public constant MAINNET_CHAIN_SELECTOR = 5009297550715157269;
address public mainnetWeth9 = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address public mainnetWeth10 = 0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9F;
function run() external {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
admin = vm.addr(deployerPrivateKey);
// Get addresses from environment or use defaults (checksummed).
// Default router: working CCIP router (0x8078A...) with code; do not use 0x80226... (no code).
ccipRouter = vm.envOr("CCIP_ROUTER_ADDRESS", address(0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e));
weth9 = vm.envOr("WETH9_ADDRESS", address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2));
weth10 = vm.envOr("WETH10_ADDRESS", address(0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9F));
linkToken = vm.envOr("LINK_TOKEN_ADDRESS", address(0x514910771AF9Ca656af840dff83E8264EcF986CA));
vm.startBroadcast(deployerPrivateKey);
console.log("=== Deploying WETH Bridges to ChainID 138 ===");
console.log("Admin:", admin);
console.log("CCIP Router:", ccipRouter);
console.log("WETH9:", weth9);
console.log("WETH10:", weth10);
console.log("LINK Token:", linkToken);
// Deploy WETH9 Bridge (constructor: ccipRouter, weth9, feeToken)
console.log("\n1. Deploying WETH9 Bridge...");
weth9Bridge = new CCIPWETH9Bridge(ccipRouter, weth9, linkToken);
console.log("WETH9 Bridge:", address(weth9Bridge));
// Deploy WETH10 Bridge (constructor: ccipRouter, weth10, feeToken)
console.log("\n2. Deploying WETH10 Bridge...");
weth10Bridge = new CCIPWETH10Bridge(ccipRouter, weth10, linkToken);
console.log("WETH10 Bridge:", address(weth10Bridge));
// Configure Mainnet destination (addDestination: chainSelector, receiverBridge)
address mainnetWeth9Receiver = vm.envOr("MAINNET_WETH9_BRIDGE_ADDRESS", address(0));
address mainnetWeth10Receiver = vm.envOr("MAINNET_WETH10_BRIDGE_ADDRESS", address(0));
if (mainnetWeth9Receiver != address(0)) {
weth9Bridge.addDestination(MAINNET_CHAIN_SELECTOR, mainnetWeth9Receiver);
console.log("WETH9 Bridge: Mainnet destination added");
}
if (mainnetWeth10Receiver != address(0)) {
weth10Bridge.addDestination(MAINNET_CHAIN_SELECTOR, mainnetWeth10Receiver);
console.log("WETH10 Bridge: Mainnet destination added");
}
// Verify destinations (optional when MAINNET_*_BRIDGE_ADDRESS not set)
console.log("\n4. Verifying destinations...");
uint64[] memory weth9Chains = weth9Bridge.getDestinationChains();
uint64[] memory weth10Chains = weth10Bridge.getDestinationChains();
if (mainnetWeth9Receiver != address(0)) {
require(weth9Chains.length == 1, "WETH9 should have 1 destination");
require(weth9Chains[0] == MAINNET_CHAIN_SELECTOR, "WETH9 destination should be Mainnet");
}
if (mainnetWeth10Receiver != address(0)) {
require(weth10Chains.length == 1, "WETH10 should have 1 destination");
require(weth10Chains[0] == MAINNET_CHAIN_SELECTOR, "WETH10 destination should be Mainnet");
}
vm.stopBroadcast();
console.log("\n=== WETH Bridges Deployment Complete ===");
console.log("Summary:");
console.log(" WETH9 Bridge:", address(weth9Bridge));
console.log(" WETH10 Bridge:", address(weth10Bridge));
console.log(" Mainnet Chain Selector:", MAINNET_CHAIN_SELECTOR);
console.log("\nNext Steps:");
console.log(" 1. Fund bridges with LINK tokens for CCIP fees");
console.log(" 2. Test bidirectional transfers");
console.log(" 3. Monitor bridge activity");
}
}