| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- // SPDX-License-Identifier: Apache-2.0
- pragma solidity ^0.8.0;
- import "forge-std/Script.sol";
- import "forge-std/console.sol";
- import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
- // Wormhole contracts
- import "../contracts/wormhole/Setup.sol";
- import "../contracts/wormhole/Implementation.sol";
- import "../contracts/wormhole/Wormhole.sol";
- // Pyth contracts
- import "../contracts/pyth/PythUpgradable.sol";
- contract DeployScript is Script {
- function run() external {
- uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
- vm.startBroadcast(deployerPrivateKey);
- // Deploy Wormhole first
- address wormholeAddress = deployWormhole();
- console.log("Wormhole deployed at:", wormholeAddress);
- // Deploy Pyth
- address pythAddress = deployPyth(wormholeAddress);
- console.log("Pyth deployed at:", pythAddress);
- vm.stopBroadcast();
- }
- function deployWormhole() internal returns (address) {
- // Read environment variables
- address[] memory initialSigners = vm.envAddress("INIT_SIGNERS", ",");
- uint16 chainId = uint16(vm.envUint("INIT_CHAIN_ID"));
- uint16 governanceChainId = uint16(vm.envUint("INIT_GOV_CHAIN_ID"));
- bytes32 governanceContract = vm.envBytes32("INIT_GOV_CONTRACT");
- console.log("Deploying Wormhole with chainId:", chainId);
- console.log("Governance chainId:", governanceChainId);
- // Deploy Setup contract
- Setup setup = new Setup();
- console.log("Setup deployed at:", address(setup));
- // Deploy Implementation contract
- Implementation implementation = new Implementation();
- console.log("Implementation deployed at:", address(implementation));
- // Encode initialization data
- bytes memory initData = abi.encodeWithSignature(
- "setup(address,address[],uint16,uint16,bytes32)",
- address(implementation),
- initialSigners,
- chainId,
- governanceChainId,
- governanceContract
- );
- // Deploy Wormhole proxy
- Wormhole wormhole = new Wormhole(address(setup), initData);
- return address(wormhole);
- }
- function deployPyth(address wormholeAddress) internal returns (address) {
- // Read environment variables
- uint16 pyth2WormholeChainId = uint16(vm.envUint("SOLANA_CHAIN_ID"));
- bytes32 pyth2WormholeEmitter = vm.envBytes32("SOLANA_EMITTER");
- uint16 governanceChainId = uint16(vm.envUint("GOVERNANCE_CHAIN_ID"));
- bytes32 governanceEmitter = vm.envBytes32("GOVERNANCE_EMITTER");
- uint64 governanceInitialSequence = uint64(
- vm.envOr("GOVERNANCE_INITIAL_SEQUENCE", uint256(0))
- );
- uint256 validTimePeriodSeconds = vm.envUint(
- "VALID_TIME_PERIOD_SECONDS"
- );
- uint256 singleUpdateFeeInWei = vm.envUint("SINGLE_UPDATE_FEE_IN_WEI");
- console.log("pyth2WormholeChainId:", pyth2WormholeChainId);
- console.log("pyth2WormholeEmitter:", uint256(pyth2WormholeEmitter));
- console.log("governanceEmitter:", uint256(governanceEmitter));
- console.log("governanceChainId:", governanceChainId);
- console.log("governanceInitialSequence:", governanceInitialSequence);
- console.log("validTimePeriodSeconds:", validTimePeriodSeconds);
- console.log("singleUpdateFeeInWei:", singleUpdateFeeInWei);
- // Deploy PythUpgradable implementation
- PythUpgradable pythImpl = new PythUpgradable();
- console.log(
- "PythUpgradable implementation deployed at:",
- address(pythImpl)
- );
- // Prepare initialization data
- uint16[] memory dataSourceChainIds = new uint16[](1);
- dataSourceChainIds[0] = pyth2WormholeChainId;
- bytes32[] memory dataSourceEmitterAddresses = new bytes32[](1);
- dataSourceEmitterAddresses[0] = pyth2WormholeEmitter;
- bytes memory pythInitData = abi.encodeWithSignature(
- "initialize(address,uint16[],bytes32[],uint16,bytes32,uint64,uint256,uint256)",
- wormholeAddress,
- dataSourceChainIds,
- dataSourceEmitterAddresses,
- governanceChainId,
- governanceEmitter,
- governanceInitialSequence,
- validTimePeriodSeconds,
- singleUpdateFeeInWei
- );
- // Deploy ERC1967 proxy
- ERC1967Proxy pythProxy = new ERC1967Proxy(
- address(pythImpl),
- pythInitData
- );
- return address(pythProxy);
- }
- }
|