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

# 2026-07-22 — AMM v4: OpenBook / Serum 의존성 제거

> AMM v4는 휴면 상태의 OpenBook/Serum 의존성, CPI, 마켓 메이킹 명령어를 제거합니다. v1 Swap/Deposit/Withdraw는 호환성 유지, WithdrawPnl과 SetParams는 하드 브레이킹 변경, 여러 명령어는 더 이상 호출 불가능합니다.

<Info>
  **이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.**

  [영문판 보기 →](/reference/changelog/2026-07-22-amm-v4-openbook-removal)
</Info>

<Info>
  문서 변경 로그 항목입니다. 모든 업데이트의 색인은 [`reference/changelog`](/ko/reference/changelog)를 참고하세요. 프로토콜의 역사적 타임라인은 [`introduction/history-and-milestones`](/ko/introduction/history-and-milestones)를 참고하세요.
</Info>

AMM v4는 **오래전부터 OpenBook(구 Serum)으로 유동성을 공유하지 않았습니다**. 하이브리드 오더북 마켓 메이킹 경로는 수년간 휴면 상태였습니다. 이번 업그레이드는 정리 작업입니다. **Serum 의존성, 모든 오더북 CPI, 죽은 마켓 메이킹 명령어를 프로그램에서 제거**하여 AMM v4를 순수 상수곱(`x·y=k`) AMM으로 만듭니다. 라이브 거래 동작은 **변경되지 않습니다** — 남아있는 OpenBook 주문이 없었기 때문입니다.

## 통합자를 위한 요약

* **Swap / Deposit / Withdraw는 변경 없이 계속 작동합니다.** 기존 계정 레이아웃으로 구성된 트랜잭션은 여전히 실행됩니다 — 제거된 Serum/마켓 계정은 단순히 무시됩니다(검증 없음, CPI 없음). `SwapBaseIn` / `SwapBaseOut`은 여전히 **17개(+1개 선택)** 계정을 예상합니다. `Deposit`과 `Withdraw` 레이아웃은 변경되지 않습니다. 기존 흐름을 유지하기 위해 클라이언트 업데이트를 배포할 **필요가 없습니다**.
* **V2 스왑 엔드포인트로 마이그레이션하세요.** `SwapBaseInV2` / `SwapBaseOutV2`는 마켓 계정과 `amm_open_orders`를 포함하지 않습니다(총 8개 계정). 따라서 트랜잭션이 더 작고 저렴합니다. 라우터/애그리게이터는 V2를 통해 라우팅해야 합니다.
* **`WithdrawPnl`은 하드 브레이킹 변경입니다(관리자 전용).** **17개(+1개 선택) → 10개** 계정으로 축소되며 **호환성 파싱이 없습니다**. 기존 레이아웃이 정렬되지 않아(기존 #5는 `amm_open_orders`) 검증에 실패합니다. 관리자 도구를 업데이트해야 합니다.
* **`SetParams`는 하드 브레이킹 변경입니다(관리자 전용).** 계정이 `[amm, admin]`으로 축소되고, `param` 열거형이 **재번호화**됩니다(`Fees` 9 → 2, `SetOpenTime` 11 → 3). `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder` 및 그리드 매개변수는 제거됩니다.
* **여러 명령어는 더 이상 호출할 수 없습니다.** `Initialize`, `PreInitialize`, `MonitorStep`, `MigrateToOpenBook`, `WithdrawSrm`, `SimulateInfo`, `AdminCancelOrders`는 이제 되돌립니다. 풀을 생성하려면 `Initialize2`를 사용하세요.
* **온체인 계정 레이아웃은 바이트 안정적이고 오류 코드는 변경되지 않습니다.** `AmmInfo` / `StateData`는 레이아웃을 유지합니다(기존 OpenBook 필드는 유지되지만 더 이상 사용되지 않음/고정). `AmmError` 번호는 보존되며, 새로운 `NotAllowed`만 추가됩니다.

## 이것이 중요한 이유(거래자, LP, 통합자)

* **거래자**는 스왑 동작이나 가격 책정에 변화를 보지 않습니다 — 상수곱 곡선은 변경되지 않습니다. V2 레이아웃 스왑은 약 8개 적은 계정을 포함하므로 더 저렴합니다.
* **LP**는 동일한 예치/인출 경제학을 유지합니다. 유동성은 오래전부터 풀 금고에만 있었으므로 풀 가치는 완전히 온풀입니다. 이 업그레이드는 오래된 마켓 배관만 삭제합니다.
* **통합자**는 더 작고 간단한 트랜잭션과 금고에서 직접 읽는 견적 모델을 얻습니다. 기존 통합은 손상되지 않습니다(관리자 `WithdrawPnl` / `SetParams` 제외). 하지만 v1 스왑 호환성 shim은 임시적입니다 — 편의에 따라 V2로 마이그레이션하세요.

## 명령어 수준 변경

### 여전히 호출 가능, 레이아웃 변경 없음(하위 호환)

`Initialize2`, `Deposit`, `Withdraw`, `SwapBaseIn`, `SwapBaseOut`, `CreateConfigAccount`, `UpdateConfigAccount`는 기존 계정 목록을 유지합니다. `SwapBaseIn` / `SwapBaseOut`, `Deposit`, `Withdraw`에서 OpenBook/마켓 계정은 여전히 위치적으로 허용되지만 **더 이상 검증되거나 사용되지 않습니다** — CPI가 발행되지 않고 풀 준비금은 금고만으로 계산됩니다. 계정 **개수**는 여전히 일치해야 하므로 기존 트랜잭션은 변경 없이 계속 실행됩니다.

### `SwapBaseInV2` / `SwapBaseOutV2` — 권장 경로

마켓 계정과 `amm_open_orders`를 완전히 생략합니다(8개 계정, 태그 16 / 17). 견적 수학은 v1과 동일합니다. 새로운 통합과 라우터는 V2를 사용해야 합니다.

### `WithdrawPnl` — 17개(+1개 선택) → 10개 계정(⚠️ 하드 브레이킹, 호환성 경로 없음)

`amm_open_orders`와 6개의 모든 마켓 계정이 제거됩니다. 새로운 고정 10개 계정 관리자 전용 레이아웃은 **호환성 파싱이 없습니다**. 기존 레이아웃이 정렬되지 않아 `InvalidCoinVault` 같은 오류로 실패합니다.

### `SetParams` — `[amm, admin]`으로 축소(⚠️ 하드 브레이킹) + 재번호화된 매개변수

권한, 오픈 오더, 타겟 오더, 금고, 모든 마켓 계정이 제거됩니다. `param` 열거형이 재번호화되고 축소됩니다:

| 매개변수          | 이전 값 | 새 값   |
| ------------- | ---- | ----- |
| `Status`      | 0    | 0     |
| `State`       | 1    | 1     |
| `Fees`        | 9    | **2** |
| `SetOpenTime` | 11   | **3** |

모든 오더북 그리드 매개변수(`OrderNum`, `Depth`, `AmountWave`, `MinPriceMultiplier`, `MaxPriceMultiplier`, `MinSize`, `VolMaxCutRatio`, `InitOrderDepth`, `SetSwitchTime`, `ClearOpenTime`, `Seperate`) 및 `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder`는 제거됩니다. `SetParamsInstruction` 구조체는 `new_pubkey`와 `last_order_distance`를 제거합니다.

### 더 이상 호출 불가능(런타임에 되돌림, 빌더 제거)

| 명령어                 | 태그 | 대체                 |
| ------------------- | -- | ------------------ |
| `Initialize`        | 0  | `Initialize2`      |
| `MonitorStep`       | 2  | 없음(오더북 크랭크, 폐기)    |
| `MigrateToOpenBook` | 5  | 없음                 |
| `WithdrawSrm`       | 8  | 없음(SRM 수수료 할인, 폐기) |
| `PreInitialize`     | 10 | `Initialize2`      |
| `SimulateInfo`      | 12 | 오프체인 / SDK 견적      |
| `AdminCancelOrders` | 13 | 없음                 |

## 준비금 / 상태 변경

* **풀 자산 공식.** 총 풀 자산은 이제 `금고 잔액 − 미결제 PnL(need_take_pnl)`입니다. OpenBook 오픈 오더 항목 — 실제로는 이미 0 — 은 제거됩니다. 견적 코드는 금고 잔액에서 직접 읽을 수 있습니다.
* **더 이상 사용되지 않는 상태 필드.** `StateData.total_pnl_pc`, `total_pnl_coin`, `orderbook_to_init_time`, `swap_coin_in_amount`, `swap_pc_out_amount`, `swap_acc_pc_fee`, `swap_pc_in_amount`, `swap_coin_out_amount`, `swap_acc_coin_fee`는 레이아웃 호환성을 위해 유지되지만 **더 이상 업데이트되지 않습니다**. `swap_*` 거래량 카운터에 의존하는 소비자는 거래 로그로 전환해야 합니다.
* **`AmmInfo` 초기화.** `coin_lot_size`, `pc_lot_size`, `min_size`는 이제 `0`으로 초기화됩니다.
* **제거된 의존성 및 CPI.** `serum_dex` 크레이트는 `Cargo.toml`에서 제거됩니다. 모든 Serum DEX CPI(`invoke_dex_new_order_v3`, `invoke_dex_cancel_order_v2`, `invoke_dex_settle_funds`, `invoke_dex_init_open_orders`, …)는 `invokers.rs`에서 제거됩니다. 제거된 데이터 구조: `LastOrderDistance`, `SimulateParams`, `RunCrankData`, `GetPoolData`, `GetSwapBaseInData`, `GetSwapBaseOutData`.
