Skip to content

Commit 2ec984f

Browse files
authored
fix: fix bridge init scripts for local testnet (#1087)
1 parent ce4025b commit 2ec984f

File tree

3 files changed

+134
-112
lines changed

3 files changed

+134
-112
lines changed

scripts/foundry/DeployL2BridgeContracts.s.sol

+4-7
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import {ScrollStandardERC20Factory} from "../../src/libraries/token/ScrollStanda
3131
contract DeployL2BridgeContracts is Script {
3232
uint256 L2_DEPLOYER_PRIVATE_KEY = vm.envUint("L2_DEPLOYER_PRIVATE_KEY");
3333

34+
address L2_PROXY_ADMIN_ADDR = vm.envAddress("L2_PROXY_ADMIN_ADDR");
35+
3436
address L1_TX_FEE_RECIPIENT_ADDR = vm.envAddress("L1_TX_FEE_RECIPIENT_ADDR");
3537
address L1_WETH_ADDR = vm.envAddress("L1_WETH_ADDR");
3638
address L2_WETH_ADDR = vm.envAddress("L2_WETH_ADDR");
@@ -58,6 +60,8 @@ contract DeployL2BridgeContracts is Script {
5860
address L2_WHITELIST_PREDEPLOY_ADDR = vm.envOr("L2_WHITELIST_PREDEPLOY_ADDR", address(0));
5961

6062
function run() external {
63+
proxyAdmin = ProxyAdmin(L2_PROXY_ADMIN_ADDR);
64+
6165
vm.startBroadcast(L2_DEPLOYER_PRIVATE_KEY);
6266

6367
// predeploys
@@ -67,7 +71,6 @@ contract DeployL2BridgeContracts is Script {
6771
deployL2Whitelist();
6872

6973
// upgradable
70-
deployProxyAdmin();
7174
deployL2ScrollMessenger();
7275
deployL2GatewayRouter();
7376
deployScrollStandardERC20Factory();
@@ -131,12 +134,6 @@ contract DeployL2BridgeContracts is Script {
131134
logAddress("L2_WHITELIST_ADDR", address(whitelist));
132135
}
133136

134-
function deployProxyAdmin() internal {
135-
proxyAdmin = new ProxyAdmin();
136-
137-
logAddress("L2_PROXY_ADMIN_ADDR", address(proxyAdmin));
138-
}
139-
140137
function deployL2ScrollMessenger() internal {
141138
L2ScrollMessenger impl = new L2ScrollMessenger(L1_SCROLL_MESSENGER_PROXY_ADDR, address(queue));
142139

scripts/foundry/InitializeL1BridgeContracts.s.sol

+78-66
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,21 @@ contract InitializeL1BridgeContracts is Script {
7878

7979
vm.startBroadcast(L1_DEPLOYER_PRIVATE_KEY);
8080

81+
// note: we use call upgrade(...) and initialize(...) instead of upgradeAndCall(...),
82+
// otherwise the contract owner would become ProxyAdmin.
83+
8184
// initialize ScrollChain
82-
proxyAdmin.upgradeAndCall(
85+
proxyAdmin.upgrade(
8386
ITransparentUpgradeableProxy(L1_SCROLL_CHAIN_PROXY_ADDR),
84-
L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR,
85-
abi.encodeCall(
86-
ScrollChain.initialize,
87-
(L1_MESSAGE_QUEUE_PROXY_ADDR, L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR, MAX_TX_IN_CHUNK)
88-
)
87+
L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR
88+
);
89+
90+
ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).initialize(
91+
L1_MESSAGE_QUEUE_PROXY_ADDR,
92+
L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR,
93+
MAX_TX_IN_CHUNK
8994
);
95+
9096
ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addSequencer(L1_COMMIT_SENDER_ADDRESS);
9197
ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addProver(L1_FINALIZE_SENDER_ADDRESS);
9298

@@ -103,35 +109,32 @@ contract InitializeL1BridgeContracts is Script {
103109
L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).updateWhitelist(L1_WHITELIST_ADDR);
104110

105111
// initialize L1MessageQueueWithGasPriceOracle
106-
proxyAdmin.upgradeAndCall(
112+
proxyAdmin.upgrade(
107113
ITransparentUpgradeableProxy(L1_MESSAGE_QUEUE_PROXY_ADDR),
108-
L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR,
109-
abi.encodeCall(
110-
L1MessageQueue.initialize,
111-
(
112-
L1_SCROLL_MESSENGER_PROXY_ADDR,
113-
L1_SCROLL_CHAIN_PROXY_ADDR,
114-
L1_ENFORCED_TX_GATEWAY_PROXY_ADDR,
115-
L2_GAS_PRICE_ORACLE_PROXY_ADDR,
116-
MAX_L1_MESSAGE_GAS_LIMIT
117-
)
118-
)
114+
L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR
119115
);
116+
117+
L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initialize(
118+
L1_SCROLL_MESSENGER_PROXY_ADDR,
119+
L1_SCROLL_CHAIN_PROXY_ADDR,
120+
L1_ENFORCED_TX_GATEWAY_PROXY_ADDR,
121+
L2_GAS_PRICE_ORACLE_PROXY_ADDR,
122+
MAX_L1_MESSAGE_GAS_LIMIT
123+
);
124+
120125
L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initializeV2();
121126

122127
// initialize L1ScrollMessenger
123-
proxyAdmin.upgradeAndCall(
128+
proxyAdmin.upgrade(
124129
ITransparentUpgradeableProxy(L1_SCROLL_MESSENGER_PROXY_ADDR),
125-
L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR,
126-
abi.encodeCall(
127-
L1ScrollMessenger.initialize,
128-
(
129-
L2_SCROLL_MESSENGER_PROXY_ADDR,
130-
L1_FEE_VAULT_ADDR,
131-
L1_SCROLL_CHAIN_PROXY_ADDR,
132-
L1_MESSAGE_QUEUE_PROXY_ADDR
133-
)
134-
)
130+
L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR
131+
);
132+
133+
L1ScrollMessenger(payable(L1_SCROLL_MESSENGER_PROXY_ADDR)).initialize(
134+
L2_SCROLL_MESSENGER_PROXY_ADDR,
135+
L1_FEE_VAULT_ADDR,
136+
L1_SCROLL_CHAIN_PROXY_ADDR,
137+
L1_MESSAGE_QUEUE_PROXY_ADDR
135138
);
136139

137140
// initialize EnforcedTxGateway
@@ -147,63 +150,72 @@ contract InitializeL1BridgeContracts is Script {
147150
);
148151

149152
// initialize L1CustomERC20Gateway
150-
proxyAdmin.upgradeAndCall(
153+
proxyAdmin.upgrade(
151154
ITransparentUpgradeableProxy(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR),
152-
L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR,
153-
abi.encodeCall(
154-
L1CustomERC20Gateway.initialize,
155-
(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, L1_GATEWAY_ROUTER_PROXY_ADDR, L1_SCROLL_MESSENGER_PROXY_ADDR)
156-
)
155+
L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR
156+
);
157+
158+
L1CustomERC20Gateway(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).initialize(
159+
L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR,
160+
L1_GATEWAY_ROUTER_PROXY_ADDR,
161+
L1_SCROLL_MESSENGER_PROXY_ADDR
157162
);
158163

159164
// initialize L1ERC1155Gateway
160-
proxyAdmin.upgradeAndCall(
165+
proxyAdmin.upgrade(
161166
ITransparentUpgradeableProxy(L1_ERC1155_GATEWAY_PROXY_ADDR),
162-
L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR,
163-
abi.encodeCall(L1ERC1155Gateway.initialize, (L2_ERC1155_GATEWAY_PROXY_ADDR, L1_SCROLL_MESSENGER_PROXY_ADDR))
167+
L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR
168+
);
169+
170+
L1ERC1155Gateway(L1_ERC1155_GATEWAY_PROXY_ADDR).initialize(
171+
L2_ERC1155_GATEWAY_PROXY_ADDR,
172+
L1_SCROLL_MESSENGER_PROXY_ADDR
164173
);
165174

166175
// initialize L1ERC721Gateway
167-
proxyAdmin.upgradeAndCall(
176+
proxyAdmin.upgrade(
168177
ITransparentUpgradeableProxy(L1_ERC721_GATEWAY_PROXY_ADDR),
169-
L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR,
170-
abi.encodeCall(L1ERC721Gateway.initialize, (L2_ERC721_GATEWAY_PROXY_ADDR, L1_SCROLL_MESSENGER_PROXY_ADDR))
178+
L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR
179+
);
180+
181+
L1ERC721Gateway(L1_ERC721_GATEWAY_PROXY_ADDR).initialize(
182+
L2_ERC721_GATEWAY_PROXY_ADDR,
183+
L1_SCROLL_MESSENGER_PROXY_ADDR
171184
);
172185

173186
// initialize L1ETHGateway
174-
proxyAdmin.upgradeAndCall(
175-
ITransparentUpgradeableProxy(L1_ETH_GATEWAY_PROXY_ADDR),
176-
L1_ETH_GATEWAY_IMPLEMENTATION_ADDR,
177-
abi.encodeCall(
178-
L1ETHGateway.initialize,
179-
(L2_ETH_GATEWAY_PROXY_ADDR, L1_GATEWAY_ROUTER_PROXY_ADDR, L1_SCROLL_MESSENGER_PROXY_ADDR)
180-
)
187+
proxyAdmin.upgrade(ITransparentUpgradeableProxy(L1_ETH_GATEWAY_PROXY_ADDR), L1_ETH_GATEWAY_IMPLEMENTATION_ADDR);
188+
189+
L1ETHGateway(L1_ETH_GATEWAY_PROXY_ADDR).initialize(
190+
L2_ETH_GATEWAY_PROXY_ADDR,
191+
L1_GATEWAY_ROUTER_PROXY_ADDR,
192+
L1_SCROLL_MESSENGER_PROXY_ADDR
181193
);
182194

183195
// initialize L1StandardERC20Gateway
184-
proxyAdmin.upgradeAndCall(
196+
proxyAdmin.upgrade(
185197
ITransparentUpgradeableProxy(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR),
186-
L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR,
187-
abi.encodeCall(
188-
L1StandardERC20Gateway.initialize,
189-
(
190-
L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR,
191-
L1_GATEWAY_ROUTER_PROXY_ADDR,
192-
L1_SCROLL_MESSENGER_PROXY_ADDR,
193-
L2_SCROLL_STANDARD_ERC20_ADDR,
194-
L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR
195-
)
196-
)
198+
L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR
199+
);
200+
201+
L1StandardERC20Gateway(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).initialize(
202+
L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR,
203+
L1_GATEWAY_ROUTER_PROXY_ADDR,
204+
L1_SCROLL_MESSENGER_PROXY_ADDR,
205+
L2_SCROLL_STANDARD_ERC20_ADDR,
206+
L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR
197207
);
198208

199209
// initialize L1WETHGateway
200-
proxyAdmin.upgradeAndCall(
210+
proxyAdmin.upgrade(
201211
ITransparentUpgradeableProxy(L1_WETH_GATEWAY_PROXY_ADDR),
202-
L1_WETH_GATEWAY_IMPLEMENTATION_ADDR,
203-
abi.encodeCall(
204-
L1WETHGateway.initialize,
205-
(L2_WETH_GATEWAY_PROXY_ADDR, L1_GATEWAY_ROUTER_PROXY_ADDR, L1_SCROLL_MESSENGER_PROXY_ADDR)
206-
)
212+
L1_WETH_GATEWAY_IMPLEMENTATION_ADDR
213+
);
214+
215+
L1WETHGateway(payable(L1_WETH_GATEWAY_PROXY_ADDR)).initialize(
216+
L2_WETH_GATEWAY_PROXY_ADDR,
217+
L1_GATEWAY_ROUTER_PROXY_ADDR,
218+
L1_SCROLL_MESSENGER_PROXY_ADDR
207219
);
208220

209221
// set WETH gateway in router

scripts/foundry/InitializeL2BridgeContracts.s.sol

+52-39
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ contract InitializeL2BridgeContracts is Script {
6767

6868
vm.startBroadcast(deployerPrivateKey);
6969

70+
// note: we use call upgrade(...) and initialize(...) instead of upgradeAndCall(...),
71+
// otherwise the contract owner would become ProxyAdmin.
72+
7073
// initialize L2MessageQueue
7174
L2MessageQueue(L2_MESSAGE_QUEUE_ADDR).initialize(L2_SCROLL_MESSENGER_PROXY_ADDR);
7275

@@ -77,75 +80,85 @@ contract InitializeL2BridgeContracts is Script {
7780
L1GasPriceOracle(L1_GAS_PRICE_ORACLE_ADDR).updateWhitelist(L2_WHITELIST_ADDR);
7881

7982
// initialize L2ScrollMessenger
80-
proxyAdmin.upgradeAndCall(
83+
proxyAdmin.upgrade(
8184
ITransparentUpgradeableProxy(L2_SCROLL_MESSENGER_PROXY_ADDR),
82-
L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR,
83-
abi.encodeCall(L2ScrollMessenger.initialize, (L1_SCROLL_MESSENGER_PROXY_ADDR))
85+
L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR
8486
);
8587

88+
L2ScrollMessenger(payable(L2_SCROLL_MESSENGER_PROXY_ADDR)).initialize(L1_SCROLL_MESSENGER_PROXY_ADDR);
89+
8690
// initialize L2GatewayRouter
8791
L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).initialize(
8892
L2_ETH_GATEWAY_PROXY_ADDR,
8993
L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR
9094
);
9195

9296
// initialize L2CustomERC20Gateway
93-
proxyAdmin.upgradeAndCall(
97+
proxyAdmin.upgrade(
9498
ITransparentUpgradeableProxy(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR),
95-
L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR,
96-
abi.encodeCall(
97-
L2CustomERC20Gateway.initialize,
98-
(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, L2_GATEWAY_ROUTER_PROXY_ADDR, L2_SCROLL_MESSENGER_PROXY_ADDR)
99-
)
99+
L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR
100+
);
101+
102+
L2CustomERC20Gateway(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).initialize(
103+
L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR,
104+
L2_GATEWAY_ROUTER_PROXY_ADDR,
105+
L2_SCROLL_MESSENGER_PROXY_ADDR
100106
);
101107

102108
// initialize L2ERC1155Gateway
103-
proxyAdmin.upgradeAndCall(
109+
proxyAdmin.upgrade(
104110
ITransparentUpgradeableProxy(L2_ERC1155_GATEWAY_PROXY_ADDR),
105-
L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR,
106-
abi.encodeCall(L2ERC1155Gateway.initialize, (L1_ERC1155_GATEWAY_PROXY_ADDR, L2_SCROLL_MESSENGER_PROXY_ADDR))
111+
L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR
112+
);
113+
114+
L2ERC1155Gateway(L2_ERC1155_GATEWAY_PROXY_ADDR).initialize(
115+
L1_ERC1155_GATEWAY_PROXY_ADDR,
116+
L2_SCROLL_MESSENGER_PROXY_ADDR
107117
);
108118

109119
// initialize L2ERC721Gateway
110-
proxyAdmin.upgradeAndCall(
120+
proxyAdmin.upgrade(
111121
ITransparentUpgradeableProxy(L2_ERC721_GATEWAY_PROXY_ADDR),
112-
L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR,
113-
abi.encodeCall(L2ERC721Gateway.initialize, (L1_ERC721_GATEWAY_PROXY_ADDR, L2_SCROLL_MESSENGER_PROXY_ADDR))
122+
L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR
123+
);
124+
125+
L2ERC721Gateway(L2_ERC721_GATEWAY_PROXY_ADDR).initialize(
126+
L1_ERC721_GATEWAY_PROXY_ADDR,
127+
L2_SCROLL_MESSENGER_PROXY_ADDR
114128
);
115129

116130
// initialize L2ETHGateway
117-
proxyAdmin.upgradeAndCall(
118-
ITransparentUpgradeableProxy(L2_ETH_GATEWAY_PROXY_ADDR),
119-
L2_ETH_GATEWAY_IMPLEMENTATION_ADDR,
120-
abi.encodeCall(
121-
L2ETHGateway.initialize,
122-
(L1_ETH_GATEWAY_PROXY_ADDR, L2_GATEWAY_ROUTER_PROXY_ADDR, L2_SCROLL_MESSENGER_PROXY_ADDR)
123-
)
131+
proxyAdmin.upgrade(ITransparentUpgradeableProxy(L2_ETH_GATEWAY_PROXY_ADDR), L2_ETH_GATEWAY_IMPLEMENTATION_ADDR);
132+
133+
L2ETHGateway(L2_ETH_GATEWAY_PROXY_ADDR).initialize(
134+
L1_ETH_GATEWAY_PROXY_ADDR,
135+
L2_GATEWAY_ROUTER_PROXY_ADDR,
136+
L2_SCROLL_MESSENGER_PROXY_ADDR
124137
);
125138

126139
// initialize L2StandardERC20Gateway
127-
proxyAdmin.upgradeAndCall(
140+
proxyAdmin.upgrade(
128141
ITransparentUpgradeableProxy(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR),
129-
L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR,
130-
abi.encodeCall(
131-
L2StandardERC20Gateway.initialize,
132-
(
133-
L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR,
134-
L2_GATEWAY_ROUTER_PROXY_ADDR,
135-
L2_SCROLL_MESSENGER_PROXY_ADDR,
136-
L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR
137-
)
138-
)
142+
L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR
143+
);
144+
145+
L2StandardERC20Gateway(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).initialize(
146+
L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR,
147+
L2_GATEWAY_ROUTER_PROXY_ADDR,
148+
L2_SCROLL_MESSENGER_PROXY_ADDR,
149+
L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR
139150
);
140151

141152
// initialize L2WETHGateway
142-
proxyAdmin.upgradeAndCall(
153+
proxyAdmin.upgrade(
143154
ITransparentUpgradeableProxy(L2_WETH_GATEWAY_PROXY_ADDR),
144-
L2_WETH_GATEWAY_IMPLEMENTATION_ADDR,
145-
abi.encodeCall(
146-
L2WETHGateway.initialize,
147-
(L1_WETH_GATEWAY_PROXY_ADDR, L2_GATEWAY_ROUTER_PROXY_ADDR, L2_SCROLL_MESSENGER_PROXY_ADDR)
148-
)
155+
L2_WETH_GATEWAY_IMPLEMENTATION_ADDR
156+
);
157+
158+
L2WETHGateway(payable(L2_WETH_GATEWAY_PROXY_ADDR)).initialize(
159+
L1_WETH_GATEWAY_PROXY_ADDR,
160+
L2_GATEWAY_ROUTER_PROXY_ADDR,
161+
L2_SCROLL_MESSENGER_PROXY_ADDR
149162
);
150163

151164
// set WETH gateway in router

0 commit comments

Comments
 (0)