@@ -30,8 +30,9 @@ pub fn generate_template(params: &InitParams) -> String {
3030
3131 let is_genesis = params. mode == InitMode :: Genesis ;
3232
33- // In deploy mode, deterministic deployer is always required.
34- let deterministic_deployer = params. deterministic_deployer || !is_genesis;
33+ // In deploy mode, the deterministic deployer must already exist on-chain
34+ // (verified by the pipeline) — it cannot be deployed via CREATE2 itself.
35+ let deterministic_deployer = params. deterministic_deployer && is_genesis;
3536
3637 // Header
3738 let mode_label = if is_genesis { "genesis" } else { "deploy" } ;
@@ -88,27 +89,21 @@ pub fn generate_template(params: &InitParams) -> String {
8889 }
8990 }
9091
91- // Deterministic deployer
92- out . push ( '\n' ) ;
92+ // Deterministic deployer (only relevant for genesis mode — in deploy mode
93+ // the pipeline verifies it exists on-chain, it cannot be deployed via CREATE2).
9394 if is_genesis {
95+ out. push ( '\n' ) ;
9496 out. push_str (
9597 "# Deterministic deployer (Nick's factory): CREATE2 factory for deploy mode.\n " ,
9698 ) ;
9799 out. push_str (
98100 "# Required in genesis for post-merge chains where the keyless tx cannot land.\n " ,
99101 ) ;
100- } else {
101- out. push_str ( "# Deterministic deployer (Nick's factory): required for CREATE2 deploys.\n " ) ;
102- out. push_str ( "# Automatically included — must be present on-chain before deploying.\n " ) ;
103- }
104- if deterministic_deployer {
105- out. push_str ( "[contracts.deterministic_deployer]\n " ) ;
106- if is_genesis {
102+ if deterministic_deployer {
103+ out. push_str ( "[contracts.deterministic_deployer]\n " ) ;
107104 out. push_str ( "address = \" 0x4e59b44847b379578588920cA78FbF26c0B4956C\" \n " ) ;
108- }
109- } else {
110- out. push_str ( "# [contracts.deterministic_deployer]\n " ) ;
111- if is_genesis {
105+ } else {
106+ out. push_str ( "# [contracts.deterministic_deployer]\n " ) ;
112107 out. push_str ( "# address = \" 0x4e59b44847b379578588920cA78FbF26c0B4956C\" \n " ) ;
113108 }
114109 }
@@ -281,7 +276,7 @@ mod tests {
281276 }
282277
283278 #[ test]
284- fn deploy_auto_includes_deterministic_deployer ( ) {
279+ fn deploy_excludes_deterministic_deployer ( ) {
285280 let params = InitParams {
286281 mode : InitMode :: Deploy ,
287282 chain_id : 1234 ,
@@ -291,12 +286,8 @@ mod tests {
291286 } ;
292287 let output = generate_template ( & params) ;
293288 assert ! (
294- output. contains( "[contracts.deterministic_deployer]\n " ) ,
295- "deploy mode should auto-include deterministic deployer\n {output}"
296- ) ;
297- assert ! (
298- !output. contains( "address = \" 0x4e59b44847b379578588920cA78FbF26c0B4956C\" " ) ,
299- "deploy mode should not include address for deterministic deployer\n {output}"
289+ !output. contains( "deterministic_deployer" ) ,
290+ "deploy mode should not include deterministic deployer section\n {output}"
300291 ) ;
301292 }
302293
0 commit comments