wormhole/ethereum/forge-scripts/DeployCore.s.sol

88 lines
2.3 KiB
Solidity

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;
import {Implementation} from "../contracts/Implementation.sol";
import {Setup} from "../contracts/Setup.sol";
import {Wormhole} from "../contracts/Wormhole.sol";
import "forge-std/Script.sol";
contract DeployCore is Script {
// DryRun - Deploy the system
// dry run: forge script ./forge-scripts/DeployCore.s.sol:DeployCore --sig "dryRun()" --rpc-url $RPC
function dryRun(
address[] memory initialSigners,
uint16 chainId,
uint16 governanceChainId,
bytes32 governanceContract,
uint256 evmChainId
) public {
_deploy(
initialSigners,
chainId,
governanceChainId,
governanceContract,
evmChainId
);
}
// Deploy the system
function run(
address[] memory initialSigners,
uint16 chainId,
uint16 governanceChainId,
bytes32 governanceContract,
uint256 evmChainId
)
public
returns (
address deployedAddress,
address setupAddress,
address implAddress
)
{
vm.startBroadcast();
(deployedAddress, setupAddress, implAddress) = _deploy(
initialSigners,
chainId,
governanceChainId,
governanceContract,
evmChainId
);
vm.stopBroadcast();
}
function _deploy(
address[] memory initialSigners,
uint16 chainId,
uint16 governanceChainId,
bytes32 governanceContract,
uint256 evmChainId
)
internal
returns (
address deployedAddress,
address setupAddress,
address implAddress
)
{
Implementation impl = new Implementation();
Setup setup = new Setup();
bytes memory initData = abi.encodeWithSignature(
"setup(address,address[],uint16,uint16,bytes32,uint256)",
address(impl),
initialSigners,
chainId,
governanceChainId,
governanceContract,
evmChainId
);
Wormhole wormhole = new Wormhole(
address(setup),
initData
);
return (address(wormhole), address(setup), address(impl));
}
}