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

# AMM v4 명령어

> 모든 AMM v4 명령어와 그 인자, 필요한 풀 및 OpenBook 계정, 각 명령어의 사전/사후 조건을 설명합니다.

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

  [영문판 보기 →](/products/amm-v4/instructions)
</Info>

<Info>
  2026-07 프로그램 업그레이드 이후, AMM v4의 OpenBook / Serum 의존성이 **제거되었습니다**. 레거시 v1 `SwapBaseIn` / `SwapBaseOut`, `Deposit`, `Withdraw` 명령어는 하위 호환성을 위해 **기존 계정 레이아웃을 유지합니다**: 마켓 계정은 여전히 기존 위치에서 수락되지만, **더 이상 검증되거나 사용되지 않습니다** (CPI가 발행되지 않음). 새로운 통합은 마켓 계정을 완전히 생략하는 V2 스왑 엔드포인트를 사용해야 합니다. 여러 명령어가 제거되었으며 이제 되돌아갑니다 — [변경 로그 항목](/ko/reference/changelog/2026-07-22-amm-v4-openbook-removal)을 참조하세요. 아래 계정 목록은 Raydium SDK의 필드 이름을 사용합니다. 기본 IDL은 때때로 `serum_*` 접두사를 사용합니다.
</Info>

## 명령어 목록

| 그룹     | 명령어                   | 태그 | 참고                                                 |
| ------ | --------------------- | -- | -------------------------------------------------- |
| 풀 생명주기 | `Initialize2`         | 1  | 유일한 풀 생성 명령어 (UI는 새 풀에 기본값으로 CPMM 사용).             |
| 유동성    | `Deposit`             | 3  | 유동성 추가, LP 수령. 레이아웃 변경 없음 (마켓 계정 무시됨).             |
| 유동성    | `Withdraw`            | 4  | LP 소각, 양쪽 비례 수령. 레이아웃 변경 없음 (마켓 계정 무시됨).           |
| 스왑     | `SwapBaseIn`          | 9  | 정확한 입력 스왑. v1 레이아웃 변경 없음; 마켓 계정 수락되지만 무시됨.         |
| 스왑     | `SwapBaseOut`         | 11 | 정확한 출력 스왑. 위와 동일.                                  |
| 스왑     | `SwapBaseInV2`        | 16 | **권장됨.** 마켓 계정 없는 정확한 입력 스왑.                       |
| 스왑     | `SwapBaseOutV2`       | 17 | **권장됨.** 마켓 계정 없는 정확한 출력 스왑.                       |
| 유지보수   | `SetParams`           | 6  | 관리자: 풀 매개변수 변경. **레이아웃 + `param` 값 변경됨** (호환성 깨짐). |
| 유지보수   | `WithdrawPnl`         | 7  | 누적된 프로토콜 PnL 수거. **계정 레이아웃 변경됨** (호환성 깨짐).         |
| 유지보수   | `CreateConfigAccount` | 14 | 관리자: 프로그램 수준 `AmmConfig` PDA 초기화.                  |
| 유지보수   | `UpdateConfigAccount` | 15 | 관리자: 프로그램 수준 설정 매개변수 변경.                           |

SDK는 사용자 대면 명령어에 대한 빌더만 노출합니다. 유지보수 명령어는 일반적으로 Raydium 키퍼에 의해 호출됩니다.

**제거됨 / 더 이상 호출 불가능** (이제 `unimplemented!`로 되돌아가며, 클라이언트 빌더가 삭제됨): `Initialize` (태그 0, `Initialize2` 사용), `MonitorStep` (2), `MigrateToOpenBook` (5), `WithdrawSrm` (8), `PreInitialize` (10, `Initialize2` 사용), `SimulateInfo` (12), `AdminCancelOrders` (13).

## `Initialize2`

기존 OpenBook 마켓에 바인딩된 새로운 AMM v4 풀을 부트스트랩합니다.

**인자**

```
nonce:        u8
open_time:    u64
init_pc_amount:   u64
init_coin_amount: u64
```

**계정** (쓰기 가능 `W`, 서명자 `S`)

| #  | 이름                           | W | S | 참고                           |
| -- | ---------------------------- | - | - | ---------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                   |
| 2  | `system_program`             |   |   |                              |
| 3  | `rent`                       |   |   |                              |
| 4  | `amm`                        | W |   | `AmmInfo` 계정 (시드 키).         |
| 5  | `amm_authority`              |   |   | 프로그램 PDA.                    |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders` (시드됨). |
| 7  | `lp_mint`                    | W |   |                              |
| 8  | `coin_mint`                  |   |   |                              |
| 9  | `pc_mint`                    |   |   |                              |
| 10 | `pool_coin_token_account`    | W |   |                              |
| 11 | `pool_pc_token_account`      | W |   |                              |
| 12 | `pool_withdraw_queue`        | W |   |                              |
| 13 | `pool_target_orders_account` | W |   |                              |
| 14 | `pool_lp_token_account`      | W |   | 생성자의 LP ATA.                 |
| 15 | `pool_temp_lp_token_account` | W |   | 임시 계정.                       |
| 16 | `market_program`             |   |   | OpenBook 프로그램.               |
| 17 | `market`                     |   |   | OpenBook 마켓.                 |
| 18 | `user_wallet`                | W | S | 생성자. 렌트 및 초기 예치금을 지불합니다.     |
| 19 | `user_token_coin`            | W |   |                              |
| 20 | `user_token_pc`              | W |   |                              |

**사후 조건**

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`, 여기서 `INIT_BURN` ≈ 100 LP 단위는 유통에서 제외됩니다.
* OpenBook 주문이 게시되지 않습니다 (오더북 그리드가 제거됨). `market_program` / `market`은 여전히 전달되지만 참조 필드로만 저장됩니다. `coin_lot_size` / `pc_lot_size` / `min_size`는 `0`으로 초기화됩니다.

**일반적인 오류** — `InvalidInput` (소수 자릿수 불일치, 정렬되지 않음), `NotAllowed`.

## `Deposit`

유동성을 추가합니다.

**인자**

```
max_coin_amount: u64
max_pc_amount:   u64
base_side:       u64    // 0 = base on coin, 1 = base on pc
// (일부 SDK 변형은 other_amount_min도 수락함)
```

**계정** (축약)

| #  | 이름                        | W | S |
| -- | ------------------------- | - | - |
| 1  | `token_program`           |   |   |
| 2  | `amm`                     | W |   |
| 3  | `amm_authority`           |   |   |
| 4  | `amm_open_orders`         |   |   |
| 5  | `amm_target_orders`       | W |   |
| 6  | `lp_mint`                 | W |   |
| 7  | `pool_coin_token_account` | W |   |
| 8  | `pool_pc_token_account`   | W |   |
| 9  | `market`                  |   |   |
| 10 | `user_coin_token_account` | W |   |
| 11 | `user_pc_token_account`   | W |   |
| 12 | `user_lp_token_account`   | W |   |
| 13 | `user_owner`              |   | S |

**수학** — 표준 비례. 풀의 *유효* 준비금 (금고 + 온북)을 사용하여 SDK는 주어진 LP 양을 생성하는 코인/pc 쌍을 계산하고 `max_*`에 대해 확인합니다. 어느 쪽이든 한도를 초과하면 `ExceededSlippage`로 되돌아갑니다.

## `Withdraw`

LP를 소각하고 양쪽을 수령합니다.

**인자**

```
amount: u64    // 소각할 LP
```

**계정** — `Deposit`과 유사하지만 방향이 반대입니다. `lp_mint`는 소각을 위해 쓰기 가능하고, 사용자 ATA는 수신자입니다. 계정 레이아웃은 변경되지 않습니다 (마켓 계정은 여전히 위치적으로 전달되고 무시됨). 더 이상 OpenBook에서 정산하는 단계가 없습니다 — 비례 수학은 금고 잔액을 직접 사용합니다.

## `SwapBaseIn`

정확한 입력 스왑. 항상 **AMM 경로** 스왑입니다 (OpenBook 매칭을 통해 라우팅하지 않음).

<Note>
  **새 코드에는 V2 변형을 사용하세요.** AMM v4의 OpenBook 의존성이 제거되었으므로, V1 엔드포인트 (`SwapBaseIn`, `SwapBaseOut`)는 여전히 전체 17개 계정 목록 (또는 선택적 target-orders 계정 포함 18개)을 예상하지만, OpenBook/마켓 계정은 이제 **위치적으로 수락되고 무시됩니다** — 검증되지 않으며 CPI가 발행되지 않습니다. 잘못된 계정 *개수*를 전달하면 여전히 `WrongAccountsNumber`로 되돌아가지만, 마켓 계정 *내용*은 더 이상 확인되지 않습니다. 새로운 통합은 [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2)를 사용해야 하며, 이는 훨씬 더 작은 계정 목록을 사용하고 오늘날의 정규 실행 경로를 나타냅니다. V1 형식은 완전성을 위해 그리고 기존 온체인 트랜잭션을 읽기 위해 여기에 문서화되어 있습니다.
</Note>

**인자**

```
amount_in:            u64
minimum_amount_out:   u64
```

**계정** (축약)

| #  | 이름                          | W | S |
| -- | --------------------------- | - | - |
| 1  | `token_program`             |   |   |
| 2  | `amm`                       | W |   |
| 3  | `amm_authority`             |   |   |
| 4  | `amm_open_orders`           | W |   |
| 5  | `amm_target_orders`         | W |   |
| 6  | `pool_coin_token_account`   | W |   |
| 7  | `pool_pc_token_account`     | W |   |
| 8  | `market_program`            |   |   |
| 9  | `market`                    | W |   |
| 10 | `market_bids`               | W |   |
| 11 | `market_asks`               | W |   |
| 12 | `market_event_queue`        | W |   |
| 13 | `market_coin_vault`         | W |   |
| 14 | `market_pc_vault`           | W |   |
| 15 | `market_vault_signer`       |   |   |
| 16 | `user_source_token_account` | W |   |
| 17 | `user_dest_token_account`   | W |   |
| 18 | `user_owner`                |   | S |

**수학** — [`products/amm-v4/math`](/ko/products/amm-v4/math)를 참조하세요.

**사전 조건**

* `amm.status`는 스왑을 허용합니다 (상태 비트마스크의 비트 0이 설정되지 않음).
* `amm.state_data.pool_open_time <= now`.
* `amount_in > 0`.
* `user_source_token_account`는 최소 `amount_in`을 보유합니다.

**사후 조건**

* 사용자는 소스 토큰 `amount_in`을 잃고, 대상 토큰 `amount_out ≥ minimum_amount_out`을 얻습니다.
* `need_take_pnl_*`는 프로토콜 수수료 몫만큼 증가합니다.
* 참고: `state_data.swap_*_in_amount` / `swap_*_out_amount` 분석 카운터는 **더 이상 업데이트되지 않습니다** — 값이 고정됩니다. 거래량 분석을 위해 거래 로그를 사용하세요.

**일반적인 오류** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `NotAllowed` (코인/pc 민트 동일).

## `SwapBaseOut`

정확한 출력, `SwapBaseIn`의 역함수. 동일한 계정.

**인자**

```
max_amount_in: u64
amount_out:    u64
```

## `SwapBaseInV2` / `SwapBaseOutV2`

OpenBook 계정을 **완전히 건너뛰는** 변형 스왑 엔드포인트 (태그 **16** / **17**). 수학은 V1 경로와 동일하지만, 계정 목록은 AMM 측과 사용자만으로 축소됩니다 — **8개 계정, `amm_open_orders`는 전달되지 않습니다**:

| # | 이름                          | W | S |
| - | --------------------------- | - | - |
| 1 | `token_program`             |   |   |
| 2 | `amm`                       | W |   |
| 3 | `amm_authority`             |   |   |
| 4 | `pool_coin_token_account`   | W |   |
| 5 | `pool_pc_token_account`     | W |   |
| 6 | `user_source_token_account` | W |   |
| 7 | `user_dest_token_account`   | W |   |
| 8 | `user_owner`                |   | S |

풀 준비금은 이제 금고 잔액 (미결제 PnL 제외)이므로 견적 수학은 간단하고 v1 경로와 동일합니다. V2를 사용하여 계산을 절약하고 (이제 무시되는) 마켓 계정을 전달하지 않도록 합니다. Raydium 라우터는 AMM v4를 통해 라우팅할 때 항상 V2 형식을 사용합니다.

인자는 V1 형식과 동일합니다 (`SwapBaseInV2`의 경우 `amount_in / minimum_amount_out`; `SwapBaseOutV2`의 경우 `max_amount_in / amount_out`).

## `MonitorStep` 및 기타 제거된 명령어

<Warning>
  **제거됨 — 더 이상 호출 불가능.** 2026-07 업그레이드 이후, `MonitorStep` (태그 2)이 프로그램에서 제거되었으며 호출되면 **되돌아갑니다** (`unimplemented!`). 클라이언트 빌더도 삭제되었습니다. `MigrateToOpenBook` (5), `WithdrawSrm` (8), `SimulateInfo` (12), `AdminCancelOrders` (13), 그리고 레거시 `Initialize` (0) / `PreInitialize` (10) 풀 생성 엔드포인트도 마찬가지입니다 — 대신 `Initialize2`를 사용하세요.
</Warning>

역사적으로, `MonitorStep`은 풀의 OpenBook 상호작용을 크랭크했습니다: 체결된 주문을 정산하고 (OpenBook CPI를 통해 마켓 금고에서 풀 금고로 수익을 이동), 오래된 주문을 취소하고, `target_orders`와 `amm_open_orders` 사이의 간격을 좁히기 위해 새 주문을 게시했습니다. OpenBook 의존성이 제거되면서 크랭크할 것이 없어졌고 명령어가 사라졌습니다. 여전히 이를 호출하는 키퍼나 통합은 호출을 제거해야 합니다.

## `WithdrawPnl` / `TakePnl`

누적된 프로토콜 수수료의 관리자 수거.

**인자**

* `WithdrawPnl`은 인자를 취하지 않습니다. `need_take_pnl_*`을 읽고 정확한 양을 이동합니다.

<Warning>
  **호환성 깨짐 (관리자만).** 계정 목록이 17개 (+1 선택사항)에서 **10개**로 축소되었습니다 — `amm_open_orders`와 6개의 마켓 계정이 제거되었습니다 — **호환성 파싱 없이**. 기존 레이아웃이 정렬되지 않아 (기존 #5는 `amm_open_orders`, 이제 `pool_coin_token_account`) `InvalidCoinVault` 같은 오류로 실패합니다. 관리자 도구를 업데이트해야 합니다.
</Warning>

**계정** (새로운 10개 계정 레이아웃)

| #  | 이름                        | W | S |           |
| -- | ------------------------- | - | - | --------- |
| 1  | `token_program`           |   |   |           |
| 2  | `amm`                     | W |   |           |
| 3  | `amm_config`              |   |   |           |
| 4  | `amm_authority`           |   |   |           |
| 5  | `pool_coin_token_account` | W |   |           |
| 6  | `pool_pc_token_account`   | W |   |           |
| 7  | `pnl_coin_token_account`  | W |   | 수신자.      |
| 8  | `pnl_pc_token_account`    | W |   |           |
| 9  | `pnl_owner`               |   | S | 관리자 멀티시그. |
| 10 | `amm_target_orders`       | W |   |           |

**효과**

* `need_take_pnl_coin`을 `pool_coin_token_account`에서 `pnl_coin_token_account`로 전송합니다.
* pc도 동일합니다.
* `need_take_pnl_coin`과 `need_take_pnl_pc`를 0으로 설정합니다.
* **로직 변경**: 금고 잔액이 누적된 PnL을 충당하기에 부족하면, 명령어는 `TakePnlError`를 직접 반환합니다 (더 이상 오더북 상태를 조작하지 않음).

누적된 PnL이 이미 불변식에서 제외되었으므로 준비금에 변화가 없습니다.

## `SetParams`

Raydium 멀티시그에 의해 호출되는 관리자 매개변수 변경. 인자는 `param: u8` 태그 + 페이로드입니다.

<Warning>
  **호환성 깨짐 (관리자만).** 계정 목록이 `[amm (W), admin (S)]`로만 축소되었습니다 (권한, 오픈 오더, 타겟 오더, 금고, 모든 마켓 계정이 제거됨). `param` 열거형이 **재번호 매기고 정리되었습니다**: `Status` = 0, `State` = 1, `Fees` = **2** (이전 9), `SetOpenTime` = **3** (이전 11). 모든 오더북 그리드 매개변수와 `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder`가 제거되었으며, `SetParamsInstruction` 구조체는 `new_pubkey`와 `last_order_distance`를 삭제했습니다. 관리자 도구를 업데이트해야 합니다.
</Warning>

## 상태 변경 매트릭스

OpenBook 열이 사라졌습니다 — 더 이상 어떤 명령어도 오더북을 건드리지 않습니다.

| 명령어                             | `lp_mint` 공급    | 금고                                       | PnL 카운터     |
| ------------------------------- | --------------- | ---------------------------------------- | ----------- |
| `Initialize2`                   | 생성자에게 초기 공급 민트됨 | `+ init_coin_amount`, `+ init_pc_amount` | 0           |
| `Deposit`                       | +               | + 양쪽                                     | —           |
| `Withdraw`                      | −               | − 양쪽                                     | —           |
| `SwapBaseIn` / `SwapBaseInV2`   | —               | + in, − out                              | + pnl share |
| `SwapBaseOut` / `SwapBaseOutV2` | —               | + in, − out                              | + pnl share |
| `WithdrawPnl`                   | —               | − (pnl 수거됨)                              | 0           |
| `SetParams`                     | —               | —                                        | —           |

## 다음 단계

* [`products/amm-v4/code-demos`](/ko/products/amm-v4/code-demos) — 스왑 및 LP 흐름을 위한 TypeScript 예제.
* [`products/amm-v4/fees`](/ko/products/amm-v4/fees) — `WithdrawPnl` 세부사항 및 수수료 분할.
* [`reference/error-codes`](/ko/reference/error-codes) — 전방 참조 테이블 (AMM v4 오류가 해당 페이지에 나열됨).

출처:

* [Raydium AMM 프로그램 — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Raydium SDK v2 `Liquidity` 모듈
* OpenBook 프로그램 — 마켓 측 계정 검증
