Skip to content

Commit c47131e

Browse files
authored
[STABLE-8092] [Cont.]: Update implementation deployment script to use CREATE2 more effectively (circlefin#60)
### Summary Follow-up to: circlefin/evm-cctp-contracts-private@8cf3673, this correct an oversight where the TokenMinterV2 via Create2 was being passed the tokenController as a constructor arg. Since this affects the bytecode, it affects the address. ### Testing The tests actually already assert that the tokenController is rotated correctly; it's done atomically in both ways, only this way ensures a consistent address. Edit: added a test to ensure that the script is deploying via CREATE2 in an expected way.
1 parent c0b9ea7 commit c47131e

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

scripts/v2/DeployImplementationsV2.s.sol

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pragma abicoder v2;
2121
import {Script} from "forge-std/Script.sol";
2222
import {AdminUpgradableProxy} from "../../src/proxy/AdminUpgradableProxy.sol";
2323
import {TokenMessengerV2} from "../../src/v2/TokenMessengerV2.sol";
24-
import {TokenMinterV2} from "../../src/v2/TokenMinterV2.sol";
24+
import {TokenMinter, TokenMinterV2} from "../../src/v2/TokenMinterV2.sol";
2525
import {MessageTransmitterV2} from "../../src/v2/MessageTransmitterV2.sol";
2626
import {Create2Factory} from "../../src/v2/Create2Factory.sol";
2727
import {Ownable2Step} from "../../src/roles/Ownable2Step.sol";
@@ -93,12 +93,19 @@ contract DeployImplementationsV2Script is Script {
9393

9494
// Since the TokenMinter sets the msg.sender of the deployment to be
9595
// the Owner, we'll need to rotate it from the Create2Factory atomically.
96+
// But first we rotate the tokenController, since only the Owner can do that
97+
bytes memory tokenMinterTokenControllerRotation = abi
98+
.encodeWithSelector(
99+
TokenMinter.setTokenController.selector,
100+
tokenControllerAddress
101+
);
96102
bytes memory tokenMinterOwnershipRotation = abi.encodeWithSelector(
97103
Ownable2Step.transferOwnership.selector,
98104
tokenMinterOwnerAddress
99105
);
100-
bytes[] memory tokenMinterMultiCallData = new bytes[](1);
101-
tokenMinterMultiCallData[0] = tokenMinterOwnershipRotation;
106+
bytes[] memory tokenMinterMultiCallData = new bytes[](2);
107+
tokenMinterMultiCallData[0] = tokenMinterTokenControllerRotation;
108+
tokenMinterMultiCallData[1] = tokenMinterOwnershipRotation;
102109

103110
// Deploy TokenMinter
104111
tokenMinterV2 = TokenMinterV2(
@@ -107,7 +114,7 @@ contract DeployImplementationsV2Script is Script {
107114
SALT_TOKEN_MINTER,
108115
abi.encodePacked(
109116
type(TokenMinterV2).creationCode,
110-
abi.encode(tokenControllerAddress)
117+
abi.encode(address(factory))
111118
),
112119
tokenMinterMultiCallData
113120
)

test/scripts/v2/DeployImplementationsV2.t.sol

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import {ScriptV2TestUtils} from "./ScriptV2TestUtils.sol";
2020
import {DeployImplementationsV2Script} from "../../../scripts/v2/DeployImplementationsV2.s.sol";
2121
import {MessageTransmitterV2} from "../../../src/v2/MessageTransmitterV2.sol";
2222
import {TokenMessengerV2} from "../../../src/v2/TokenMessengerV2.sol";
23+
import {SALT_TOKEN_MINTER} from "../../../scripts/v2/Salts.sol";
24+
import {TokenMinterV2} from "../../../src/v2/TokenMinterV2.sol";
2325

2426
contract DeployImplementationsV2Test is ScriptV2TestUtils {
2527
DeployImplementationsV2Script deployImplementationsV2Script;
@@ -36,6 +38,16 @@ contract DeployImplementationsV2Test is ScriptV2TestUtils {
3638
assertEq(messageTransmitterV2Impl.version(), uint256(_version));
3739

3840
// TokenMinterV2
41+
address predictedTokenMinterAddress = create2Factory.computeAddress(
42+
SALT_TOKEN_MINTER,
43+
keccak256(
44+
abi.encodePacked(
45+
type(TokenMinterV2).creationCode,
46+
abi.encode(create2Factory)
47+
)
48+
)
49+
);
50+
assertEq(address(tokenMinterV2), predictedTokenMinterAddress);
3951
assertEq(tokenMinterV2.tokenController(), deployer);
4052
assertEq(tokenMinterV2.owner(), deployer);
4153

0 commit comments

Comments
 (0)