-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathdeploy_contracts.sol
75 lines (57 loc) · 2.44 KB
/
deploy_contracts.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// 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();
}
}