-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathScriptBase.s.sol
More file actions
113 lines (89 loc) · 3.8 KB
/
ScriptBase.s.sol
File metadata and controls
113 lines (89 loc) · 3.8 KB
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.26;
import { Script } from "forge-std/Script.sol";
import { Config } from "./Config.sol";
contract ScriptBase is Script, Config {
struct Deployments {
address[] extensionAddresses;
string[] extensionNames;
address swapAdapter;
address swapFacility;
}
function _getExtensionName() internal view returns (string memory) {
return vm.envString("EXTENSION_NAME");
}
function _setExtensionDeployment(
Deployments memory deployments_,
string memory key_,
address value_
) internal pure returns (Deployments memory) {
bool append = true;
for (uint256 i = 0; i < deployments_.extensionNames.length; i++) {
if (keccak256(bytes(deployments_.extensionNames[i])) == keccak256(bytes(key_))) {
deployments_.extensionNames[i] = key_;
deployments_.extensionAddresses[i] = value_;
append = false;
break;
}
}
if (append) {
string[] memory nameReplacements = new string[](deployments_.extensionNames.length + 1);
address[] memory addressReplacements = new address[](deployments_.extensionNames.length + 1);
for (uint256 i = 0; i < deployments_.extensionNames.length; i++) {
nameReplacements[i] = deployments_.extensionNames[i];
addressReplacements[i] = deployments_.extensionAddresses[i];
}
nameReplacements[nameReplacements.length - 1] = key_;
addressReplacements[addressReplacements.length - 1] = value_;
deployments_.extensionNames = nameReplacements;
deployments_.extensionAddresses = addressReplacements;
}
return deployments_;
}
function _deployOutputPath(uint256 chainId_) internal view returns (string memory) {
return string.concat(vm.projectRoot(), "/deployments/", vm.toString(chainId_), ".json");
}
function _writeDeployment(uint256 chainId_, string memory key_, address value_) internal {
string memory root = "";
Deployments memory deployments_;
if (vm.isFile(_deployOutputPath(chainId_))) {
deployments_ = _readDeployment(chainId_);
}
if (
keccak256(bytes(key_)) != keccak256(bytes("swapAdapter")) &&
keccak256(bytes(key_)) != keccak256(bytes("swapFacility"))
) {
deployments_ = _setExtensionDeployment(deployments_, key_, value_);
}
vm.serializeAddress(
root,
"swapAdapter",
keccak256(bytes(key_)) == keccak256("swapAdapter") ? value_ : deployments_.swapAdapter
);
vm.serializeAddress(
root,
"swapFacility",
keccak256(bytes(key_)) == keccak256("swapFacility") ? value_ : deployments_.swapFacility
);
vm.serializeString(root, "extensionNames", deployments_.extensionNames);
vm.writeJson(
vm.serializeAddress(root, "extensionAddresses", deployments_.extensionAddresses),
_deployOutputPath(chainId_)
);
}
function _readDeployment(uint256 chainId_) internal view returns (Deployments memory) {
if (!vm.isFile(_deployOutputPath(chainId_))) {
revert("Deployment artifacts not found");
}
bytes memory data = vm.parseJson(vm.readFile(_deployOutputPath(chainId_)));
return abi.decode(data, (Deployments));
}
function _getSwapFacility() internal view returns (address) {
Deployments memory deployments_ = _readDeployment(block.chainid);
if (deployments_.swapFacility == address(0)) {
return vm.envAddress("SWAP_FACILITY");
} else {
return deployments_.swapFacility;
}
}
}