Skip to content

Commit 4dce37b

Browse files
zzhang-circleams9198epoon-circlegrantmikejhilaire-circle
authored
[Untracked] V2.1 (#67)
Add fee switch functionality for CCTP V2 slow burns --------- Co-authored-by: ams9198 <[email protected]> Co-authored-by: epoon-circle <[email protected]> Co-authored-by: Michael Grant <[email protected]> Co-authored-by: Jeffrey Hilaire <[email protected]>
1 parent 6e7513c commit 4dce37b

29 files changed

+5838
-419
lines changed

Makefile

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,38 @@ simulate-deploy-implementations-v2:
1919
forge script scripts/v2/DeployImplementationsV2.s.sol:DeployImplementationsV2Script --rpc-url ${RPC_URL} --sender ${SENDER}
2020

2121
deploy-implementations-v2:
22-
forge script scripts/v2/DeployImplementationsV2.s.sol:DeployImplementationsV2Script --rpc-url ${RPC_URL} --sender ${SENDER} --broadcast
22+
forge script scripts/v2/DeployImplementationsV2.s.sol:DeployImplementationsV2Script --rpc-url ${RPC_URL} --sender ${SENDER} --private-key ${CREATE2_FACTORY_OWNER_KEY} --broadcast
23+
24+
deploy-implementations-v2-unlocked:
25+
forge script scripts/v2/DeployImplementationsV2.s.sol:DeployImplementationsV2Script --rpc-url ${RPC_URL} --sender 0x0000000000000000000000000000000000000000 --broadcast --unlocked
2326

2427
simulate-deploy-create2-factory:
2528
forge script scripts/DeployCreate2Factory.s.sol:DeployCreate2FactoryScript --rpc-url ${RPC_URL} --sender ${SENDER}
2629

2730
deploy-create2-factory:
28-
forge script scripts/DeployCreate2Factory.s.sol:DeployCreate2FactoryScript --rpc-url ${RPC_URL} --sender ${SENDER} --broadcast
31+
forge script scripts/DeployCreate2Factory.s.sol:DeployCreate2FactoryScript --rpc-url ${RPC_URL} --sender ${SENDER} --broadcast --private-key ${CREATE2_FACTORY_OWNER_KEY}
32+
33+
deploy-create2-factory-unlocked:
34+
forge script scripts/DeployCreate2Factory.s.sol:DeployCreate2FactoryScript --rpc-url ${RPC_URL} --sender 0x0000000000000000000000000000000000000000 --broadcast --unlocked
2935

3036
simulate-deploy-proxies-v2:
3137
forge script scripts/v2/DeployProxiesV2.s.sol:DeployProxiesV2Script --rpc-url ${RPC_URL} --sender ${SENDER}
3238

3339
deploy-proxies-v2:
34-
forge script scripts/v2/DeployProxiesV2.s.sol:DeployProxiesV2Script --rpc-url ${RPC_URL} --sender ${SENDER} --broadcast
40+
forge script scripts/v2/DeployProxiesV2.s.sol:DeployProxiesV2Script --rpc-url ${RPC_URL} --sender ${SENDER} --broadcast --private-key ${CREATE2_FACTORY_OWNER_KEY}
41+
42+
deploy-proxies-v2-unlocked:
43+
forge script scripts/v2/DeployProxiesV2.s.sol:DeployProxiesV2Script --rpc-url ${RPC_URL} --sender 0x0000000000000000000000000000000000000000 --broadcast --unlocked
3544

3645
simulate-setup-remote-resources-v2:
3746
forge script scripts/v2/SetupRemoteResourcesV2.s.sol:SetupRemoteResourcesV2Script --rpc-url ${RPC_URL} --sender ${SENDER}
3847

48+
simulate-configure-token-minter-v2:
49+
forge script scripts/v2/DeployProxiesV2.s.sol:DeployProxiesV2Script --sig "configureTokenMinterV2()()" --rpc-url ${RPC_URL} --sender ${SENDER}
50+
51+
configure-token-minter-v2:
52+
forge script scripts/v2/DeployProxiesV2.s.sol:DeployProxiesV2Script --sig "configureTokenMinterV2()()" --rpc-url ${RPC_URL} --sender ${SENDER} --broadcast
53+
3954
setup-remote-resources-v2:
4055
forge script scripts/v2/SetupRemoteResourcesV2.s.sol:SetupRemoteResourcesV2Script --rpc-url ${RPC_URL} --sender ${SENDER} --broadcast
4156

@@ -46,10 +61,13 @@ rotate-keys-v2:
4661
forge script scripts/v2/RotateKeysV2.s.sol:RotateKeysV2Script --rpc-url ${RPC_URL} --sender ${SENDER} --broadcast
4762

4863
simulate-deploy-address-utils-external:
49-
forge script scripts/v2/DeployAddressUtilsExternal.s.sol:DeployAddressUtilsExternalScript --rpc-url ${RPC_URL} --sender ${SENDER}
64+
forge script scripts/v2/DeployAddressUtilsExternal.s.sol:DeployAddressUtilsExternalScript --rpc-url ${RPC_URL} --sender ${SENDER} --private-keys ${CREATE2_FACTORY_OWNER_KEY}
5065

5166
deploy-address-utils-external:
52-
forge script scripts/v2/DeployAddressUtilsExternal.s.sol:DeployAddressUtilsExternalScript --rpc-url ${RPC_URL} --sender ${SENDER} --broadcast
67+
forge script scripts/v2/DeployAddressUtilsExternal.s.sol:DeployAddressUtilsExternalScript --rpc-url ${RPC_URL} --sender ${SENDER} --broadcast --private-keys ${CREATE2_FACTORY_OWNER_KEY}
68+
69+
deploy-address-utils-external-unlocked:
70+
forge script scripts/v2/DeployAddressUtilsExternal.s.sol:DeployAddressUtilsExternalScript --rpc-url ${RPC_URL} --sender 0x0000000000000000000000000000000000000000 --broadcast --unlocked
5371

5472
anvil:
5573
docker rm -f anvil || true
@@ -63,6 +81,9 @@ anvil-test-v2: anvil
6381
pip3 install -r requirements.txt
6482
python anvil/crosschainTransferITV2.py
6583

84+
anvil-impersonate:
85+
python ./scripts/impersonateAnvilAccounts.py $(ADDRESSES) --balance 10
86+
6687
deploy-local:
6788
@docker exec anvil forge script anvil/scripts/${contract}.s.sol:${contract}Script --rpc-url http://localhost:8545 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --broadcast
6889

README.md

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@ The contracts are deployed using [Forge Scripts](https://book.getfoundry.sh/tuto
106106

107107
Deploy Create2Factory first if not yet deployed.
108108

109-
1. Add the environment variable `CREATE2_FACTORY_DEPLOYER_KEY` to your [env](.env) file.
110-
2. Run `make simulate-deploy-create2-factory RPC_URL=<RPC_URL> SENDER=<SENDER>` to perform a dry run.
109+
1. Add the environment variable `CREATE2_FACTORY_OWNER` (address) to your [env](.env) file.
110+
2. Run `make simulate-deploy-create2-factory RPC_URL=<RPC_URL> SENDER=<SENDER> CREATE2_FACTORY_OWNER_KEY=<PRIVATE_KEY>` to perform a dry run.
111111
3. Run
112-
```make deploy-create2-factory RPC_URL=<RPC_URL> SENDER=<SENDER>```
112+
```make deploy-create2-factory RPC_URL=<RPC_URL> SENDER=<SENDER> CREATE2_FACTORY_OWNER_KEY=<PRIVATE_KEY>```
113113
to deploy the Create2Factory.
114114

115115
#### V2 Implementation Contracts
@@ -119,18 +119,16 @@ Deploy the implementation contracts.
119119
1. Add the following [env](.env) variables
120120

121121
- `CREATE2_FACTORY_CONTRACT_ADDRESS`
122-
- `CREATE2_FACTORY_OWNER_KEY`
123-
- `TOKEN_MINTER_V2_OWNER_ADDRESS`
124122
- `TOKEN_MINTER_V2_OWNER_KEY`
125123
- `TOKEN_CONTROLLER_ADDRESS`
126124
- `DOMAIN`
127125
- `MESSAGE_BODY_VERSION`
128126
- `VERSION`
129127

130-
2. Run `make simulate-deploy-implementations-v2 RPC_URL=<RPC_URL> SENDER=<SENDER>` to perform a dry run.
128+
2. Run `make simulate-deploy-implementations-v2 RPC_URL=<RPC_URL> SENDER=<SENDER> CREATE2_FACTORY_OWNER_KEY=<CREATE2_FACTORY_OWNER_KEY>` to perform a dry run.
131129

132130
3. Run
133-
```make deploy-implementations-v2 RPC_URL=<RPC_URL> SENDER=<SENDER>```
131+
```make deploy-implementations-v2 RPC_URL=<RPC_URL> SENDER=<SENDER> CREATE2_FACTORY_OWNER_KEY=<CREATE2_FACTORY_OWNER_KEY>```
134132
to deploy MessageTransmitterV2, TokenMinterV2, and TokenMessengerV2.
135133

136134
#### V2 Proxies
@@ -148,7 +146,6 @@ The proxies are deployed via `CREATE2` through Create2Factory. The scripts assum
148146
- `REMOTE_TOKEN_MESSENGER_V2_ADDRESSES`
149147
- `CREATE2_FACTORY_CONTRACT_ADDRESS`
150148

151-
- `MESSAGE_TRANSMITTER_V2_IMPLEMENTATION_ADDRESS`
152149
- `MESSAGE_TRANSMITTER_V2_OWNER_ADDRESS`
153150
- `MESSAGE_TRANSMITTER_V2_PAUSER_ADDRESS`
154151
- `MESSAGE_TRANSMITTER_V2_RESCUER_ADDRESS`
@@ -157,27 +154,26 @@ The proxies are deployed via `CREATE2` through Create2Factory. The scripts assum
157154
- `MESSAGE_TRANSMITTER_V2_ATTESTER_2_ADDRESS`
158155
- `MESSAGE_TRANSMITTER_V2_PROXY_ADMIN_ADDRESS`
159156

160-
- `TOKEN_MINTER_V2_CONTRACT_ADDRESS`
161157
- `TOKEN_MINTER_V2_PAUSER_ADDRESS`
162158
- `TOKEN_MINTER_V2_RESCUER_ADDRESS`
163159

164-
- `TOKEN_MESSENGER_V2_IMPLEMENTATION_ADDRESS`
165160
- `TOKEN_MESSENGER_V2_OWNER_ADDRESS`
166161
- `TOKEN_MESSENGER_V2_RESCUER_ADDRESS`
167162
- `TOKEN_MESSENGER_V2_FEE_RECIPIENT_ADDRESS`
168163
- `TOKEN_MESSENGER_V2_DENYLISTER_ADDRESS`
169164
- `TOKEN_MESSENGER_V2_PROXY_ADMIN_ADDRESS`
165+
- `TOKEN_MESSENGER_V2_MIN_FEE_CONTROLLER_ADDRESS`
166+
- `TOKEN_MESSENGER_V2_MIN_FEE`
170167

171168
- `DOMAIN`
172169
- `BURN_LIMIT_PER_MESSAGE`
173170

174-
- `CREATE2_FACTORY_OWNER_KEY`
175171
- `TOKEN_CONTROLLER_KEY`
176172
- `TOKEN_MINTER_V2_OWNER_KEY`
177173

178-
2. Run `make simulate-deploy-proxies-v2 RPC_URL=<RPC_URL> SENDER=<SENDER>` to perform a dry run.
174+
2. Run `make simulate-deploy-proxies-v2 RPC_URL=<RPC_URL> SENDER=<SENDER> CREATE2_FACTORY_OWNER_KEY=<CREATE2_FACTORY_OWNER_KEY>` to perform a dry run.
179175

180-
3. Run `make deploy-proxies-v2 RPC_URL=<RPC_URL> SENDER=<SENDER>` to deploy the contracts
176+
3. Run `make deploy-proxies-v2 RPC_URL=<RPC_URL> SENDER=<SENDER> CREATE2_FACTORY_OWNER_KEY=<CREATE2_FACTORY_OWNER_KEY>` to deploy the contracts
181177

182178
4. ONLY perform steps 5-7 for additional remote resources NOT already configured above.
183179

@@ -221,11 +217,26 @@ Use Create2Factory to deploy the helper library to a deterministic address for e
221217
1. Set the following [env](.env) variables:
222218

223219
- `CREATE2_FACTORY_CONTRACT_ADDRESS`
224-
- `CREATE2_FACTORY_OWNER_KEY`
225220

226-
2. Run `make simulate-deploy-address-utils-external RPC_URL=<RPC_URL> SENDER=<SENDER>` to perform a dry run.
221+
2. Run `make simulate-deploy-address-utils-external RPC_URL=<RPC_URL> SENDER=<SENDER> CREATE2_FACTORY_OWNER_KEY=<CREATE2_FACTORY_OWNER_KEY>` to perform a dry run.
222+
223+
3. Run `make deploy-address-utils-external RPC_URL=<RPC_URL> SENDER=<SENDER> CREATE2_FACTORY_OWNER_KEY=<CREATE2_FACTORY_OWNER_KEY>` to deploy.
224+
225+
#### Predicting Create2 Deployment Addresses
226+
227+
The `PredictCreate2Deployments.s.sol` script can help compute expected deployment addresses for various contracts. You can run it like so:
228+
229+
- Predicting MessageTransmitterV2 Implementation: `forge script scripts/v2/PredictCreate2Deployments.s.sol --sig "messageTransmitterV2Impl(address,uint32,uint32)" <create2FactoryAddress> <domain> <message version>`
230+
231+
- Predicting TokenMessengerV2 Implementation: `forge script scripts/v2/PredictCreate2Deployments.s.sol --sig "tokenMessengerV2Impl(address,uint32)" <create2FactoryAddress> <messageBodyVersion>`
232+
233+
- Predicting MessageTransmitterV2 Proxy: `forge script scripts/v2/PredictCreate2Deployments.s.sol --sig "messageTransmitterV2Proxy(address)" <create2FactoryAddress>`
234+
235+
- Predicting TokenMessengerV2 Proxy: `forge script scripts/v2/PredictCreate2Deployments.s.sol --sig "tokenMessengerV2Proxy(address)" <create2FactoryAddress>`
236+
237+
- Predicting TokenMinter: `forge script scripts/v2/PredictCreate2Deployments.s.sol --sig "tokenMinterV2(address)" <create2FactoryAddress>`
227238

228-
3. Run `make deploy-address-utils-external RPC_URL=<RPC_URL> SENDER=<SENDER>` to deploy.
239+
- Predicting AddressUtilsExternal: `forge script scripts/v2/PredictCreate2Deployments.s.sol --sig "addressUtilsExternal(address)`
229240

230241
## License
231242

0 commit comments

Comments
 (0)