Skip to content

Commit 8a25c1a

Browse files
authored
[STABLE-8131] Calculate tokenMessengerV2 proxy address instead of parsing from env (#55)
- Add flag in DeployProxiesV2 script to determine whether to read `remoteTokenMessengerAddresses` from env variable. - Add logic to use deterministic Create2 address calculation if not reading from env. - Update UT to test the false case. True case will most likely not get used. - TODO: Figure out a way to set flag to true based on test selector before `setUp()` is run to test the true case
1 parent 7d70310 commit 8a25c1a

File tree

3 files changed

+45
-23
lines changed

3 files changed

+45
-23
lines changed

scripts/v2/DeployProxiesV2.s.sol

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {AdminUpgradableProxy} from "../../src/proxy/AdminUpgradableProxy.sol";
2424
import {TokenMessengerV2} from "../../src/v2/TokenMessengerV2.sol";
2525
import {TokenMinterV2} from "../../src/v2/TokenMinterV2.sol";
2626
import {MessageTransmitterV2} from "../../src/v2/MessageTransmitterV2.sol";
27+
import {AddressUtils} from "../../src/messages/v2/AddressUtils.sol";
2728

2829
contract DeployProxiesV2Script is Script {
2930
// Expose for tests
@@ -150,15 +151,28 @@ contract DeployProxiesV2Script is Script {
150151
""
151152
);
152153

154+
// Calculate TokenMessengerV2 proxy address
155+
address expectedTokenMessengerV2ProxyAddress = vm.computeCreate2Address(
156+
keccak256(type(TokenMessengerV2).creationCode),
157+
keccak256(
158+
proxyCreateCode
159+
),
160+
factory
161+
);
162+
163+
bool remoteTokenMessengerV2FromEnv = remoteTokenMessengerV2Addresses.length > 0;
164+
153165
// Construct initializer
154166
bytes32[] memory remoteTokenMessengerAddresses = new bytes32[](
155167
remoteDomains.length
156168
);
157169
uint256 remoteDomainsLength = remoteDomains.length;
158170
for (uint256 i = 0; i < remoteDomainsLength; ++i) {
159-
remoteTokenMessengerAddresses[i] = remoteTokenMessengerV2Addresses[
160-
i
161-
];
171+
if (remoteTokenMessengerV2FromEnv) {
172+
remoteTokenMessengerAddresses[i] = remoteTokenMessengerV2Addresses[i];
173+
} else {
174+
remoteTokenMessengerAddresses[i] = AddressUtils.toBytes32(expectedTokenMessengerV2ProxyAddress);
175+
}
162176
}
163177
bytes memory initializer = abi.encodeWithSelector(
164178
TokenMessengerV2.initialize.selector,
@@ -199,7 +213,6 @@ contract DeployProxiesV2Script is Script {
199213
proxyCreateCode,
200214
multiCallData
201215
);
202-
203216
// Stop recording transations
204217
vm.stopBroadcast();
205218

@@ -333,9 +346,11 @@ contract DeployProxiesV2Script is Script {
333346
);
334347
tokenControllerPrivateKey = vm.envUint("TOKEN_CONTROLLER_KEY");
335348

336-
remoteTokenMessengerV2Addresses = vm.envBytes32(
349+
bytes32[] memory emptyRemoteTokenMessengerV2Addresses = new bytes32[](0);
350+
remoteTokenMessengerV2Addresses = vm.envOr(
337351
"REMOTE_TOKEN_MESSENGER_V2_ADDRESSES",
338-
","
352+
",",
353+
emptyRemoteTokenMessengerV2Addresses
339354
);
340355
}
341356

test/scripts/v2/DeployProxiesV2.t.sol

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,13 @@ contract DeployProxiesV2Test is ScriptV2TestUtils {
105105
// remote token messengers
106106
for (uint256 i = 0; i < remoteDomains.length; i++) {
107107
uint32 remoteDomain = remoteDomains[i];
108+
bytes32 remoteTokenMessengerAddress = bytes32(uint256(uint160(address(tokenMessengerV2))));
109+
if (remoteTokenMessengerV2FromEnv) {
110+
remoteTokenMessengerAddress = bytes32(uint256(uint160(address(remoteTokenMessengerV2s[i]))));
111+
}
108112
assertEq(
109113
tokenMessengerV2.remoteTokenMessengers(remoteDomain),
110-
bytes32(uint256(uint160(address(remoteTokenMessengerV2s[i]))))
114+
remoteTokenMessengerAddress
111115
);
112116
}
113117
// admin

test/scripts/v2/ScriptV2TestUtils.sol

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ contract ScriptV2TestUtils is TestUtils {
5454
address[] remoteTokens;
5555
uint32[] remoteDomains;
5656
address[] remoteTokenMessengerV2s;
57+
bool remoteTokenMessengerV2FromEnv = false;
5758
uint32 anotherRemoteDomain = 5;
5859
address anotherRemoteToken;
5960

@@ -166,24 +167,26 @@ contract ScriptV2TestUtils is TestUtils {
166167
)
167168
)
168169
);
169-
vm.setEnv(
170-
"REMOTE_TOKEN_MESSENGER_V2_ADDRESSES",
171-
string(
172-
abi.encodePacked(
173-
vm.toString(
174-
Message.addressToBytes32(remoteTokenMessengerV2s[0])
175-
),
176-
",",
177-
vm.toString(
178-
Message.addressToBytes32(remoteTokenMessengerV2s[1])
179-
),
180-
",",
181-
vm.toString(
182-
Message.addressToBytes32(remoteTokenMessengerV2s[2])
170+
if (remoteTokenMessengerV2FromEnv) { // TODO: Figure out if there is a way to dynamically set this before setUp()
171+
vm.setEnv(
172+
"REMOTE_TOKEN_MESSENGER_V2_ADDRESSES",
173+
string(
174+
abi.encodePacked(
175+
vm.toString(
176+
Message.addressToBytes32(remoteTokenMessengerV2s[0])
177+
),
178+
",",
179+
vm.toString(
180+
Message.addressToBytes32(remoteTokenMessengerV2s[1])
181+
),
182+
",",
183+
vm.toString(
184+
Message.addressToBytes32(remoteTokenMessengerV2s[2])
185+
)
183186
)
184187
)
185-
)
186-
);
188+
);
189+
}
187190

188191
vm.setEnv(
189192
"MESSAGE_TRANSMITTER_V2_IMPLEMENTATION_ADDRESS",

0 commit comments

Comments
 (0)