> ## 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.

# Upgrade 17 - Jovian 하드포크

> Jovian 하드포크에 대비하는 방법을 알아봅니다.

Jovian 하드포크는 OP Stack 체인을 위해 제안된 네트워크 업그레이드로, 롤업 수수료 계산 방식을 여러 측면에서 개선하고 결함 증명(fault proof) 가상 머신의 유지보수 업데이트를 수행합니다.

> [!NOTE]
>
> Sepolia Superchain의 Jovian 하드포크는 Wed 19 Nov 2025 16:00:01 UTC(`1763568001`)에 활성화되며, Mainnet Superchain은 거버넌스 승인을 전제로 Tue 2 Dec 2025 16:00:01 UTC(`1764691201`)에 낙관적으로(optimistically) 활성화될 예정입니다.
>
> 스마트 컨트랙트 업그레이드는 OP Labs가 다음 체인을 위해 준비합니다: `OP`, `Base`, `Soneium`, `Ink`, `Unichain`, `Metal`, `Mode`, `Zora`, `Arena-Z`, `Swell`(Swell Mainnet만 해당). Optimism Security Council이 업그레이드를 검토하고 서명합니다.
>
> Superchain Registry에서 활성화를 상속받지만 위 목록에 없는 체인은 활성화 시점 이전에 직접 업그레이드를 수행해야 합니다. 활성화 시점을 자동으로 상속받고 있는지 확인하려면, 해당 체인의 [Superchain Registry toml 파일](https://github.com/ethereum-optimism/superchain-registry/tree/main/superchain/configs)에 Jovian 활성화와 `superchain_time` 필드가 포함되어 있는지 확인하십시오.
>
> 또한 Swell Mainnet은 Tue 2 Dec 2025 04:00:01 UTC(`1764648001`)에 Isthmus 하드포크를 활성화합니다.

## Upgrade 17에 포함된 내용

Upgrade 17은 다음과 같은 변경 사항을 도입합니다.

* **Cannon Go 1.24 지원:** 온체인 결함 증명 가상 머신 구현체가 Go 1.24를 지원하도록 업그레이드합니다.
* **구성 가능한 최소 base fee:** 체인 운영자가 최소 base fee를 지정하여 priority fee 경매 기간을 단축할 수 있습니다(기본적으로 비활성화됨).
* **Data Availability Footprint 블록 한도:** DA 스팸과 priority fee 경매를 방지하기 위해 트랜잭션의 예상 DA 사용량에 대한 프로토콜 내 한도를 추가합니다(기본적으로 활성화됨. 온체인에서 스칼라를 0으로 설정하여 비활성화 가능).

Jovian 구현 세부 사항에 대한 자세한 내용은 [Jovian 사양](https://specs.optimism.io/protocol/jovian/overview.html)을 참고하시기 바랍니다.

## 호환성을 깨는 변경 사항

### 블록 헤더 변경

* `extraData` 필드가 확장됩니다([minBaseFee](https://specs.optimism.io/protocol/jovian/exec-engine.html#minimum-base-fee-in-block-header)용).
* DA footprint 기능이 활성화되면 `blobGasUsed`가 0이 아닌 값이 될 수 있습니다.

각 블록 헤더의 `blobGasUsed` 속성은 해당 블록의 `daFootprint`로 설정됩니다. OP Stack 체인은 blob을 지원하지 않으므로 Ecotone 이후 이 값은 `0`으로 설정되어 왔습니다. 이제 이 속성은 DA footprint를 저장하는 용도로 바뀌었습니다. 비활성화하려면 스칼라를 1로 설정하십시오. 0으로 설정하거나 스칼라 값을 한 번도 설정하지 않으면 스칼라의 기본값이 적용되며, 이 기본값은 향후 포크에서 업데이트될 수 있습니다. 노드와 도구가 이렇게 업데이트된 헤더 의미를 처리할 수 있는지 확인하시기 바랍니다.

자세한 내용은 [사양](https://specs.optimism.io/protocol/jovian/exec-engine.html#da-footprint-block-limit)을 참고하십시오.

### Operator Fee

롤업 운영자가 보다 유연하게 수수료를 구성할 수 있도록 operator fee의 오프체인 공식이 변경되었으며, 이는 향후 커스텀 gas 토큰 지원을 위한 기반을 마련합니다.

> [!NOTE]
>
> 0이 아닌 스칼라로 operator fee를 운영하고 있다면, 사용자에게 과다 청구되지 않도록 포크 활성화 전에 스칼라를 조정해야 합니다.
> 포크가 활성화되기 전에 스칼라를 0으로 설정한 다음, 포크 이후 새 공식에 맞는 적절한 스칼라를 다시 평가할 것을 권장합니다.
> 이렇게 하면 operator fee가 올바르게 계산되고 사용자에게 과다 청구되지 않습니다.

자세한 내용은 [사양](https://specs.optimism.io/protocol/jovian/exec-engine.html#operator-fee)을 참고하십시오.

## 노드 운영자를 위한 안내

다음 단계는 모든 노드 운영자에게 필요합니다.

**1. 최신 릴리스로 업데이트**

이 릴리스에는 Jovian Mainnet과 Sepolia Superchain 활성화 타임스탬프가 모두 포함되어 있습니다.

* op-node: [op-node/v1.16.2](https://github.com/ethereum-optimism/optimism/releases/tag/op-node%2Fv1.16.2)
* op-geth: [v1.101603.5](https://github.com/ethereum-optimism/op-geth/releases/tag/v1.101603.5)
* op-reth: [op-reth/v1.9.2](https://github.com/paradigmxyz/reth/releases/tag/v1.9.2), flashblocks를 실행하는 체인은 [op-reth/v1.9.3](https://github.com/paradigmxyz/reth/releases/tag/v1.9.3)

**2. Jovian 활성화 날짜 구성**

> [!NOTE]
>
> [하드포크 활성화 상속 동작](https://github.com/ethereum-optimism/superchain-registry/blob/main/docs/hardfork-activation-inheritance.md)을 선택한 OP Chain의 노드를 운영하면서 네트워크 플래그를 사용하고 있다면, Jovian 활성화 날짜가 `op-node` 및 `op-geth` 노드에 포함되어 있습니다. 따라서 최신 릴리스로 업그레이드한 후 sequencer에 대해 추가 조치가 필요하지 않습니다. [3단계: 구성 확인](#verify-your-configuration)으로 건너뛰십시오.
>
> 다음 체인이 포함되어 있으나 변경될 수 있습니다: `OP`, `Base`, `Soneium`, `Ink`, `Unichain`, `Metal`, `Mode`, `Zora`, `Arena-Z`, `Swell`(Swell Mainnet만 해당).

[하드포크 활성화 상속 동작](https://github.com/ethereum-optimism/superchain-registry/blob/main/docs/hardfork-activation-inheritance.md)을 사용하지 않는 노드 운영자는 활성화를 수동으로 구성해야 합니다. 다음 두 가지 방법 중 하나로 구성할 수 있습니다.

* **옵션 1:** `op-node`와 `op-geth` 모두에서 override(CLI)를 통해 활성화 시점을 설정합니다. 이는 sequencer와 다른 모든 노드의 `op-node` 및 `op-geth`에 설정해야 합니다.
* **옵션 2:** `op-node`의 `rollup.json`에서 활성화 시점을 설정합니다. 이 옵션을 사용하는 경우에도 `op-geth`에서 `override.isthmus` 플래그를 설정하거나 EL 클라이언트의 genesis 파일에 시점을 설정해야 합니다.

**3. 구성 확인**

노드가 올바르게 구성되었는지 확인하려면 다음 사항을 점검하십시오.

* `op-node`와 `op-geth`는 시작 시 구성을 로그로 출력합니다.
* op-node 시작 로그에서 Jovian 시점이 올바른 활성화 타임스탬프로 설정되어 있는지 확인합니다.
* op-geth 시작 로그에서 Jovian 시점이 올바른 활성화 타임스탬프로 설정되어 있는지 확인합니다.

## 체인 운영자를 위한 안내

다음 구성 요소를 업데이트하십시오.

| 구성 요소 | 버전 | 참고 |
| - | - | - |
| `proxyd` | [v4.19.0](https://github.com/ethereum-optimism/infra/releases/tag/proxyd%2Fv4.19.0) 이상 | L1 로드 밸런싱에 proxyd를 사용하는 경우 `eth_blobBaseFee` RPC를 화이트리스트에 추가해야 합니다. `dugtrio`를 사용하는 경우 이 역시 최신 릴리스로 업데이트되어 있는지 확인하십시오. |
| `op-batcher` | [v1.16.2](https://github.com/ethereum-optimism/optimism/releases/tag/op-batcher%2Fv1.16.2) | `op-node`를 최신 릴리스로 업데이트한 후 `op-batcher`를 최소 한 번 재시작해야 합니다. batcher는 시작 시 롤업 구성을 한 번만 로드하므로, Jovian 활성화 타임스탬프를 반영하려면 재시작이 필요합니다. 향후 이 경험을 개선하기 위해 이 [이슈](https://github.com/ethereum-optimism/optimism/issues/18178)를 등록했습니다. |
| `op-node` | [v1.16.2](https://github.com/ethereum-optimism/optimism/releases/tag/op-node%2Fv1.16.2) | L1 체인 구성은 새 플래그를 통해 제공해야 합니다(릴리스 노트 참조). Ethereum Mainnet, Sepolia, Holesky 또는 Hoodi에서 파생(derivation)하는 체인에는 필요하지 않습니다. |
| `op-geth` | [v1.101603.5](https://github.com/ethereum-optimism/op-geth/releases/tag/v1.101603.5) | |
| `op-challenger` | [v1.7.0](https://github.com/ethereum-optimism/optimism/releases/tag/op-challenger%2Fv1.7.0) | Ethereum Mainnet, Sepolia 또는 Hoodi 이외의 체인에서 파생하는 경우 L1 체인 구성을 새 플래그를 통해 제공해야 합니다. |
| `kona-node` | [v1.2.4](https://github.com/op-rs/kona/releases/tag/kona-node%2Fv1.2.4) | |
| `kona-host` | [v1.2.4](https://github.com/op-rs/kona/releases/tag/kona-host%2Fv1.2.4) | |
| `kona-client` | [v1.2.4](https://github.com/op-rs/kona/releases/tag/kona-client%2Fv1.2.4) | |
| `op-reth` | [v1.9.2](https://github.com/paradigmxyz/reth/releases/tag/v1.9.2), flashblocks를 실행하는 체인은 [v1.9.3](https://github.com/paradigmxyz/reth/releases/tag/v1.9.3) | |
| `op-rbuilder` | [v0.2.13](https://github.com/flashbots/op-rbuilder/releases/tag/op-rbuilder%2Fv0.2.13) | |
| `rollup-boost` | [v0.7.11](https://github.com/flashbots/rollup-boost/releases/tag/rollup-boost%2Fv0.7.11) | |

### 무허가(permissionless) 결함 증명이 활성화된 체인

무허가 결함 증명을 실행하는 체인은 새로운 absolute prestate로 새 분쟁 게임(dispute game) 컨트랙트를 배포해야 합니다.
이 prestate에는 L1 Fusaka 활성화 지원도 포함되어 있습니다.

> [!NOTE]
>
> Superchain은 [Fusaka 지원](https://docs.optimism.io/ko/notices/archive/fusaka-notice)과 Mainnet Jovian 하드포크 지원을 하나의 absolute prestate로 묶어 제공합니다.

> [!NOTE]
>
> Optimism은 OP, Ink, Unichain의 Mainnet과 Sepolia에서 온체인 prestate 업데이트(분쟁 게임 배포 및 구현체 설정 포함)를 완료합니다.
> 그러나 오프체인 구성 요소(op-challenger)는 운영자가 직접 새 prestate를 사용하도록 구성해야 합니다.
> 위 목록에 포함되지 않은 무허가 결함 증명 활성화 체인은 아래의 모든 단계를 직접 수행해야 합니다.

**1. 새 absolute prestate 검증**

absolute prestate는 [op-program/v1.8.0-rc.4](https://github.com/ethereum-optimism/optimism/tree/op-program/v1.8.0-rc.4)(`op-program/v1.8.0-rc.4` 기준)로 생성됩니다. 다음 체인에는 이 새로운 absolute prestate `0x03caa1871bb9fe7f9b11217c245c16e4ded33367df5b3ccb2c6d0a847a217d1b`을 사용할 수 있습니다.

* Mainnet 및 Sepolia: `OP`, `Base`, `Ink`, `Unichain`

`op-program/v1.8.0-rc.4` 태그에서 monorepo 루트에 있는 상태로 다음 명령을 실행하여 이 absolute prestate를 검증할 수 있습니다.

```shell theme={null}
make reproducible-prestate
```

계산된 prestate가 출력되며, 출력의 끝부분은 다음과 같아야 합니다.

```shell theme={null}
-------------------- Production Prestates --------------------

Cannon64 Absolute prestate hash: 
0x03caa1871bb9fe7f9b11217c245c16e4ded33367df5b3ccb2c6d0a847a217d1b

-------------------- Experimental Prestates --------------------

Cannon64Next Absolute prestate hash: 
0x03caa1871bb9fe7f9b11217c245c16e4ded33367df5b3ccb2c6d0a847a217d1b

CannonInterop Absolute prestate hash: 
0x03455f7f2179327853a989648c3ac9f2d58be45137bae603271660519b4d5245

CannonInteropNext Absolute prestate hash: 
0x03455f7f2179327853a989648c3ac9f2d58be45137bae603271660519b4d5245
```

* "Cannon64" 해시가 64비트 prestate입니다.

대상 prestate가 예상대로 계산되었는지, 그리고
[standard-prestates.toml](https://github.com/ethereum-optimism/superchain-registry/blob/main/validation/standard/standard-prestates.toml)의 해당 항목과 일치하는지 확인하십시오.

**2. 새 preimage 파일 업로드**

이전 단계에서 absolute prestate의 preimage도 함께 생성되었습니다. 이는 op-program을 바이너리 파일로 직렬화한 것입니다. 새 파일은 `optimism/op-program/bin/prestate-mt64.bin.gz`에 있습니다. 파일 이름을 absolute prestate 해시로 변경하여 `PRESTATEHASH.bin.gz`와 같은 형태가 되도록 합니다.

다른 absolute preimage 파일을 보관하는 위치에 이 파일을 업로드합니다. 이 위치는 `--cannon-prestates-url`이 가리키는 위치여야 합니다. `op-challenger`는 게임에 이의를 제기해야 할 때 이 파일을 가져와 사용합니다.

## L1 컨트랙트 업그레이드 실행

`op-challenger`가 새 preimage로 준비되면 업그레이드 트랜잭션을 실행할 수 있습니다. 이는 [레지스트리](https://github.com/ethereum-optimism/superchain-registry/blob/main/validation/standard/standard-versions-mainnet.toml)에 나열된 주소의 OP Contract Manager에서 `upgrade()` 함수에 delegatecall을 수행하는 방식으로 진행해야 합니다.

트랜잭션을 실행하기 전에 예상 출력을 시뮬레이션하고 검증하시기 바랍니다.
