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.
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
Stable AMM은 AMM v4과 대부분의 명령어를 공유합니다. 고유한 명령어는 InitModelData와 UpdateModelData로, 조회 테이블을 생성하고 업데이트합니다. 다른 모든 작업(스왑, 입금, 출금, 크랭크)은 AMM v4과 동일한 패턴을 따릅니다.
명령어 목록
| 명령어 | 카테고리 | 설명 |
|---|
Initialize | 라이프사이클 | 풀 생성 (미리 할당된 모델 데이터 계정 필요). |
PreInitialize | 라이프사이클 | 레거시 사전 할당 헬퍼. |
InitModelData | 모델 설정 | 조회 테이블 생성 및 초기화. |
UpdateModelData | 모델 설정 | 호출당 최대 5개 테이블 요소 채우기. |
Deposit | 유동성 | 유동성 추가, LP 수령. |
Withdraw | 유동성 | LP 소각, 양쪽 모두 수령. |
SwapBaseIn | 스왑 | 정확한 입력 스왑. |
SwapBaseOut | 스왑 | 정확한 출력 스왑. |
MonitorStep | 크랭크 | OpenBook 정산, 주문 업데이트. |
SetParams | 관리자 | 풀 파라미터 변경. |
WithdrawPnl | 관리자 | 누적 프로토콜 수수료 수거. |
WithdrawSrm | 레거시 | SRM 리베이트 수거 (레거시). |
SimulateInfo | 진단 | 읽기 전용 견적 헬퍼. |
Initialize
기존 OpenBook 마켓과 미리 생성된 ModelDataInfo 계정에 바인딩된 새로운 Stable AMM 풀을 부트스트랩합니다.
인자
계정 (쓰기 가능 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 | | 펀지블 LP 토큰 민트. |
| 8 | coin_mint | | | |
| 9 | pc_mint | | | |
| 10 | pool_coin_token_account | W | | 풀의 코인 보관소. |
| 11 | pool_pc_token_account | W | | 풀의 pc 보관소. |
| 12 | amm_target_orders | W | | OpenBook 주문용 그리드. |
| 13 | model_data_account | | | 조회 테이블 계정. |
| 14 | serum_program | | | OpenBook 프로그램. |
| 15 | serum_market | | | OpenBook 마켓. |
| 16 | user_dest_lp_token | W | | 생성자의 LP ATA (초기 LP 수령). |
| 17 | user_wallet | W | S | 생성자; 렌트 지불, 초기 입금 자금 제공. |
| (선택) | srm_token | W | | 수수료 할인용 SRM 토큰 계정 (레거시). |
사전 조건
model_data_account는 이미 생성되어야 하며 이전 InitModelData에 의해 초기화되어야 합니다.
lp_mint는 비어 있어야 합니다 (공급량 0).
- 보관소는 존재해야 하며
amm_authority가 소유해야 합니다.
사후 조건
AmmInfo는 모든 참조로 초기화됩니다.
TargetOrders는 영으로 설정되고 첫 번째 MonitorStep에 준비됩니다.
- 초기 LP 토큰이 민팅되어
user_dest_lp_token으로 전송됩니다.
- OpenBook 주문은 아직 게시되지 않았습니다. 첫 번째
MonitorStep에서 주문을 게시합니다.
InitModelData
ModelDataInfo 계정을 생성하고 초기화합니다. Initialize 전에 한 번 호출해야 합니다.
인자
multiplier: u64 // 스케일 팩터 (예: 10^6)
계정 (쓰기 가능 W, 서명자 S)
| # | 이름 | W | S | 설명 |
|---|
| 1 | model_data_account | W | | 50k 요소 테이블 계정. |
| 2 | amm_admin | | S | 풀 관리자 (권한을 증명하기 위해 서명해야 함). |
사전 조건
model_data_account는 충분히 커야 합니다 (50k × 24바이트에 약 1.2MB).
model_data_account는 Stable 프로그램이 소유해야 합니다.
사후 조건
status = Initialized.
multiplier가 설정됩니다.
valid_data_count = 0 (아직 채워진 요소 없음; UpdateModelData를 호출하여 추가).
elements 배열은 영으로 설정됩니다.
UpdateModelData
단일 호출에서 최대 5개 테이블 요소를 채웁니다. InitModelData 이후이지만 스왑이 테이블을 사용하기 전에 호출해야 합니다.
인자
array_data: [UpdateModelData; 5]
pub struct UpdateModelData {
pub index: u64,
pub data: DataElement,
}
계정 (쓰기 가능 W, 서명자 S)
| # | 이름 | W | S | 설명 |
|---|
| 1 | amm_admin | | S | 서명자 (풀 관리자여야 함). |
| 2 | model_data_account | W | | 테이블 계정. |
사전 조건
amm_admin은 AmmInfo.amm_admin과 일치해야 합니다.
array_data의 각 인덱스는 유효해야 합니다 (50,000 이내).
- 항목은 정렬되어야 합니다 (속도를 위해 온체인에서 검증되지 않음): x 오름차순, y 내림차순, 가격 오름차순.
사후 조건
- 요소는 각 입력에 대해
model_data_account.elements[index]에 기록됩니다.
valid_data_count는 기록된 최대 인덱스 + 1로 업데이트됩니다.
거버넌스 주의: 정렬 순서나 가격 일관성의 온체인 강제 실행이 없습니다. 악의적이거나 부주의한 관리자는 테이블을 손상시키고 잘못된 견적을 초래할 수 있습니다. 실제로는 Raydium 멀티시그가 이 주소를 제어합니다.
Deposit
유동성 추가, LP 토큰 수령.
인자
max_coin_amount: u64
max_pc_amount: u64
base_side: u64 // 0 = 코인 기준, 1 = pc 기준
계정 — AMM v4처럼, ~13개 계정. model_data_account를 읽기 전용으로 포함해야 합니다.
수학 — 조회 테이블을 사용하는 표준 비례배분으로 비율을 계산합니다. SDK는 원하는 LP 금액에 대한 코인/pc 쌍을 계산하고 최대 한도와 비교합니다.
Withdraw
LP 소각, 양쪽 모두 비례배분으로 수령.
인자
계정 — AMM v4처럼, model_data_account는 읽기 전용입니다.
사전 조건
user_lp_token_account는 최소 amount를 보유해야 합니다.
사후 조건
amount LP 토큰이 소각됩니다.
- 사용자는 현재 비례배분에 따라 코인과 pc 금액을 수령하며, 누적 수수료에 맞게 조정됩니다.
SwapBaseIn
조회 테이블을 사용한 정확한 입력 스왑으로 가격 결정합니다.
인자
amount_in: u64
minimum_amount_out: u64
계정 (~17개 총계)
| # | 이름 | 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 | model_data_account | | | 읽기 전용 조회 테이블. |
| 9 | serum_program | | | |
| 10 | serum_market | W | | |
| 11 | serum_bids | W | | |
| 12 | serum_asks | W | | |
| 13 | serum_event_queue | W | | |
| 14 | serum_coin_vault | W | | |
| 15 | serum_pc_vault | W | | |
| 16 | serum_vault_signer | | | |
| 17 | user_source_token | W | | 사용자의 입력 토큰 계정. |
| 18 | user_dest_token | W | | 사용자의 출력 토큰 계정. |
| 19 | user_owner | | S | 사용자 (트랜잭션 서명자). |
사전 조건
amm.status는 스왑을 허용해야 합니다.
user_source_token은 ≥ amount_in을 보유해야 합니다.
사후 조건
- 사용자는
amount_in을 잃고 amount_out ≥ minimum_amount_out을 얻습니다.
- 풀 수수료는
need_take_pnl_* 카운터를 증가시킵니다.
- OpenBook 주문은 채워진 경우 정산될 수 있습니다.
수학 — products/stable/math에 설명된 조회 테이블 보간.
SwapBaseOut
정확한 출력 스왑 (SwapBaseIn의 역). 동일한 계정, 다른 수학 방향.
인자
max_amount_in: u64
amount_out: u64
MonitorStep
무허가 크랭크: OpenBook 채움 정산, 제한 주문 그리드 업데이트.
인자
plan_order_limit: u16
place_order_limit: u16
cancel_order_limit: u16
계정 (~18개 총계) — AMM v4 MonitorStep과 동일하며 model_data_account는 읽기 전용입니다.
사전 조건
- OpenBook 계정 참조는 풀의 바인딩된 마켓과 일치해야 합니다.
사후 조건
- 대기 중인 OpenBook 채움이 풀 보관소로 정산됩니다.
- 새로운 제한 주문이 조회 테이블 곡선을 기반으로 OpenBook에 게시됩니다.
TargetOrders가 업데이트됩니다.
SetParams
관리자 전용. 풀 파라미터 변경 (상태, 상태, 수수료, 소유자, 모델 데이터 키 등).
인자
param: u8 // 변경할 파라미터 (Status, State, Fees 등)
value: Option<u64> // 새 값 (파라미터가 숫자인 경우)
new_pubkey: Option<Pubkey> // 새 주소 (파라미터가 계정 키인 경우)
fees: Option<Fees> // 새 수수료 (파라미터가 Fees인 경우)
계정 — 파라미터에 따라 다릅니다. 항상 amm_admin을 서명자로 요구합니다.
공통 파라미터:
param = 0 (Status) — 작업 비트마스크 변경.
param = 9 (Fees) — 거래 수수료, pnl 분할 등 변경.
param = 11 (ModelDataKey) — 조회 테이블 재바인드 (드물게, 관리자 조치 필요).
WithdrawPnl
관리자 전용. 누적 프로토콜 수수료를 need_take_pnl_*에서 지정된 PnL 계정으로 수거합니다.
인자 — 없음 (상태 주도).
계정 (~14개 총계)
| # | 이름 | W | S | 설명 |
|---|
| 1 | token_program | | | |
| 2 | amm | W | | |
| 3 | amm_authority | | | |
| 4 | amm_open_orders | W | | |
| 5 | pool_coin_token_account | W | | |
| 6 | pool_pc_token_account | W | | |
| 7 | coin_pnl_dest | W | | 관리자의 코인 계정 (수수료 수령). |
| 8 | pc_pnl_dest | W | | 관리자의 pc 계정 (수수료 수령). |
| 9 | pnl_admin | | S | 서명자 (풀 소유권과 일치해야 함). |
| 10+ | OpenBook 계정 (~4개) | | | 먼저 대기 중인 채움을 정산. |
사전 조건
사후 조건
need_take_pnl_coin과 need_take_pnl_pc는 관리자의 계정으로 전송됩니다.
- 카운터는 영으로 설정됩니다.
WithdrawSrm
레거시 (새 풀에서는 사용하지 마십시오). 초기 Serum 시대 풀에서 SRM 수수료 할인 토큰 리베이트를 수거합니다.
인자
SimulateInfo
클라이언트 및 SDK용 읽기 전용 견적 헬퍼.
인자
param: u8 // PoolInfo, SwapBaseInInfo, SwapBaseOutInfo, RunCrankInfo
swap_base_in_value: Option<SwapInstructionBaseIn>
swap_base_out_value: Option<SwapInstructionBaseOut>
사용법 — simulateTransaction을 통해 호출되어 스왑을 실행하지 않고 견적을 얻습니다.
다음 단계
- 계정 — 계정 필드 레이아웃 및 크기.
- 수학 — 조회 테이블 보간 논리.
- 코드 데모 — SDK에서 이를 호출하는 방법 확인.
출처:
raydium-stable/program/src/instruction.rs (열거형 및 pack/unpack)
raydium-stable/program/src/processor.rs (실행 로직)