이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
Stable AMM은 자체 프로그램 ID를 가진 독립적인 프로그램입니다. AMM v4 프로그램의 모드가 아니며, AMM v4를 “통해” 거래되지 않습니다. 별도로 배포, 업그레이드, 호출됩니다. AMM v4와는 수수료 및 계정 레이아웃 규칙에서만 유사합니다.
2026-06-22 업그레이드 — 사용되지 않는 OpenBook(마켓) 코드 제거. Stable AMM은 오래전부터 OpenBook에 주문을 게시하지 않았습니다. 오더북 마켓 메이킹 경로는 수년간 휴면 상태였습니다. 이 업그레이드는 남은 마켓 관련 계정과 코드를 삭제합니다. 라이브 거래 동작은 변경하지 않습니다.통합자를 위한 두 가지 결과:
- 더 작은 계정 레이아웃.
SwapBaseIn / SwapBaseOut (18 → 9), Deposit (14 → 12), Withdraw (21/22 → 12)는 사용되지 않는 Serum/마켓 계정을 제거합니다. 이전 레이아웃은 하위 호환성을 위해 여전히 파싱됩니다. WithdrawPnl (16 → 10)은 호환성 경로가 없는 하드 브레이킹 변경입니다(관리자 전용).
- 대부분의 명령어가 제거됩니다.
SwapBaseIn, SwapBaseOut, Deposit, Withdraw, WithdrawPnl만 호출 가능합니다. 다른 모든 명령어는 더 이상 호출할 수 없습니다.
변경 로그: reference/changelog.
명령어 목록
호출 가능
| 명령어 | 카테고리 | 참고 |
|---|
Deposit | 유동성 | 유동성 추가, LP 수령. 새로운 12계정 레이아웃; 이전 14계정 레이아웃도 호환됨. |
Withdraw | 유동성 | LP 소각, 양쪽 모두 수령. 새로운 12계정 레이아웃; 이전 21/22계정 레이아웃도 호환됨. |
SwapBaseIn | 스왑 | 정확한 입력 스왑. 새로운 9계정 레이아웃; 이전 18계정 레이아웃도 호환됨. |
SwapBaseOut | 스왑 | 정확한 출력 스왑. 새로운 9계정 레이아웃; 이전 18계정 레이아웃도 호환됨. |
WithdrawPnl | 관리자 | 누적된 프로토콜 수수료 회수. 새로운 10계정 레이아웃 (하드 브레이킹 — 이전 레이아웃 호환성 없음). |
제거됨(더 이상 호출 불가)
2026-06-22 업그레이드에서 제거되었으며 더 이상 호출할 수 없습니다. 제거된 명령어를 참조하세요.
| 명령어 | 이전 카테고리 | 이전 목적 |
|---|
Initialize | 라이프사이클 | 풀 생성. |
PreInitialize | 라이프사이클 | 레거시 사전 할당 헬퍼. |
InitModelData | 모델 설정 | 조회 테이블 생성 및 초기화. |
UpdateModelData | 모델 설정 | 호출당 최대 5개 테이블 요소 채우기. |
MonitorStep | 크랭크 | OpenBook 체결 정산, 주문 재게시. |
SetParams | 관리자 | 풀 파라미터 변경. |
WithdrawSrm | 레거시 | SRM 수수료 할인 리베이트 회수. |
SimulateInfo | 진단 | 읽기 전용 견적 헬퍼. |
Deposit
유동성을 추가하고 LP 토큰을 수령합니다.
인자
max_coin_amount: u64
max_pc_amount: u64
base_side: u64 // 0 = base on coin, 1 = base on pc
계정 — 새로운 레이아웃, 12개 계정 (쓰기 가능 W, 서명자 S)
| # | 이름 | W | S | 참고 |
|---|
| 0 | token_program | | | SPL Token. |
| 1 | amm | W | | 풀의 AmmInfo. |
| 2 | amm_authority | | | 프로그램 전역 PDA. |
| 3 | amm_target_orders | W | | |
| 4 | amm_lp_mint | W | | LP 민트. |
| 5 | amm_coin_vault | W | | 풀 코인 볼트. |
| 6 | amm_pc_vault | W | | 풀 pc 볼트. |
| 7 | model_data_account | | | 읽기 전용 조회 테이블. |
| 8 | user_source_coin | W | | 사용자의 코인 입력. |
| 9 | user_source_pc | W | | 사용자의 pc 입력. |
| 10 | user_dest_lp | W | | 사용자의 LP ATA. |
| 11 | user_source_owner | | S | 트랜잭션 서명자. |
호환성: amm_open_orders (이전 #3)와 serum_market (이전 #9)이 제거되었습니다. 14개 계정이 전달되면 명령어는 이전 14계정 레이아웃으로 파싱되며, Serum 계정은 무시됩니다.
수학 — 조회 테이블을 사용한 표준 비례 계산으로 비율을 계산합니다. SDK는 원하는 LP 양에 대한 코인/pc 쌍을 계산하고 최대 한도에 대해 확인합니다.
Withdraw
LP를 소각하고 양쪽을 비례적으로 수령합니다.
인자
계정 — 새로운 레이아웃, 12개 계정 (쓰기 가능 W, 서명자 S)
| # | 이름 | W | S | 참고 |
|---|
| 0 | token_program | | | SPL Token. |
| 1 | amm | W | | 풀의 AmmInfo. |
| 2 | amm_authority | | | 프로그램 전역 PDA. |
| 3 | amm_target_orders | W | | |
| 4 | amm_lp_mint | W | | LP 민트. |
| 5 | amm_coin_vault | W | | 풀 코인 볼트. |
| 6 | amm_pc_vault | W | | 풀 pc 볼트. |
| 7 | model_data_account | | | 읽기 전용 조회 테이블. |
| 8 | user_source_lp | W | | 사용자의 LP 소스. |
| 9 | user_dest_coin | W | | 사용자의 코인 출력. |
| 10 | user_dest_pc | W | | 사용자의 pc 출력. |
| 11 | user_lp_owner | | S | 트랜잭션 서명자. |
호환성: 9개의 Serum 계정(amm_open_orders, serum_program, serum_market, serum_coin_vault, serum_pc_vault, serum_vault_signer, serum_event_q, serum_bids, serum_asks)이 제거되었습니다. 이전 21- 또는 22계정 레이아웃은 여전히 허용됩니다. 다만 22번째 선택적 referrer_pc_wallet 계정에 대한 리페럴 수수료 로직이 제거되었습니다 — 여전히 전달할 수 있지만 더 이상 적용되지 않습니다.
전제 조건
user_source_lp는 최소 amount를 보유합니다.
사후 조건
amount LP 토큰이 소각됩니다.
- 사용자는 현재 비례에 따라 코인 및 pc 양을 수령하며, 누적된 수수료로 조정됩니다.
SwapBaseIn
조회 테이블을 사용한 정확한 입력 스왑으로 가격을 책정합니다.
인자
amount_in: u64
minimum_amount_out: u64
계정 — 새로운 레이아웃, 9개 계정 (쓰기 가능 W, 서명자 S)
| # | 이름 | W | S | 참고 |
|---|
| 0 | spl_token program | | | SPL Token. |
| 1 | amm | W | | 풀의 AmmInfo. |
| 2 | amm_authority | | | 프로그램 전역 PDA. |
| 3 | amm_coin_vault | W | | 풀 코인 볼트. |
| 4 | amm_pc_vault | W | | 풀 pc 볼트. |
| 5 | model_data_account | | | 읽기 전용 조회 테이블. |
| 6 | user_source_token | W | | 사용자의 입력 토큰 계정. |
| 7 | user_destination_token | W | | 사용자의 출력 토큰 계정. |
| 8 | user_source_owner | | S | 사용자(트랜잭션 서명자). |
호환성: 9개의 OpenBook 계정(amm_open_orders, serum_program, serum_market, serum_bids, serum_asks, serum_event_queue, serum_coin_vault, serum_pc_vault, serum_vault_signer)이 제거되었습니다. 전달된 계정 수가 9가 아니면 명령어는 이전 18계정 레이아웃으로 파싱됩니다. Serum 계정은 여전히 해당 위치를 차지해야 하지만 더 이상 검증되거나 사용되지 않습니다.
전제 조건
amm.status가 스왑을 허용합니다.
user_source_token은 ≥ amount_in을 보유합니다.
사후 조건
- 사용자는
amount_in을 잃고, amount_out ≥ minimum_amount_out을 얻습니다.
- 풀 수수료는
need_take_pnl_* 카운터를 증가시킵니다.
수학 — products/stable/math에 설명된 조회 테이블 보간.
SwapBaseOut
정확한 출력 스왑(SwapBaseIn의 역). 동일한 9계정 레이아웃, 다른 수학 방향.
인자
max_amount_in: u64
amount_out: u64
WithdrawPnl
관리자 전용. need_take_pnl_*에서 누적된 프로토콜 수수료를 지정된 PnL 계정으로 회수합니다.
하드 브레이킹 변경 — 호환성 경로 없음. 이 명령어는 이전 레이아웃에 대한 파싱이 없습니다. 이전 레이아웃을 보내면 계정 정렬 오류로 인해 InvalidTokenCoin과 같은 검증 오류로 실패합니다(이전 #3은 open_orders였음). WithdrawPnl을 호출하는 관리자 도구는 반드시 새로운 10계정 레이아웃으로 업데이트되어야 합니다.
인자 — 없음(상태 기반).
계정 — 새로운 레이아웃, 고정 10개 계정, 관리자 전용 (쓰기 가능 W, 서명자 S)
| # | 이름 | W | S | 참고 |
|---|
| 0 | spl_token program | | | SPL Token. |
| 1 | amm | W | | 풀의 AmmInfo. |
| 2 | amm_authority | | | 프로그램 전역 PDA. |
| 3 | amm_coin_vault | W | | 풀 코인 볼트. |
| 4 | amm_pc_vault | W | | 풀 pc 볼트. |
| 5 | amm_target_orders | W | | |
| 6 | model_data | | | 조회 테이블. |
| 7 | user_coin | W | | 관리자의 코인 계정(수수료 수령). |
| 8 | user_pc | W | | 관리자의 pc 계정(수수료 수령). |
| 9 | amm_admin | | S | 풀 관리자(서명자). |
로직 변경: 풀의 사용 가능한 자금이 누적된 PnL을 인출하기에 부족할 때, 풀은 더 이상 CancelAllOrdersState / Disabled로 전환되지 않습니다. 명령어는 TakePnlError를 직접 반환합니다. 선택적 referrer_pc_wallet도 제거되었습니다.
전제 조건
사후 조건
need_take_pnl_coin과 need_take_pnl_pc가 관리자의 계정으로 전송됩니다.
- 카운터가 0으로 설정됩니다.
제거된 명령어
다음 명령어들은 2026-06-22 업그레이드에서 제거되었으며 더 이상 호출할 수 없습니다. 통합자가 과거 트랜잭션 및 SDK에서 이들을 인식할 수 있도록 여기에 문서화되어 있습니다.
Initialize — 이전에는 새로운 Stable AMM 풀을 부트스트랩했습니다. 제거됨.
PreInitialize — 레거시 사전 할당 헬퍼. 제거됨.
InitModelData — 이전에는 ModelDataInfo 조회 테이블을 생성하고 초기화했습니다. 제거됨.
UpdateModelData — 이전에는 호출당 최대 5개의 조회 테이블 요소를 채웠습니다. 제거됨.
MonitorStep — 체결을 정산하고 주문 그리드를 재게시한 OpenBook 크랭크. 풀이 OpenBook에 게시를 중단한 후 이미 오래 휴면 상태였으며, 이제 제거됨.
SetParams — 관리자 파라미터 변경(상태, 수수료, 소유자, 모델 데이터 키 등). 제거됨.
WithdrawSrm — 초기 Serum 시대 풀에서 SRM 수수료 할인 리베이트를 회수했습니다. 제거됨.
SimulateInfo — 읽기 전용 견적 헬퍼. 제거됨. 견적을 위해 SDK의 오프체인 stable-curve 헬퍼를 사용하세요(코드 데모 참조).
다음 단계
- 계정 — 계정 필드 레이아웃 및 크기.
- 수학 — 조회 테이블 보간 로직.
- 코드 데모 — SDK에서 이들을 호출하는 방법.
출처:
raydium-stable/program/src/instruction.rs (enum 및 pack/unpack)
raydium-stable/program/src/processor.rs (실행 로직)