메인 콘텐츠로 건너뛰기

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과 대부분의 명령어를 공유합니다. 고유한 명령어는 InitModelDataUpdateModelData로, 조회 테이블을 생성하고 업데이트합니다. 다른 모든 작업(스왑, 입금, 출금, 크랭크)은 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 풀을 부트스트랩합니다. 인자
nonce: u8
open_time: u64
계정 (쓰기 가능 W, 서명자 S)
#이름WS설명
1token_programSPL Token.
2system_program
3rent
4ammW풀의 AmmInfo 계정.
5amm_authority프로그램 전역 PDA.
6amm_open_ordersWOpenBook OpenOrders.
7lp_mintW펀지블 LP 토큰 민트.
8coin_mint
9pc_mint
10pool_coin_token_accountW풀의 코인 보관소.
11pool_pc_token_accountW풀의 pc 보관소.
12amm_target_ordersWOpenBook 주문용 그리드.
13model_data_account조회 테이블 계정.
14serum_programOpenBook 프로그램.
15serum_marketOpenBook 마켓.
16user_dest_lp_tokenW생성자의 LP ATA (초기 LP 수령).
17user_walletWS생성자; 렌트 지불, 초기 입금 자금 제공.
(선택)srm_tokenW수수료 할인용 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)
#이름WS설명
1model_data_accountW50k 요소 테이블 계정.
2amm_adminS풀 관리자 (권한을 증명하기 위해 서명해야 함).
사전 조건
  • 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)
#이름WS설명
1amm_adminS서명자 (풀 관리자여야 함).
2model_data_accountW테이블 계정.
사전 조건
  • amm_adminAmmInfo.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 소각, 양쪽 모두 비례배분으로 수령. 인자
amount: u64            // 소각할 LP 토큰
계정 — AMM v4처럼, model_data_account는 읽기 전용입니다. 사전 조건
  • user_lp_token_account는 최소 amount를 보유해야 합니다.
사후 조건
  • amount LP 토큰이 소각됩니다.
  • 사용자는 현재 비례배분에 따라 코인과 pc 금액을 수령하며, 누적 수수료에 맞게 조정됩니다.

SwapBaseIn

조회 테이블을 사용한 정확한 입력 스왑으로 가격 결정합니다. 인자
amount_in: u64
minimum_amount_out: u64
계정 (~17개 총계)
#이름WS설명
1token_program
2ammW
3amm_authority
4amm_open_ordersW
5amm_target_ordersW
6pool_coin_token_accountW
7pool_pc_token_accountW
8model_data_account읽기 전용 조회 테이블.
9serum_program
10serum_marketW
11serum_bidsW
12serum_asksW
13serum_event_queueW
14serum_coin_vaultW
15serum_pc_vaultW
16serum_vault_signer
17user_source_tokenW사용자의 입력 토큰 계정.
18user_dest_tokenW사용자의 출력 토큰 계정.
19user_ownerS사용자 (트랜잭션 서명자).
사전 조건
  • 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개 총계)
#이름WS설명
1token_program
2ammW
3amm_authority
4amm_open_ordersW
5pool_coin_token_accountW
6pool_pc_token_accountW
7coin_pnl_destW관리자의 코인 계정 (수수료 수령).
8pc_pnl_destW관리자의 pc 계정 (수수료 수령).
9pnl_adminS서명자 (풀 소유권과 일치해야 함).
10+OpenBook 계정 (~4개)먼저 대기 중인 채움을 정산.
사전 조건
  • pnl_admin은 승인되어야 합니다.
사후 조건
  • need_take_pnl_coinneed_take_pnl_pc는 관리자의 계정으로 전송됩니다.
  • 카운터는 영으로 설정됩니다.

WithdrawSrm

레거시 (새 풀에서는 사용하지 마십시오). 초기 Serum 시대 풀에서 SRM 수수료 할인 토큰 리베이트를 수거합니다. 인자
amount: u64

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 (실행 로직)