Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
2026-07 업그레이드 이후, AMM v4의 OpenBook / Serum 의존성이 제거되었습니다 — 더 이상 어떤 명령어도 OpenBook 상태를 읽거나 쓰지 않습니다. 아래의 마켓 계정들은 레거시 v1 명령어 레이아웃의 위치 플레이스홀더로만 유지되며(수락되지만 무시됨), AmmInfo의 참조 필드로만 남아 있습니다. V2 스왑 진입점을 사용하세요. 이 페이지는 여전히 계정을 “풀 소유” 및 “OpenBook (레거시)” 섹션으로 분류하여 이전 트랜잭션을 읽을 수 있도록 합니다.

목록

AMM v4 풀은 생성 시 하나의 바인딩된 마켓을 AmmInfo에 기록합니다. 전체 구성은 다음과 같습니다: 참고: “serum” 접두사는 하위 호환성을 위해 AMM v4의 IDL 및 필드 이름에 유지됩니다. 이 계정들은 OpenBook 제거 후 더 이상 기능하지 않습니다.

AmmInfo

풀의 루트 상태 계정입니다. 풀과 OpenBook 참조를 인라인으로 포함하기 때문에 크기가 큽니다(약 752바이트).
구조체 레이아웃은 변경되지 않았습니다(바이트 호환), 따라서 기존 역직렬화기는 계속 작동하지만, OpenBook 제거 후 위에서 더 이상 사용되지 않음으로 표시된 필드는 더 이상 쓰이지 않습니다 — swap_* 거래량 카운터는 마지막 값에서 동결됩니다. 거래량 분석을 위해서는 이 필드 대신 거래 로그를 사용하세요. need_take_pnl_*과 pool_open_time만 적극적으로 유지됩니다.
통합자 대면 필드:
  • coin_vault, pc_vault — 풀의 SPL Token 볼트. coin은 Serum/OpenBook 규칙에 따라 token_0(기본), pc는 token_1(인용)입니다.
  • coin_decimals, pc_decimals — 민트와 일치합니다.
  • open_orders, target_orders, market — 레거시 참조 필드. 여전히 AmmInfo에 있고 v1 명령어 레이아웃에서 위치상으로 전달되지만, 프로그램은 더 이상 읽거나 검증하지 않습니다. V2 스왑 진입점은 이들을 생략합니다.
  • fees.swap_fee_numerator / swap_fee_denominator — 결합된 거래 수수료. 기본값 25 / 10_000 = 0.25%.
  • status — 작업을 제어하는 단일 열거형 u64 상태이며 비트마스크가 아닙니다. param = 0(Status)과 함께 SetParams를 통해 관리자가 설정 가능합니다. 아래 Status를 참조하세요.
  • lp_amount — 풀의 내부 LP 총액. lp_mint.supply와 같지 않습니다: 정확히 온전한 LP 토큰 한 개(10^coin_decimals 기본 단위)만큼 더 큽니다. 그 양은 초기화 시 계산되지만 실제로 발행되지는 않기 때문입니다. 모든 비례 계산은 lp_amount를 사용하므로 당신도 이를 사용하세요.
  • amm_owner — 생성 시 크리에이터가 아니라 프로그램에 하드코딩된 관리자 키에서 기록됩니다.
  • state_data.need_take_pnl_* — 총 누적 수수료와 스윕된 금액 간의 차이. TakePnl이 이를 0으로 설정합니다.

OpenBook 연결

제거됨. OpenBook / Serum 의존성이 프로그램에서 삭제되었습니다(2026-07 업그레이드). 이 섹션에서 설명하는 계정들은 더 이상 검증되거나 사용되지 않습니다. 이들은 AmmInfo의 참조 필드로, 그리고 레거시 v1 명령어 레이아웃의 위치 플레이스홀더로 남아 있습니다. V2 스왑 진입점을 사용하세요(SwapBaseInV2 / SwapBaseOutV2). 이들은 이 계정들을 전혀 사용하지 않습니다.
레거시 v1 SwapBaseIn / SwapBaseOut, Deposit, 또는 Withdraw 명령어를 호출할 때, 계정 개수는 여전히 이전 레이아웃과 일치해야 하지만(마켓 계정들이 역사적 위치를 차지), 그들의 내용은 더 이상 확인되지 않습니다 — CPI가 이들에 대해 발행되지 않습니다. 새 코드는 이 계정들을 전혀 사용하지 않는 V2 스왑 변형을 사용해야 합니다.
AMM의 amm_open_orders는 OpenBook 소유 계정으로 이 마켓의 풀 한도 주문 상태를 보유합니다: 활성 주문, 정산된 잔액, 추천인 등. amm_target_orders는 AMM 측입니다: 프로그램이 현재 게시된 것과 저렴하게 비교하고 차이를 배치/취소할 수 있도록 AMM의 의도된 그리드(각 주문 슬롯의 가격/크기)를 보유합니다.

권한 PDA

전체 AMM v4 프로그램에 정확히 하나의 amm_authority PDA가 있습니다. 그 시드는 간단합니다(["amm authority"]), 그 범프는 모든 AmmInfo에 저장됩니다. 이 권한은 모든 AMM v4 풀의 모든 토큰 이동에 서명합니다.
두 번째의 풀 범위 권한은 없습니다: 이 하나의 PDA가 프로그램이 서명하는 모든 것을 담당합니다. 메인넷에서 그 범프는 254이며 모든 AmmInfo에 nonce로 미러링됩니다. WithdrawExcessLamports는 그 nonce를 하드코딩하여 이를 다시 파생합니다.

볼트

풀의 SPL Token 볼트는 owner가 amm_authority인 표준 토큰 계정입니다. ATA가 아닙니다 — 그들의 주소는 Initialize2에서 [AMM_V4_PROGRAM_ID, market, "coin_vault_associated_seed"] 및 [AMM_V4_PROGRAM_ID, market, "pc_vault_associated_seed"]로부터 파생된 PDA입니다. 민트는 시드가 아니며 amm_id도 시드가 아닙니다. 주소는 AmmInfo에 저장됩니다; 파생은 일회성 호기심입니다. Token-2022는 지원되지 않습니다. 프로그램은 모든 볼트 이동에 대해 SPL Token의 프로그램 ID를 하드코딩합니다. AMM v4 풀을 Token-2022 민트에 바인딩하려고 시도하면 Initialize2에서 InvalidSplTokenProgram으로 실패합니다.

LP 민트

권한이 amm_authority인 클래식 SPL Token 민트입니다. 총 공급량은 풀의 LP 소유권을 추적합니다; LP를 소각하면 두 볼트에서 비례적으로 토큰을 반환합니다. 상태 내 미러는 존재합니다: AmmInfo.lp_amount. 이는 민트의 공급량과 같지 않습니다 — 정확히 온전한 LP 토큰 한 개(10^coin_decimals 기본 단위)만큼 더 큽니다. 그 양은 초기화 시 계산되지만 실제로 발행되지는 않기 때문입니다. 프로그램의 모든 비례 계산은 lp_amount로 나누므로, 민트의 온체인 공급량 대신 이 필드를 사용하세요.

상태

AmmInfo.status는 단일 열거형 u64 상태이며 비트마스크가 아닙니다. 동등성으로 검사하세요 — status & 1을 검사하는 클라이언트는 모든 라이브 풀을 잘못 분류합니다. 정상 거래 상태가 비트 0이 설정된 6이기 때문입니다. Initialize2는 open_time이 미래이면 7을, 그렇지 않으면 6을 기록합니다. 7 상태의 풀은 state_data.pool_open_time 시점 이후의 첫 스왑에서 스스로 6으로 전환됩니다. 0..=7 범위를 벗어난 값은 AmmStatus::from_u64를 패닉시킵니다. Raydium 멀티시그는 param = 0(Status)과 함께 SetParams를 통해 상태를 설정하며 1–7 값만 허용됩니다. (AdminCancelOrders는 제거되었습니다.)

관찰 / 오라클

AMM v4는 전용 관찰 계정이 없으며, OpenBook 제거 이후로는 그것을 파생할 오더북 상태도 없습니다. 프로그램 지원이 있는 Raydium TWAP가 필요하면 CPMM 또는 CLMM을 사용하세요 — 둘 다 ObservationState 링 버퍼를 유지합니다. 그렇지 않으면 스왑 로그를 오프체인에서 인덱싱하세요.

처음부터 풀의 계정 파생

AMM v4의 풀 계정은 바인딩된 마켓을 키로 하는 일반 PDA입니다 — 시드 키쌍도 아니고 쌍별 PDA도 아닙니다. 그 모두가 AMM_V4_PROGRAM_ID 아래에서 동일한 3개 시드 형태 [AMM_V4_PROGRAM_ID, market, <label>]를 사용합니다:
바인딩된 마켓이 유일한 가변 시드이며, 그래서 하나의 마켓이 정확히 하나의 AMM v4 풀에 매핑됩니다. SDK와 API는 이를 미리 계산합니다; raydium-sdk-v2의 Liquidity.getAssociatedPoolKeys를 참조하세요. 실제로, 통합자는 GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID>에서 또는 SDK에서 풀의 전체 계정 세트를 읽습니다. 손으로 파생하는 것은 거의 필요하지 않습니다.

라이프사이클 빠른 참조

풀과 그들의 계정은 무기한 지속됩니다. 유동성이 완전히 출금되더라도 AmmInfo는 남아 있습니다.

어디서 무엇을 읽을지

출처: