97 lines
4.6 KiB
Solidity
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");
|
|
}
|
|
}
|