@@ -15,6 +15,7 @@ import { patchGeneratedL2NodeConfig, patchGeneratedL3NodeConfig } from "../node-
1515import { inboxAbi , publicClient , rollupAbi , walletClient } from "../rpc.js" ;
1616import { startL1Container } from "../runtime.js" ;
1717import { deployRollupViaSdk , prepareNodeConfigFromDeployment } from "../sdk-chain.js" ;
18+ import type { InitState } from "../state.js" ;
1819import { markStepDone } from "../state.js" ;
1920import {
2021 deployL1L2TokenBridge ,
@@ -580,81 +581,86 @@ async function depositFeeTokenToL3Inbox(nativeToken: Address, inbox: Address): P
580581 await l2Pub . waitForTransactionReceipt ( { hash : depositHash } ) ;
581582}
582583
584+ async function deployL3Rollup (
585+ state : InitState ,
586+ runtime : InitRuntime ,
587+ feeTokenDecimals : number | undefined ,
588+ isV21 : boolean ,
589+ ) : Promise < InitState > {
590+ await fundL3DeployerAccounts ( ) ;
591+ writeChainConfig ( runtime . configDir , "l3_chain_config.json" , {
592+ chainId : 333333 ,
593+ owner : accounts . l3owner . address ,
594+ ...( isV21 ? { dataAvailabilityCommittee : true } : { } ) ,
595+ } ) ;
596+ await applyGasEstimationWorkaround ( ) ;
597+
598+ // If custom fee token is requested, deploy an ERC20 (+ pricer for v3.2) on L2
599+ const { feeTokenAddress, feeTokenPricerAddress } = await deployCustomFeeToken (
600+ feeTokenDecimals ,
601+ ! isV21 ,
602+ ) ;
603+
604+ const rollupCreatorDeployment = await deployRollupCreatorViaDocker ( runtime , {
605+ hostParentRpc : L2_RPC ,
606+ dockerParentRpc : L2_RPC_DOCKER ,
607+ deployerKey : accounts . l3owner . privateKey ,
608+ maxDataSize : "104857" ,
609+ ...( isV21
610+ ? {
611+ image : "nitro-testnode-contract-deployer-v2.1:latest" ,
612+ dockerfile : "docker/contract-deployer-v2.1.Dockerfile" ,
613+ }
614+ : { } ) ,
615+ } ) ;
616+ await deployRollupViaSdk ( {
617+ chainConfigPath : resolve ( runtime . configDir , "l3_chain_config.json" ) ,
618+ chainId : 333333 ,
619+ chainName : "orbit-dev-test" ,
620+ parentChainId : 412346 ,
621+ parentChainIsArbitrum : true ,
622+ parentRpcUrl : L2_RPC ,
623+ ownerAddress : accounts . l3owner . address ,
624+ ownerKey : accounts . l3owner . privateKey ,
625+ batchPosterAddress : accounts . l3sequencer . address ,
626+ batchPosterKey : accounts . l3sequencer . privateKey ,
627+ validatorAddress : accounts . l3owner . address ,
628+ validatorKey : accounts . l3owner . privateKey ,
629+ maxDataSize : 104857n ,
630+ wasmModuleRoot : WASM_MODULE_ROOT as `0x${string } `,
631+ deploymentOutputPath : resolve ( runtime . configDir , "l3_deployment.json" ) ,
632+ chainInfoOutputPath : resolve ( runtime . configDir , "l3_chain_info.json" ) ,
633+ rawNodeConfigOutputPath : resolve ( runtime . configDir , "l3-nodeConfig.raw.json" ) ,
634+ rollupCreatorAddress : rollupCreatorDeployment . rollupCreator ,
635+ stakeToken : rollupCreatorDeployment . stakeToken ,
636+ nitroContractsVersion : isV21 ? "v2.1" : "v3.2" ,
637+ ...( feeTokenAddress ? { nativeToken : feeTokenAddress as `0x${string } ` } : { } ) ,
638+ ...( feeTokenPricerAddress ? { feeTokenPricer : feeTokenPricerAddress as `0x${string } ` } : { } ) ,
639+ } ) ;
640+
641+ copyConfigFile ( runtime , "l3_deployment.json" , "l3deployment.json" ) ;
642+ const deployment = readDeployment ( runtime , "l3_deployment.json" ) ;
643+ return markStepDone ( state , "deploy-l3-rollup" , {
644+ rollup : deployment [ "rollup" ] ,
645+ inbox : deployment [ "inbox" ] ,
646+ bridge : deployment [ "bridge" ] ,
647+ sequencerInbox : deployment [ "sequencer-inbox" ] ,
648+ upgradeExecutor : deployment [ "upgrade-executor" ] ,
649+ validatorWalletCreator : deployment [ "validator-wallet-creator" ] ?? ZERO_ADDRESS ,
650+ stakeToken : deployment [ "stake-token" ] ?? ZERO_ADDRESS ,
651+ ...( feeTokenAddress ? { feeTokenAddress } : { } ) ,
652+ ...( feeTokenDecimals !== undefined ? { feeTokenDecimals } : { } ) ,
653+ } ) ;
654+ }
655+
583656function createL3Steps (
584657 runtime : InitRuntime ,
585658 feeTokenDecimals ?: number ,
586659 nitroContractsVersion ?: string ,
587660) : Record < string , StepRunner > {
588661 const isV21 = nitroContractsVersion === "v2.1" ;
589662 return {
590- "deploy-l3-rollup" : async ( state ) => {
591- await fundL3DeployerAccounts ( ) ;
592- writeChainConfig ( runtime . configDir , "l3_chain_config.json" , {
593- chainId : 333333 ,
594- owner : accounts . l3owner . address ,
595- ...( isV21 ? { dataAvailabilityCommittee : true } : { } ) ,
596- } ) ;
597- await applyGasEstimationWorkaround ( ) ;
598-
599- // If custom fee token is requested, deploy an ERC20 (+ pricer for v3.2) on L2
600- const { feeTokenAddress, feeTokenPricerAddress } = await deployCustomFeeToken (
601- feeTokenDecimals ,
602- ! isV21 ,
603- ) ;
604-
605- const rollupCreatorDeployment = await deployRollupCreatorViaDocker ( runtime , {
606- hostParentRpc : L2_RPC ,
607- dockerParentRpc : L2_RPC_DOCKER ,
608- deployerKey : accounts . l3owner . privateKey ,
609- maxDataSize : "104857" ,
610- ...( isV21
611- ? {
612- image : "nitro-testnode-contract-deployer-v2.1:latest" ,
613- dockerfile : "docker/contract-deployer-v2.1.Dockerfile" ,
614- }
615- : { } ) ,
616- } ) ;
617- await deployRollupViaSdk ( {
618- chainConfigPath : resolve ( runtime . configDir , "l3_chain_config.json" ) ,
619- chainId : 333333 ,
620- chainName : "orbit-dev-test" ,
621- parentChainId : 412346 ,
622- parentChainIsArbitrum : true ,
623- parentRpcUrl : L2_RPC ,
624- ownerAddress : accounts . l3owner . address ,
625- ownerKey : accounts . l3owner . privateKey ,
626- batchPosterAddress : accounts . l3sequencer . address ,
627- batchPosterKey : accounts . l3sequencer . privateKey ,
628- validatorAddress : accounts . l3owner . address ,
629- validatorKey : accounts . l3owner . privateKey ,
630- maxDataSize : 104857n ,
631- wasmModuleRoot : WASM_MODULE_ROOT as `0x${string } `,
632- deploymentOutputPath : resolve ( runtime . configDir , "l3_deployment.json" ) ,
633- chainInfoOutputPath : resolve ( runtime . configDir , "l3_chain_info.json" ) ,
634- rawNodeConfigOutputPath : resolve ( runtime . configDir , "l3-nodeConfig.raw.json" ) ,
635- rollupCreatorAddress : rollupCreatorDeployment . rollupCreator ,
636- stakeToken : rollupCreatorDeployment . stakeToken ,
637- nitroContractsVersion : isV21 ? "v2.1" : "v3.2" ,
638- ...( feeTokenAddress ? { nativeToken : feeTokenAddress as `0x${string } ` } : { } ) ,
639- ...( feeTokenPricerAddress
640- ? { feeTokenPricer : feeTokenPricerAddress as `0x${string } ` }
641- : { } ) ,
642- } ) ;
643-
644- copyConfigFile ( runtime , "l3_deployment.json" , "l3deployment.json" ) ;
645- const deployment = readDeployment ( runtime , "l3_deployment.json" ) ;
646- return markStepDone ( state , "deploy-l3-rollup" , {
647- rollup : deployment [ "rollup" ] ,
648- inbox : deployment [ "inbox" ] ,
649- bridge : deployment [ "bridge" ] ,
650- sequencerInbox : deployment [ "sequencer-inbox" ] ,
651- upgradeExecutor : deployment [ "upgrade-executor" ] ,
652- validatorWalletCreator : deployment [ "validator-wallet-creator" ] ?? ZERO_ADDRESS ,
653- stakeToken : deployment [ "stake-token" ] ?? ZERO_ADDRESS ,
654- ...( feeTokenAddress ? { feeTokenAddress } : { } ) ,
655- ...( feeTokenDecimals !== undefined ? { feeTokenDecimals } : { } ) ,
656- } ) ;
657- } ,
663+ "deploy-l3-rollup" : ( state ) => deployL3Rollup ( state , runtime , feeTokenDecimals , isV21 ) ,
658664 "generate-l3-config" : async ( state ) => {
659665 const rollupData = state . steps [ "deploy-l3-rollup" ] ?. data ;
660666 if ( ! rollupData ) {
0 commit comments