> ## Documentation Index
> Fetch the complete documentation index at: https://docs.optimism.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 롤업 배포 구성

> OP Stack 롤업 배포 구성 값에 대한 레퍼런스입니다.

이 페이지는 `DeployConfig`에 포함된 값에 대한 레퍼런스입니다. `DeployConfig`는
OP Stack 체인을 배포할 때 L1 컨트랙트 파라미터와 L2 제네시스 상태를 설정하는
평면(flat) JSON 구성입니다.

아래 스키마 표는 확정된 op-deployer 릴리스 시점의 모노레포(`op-chain-ops/genesis`)에 있는
`DeployConfig` Go 구조체 트리에서 직접 생성됩니다. 따라서 필드 목록, JSON 키, 타입,
설명이 소스 코드와 모르는 사이에 어긋날 수 없습니다. 권장 값과 표준 구성 요구 사항은
코드가 아니라 정책이므로, 아래 [가이드 섹션](#guidance-and-standard-configuration-requirements)에서
수동으로 관리됩니다.

> [!NOTE]
>
> **OP Stack 체인을 배포하는 권장 방법은 [OP Deployer](https://docs.optimism.io/ko/chain-operators/tools/op-deployer/overview.md)입니다.**
> OP Deployer는 직접 작성한 `DeployConfig` JSON 대신 선언형 [intent 파일](https://docs.optimism.io/ko/chain-operators/tools/op-deployer/usage/init.md)(`intent.toml`)을
> 입력으로 받으며, 배포 파이프라인의 일부로 해당 intent에서 이 페이지에 설명된
> `DeployConfig`를 도출합니다. 대부분의 체인 운영자(chain operator)는 intent 파일만 설정하며
> `DeployConfig`를 직접 편집하지 않습니다.
>
> 이 페이지는 그 기반이 되는 `DeployConfig` 항목, 즉 배포가 최종적으로 결정하는 값의
> 전체 집합을 설명합니다. 이 페이지를 활용하면 intent 설정이 어떤 값에 매핑되는지 이해하거나,
> OP Deployer가 적용된 배포에 대해 출력할 수 있는 `DeployConfig`(`op-deployer inspect deploy-config` 사용)를
> 해석하거나, OP Deployer가 지원하는 저수준의
> [커스텀 배포](https://docs.optimism.io/ko/chain-operators/tools/op-deployer/usage/custom-deployments.md)에 대한 배경지식을 얻을 수 있습니다.

> [!NOTE]
>
> 배포 구성 값은 체인이 배포된 후에는 대부분 변경할 수 없으므로, 이 페이지는 제네시스 시점에 설정하는 값을 대상으로 합니다.
> output oracle 제안 필드([`l2OutputOracle*` 값](#legacy-output-oracle))는 레거시 `L2OutputOracle` 제안 시스템을 설명하며, 여전히 해당 시스템을 사용하는 체인에만 적용됩니다. 신규 OP Stack 체인의 표준 구성인 [무허가형 결함 증명(permissionless fault proofs)](https://docs.optimism.io/ko/op-stack/fault-proofs/explainer.md)을 사용하는 체인은 대신 [결함 증명 배포 값](#fault-proofs)을 설정합니다. 즉, `useFaultProofs`와 함께 `faultGame*`, `preimageOracle*`, `proofMaturityDelaySeconds`, `disputeGameFinalityDelaySeconds`, `respectedGameType` 필드를 설정합니다.

> [!NOTE]
>
> 표준 구성(standard configuration)은 OP Stack 체인이 OP Stack 내에서 Standard Chain으로
> 인정받기 위한 요구 사항의 집합입니다. 이 요구 사항은 현재 초안 상태이며
> 거버넌스 승인을 기다리고 있습니다. 자세한 내용은
> 이 [거버넌스 스레드](https://gov.optimism.io/t/season-6-draft-standard-rollup-charter/8135)와
> [OP Stack Configurability Specification](https://specs.optimism.io/protocol/configurability.html?utm_source=op-docs\&utm_medium=docs)의 실제 요구 사항을 참고하십시오.

## 구성 값

이 내용은 [`op-deployer/v0.7.1`](https://github.com/ethereum-optimism/optimism/releases/tag/op-deployer%2Fv0.7.1) 기준 `op-chain-ops/genesis`의 [`DeployConfig` 구조체](https://github.com/ethereum-optimism/optimism/blob/op-deployer%2Fv0.7.1/op-chain-ops/genesis/config.go)에서
생성되었으며, 20개 그룹에 걸쳐 122개 값을 포함합니다. 각 값의 JSON 키는 해당 소스의 `json:"..."` 구조체
태그이고, 설명은 Go 문서 주석에서 가져왔습니다.
이 페이지와 소스 코드가
일치하지 않는 경우 소스 코드가 우선합니다.

### 개발용 계정

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `fundDevAccounts` | boolean | FundDevAccounts는 개발용 계정에 자금을 지급할지 여부를 설정합니다. devnet 배포 시에만 사용해야 합니다. |

### L2 제네시스 블록

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `l2GenesisBlockNonce` | number (hex-encoded) | — |
| `l2GenesisBlockGasLimit` | number (hex-encoded) | — |
| `l2GenesisBlockDifficulty` | number (hex-encoded big integer) | — |
| `l2GenesisBlockMixHash` | 32-byte hash | — |
| `l2GenesisBlockNumber` | number (hex-encoded) | — |
| `l2GenesisBlockGasUsed` | number (hex-encoded) | — |
| `l2GenesisBlockParentHash` | 32-byte hash | — |
| `l2GenesisBlockBaseFeePerGas` | number (hex-encoded big integer) | — |

### 소유권

OwnershipDeployConfig는 L2 체인 배포의 소유권을 정의합니다. Superchain 전체 컨트랙트는 여기에 포함되지 않습니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `proxyAdminOwner` | address | ProxyAdminOwner는 L2의 ProxyAdmin predeploy 소유자를 나타냅니다. |
| `finalSystemOwner` | address | FinalSystemOwner는 L1에서 시스템의 소유자입니다. 소유 가능한(ownable) 모든 L1 컨트랙트는 이 계정을 소유자로 설정합니다. |

### 수수료 vault

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `baseFeeVaultRecipient` | address | BaseFeeVaultRecipient는 BaseFeeVault에 누적된 수수료의 수령인을 나타냅니다. BaseFeeVaultWithdrawalNetwork 값에 따라 L1 또는 L2의 계정이 될 수 있습니다. |
| `l1FeeVaultRecipient` | address | L1FeeVaultRecipient는 L1FeeVault에 누적된 수수료의 수령인을 나타냅니다. L1FeeVaultWithdrawalNetwork 값에 따라 L1 또는 L2의 계정이 될 수 있습니다. |
| `sequencerFeeVaultRecipient` | address | SequencerFeeVaultRecipient는 SequencerFeeVault에 누적된 수수료의 수령인을 나타냅니다. SequencerFeeVaultWithdrawalNetwork 값에 따라 L1 또는 L2의 계정이 될 수 있습니다. |
| `operatorFeeVaultRecipient` | address | OperatorFeeVaultRecipient는 OperatorFeeVault에 누적된 수수료의 수령인을 나타냅니다. |
| `baseFeeVaultMinimumWithdrawalAmount` | number (hex-encoded big integer) | BaseFeeVaultMinimumWithdrawalAmount는 BaseFeeVault의 최소 출금 금액을 나타냅니다. |
| `l1FeeVaultMinimumWithdrawalAmount` | number (hex-encoded big integer) | L1FeeVaultMinimumWithdrawalAmount는 L1FeeVault의 최소 출금 금액을 나타냅니다. |
| `sequencerFeeVaultMinimumWithdrawalAmount` | number (hex-encoded big integer) | SequencerFeeVaultMinimumWithdrawalAmount는 SequencerFeeVault의 최소 출금 금액을 나타냅니다. |
| `operatorFeeVaultMinimumWithdrawalAmount` | number (hex-encoded big integer) | OperatorFeeVaultMinimumWithdrawalAmount는 OperatorFeeVault의 최소 출금 금액을 나타냅니다. |
| `baseFeeVaultWithdrawalNetwork` | string: "remote"(L1로 출금) 또는 "local"(L2로 출금), 레거시 값 0/1도 허용 | BaseFeeVaultWithdrawalNetwork는 BaseFeeVault의 출금 네트워크를 나타냅니다. |
| `l1FeeVaultWithdrawalNetwork` | string: "remote"(L1로 출금) 또는 "local"(L2로 출금), 레거시 값 0/1도 허용 | L1FeeVaultWithdrawalNetwork는 L1FeeVault의 출금 네트워크를 나타냅니다. |
| `sequencerFeeVaultWithdrawalNetwork` | string: "remote"(L1로 출금) 또는 "local"(L2로 출금), 레거시 값 0/1도 허용 | SequencerFeeVaultWithdrawalNetwork는 SequencerFeeVault의 출금 네트워크를 나타냅니다. |
| `operatorFeeVaultWithdrawalNetwork` | string: "remote"(L1로 출금) 또는 "local"(L2로 출금), 레거시 값 0/1도 허용 | OperatorFeeVaultWithdrawalNetwork는 OperatorFeeVault의 출금 네트워크를 나타냅니다. |

### 거버넌스 토큰

GovernanceDeployConfig는 OP-Mainnet 및 OP-Mainnet과 유사한 체인의 테스트 전용입니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `enableGovernance` | boolean | EnableGovernance는 거버넌스 토큰 predeploy 포함 여부를 설정합니다. |
| `governanceTokenSymbol` | string | GovernanceTokenSymbol은 GovernanceToken의 ERC20 심볼을 나타냅니다. |
| `governanceTokenName` | string | GovernanceTokenName은 GovernanceToken의 ERC20 이름을 나타냅니다. |
| `governanceTokenOwner` | address | GovernanceTokenOwner는 GovernanceToken의 소유자를 나타냅니다. 토큰을 발행(mint)하고 소각(burn)할 수 있는 권한을 가집니다. |

### Gas price oracle

GasPriceOracleDeployConfig는 GasPriceOracle L2 predeploy를 설정합니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `gasPriceOracleOverhead` | number | GasPriceOracleOverhead는 GasPriceOracle predeploy의 gas overhead 초기값을 나타냅니다. Deprecated: Ecotone 이후 이 필드는 GasPriceOracleBaseFeeScalar 및 GasPriceOracleBlobBaseFeeScalar로 대체되었습니다. |
| `gasPriceOracleScalar` | number | GasPriceOracleScalar는 GasPriceOracle predeploy의 gas scalar 초기값을 나타냅니다. Deprecated: Ecotone 이후 이 필드는 GasPriceOracleBaseFeeScalar 및 GasPriceOracleBlobBaseFeeScalar로 대체되었습니다. |
| `gasPriceOracleBaseFeeScalar` | number | GasPriceOracleBaseFeeScalar는 수수료 계산에 사용되는 base fee scalar 값을 나타냅니다. |
| `gasPriceOracleBlobBaseFeeScalar` | number | GasPriceOracleBlobBaseFeeScalar는 수수료 계산에 사용되는 blob base fee scalar 값을 나타냅니다. |
| `gasPriceOracleOperatorFeeScalar` | number | GasPriceOracleOperatorFeeScalar는 수수료 계산에 사용되는 operator fee scalar 값을 나타냅니다. |
| `gasPriceOracleOperatorFeeConstant` | number | GasPriceOracleOperatorFeeConstant는 수수료 계산에 사용되는 operator fee constant 값을 나타냅니다. |

### 커스텀 gas 토큰

GasTokenDeployConfig는 선택 사항인 커스텀 gas 토큰 기능을 설정합니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `useCustomGasToken` | boolean | UseCustomGasToken은 커스텀 gas 토큰을 사용해야 함을 나타내는 플래그입니다. |
| `gasPayingTokenName` | string | GasPayingTokenName은 커스텀 gas 토큰의 이름을 나타냅니다. |
| `gasPayingTokenSymbol` | string | GasPayingTokenSymbol은 커스텀 gas 토큰의 심볼을 나타냅니다. |
| `nativeAssetLiquidityAmount` | number (hex-encoded big integer) | NativeAssetLiquidityAmount는 NativeAssetLiquidity 컨트랙트에 사전 충전할 유동성 금액을 나타냅니다. |
| `liquidityControllerOwner` | address | LiquidityControllerOwner는 LiquidityController의 소유자를 나타냅니다. |

### 운영자 주소

OperatorDeployConfig는 시퀀싱 및 배치 제출과 같은 운영 작업에 사용되는 핫키(hot-key) 주소를 설정합니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `p2pSequencerAddress` | address | P2PSequencerAddress는 sequencer가 P2P 계층에서 블록에 서명할 때 사용하는 키의 주소입니다. |
| `batchSenderAddress` | address | BatchSenderAddress는 배치를 승인하는 초기 sequencer 계정을 나타냅니다. 이 계정에서 batch inbox 주소로 전송된 트랜잭션은 유효한 것으로 간주됩니다. |

### EIP-1559 수수료 시장

EIP1559DeployConfig는 체인의 EIP-1559 파라미터를 설정합니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `eip1559Elasticity` | number | EIP1559Elasticity는 EIP1559 수수료 시장의 탄력성(elasticity)입니다. |
| `eip1559Denominator` | number | EIP1559Denominator는 EIP1559 base fee 시장의 분모(denominator)입니다. |
| `eip1559DenominatorCanyon` | number | EIP1559DenominatorCanyon은 Canyon이 활성화된 경우 EIP1559 base fee 시장의 분모입니다. |

### 네트워크 업그레이드(하드포크) 활성화

UpgradeScheduleDeployConfig는 네트워크 업그레이드의 활성화 시점을 설정합니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `l2GenesisRegolithTimeOffset` | number (hex-encoded), nullable | L2GenesisRegolithTimeOffset은 제네시스 블록 이후 Regolith 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Regolith가 비활성화됩니다. |
| `l2GenesisCanyonTimeOffset` | number (hex-encoded), nullable | L2GenesisCanyonTimeOffset은 제네시스 블록 이후 Canyon 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Canyon이 비활성화됩니다. |
| `l2GenesisDeltaTimeOffset` | number (hex-encoded), nullable | L2GenesisDeltaTimeOffset은 제네시스 블록 이후 Delta 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Delta가 비활성화됩니다. |
| `l2GenesisEcotoneTimeOffset` | number (hex-encoded), nullable | L2GenesisEcotoneTimeOffset은 제네시스 블록 이후 Ecotone 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Ecotone이 비활성화됩니다. |
| `l2GenesisFjordTimeOffset` | number (hex-encoded), nullable | L2GenesisFjordTimeOffset은 제네시스 블록 이후 Fjord 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Fjord가 비활성화됩니다. |
| `l2GenesisGraniteTimeOffset` | number (hex-encoded), nullable | L2GenesisGraniteTimeOffset은 제네시스 블록 이후 Granite 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Granite가 비활성화됩니다. |
| `l2GenesisHoloceneTimeOffset` | number (hex-encoded), nullable | L2GenesisHoloceneTimeOffset은 제네시스 블록 이후 Holocene 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Holocene이 비활성화됩니다. |
| `l2GenesisIsthmusTimeOffset` | number (hex-encoded), nullable | L2GenesisIsthmusTimeOffset은 제네시스 블록 이후 Isthmus 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Isthmus가 비활성화됩니다. |
| `l2GenesisJovianTimeOffset` | number (hex-encoded), nullable | L2GenesisJovianTimeOffset은 제네시스 블록 이후 Jovian 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Jovian이 비활성화됩니다. |
| `l2GenesisKarstTimeOffset` | number (hex-encoded), nullable | L2GenesisKarstTimeOffset은 제네시스 블록 이후 Karst 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Karst가 비활성화됩니다. |
| `l2GenesisInteropTimeOffset` | number (hex-encoded), nullable | L2GenesisInteropTimeOffset은 제네시스 블록 이후 Interop 하드포크가 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 Interop이 비활성화됩니다. |
| `l2GenesisPectraBlobScheduleTimeOffset` | number (hex-encoded), nullable | L2GenesisPectraBlobScheduleTimeOffset은 제네시스 블록 이후 PectraBlobSchedule 수정 사항이 활성화되기까지의 초 단위 시간입니다. 0으로 설정하면 제네시스에서 활성화됩니다. Nil이면 PectraBlobSchedule 수정 사항이 비활성화됩니다. |
| `l1CancunTimeOffset` | number (hex-encoded), nullable | Cancun이 활성화되는 시점입니다. L1 제네시스 기준입니다. |
| `l1PragueTimeOffset` | number (hex-encoded), nullable | Prague가 활성화되는 시점입니다. L1 제네시스 기준입니다. |
| `l1OsakaTimeOffset` | number (hex-encoded), nullable | Osaka가 활성화되는 시점입니다. L1 제네시스 기준입니다. |
| `l1BPO1TimeOffset` | number (hex-encoded), nullable | BPO1이 활성화되는 시점입니다. L1 제네시스 기준입니다. |
| `l1BPO2TimeOffset` | number (hex-encoded), nullable | BPO2가 활성화되는 시점입니다. L1 제네시스 기준입니다. |
| `l1BPO3TimeOffset` | number (hex-encoded), nullable | BPO3이 활성화되는 시점입니다. L1 제네시스 기준입니다. |
| `l1BPO4TimeOffset` | number (hex-encoded), nullable | BPO4가 활성화되는 시점입니다. L1 제네시스 기준입니다. |
| `l1BlobScheduleConfig` | object (go-ethereum blob schedule) | Blob 스케줄 설정입니다. |

### 핵심 프로토콜 파라미터

L2CoreDeployConfig는 체인의 핵심 프로토콜 파라미터를 설정합니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `l1ChainID` | number | L1ChainID는 L1 체인의 chain ID입니다. |
| `l2ChainID` | number | L2ChainID는 L2 체인의 chain ID입니다. |
| `l2BlockTime` | number | L2BlockTime은 각 L2 블록 사이의 초 단위 간격입니다. |
| `finalizationPeriodSeconds` | number | FinalizationPeriodSeconds는 output이 최종 확정된 것으로 간주되기까지의 초 단위 시간을 나타냅니다. 출금이 최종 확정되는 데 걸리는 시간에 영향을 주며, 일반적으로 1주일로 설정됩니다. |
| `maxSequencerDrift` | number | MaxSequencerDrift는 시퀀싱 윈도우 종료 시점의 L1 타임스탬프 이후 배치가 포함되어야 하는 초 단위 시간입니다. 이 시간 안에 포함되지 않으면 입금(디파짓)을 포함한 L2 블록이 강제로 포함됩니다. |
| `sequencerWindowSize` | number | SequencerWindowSize는 시퀀싱 윈도우당 L1 블록 수입니다. |
| `channelTimeout` | number | ChannelTimeoutBedrock은 frame이 L1에 포함된 후 유효한 상태로 유지되는 L1 블록 수입니다. |
| `batchInboxAddress` | address | BatchInboxAddress는 배치가 전송되는 L1 계정입니다. |
| `systemConfigStartBlock` | number | SystemConfigStartBlock은 op-node가 동기화를 시작해야 하는 블록을 나타냅니다. 기본적으로 이 값이 설정되지 않은 레거시 네트워크에서 값을 지정하기 위한 재정의(override)입니다. 모든 네트워크의 스토리지에 이 값이 설정되면 제거할 수 있습니다. |

### 수수료 시장 한도

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `minBaseFee` | number | MinBaseFee는 각 블록에 적용되는 최소 base fee입니다. |
| `daFootprintGasScalar` | number | DAFootprintGasScalar는 각 블록의 DAFootprint를 계산하는 데 사용되는 scalar입니다. |

### Alt-DA 모드

AltDADeployConfig는 선택 사항인 AltDA 기능을 설정합니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `useAltDA` | boolean | UseAltDA는 시스템이 op-alt-da를 사용하는지 여부를 나타내는 플래그입니다. |
| `daCommitmentType` | string | DACommitmentType은 허용되는 commitment 유형을 지정합니다. |
| `daChallengeWindow` | number | DAChallengeWindow는 데이터 commitment의 가용성에 이의를 제기(challenge)할 수 있는 블록 구간을 나타냅니다. |
| `daResolveWindow` | number | DAResolveWindow는 데이터 가용성 challenge를 해결(resolve)할 수 있는 블록 구간을 나타냅니다. |
| `daBondSize` | number | DABondSize는 데이터 가용성 challenge를 시작하는 데 필요한 bond 크기를 나타냅니다. |
| `daResolverRefundPercentage` | number | DAResolverRefundPercentage는 해결 비용 중 resolver에게 환불되는 비율을 나타냅니다. 예를 들어 100은 100% 환불을 의미합니다. |

### 개발용 L1 제네시스

DevL1DeployConfig는 개발/테스트 목적으로 L1 체인을 설정하는 데 사용됩니다. 프로덕션 L2 배포에서는 L1BlockTime 정상성 검사(Ethereum L1의 경우 12로 설정)를 제외하고 이 설정을 사용하지 않습니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `l1BlockTime` | number | — |
| `l1GenesisBlockTimestamp` | number (hex-encoded) | — |
| `l1GenesisBlockNonce` | number (hex-encoded) | — |
| `l1GenesisBlockGasLimit` | number (hex-encoded) | — |
| `l1GenesisBlockDifficulty` | number (hex-encoded big integer) | — |
| `l1GenesisBlockMixHash` | 32-byte hash | — |
| `l1GenesisBlockCoinbase` | address | — |
| `l1GenesisBlockNumber` | number (hex-encoded) | — |
| `l1GenesisBlockGasUsed` | number (hex-encoded) | — |
| `l1GenesisBlockParentHash` | 32-byte hash | — |
| `l1GenesisBlockBaseFeePerGas` | number (hex-encoded big integer) | — |
| `l1GenesisBlockExcessBlobGas` | number (hex-encoded), nullable | — |
| `l1GenesisBlockblobGasUsed` | number (hex-encoded), nullable | — |

### L1 시작 블록

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `l1StartingBlockTag` | L1 블록 번호, 태그 또는 해시 | L1StartingBlockTag는 L2를 특정 L1 블록에 고정(anchor)합니다. l1StartingBlockTag가 참조하는 블록의 타임스탬프는 L2 제네시스 블록, rollup-config, L1 output-oracle 컨트랙트에서 사용됩니다. L2 시작 타임스탬프가 nil인 경우, L2 제네시스가 이 값으로 설정되었다는 가정하에 Output oracle 배포 스크립트가 이 값을 사용할 수 있습니다. L2 제네시스 타임스탬프는 초기 L2 계정 상태에 영향을 주지 않습니다. Solidity 스크립트를 통한 L2 제네시스 allocs 생성 방식이 도입된 이후로 제네시스 시점의 L1Block 컨트랙트 스토리지는 0으로 초기화되기 때문입니다. |

### Superchain 설정

SuperchainL1DeployConfig는 L1에 배포되는 Superchain 전체 컨트랙트의 파라미터를 설정합니다. 이 배포는 전역적이며, 동일한 Superchain을 대상으로 하는 L2 간에 재사용할 수 있습니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `superchainConfigGuardian` | address | SuperchainConfigGuardian은 SuperchainConfig의 GUARDIAN 계정을 나타냅니다. 출금을 일시 중지할 수 있는 권한을 가집니다. |

### 레거시 output oracle

OutputOracleDeployConfig는 L1에 대한 레거시 OutputOracle 배포를 설정합니다. 이는 결함 증명(Fault Proofs)으로 대체되었습니다. FaultProofDeployConfig를 참조하십시오.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `l2OutputOracleSubmissionInterval` | number | L2OutputOracleSubmissionInterval은 L1에 있는 L2OutputOracle 컨트랙트에 제출되는 output 사이의 L2 블록 수입니다. |
| `l2OutputOracleStartingTimestamp` | number | L2OutputOracleStartingTimestamp는 L2OutputOracle의 시작 타임스탬프입니다. 반드시(MUST) L2OO 시작 블록의 타임스탬프와 동일해야 합니다. |
| `l2OutputOracleStartingBlockNumber` | number | L2OutputOracleStartingBlockNumber는 L2OutputOracle의 시작 블록 번호입니다. 첫 번째 Bedrock 블록보다 크거나 같아야 합니다. 첫 번째 L2 output은 이 값에 제출 간격을 더한 값에 해당합니다. |
| `l2OutputOracleProposer` | address | L2OutputOracleProposer는 L2 output을 제안하는 계정의 주소입니다. |
| `l2OutputOracleChallenger` | address | L2OutputOracleChallenger는 L2 output에 이의를 제기하는 계정의 주소입니다. |

### 결함 증명

FaultProofDeployConfig는 L1에 대한 결함 증명(fault proof) 배포를 설정합니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `useFaultProofs` | boolean | UseFaultProofs는 시스템이 기존 output oracle 메커니즘 대신 결함 증명을 사용하는지 여부를 나타내는 플래그입니다. |
| `faultGameAbsolutePrestate` | 32-byte hash | FaultGameAbsolutePrestate는 Cannon의 절대 prestate입니다. 0번째에서 1번째 명령어까지의 증명을 생성하고 출력 JSON에서 prestate를 가져와 계산합니다. 모든 정직한 challenger는 프로그램의 설정 상태에 합의해야 합니다. |
| `faultGameMaxDepth` | number | FaultGameMaxDepth는 결함 분쟁 게임(fault dispute game) 내 position tree의 최대 깊이입니다. `2^{FaultGameMaxDepth}`는 실행 트레이스 이분법(bisection) 게임이 지원하는 명령어 수입니다. 전체 Cannon 트레이스를 위한 공간이 항상 충분하도록 보수적으로 설정하는 것이 이상적입니다. |
| `faultGameClockExtension` | number | FaultGameClockExtension은 claim 생성 시점에 남은 시간이 이 값보다 적은 경우, 분쟁 게임이 잠재적인 손자(grandchild) claim의 clock을 설정하는 시간입니다. |
| `faultGameMaxClockDuration` | number | FaultGameMaxClockDuration은 한 팀의 체스 clock에 누적될 수 있는 최대 시간이며, 이를 초과하면 더 이상 응답할 수 없습니다. |
| `faultGameGenesisBlock` | number | FaultGameGenesisBlock은 제네시스의 블록 번호입니다. |
| `faultGameGenesisOutputRoot` | 32-byte hash | FaultGameGenesisOutputRoot는 제네시스 블록의 output root입니다. |
| `faultGameSplitDepth` | number | FaultGameSplitDepth는 결함 분쟁 게임이 output root에서 실행 트레이스 claim으로 분할되는 깊이입니다. |
| `faultGameWithdrawalDelay` | number | FaultGameWithdrawalDelay는 사용자가 fault game에서 ETH를 출금하기 전에 기다려야 하는 초 단위 시간입니다. |
| `preimageOracleMinProposalSize` | number | PreimageOracleMinProposalSize는 대용량 preimage oracle 제안의 최소 바이트 수입니다. |
| `preimageOracleChallengePeriod` | number | PreimageOracleChallengePeriod는 challenger가 대용량 preimage 제안에 이의를 제기할 수 있는 초 단위 기간입니다. |
| `proofMaturityDelaySeconds` | number | ProofMaturityDelaySeconds는 증명이 출금 최종 확정에 사용되기 전에 성숙해야 하는 초 단위 시간입니다. |
| `disputeGameFinalityDelaySeconds` | number | DisputeGameFinalityDelaySeconds는 분쟁 게임이 출금 최종 확정에 사용되기 전에 추가로 기다려야 하는 초 단위 시간입니다. |
| `respectedGameType` | number | RespectedGameType은 OptimismPortal 컨트랙트가 출금 최종 확정 시 인정하는 분쟁 게임 유형입니다. |

### L1 의존성 주소

L1DependenciesConfig는 L2 제네시스 구성에 영향을 주는 주소 집합으로, L1에 컨트랙트가 사전에 배포되어 있어야 합니다. 일반적으로 deploy-config JSON에서 설정하지 않고 L1 배포 JSON 파일을 통해 병합됩니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `l1StandardBridgeProxy` | address | L1StandardBridgeProxy는 L1에 있는 L1StandardBridgeProxy의 주소를 나타내며, L2 제네시스 상태 구성에 사용됩니다. |
| `l1CrossDomainMessengerProxy` | address | L1CrossDomainMessengerProxy는 L1에 있는 L1CrossDomainMessengerProxy의 주소를 나타내며, L2 제네시스 상태 구성에 사용됩니다. |
| `l1ERC721BridgeProxy` | address | L1ERC721BridgeProxy는 L1에 있는 L1ERC721Bridge의 주소를 나타내며, L2 제네시스 상태 구성에 사용됩니다. |
| `systemConfigProxy` | address | SystemConfigProxy는 L1에 있는 SystemConfigProxy의 주소를 나타내며, derivation 파이프라인에서 사용됩니다. |
| `optimismPortalProxy` | address | OptimismPortalProxy는 L1에 있는 OptimismPortalProxy의 주소를 나타내며, derivation 파이프라인에서 사용됩니다. |
| `daChallengeProxy` | address | DAChallengeProxy는 DataAvailabilityChallenge 컨트랙트의 L1 주소를 나타냅니다. |

### 레거시 필드

LegacyDeployConfig는 레거시 DeployConfig 속성을 유지합니다. 제네시스 생성 과정에서 이러한 속성에 대해 경고를 기록하거나, 최선의 노력으로 지원을 시도하거나, 완전히 무시할 수 있습니다.

| JSON 키 | 타입 | 설명 |
| - | - | - |
| `deploymentWaitConfirmations` | number | DeploymentWaitConfirmations는 배포 중 대기할 확인(confirmation) 수입니다. 이 값은 DEPRECATED 상태이며 향후 PR에서 제거될 예정입니다. |
| `channelTimeoutGranite` | number | — |

## 가이드 및 표준 구성 요구 사항

위의 표는 전체 스키마입니다. 이 섹션에서는 체인 운영자가 가장 자주 검토해야 하는
값에 대해 수동으로 관리되는 가이드를 제공합니다. 권장 값, 검증 제약 조건, 그리고
초안 [Standard Rollup Charter](https://gov.optimism.io/t/season-6-draft-standard-rollup-charter/8135)의
표준 구성 요구 사항이 포함됩니다.

### 하드포크 활성화 가이드

* 표준 구성에서는 네트워크 업그레이드(하드포크)가 활성화되어야 합니다.
  신규 체인은 각 `l2Genesis<Fork>TimeOffset`을 `"0x0"`으로 설정하여
  거버넌스가 승인한 모든 업그레이드가 제네시스에서 활성화되도록 합니다. nil(생략된)
  오프셋은 해당 포크를 비활성화합니다.
* 나중 포크는 이전 포크보다 먼저 활성화될 수 없으며, 두 포크가 제네시스 이후
  동일한 시점에 활성화될 수 없습니다.
* 상호운용성(interoperability) 하드포크 활성화 오프셋은 비표준 기능입니다.
  상호운용성은 아직 [실험적](https://specs.optimism.io/interop/overview.html?utm_source=op-docs\&utm_medium=docs) 기능입니다.

### 역할 및 소유권 요구 사항

* `finalSystemOwner`: `address(0)`이어서는 안 됩니다. 공통 보안 모델을 유지하기 위해
  단일 관리자 주소를 사용하는 것을 권장합니다. 표준 구성: Chain Governor 또는
  Servicer여야 합니다. 단, L1 ProxyAdmin 소유자는 Optimism Security Council이
  보유해야 합니다. 현재 L1 ProxyAdmin 소유자는 Chain Governor 또는 Servicer로부터
  [0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A](https://etherscan.io/address/0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A)로 이전됩니다.
* `proxyAdminOwner`: L2의 `ProxyAdmin` predeploy를 소유합니다. 이 predeploy는
  `0x42...0000`부터 `0x42...2048`까지 범위의 모든 predeploy 컨트랙트에 대한 Proxy
  컨트랙트를 소유하므로 predeploy를 업그레이드할 수 있게 합니다. `address(0)`이어서는
  안 되며, 단일 관리자 주소를 권장합니다.
* `superchainConfigGuardian`: 표준 구성에서는
  [0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2](https://etherscan.io/address/0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2)가 필요합니다.
  이는 Security Council Safe가 소유한 1/1 Safe로, Optimism Foundation이 Pause Deputy
  역할을 수행할 수 있도록
  [Deputy Pause Module](https://specs.optimism.io/protocol/deputy-pause-module.html?utm_source=op-docs\&utm_medium=docs)이
  활성화되어 있습니다.
* `p2pSequencerAddress` 및 `batchSenderAddress`: 사용자가 제어하는 hot key 주소입니다.
  각각 sequencer의 블록 서명 키와, batch inbox로 보낸 트랜잭션이 유효한 것으로
  간주되는 batcher 계정입니다. 둘 다 `address(0)`일 수 없습니다. `batchSenderAddress`는
  나중에 L1의 `SystemConfig` 컨트랙트를 통해 업데이트할 수 있습니다. 표준 요구 사항은 없습니다.
* [L1 의존성 주소](#l1-dependency-addresses)
  (`l1StandardBridgeProxy`, `l1CrossDomainMessengerProxy`,
  `l1ERC721BridgeProxy`, `systemConfigProxy`, `optimismPortalProxy`): 수동으로 구성하지 않고
  L1 배포에서 채워지며, 어느 것도 `address(0)`일 수 없습니다. 표준 구성에서는
  구현 컨트랙트가 거버넌스가 승인한 OP Stack 코드베이스의 최신 버전이어야 하며,
  체인이 과거에 업그레이드된 적이 있다면 이전 버전도 코드베이스의 표준 릴리스여야 합니다.

### 시퀀싱 및 배칭 가이드

* `l2BlockTime`: 0이 아닌 정수여야 하며 L1 블록 시간(Ethereum mainnet과 Sepolia에서는
  12초)보다 작아야 합니다. 표준 구성: 1초 또는 2초.
* `maxSequencerDrift`: 0이 아니어야 합니다. 1800(30분)은
  [Fjord 활성화](https://docs.optimism.io/ko/op-stack/protocol/network-upgrades.md#activations)와 함께 적용되는
  상수입니다.
* `sequencerWindowSize`: 0이 아니어야 합니다. 표준 구성: 기반 레이어 블록 3\_600개
  (L1 블록 시간을 12초로 가정할 때 Ethereum 위의 L2 기준 12시간). 이 값은
  sequencer가 트랜잭션 순서를 재정렬하는 능력을 제한하는 데 중요한 값이며,
  값이 더 크면 사용자 보호에 위험이 될 수 있습니다.
* `channelTimeout`: 기본값 50은
  [Granite 네트워크 업그레이드](https://docs.optimism.io/ko/op-stack/protocol/network-upgrades.md#activations)에서 도입되었습니다.
* `batchInboxAddress`: 표준 구성 규칙은
  `versionByte || keccak256(bytes32(chainId))[:19]`입니다. 여기서 `||`는
  연결(concatenation)을 의미하고, `versionByte`는 `0x00`이며, `chainId`는 `uint256`입니다.
  이 규칙은 `uint256` 전체 크기까지 모든 범위의 chain ID를 포괄합니다.

  ```solidity theme={null}
  bytes32 hash = keccak256(abi.encodePacked(bytes32(uint256(chainId))));
  // take the first 19 bytes of the hash, then prepend a version byte of 0x00
  // batchInboxAddress = 0x00{hash[:19]}
  ```
* `systemConfigStartBlock`: 표준 구성: `SystemConfig`가 초기화된 블록입니다.
* `l1StartingBlockTag`: reorg로 인한 문제를 피하기 위해 일반적으로 최종 확정된(finalized)
  L1 블록을 사용하는 것을 권장합니다.

### Chain ID 요구 사항

* `l1ChainID`: 0이 아니어야 합니다. Ethereum mainnet은 1, Sepolia 테스트 네트워크는
  11155111입니다. 다른 네트워크는 [chainlist](https://chainlist.org/?testnets=true)를
  참고하십시오. 표준 구성: 1(Ethereum).
* `l2ChainID`: 0이 아니어야 하며, 보안상의 이유로 고유해야 합니다. 표준 구성:
  Foundation이 승인한 전역적으로 고유한 값. 체인은 자신의 chain ID를
  [ethereum-lists/chains](https://github.com/ethereum-lists/chains)에 추가해야 합니다.

### Gas 및 수수료 가이드

* `l2GenesisBlockGasLimit`: 0이 아니어야 하며
  `MaxResourceLimit + SystemTxMaxGas`(입금(디파짓) 하나와 시스템 트랜잭션이 사용할 수 있는
  gas)보다 커야 합니다. 표준 구성: 200\_000\_000 gas 이하. 체인 운영자는 안정적이고
  신뢰할 수 있는 체인을 유지해야 하므로, 변경을 고려할 때는 신중한 검토가 필요합니다.
* `l2GenesisBlockBaseFeePerGas`: nil일 수 없습니다.
* `gasPriceOracleBaseFeeScalar` 및 `gasPriceOracleBlobBaseFeeScalar`: 0이어서는
  안 됩니다. 표준 구성: 수수료 마진이 0%에서 50% 사이가 되도록 설정합니다. 이 scalar가
  수수료 계산에 어떻게 반영되는지는 [트랜잭션 수수료](https://docs.optimism.io/ko/op-stack/transactions/fees.md)를 참고하십시오.
* `eip1559Elasticity` 및 `eip1559Denominator`: 0이 아니어야 합니다.
  Canyon이 활성화된 경우 `eip1559DenominatorCanyon`은 0이 아니어야 하며, 권장 값은
  250입니다.
* `minBaseFee`: priority fee 경매 기간을 단축하는 데 도움이 되는 wei 단위의 절대
  최소 base fee입니다. 0이면 비활성화됩니다(기본값). 권장 값은 100000 wei이며,
  최솟값을 너무 높게 설정하면 사용자의 트랜잭션이 포함되기 어려워질 수 있습니다.
  표준 구성: 10000000000 wei보다 높게 설정해서는 안 됩니다. 자세한 내용은
  [최소 base fee 명세](https://specs.optimism.io/protocol/jovian/exec-engine.html#minimum-base-fee)를
  참고하십시오.
* `daFootprintGasScalar`: DA 사용량 추정치에 곱해져 블록에 들어갈 수 있는 압축된
  트랜잭션 데이터의 총 추정량을 제한합니다. 권장 값은 400입니다. Jovian부터 base fee
  업데이트 계산은 `gasUsed` 대신 `gasMetered := max(gasUsed, blobGasUsed)`를 사용하므로,
  DA 사용량이 높은 블록은 이후 블록의 base fee를 증가시킬 수 있습니다. 자세한 내용은
  [DA footprint 블록 한도 명세](https://specs.optimism.io/protocol/jovian/exec-engine.html#da-footprint-block-limit)를
  참고하십시오.

### Fee vault 가이드

* `*FeeVaultRecipient` 주소는 `address(0)`이어서는 안 됩니다. 공통 보안 모델을
  유지하기 위해 단일 관리자 주소를 권장합니다.
* `*FeeVaultWithdrawalNetwork` 값은 각 vault가 출금할 위치를 선택합니다.
  `"remote"`는 수수료를 L1의 수령인 주소로, `"local"`은 L2로 보냅니다.
  L1으로의 출금이 더 비쌉니다. 구성이 다시 출력될 때(예: `op-deployer inspect deploy-config`)
  이 값들은 레거시 숫자 형식으로 마샬링됩니다. `"remote"`는 `0`, `"local"`은 `1`입니다.
* `*FeeVaultMinimumWithdrawalAmount` 값은 L1으로의 출금 비용이 비싸기 때문에 존재합니다.
  최솟값은 반환되는 금액보다 실행 비용이 더 큰 소액 출금이 계속 발생하는 오버헤드 비용을
  방지합니다.

### 출금 최종성 가이드

* `finalizationPeriodSeconds`: 0이 아니어야 합니다. 테스트 네트워크에서는 12초,
  프로덕션 네트워크에서는 7일을 권장합니다. 표준 구성: 7일. 이는 보안성이 높고
  지나칠 정도로 안전한 상한값으로, 필요한 경우 해킹에 대한 사회적 계층(social-layer)
  해결책을 검토할 시간을 충분히 확보하고, 다른 네트워크 참여자가 해당 output root의
  무결성에 이의를 제기할 수 있도록 합니다.

### 레거시 output oracle 가이드

다음 항목은 레거시 `L2OutputOracle` 제안 시스템을 여전히 사용하는 체인에만 적용됩니다.
신규 체인은 대신 [결함 증명](#fault-proofs)을 사용합니다.

* `l2OutputOracleSubmissionInterval`: 0이 아니어야 하며, 120 블록(4분)을 권장합니다.
* `l2OutputOracleStartingBlockNumber`: 신규 체인에서는 0이어야 합니다. 레거시 시스템에서
  업그레이드된 네트워크(예: OP Mainnet)에서는 0이 아닐 수 있습니다.
* `l2OutputOracleStartingTimestamp`: 반드시 `l1StartingBlockTag`로 정의된 블록에 해당하는
  타임스탬프여야 합니다(MUST).
* `l2OutputOracleProposer`: `address(0)`이어서는 안 됩니다. 표준 요구 사항은 없습니다.
  이 역할은 `OptimismPortal`의 respected game type이 `PERMISSIONED_CANNON`일 때만
  활성화됩니다. L1 ProxyAdmin은 `PERMISSIONED_CANNON` 게임 타입의 구현을 설정하므로,
  허가형 분쟁 게임(dispute game)의 proposer 구성을 결정합니다.
* `l2OutputOracleChallenger`: `address(0)`이어서는 안 됩니다. 공통 보안 모델을
  유지하기 위해 단일 관리자 주소를 권장합니다.

### 결함 증명 값 가이드

`useFaultProofs`를 설정하기 전에 결함 증명(fault proof) 체인을 운영하는 것의 의미를
이해해야 합니다. [결함 증명 설명](https://docs.optimism.io/ko/op-stack/fault-proofs/explainer.md)을 참고하십시오.
`proofMaturityDelaySeconds`, `disputeGameFinalityDelaySeconds`,
`faultGameWithdrawalDelay`는 0이어서는 안 됩니다. `faultGameMaxDepth`는 전체 Cannon
trace를 위한 공간이 항상 충분하도록 보수적으로 설정해야 합니다.

> [!WARNING]
>
> **미출시(Unreleased):** 이 내용은 병합되었지만 아직 게시된
> `op-deployer` 릴리스에 포함되지 않은 동작을 설명합니다. 이 동작은
> 향후 출시될 `op-deployer` 릴리스
> 에 포함되어 출시됩니다. 그때까지 현재 릴리스는 이 페이지의 나머지 부분에
> 설명된 대로 동작합니다. 이미 출시된 내용은 [릴리스
> 기록](https://docs.optimism.io/ko/releases.md)을 참조하십시오.

`op-deployer`를 사용하면 세 가지 지연 값은 체인별로 설정되며 구현 컨트랙트의 허용 범위
내에 있어야 합니다. 배포 후에는 L1 `ProxyAdmin` 소유자가 동일한 범위 내에서 이 값을
변경할 수 있습니다.

### Alt-DA 가이드

Alt-DA 모드는 비표준 기능입니다. 이 모드를 사용하면 commitment 타입과 관계없이
데이터 가용성(Data Availability) 레이어를 OP Stack에 통합할 수 있습니다.
[Alt-DA 모드](https://docs.optimism.io/ko/op-stack/features/experimental/alt-da-mode.md)를 참고하십시오.

* `daCommitmentType`: `KeccakCommitment` 또는 `GenericCommitment`(권장) 중 하나여야
  합니다. `KeccakCommitment`는 지원 중단(deprecated)될 예정입니다.
* `daChallengeWindow` 및 `daResolveWindow`: Keccak commitment로 Alt-DA 모드를 사용할 때
  0이 아니어야 합니다.
* `daChallengeProxy`: Keccak commitment로 Alt-DA 모드를 사용할 때 `address(0)`이어서는
  안 되며, generic commitment를 사용할 때는 `address(0)`이어야 합니다.

### 거버넌스 및 개발 설정

* `enableGovernance`: false를 권장합니다. 거버넌스 토큰 predeploy는 OP Mainnet 및
  OP Mainnet과 유사한 체인의 테스트 전용입니다.
* `fundDevAccounts`와 [개발용 L1 제네시스](#development-l1-genesis) 값은 devnet 배포
  전용입니다. 프로덕션 L2 배포에서는 `l1BlockTime` 유효성 검사(Ethereum의 경우 12)를
  제외하고 이 값들을 사용하지 않습니다.
