- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control. - Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities. - Created .gitmodules to include OpenZeppelin contracts as a submodule. - Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment. - Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks. - Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring. - Created scripts for resource import and usage validation across non-US regions. - Added tests for CCIP error handling and integration to ensure robust functionality. - Included various new files and directories for the orchestration portal and deployment scripts.
91 lines
3.8 KiB
Solidity
91 lines
3.8 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.19;
|
|
|
|
import {Script, console} from "forge-std/Script.sol";
|
|
import {WETH10} from "../contracts/tokens/WETH10.sol";
|
|
import {CREATE2Factory} from "../contracts/utils/CREATE2Factory.sol";
|
|
|
|
/**
|
|
* @title DeployWETH10WithCREATE2
|
|
* @notice Deploy WETH10 using CREATE2 for deterministic address
|
|
* @dev Attempts to match Ethereum Mainnet address if WETH10 was deployed with CREATE2
|
|
* If WETH10 on Mainnet was deployed with CREATE2, we can match the address
|
|
* by using the same bytecode, salt, and deployer address
|
|
*/
|
|
contract DeployWETH10WithCREATE2 is Script {
|
|
// Ethereum Mainnet WETH10 address (for reference)
|
|
address constant MAINNET_WETH10 = 0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9F;
|
|
|
|
function run() external {
|
|
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
|
|
address deployer = vm.addr(deployerPrivateKey);
|
|
|
|
console.log("Deploying WETH10 with CREATE2");
|
|
console.log("Deployer:", deployer);
|
|
console.log("Ethereum Mainnet WETH10:", MAINNET_WETH10);
|
|
|
|
vm.startBroadcast(deployerPrivateKey);
|
|
|
|
// Get WETH10 bytecode
|
|
bytes memory weth10Bytecode = type(WETH10).creationCode;
|
|
|
|
// Try to match Ethereum Mainnet address
|
|
// If WETH10 was deployed with CREATE2, we need:
|
|
// 1. Same bytecode (must match exactly)
|
|
// 2. Same deployer address (or factory address)
|
|
// 3. Same salt
|
|
|
|
// Option 1: Use a known salt if WETH10 was deployed with CREATE2
|
|
// Common salt: keccak256("WETH10") or a specific value
|
|
uint256 salt = uint256(keccak256("WETH10-ChainID-138"));
|
|
|
|
// Option 2: If we know the original salt from Ethereum Mainnet, use it
|
|
// For now, we'll use a deterministic salt for this chain
|
|
|
|
// Deploy CREATE2Factory (or use existing)
|
|
CREATE2Factory factory = new CREATE2Factory();
|
|
console.log("CREATE2Factory deployed at:", address(factory));
|
|
|
|
// Compute predicted address
|
|
address predictedAddress = factory.computeAddress(weth10Bytecode, salt);
|
|
console.log("Predicted WETH10 address:", predictedAddress);
|
|
|
|
// Check if this matches Mainnet address
|
|
if (predictedAddress == MAINNET_WETH10) {
|
|
console.log("Predicted address matches Ethereum Mainnet!");
|
|
} else {
|
|
console.log("Predicted address differs from Ethereum Mainnet");
|
|
console.log(" This is expected if WETH10 on Mainnet was deployed with CREATE");
|
|
console.log(" or if bytecode/salt/deployer differs");
|
|
}
|
|
|
|
// Deploy using CREATE2
|
|
address weth10Address = factory.deploy(weth10Bytecode, salt);
|
|
console.log("WETH10 deployed at:", weth10Address);
|
|
|
|
require(weth10Address == predictedAddress, "Address mismatch");
|
|
|
|
// Verify it's the correct contract
|
|
WETH10 weth10 = WETH10(payable(weth10Address));
|
|
console.log("WETH10 name:", weth10.name());
|
|
console.log("WETH10 symbol:", weth10.symbol());
|
|
console.log("WETH10 decimals:", weth10.decimals());
|
|
|
|
vm.stopBroadcast();
|
|
|
|
console.log("\n=== Deployment Summary ===");
|
|
console.log("WETH10 Address:", weth10Address);
|
|
console.log("CREATE2Factory:", address(factory));
|
|
console.log("Salt:", vm.toString(salt));
|
|
console.log("Ethereum Mainnet WETH10:", MAINNET_WETH10);
|
|
|
|
if (weth10Address == MAINNET_WETH10) {
|
|
console.log("\nSUCCESS: Address matches Ethereum Mainnet!");
|
|
} else {
|
|
console.log("\nAddress differs from Ethereum Mainnet");
|
|
console.log(" This is a new deterministic address for ChainID 138");
|
|
}
|
|
}
|
|
}
|
|
|