wormhole-circle-integration/evm/forge-scripts/deploy_contracts.sol

76 lines
2.4 KiB
Solidity

// SPDX-License-Identifier: Apache 2
pragma solidity ^0.8.19;
import "forge-std/Script.sol";
import "forge-std/console2.sol";
import {IWormhole} from "wormhole/interfaces/IWormhole.sol";
import {ICircleBridge} from "../src/interfaces/circle/ICircleBridge.sol";
import {IMessageTransmitter} from "../src/interfaces/circle/IMessageTransmitter.sol";
import {CircleIntegrationSetup} from "../src/circle_integration/CircleIntegrationSetup.sol";
import {CircleIntegrationImplementation} from "../src/circle_integration/CircleIntegrationImplementation.sol";
import {CircleIntegrationProxy} from "../src/circle_integration/CircleIntegrationProxy.sol";
import {ICircleIntegration} from "../src/interfaces/ICircleIntegration.sol";
contract ContractScript is Script {
// Wormhole
IWormhole wormhole;
// Circle
ICircleBridge circleBridge;
// Circle Integration
CircleIntegrationSetup setup;
CircleIntegrationImplementation implementation;
CircleIntegrationProxy proxy;
function setUp() public {
// Wormhole
wormhole = IWormhole(vm.envAddress("RELEASE_WORMHOLE_ADDRESS"));
// Circle
circleBridge = ICircleBridge(vm.envAddress("RELEASE_CIRCLE_BRIDGE_ADDRESS"));
}
function deployCircleIntegration() public {
// first Setup
setup = new CircleIntegrationSetup();
console2.log("CircleIntegrationSetup address: %s", address(setup));
// next Implementation
implementation = new CircleIntegrationImplementation();
console2.log("CircleIntegrationImplementation address: %s", address(implementation));
console2.log("Wormhole address: %s, chainId: %s", address(wormhole), wormhole.chainId());
// setup Proxy using Implementation
proxy = new CircleIntegrationProxy(
address(setup),
abi.encodeCall(CircleIntegrationSetup.setup, (
address(implementation),
address(wormhole),
uint8(vm.envUint("RELEASE_WORMHOLE_FINALITY")),
address(circleBridge),
wormhole.governanceChainId(),
wormhole.governanceContract()
))
);
console2.log("CircleIntegrationProxy address: %s", address(proxy));
}
function run() public {
// begin sending transactions
vm.startBroadcast();
// deploy Circle Integration proxy
deployCircleIntegration();
// finished
vm.stopBroadcast();
}
}