이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
조회 테이블 곡선
Stable AMM은 x·y=k 공식을 (x, y, price) 튜플의 희소 조회 테이블로 대체합니다. 스왑 가격을 책정할 때 프로그램은 다음을 수행합니다:- 리저브에서 풀의 현재 비율을 계산합니다.
- 이진 검색으로 해당 비율을 포함하는 두 항목을 찾습니다.
- 선형 보간으로 중간 가격을 구합니다.
- 수수료를 적용하고 견적을 반환합니다.
테이블 레이아웃과 이진 검색
ModelDataInfo는 최대 50,000개의 DataElement 항목을 보유하며, 관리자가 인덱싱합니다. 처음 valid_data_count개만 활성화됩니다. 각 항목:
- 비율을 계산합니다:
target_ratio = (x_real * multiplier) / y_real. (element.x * multiplier) / element.y가target_ratio를 포함하는 항목을 이진 검색합니다.- 괄호
[min_idx, max_idx]를 찾으면 보간합니다.
state.rs::ModelDataInfo::get_mininum_range_by_xy_real에서 약 150줄을 차지합니다. 핵심 불변식: 항목은 정렬되어야 합니다(x 오름차순, y 내림차순, price 오름차순).
선형 보간
두 테이블 포인트가 비율을 포함하면 보간은 중간 가격과 리저브 쌍을 계산합니다:스케일링: 승수
풀 리저브와 가격은 다른 스케일로 저장됩니다.ModelDataInfo의 multiplier 필드가 이를 처리합니다. 일반적인 패턴:
- 코인은 6자리 소수, PC는 18자리 소수입니다.
- 승수 = 10^6 (또는 유사).
- 테이블 항목은 u64 범위에 맞도록 축소된 스케일로 저장됩니다.
스왑 가격 책정: SwapBaseIn과 SwapBaseOut
SwapBaseIn (정확한 입력)
입력 금액amount_in이 주어지면:
(coin_vault, pc_vault)에서 현재 비율을 가져옵니다.- 괄호 테이블 항목을 찾고 보간하여 테이블 공간 비율을 구합니다.
- 입력을 테이블 공간으로 변환합니다:
dx_table = amount_in * multiplier / ratio. - 새 X 좌표에서 테이블을 쿼리하여 새 Y를 찾습니다.
dy_table = y_old - y_new.- 다시 변환합니다:
dy_real = dy_table * ratio / multiplier. - 거래 수수료를 적용합니다:
dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator). dy_output을 반환합니다.
SwapBaseOut (정확한 출력)
대칭: 원하는amount_out이 주어지면 필요한 amount_in을 풉니다.
두 경로 모두 풀 볼트에서 직접 유효 리저브를 읽습니다. 풀은 수년 동안 OpenBook 미결제 주문을 보유하지 않았으므로 먼저 정산할 것이 없습니다. 볼트 잔액이 전부입니다. (2026-06-22 업그레이드에서 남은 마켓 코드를 제거했습니다.)
수수료 적용
AMM v4와 동일합니다: 전체 유도는products/amm-v4/math를 참조하세요.
pnl_portion은 need_take_pnl_*로 이동하며 관리자가 WithdrawPnl을 통해 스윕합니다. lp_portion은 볼트에 남아 k를 증가시키고 LP 토큰 보유자에게 이익을 줍니다.
풀 자산 회계
공식은 역사적으로 풀이 OpenBook OpenOrders 계정에 보유한 자금을 추가했습니다. 풀이 주문 게시를 중단한 이후 실제로는 0이었으며, 2026-06-22 업그레이드에서 공식에서 완전히 제거되어 볼트 전용 계산만 남겼습니다:need_take_pnl 부분은 물리적으로 볼트에 있지만 가격 책정에서 제외됩니다). 이전에 OpenOrders 잔액을 읽던 견적 코드와 인덱서는 해당 항목을 제거해야 합니다.
MonitorStep (제거됨)
MonitorStep은 미결제 OpenBook 채우기를 정산하고, AmmInfo.target_orders를 재계산하고, 조회 테이블에서 파생된 지정가 주문 그리드를 다시 게시하는 크랭크 명령어였습니다. 풀은 수년 전에 OpenBook에 주문 게시를 중단했으므로 크랭크는 할 일이 없었습니다. 2026-06-22 업그레이드에서 제거되었습니다. 통합자는 Stable 풀을 크랭크할 필요가 없습니다.
요약: 이것이 작동하는 이유
조회 테이블 + 보간 설계는 효율적이고 유연합니다:- 효율성: 이진 검색은 O(log 50,000) ≈ 16회 반복이며, 각각 약 300–500 CU입니다. 보간은 몇 번의 곱셈/나눗셈입니다. 총 견적 비용은 약 5k–15k CU로, 모든 스왑에서 공식을 재계산하는 것보다 훨씬 저렴합니다.
- 유연성: 관리자는 모든 구간별 선형 곡선을 인코딩할 수 있습니다. 스테이블코인 쌍은 1:1 주변에서 높은 밀도를 얻습니다. 담보 쌍은 사용자 정의 곡선을 얻습니다.
- 자체 포함 유동성: 모든 자금은 풀 볼트에 있으며 가격 책정은 직접 읽습니다. 크랭크 없음, 외부 오더북 없음, 거래당 더 적은 계정.
raydium-stable/program/src/state.rs, 메서드 get_data_by_x, get_data_by_y, get_dy_by_dx_base_in 등을 참조하세요.
다음 단계
- 계정 —
ModelDataInfo와DataElement필드 참조. - 명령어 — 호출 가능한 집합(스왑, 입금, 출금,
WithdrawPnl)과 제거된 명령어. - 수수료 — 수수료 적용과
WithdrawPnl. products/amm-v4/math— OpenBook 수수료 포함 주문 가격 책정 로직.
raydium-stable/program/src/state.rs(보간 및 이진 검색 구현)raydium-stable/program/src/math.rs(계산기 유틸리티)

