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 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
AMM은 악의적인 코드의 주요 표적입니다. LP 자금이 완전히 공개된 풀에 있고, 모든 스왑이 결정론적으로 가격을 변경합니다. 이 페이지는 AMM을 대상으로 입증된 공격 클래스, Raydium에 적용되는 방식, 그리고 Raydium과 통합자가 각각에 대해 어떻게 방어하는지를 정리합니다.
1. 샌드위칭 / MEV 공격
공격
봇이 메모풀/가십 스트림을 감시하다가 사용자의 스왑을 발견하고, 같은 방향의 매수로 앞서 실행(가격 상승)한 후, 사용자의 트랜잭션이 더 나쁜 가격에 실행되도록 하고, 반대 방향의 매도로 뒤에서 실행합니다. 봇은 스프레드로 이익을 얻습니다.노출도
- 가장 노출됨: 낮은 TVL의 CPMM 풀 및 AMM v4 풀 — 작은 거래도 가격을 의미 있게 변동시킵니다.
- 덜 노출됨: 깊은 CLMM 풀 — 틱 내의 거래는 가격을 변동시키지 않습니다.
- 노출 없음: 팜 수확, LP 입금 (비율이 강제되며, 가격 민감도가 동일하지 않습니다).
방어 수단
- Jito 번들 (
integration-guides/routing-and-mev) 공개 메모풀에서 트랜잭션을 숨깁니다. - 엄격한 슬리피지 — 예상값에 가까운 최소 출력은 샌드위칭을 수익성이 없게 만듭니다. 약 0.3% 이하에서는 대부분의 샌드위칭이 손실을 입습니다.
- 더 작은 거래 규모 — $100k 스왑을 10개의 $10k로 분할합니다. 각각은 가격을 덜 변동시킵니다.
Raydium의 입장
Raydium의 핵심 프로그램은 anti-MEV 보호를 강제하지 않습니다 — 프로그램 수준에서는 중립입니다. 보호는 제출 계층(Jito, 지갑의 기본 제공 보호)에서 발생합니다. UI는 슬리피지를 기본값으로 0.5%로 설정하며, 이는 대부분의 풀에 합리적입니다.2. 가격 조작
공격
대규모 거래자가 풀의 가격을 일시적으로 이동시키고(플래시 론 또는 자체 자금 지원 고래를 통해), 가격에 따라 달라지는 다운스트림 작업(청산, 오라클 파생 차용, 파생상품 지급)을 트리거한 다음, 가격을 정상으로 되돌립니다.노출도
- 네이티브 Raydium 작업: 노출되지 않습니다. 스팟 스왑의 왕복은 단지 수수료를 발생시킬 뿐입니다. 거래자는 손실을 입습니다.
- 통합 프로그램: 나이브한 방식으로 Raydium 풀 가격을 읽으면 노출됩니다.
방어 수단
- 스팟 가격이 아닌 TWAP 사용 (
security/oracle-and-token-risks참조). - CLMM ObservationState 지속된 자본 약정 없이 조작할 수 없는 단기 TWAP을 제공합니다.
- 다중 오라클 컨센서스: 프로그램이 Raydium, Pyth, Jupiter를 읽고 1% 이내에서 동의할 때만 작동하면, 단일 소스의 플래시 론 조작으로는 충분하지 않습니다.
Raydium의 입장
CLMM은 ObservationState TWAP 지원을 제공합니다. 스팟 가격을 사용하고 TWAP을 무시하는 통합자는 자신의 책임입니다. Raydium의 프론트엔드는 USD 표시를 위해 여러 가격 소스를 사용합니다.3. 기증 / 인플레이션 공격
공격
새로운 풀의 첫 번째 LP가 극소량을 입금하고(예: 6진법 민트 각각 1개 토큰 → 1개 LP 발급), 공격자가 1,000,000개의 토큰을 SPL 토큰 전송을 통해 풀 금고에 직접 “기증”합니다. 이제 1개 LP 유닛은 각 민트의 500,000을 나타냅니다. 그 이후 그보다 적게 입금하는 LP는 0 LP 유닛으로 반올림되고 입금을 잃습니다.노출도
- CPMM / AMM v4: 새로 생성된 저유동성 풀에서 잠재적으로 노출됩니다.
- CLMM: 노출되지 않습니다 (공유 LP 민트가 없음. 각 포지션은 명시적 유동성 값을 가진 자체 NFT입니다).
방어 수단
CPMM의initialize 명령은 최소 LP 양을 풀에 잠금 처리합니다 (Uniswap V2의 MINIMUM_LIQUIDITY 패턴에서 영감을 받음). 이는 첫 번째 LP가 sqrt(x × y) - MINIMUM_LIQUIDITY를 받는 것을 의미하며, MINIMUM_LIQUIDITY (1000 유닛)는 null로 소각됩니다. 기증 공격은 공격자가 초기 입금보다 훨씬 많이 기증해야 하므로 경제적으로 불가능해집니다.
또한 Raydium의 SDK는 초기 입금이 작을 때 큰 경고를 표시하고 사용자에게 합리적인 양으로 안내합니다.
Raydium의 입장
MINIMUM_LIQUIDITY 잠금 처리는 CPMM에서 제공됩니다. AMM v4는 유사한 메커니즘을 가지고 있습니다. 풀을 만드는 사용자는 어쨌든 각 민트의 최소 10,000+ 유닛으로 시드해야 기증 공격을 경제적으로 불가능하게 만듭니다.
4. Token-2022 transfer-hook 남용
공격
민트의 transfer hook은 업그레이드 가능합니다. 공격자는 민트 출시 시 무해한 훅을 배포하고, Raydium에 나열되고, 사용자로부터 LP를 축적합니다. 나중에 훅을 업그레이드하여 모든 전송을 차단합니다 (실질적으로 소프트 러그 — 사용자는 출금할 수 없음). 공격자는 풀을 한 방향으로만 거래 가능하게 만들고, LP를 저렴하게 매입한 후, 훅을 잠금 해제하고, 승리합니다.노출도
transfer-hook 민트를 포함하는 풀.방어 수단
- 프로그램 수준: Raydium 프로그램은 스왑 중에 훅을 호출합니다. 훅이 차단하면 스왑이 되돌립니다. 이것이 공격을 기계적으로 방지하지는 않습니다.
- UI 수준: Raydium은 transfer-hook 민트가 있는 풀을 표시합니다.
- 통합자 수준: 집계자는 기본적으로 transfer-hook 민트를 건너뛰고 검증된 훅만 허용 목록에 추가해야 합니다.
Raydium의 입장
Raydium은 transfer-hook 풀을 금지하지 않습니다 (정당한 훅이 존재함), 하지만 명확하게 태그합니다.tags.includes("TRANSFER_HOOK")을 필터링하는 집계자는 원하면 제외할 수 있습니다.
5. 조합 / CPI 익스플로잇
공격
프로그램이 CPI를 통해 Raydium을 조합하고 버그를 도입합니다: 예를 들어, 잘못된observation_state, CLMM 스왑에 대한 잘못된 틱 배열, 또는 계정 이중 지출을 전달합니다. 공격자는 버그 있는 조합을 식별하고 악용합니다.
노출도
- 버그 있는 통합자 — 보통 버그의 원인입니다.
- Raydium — Raydium 프로그램 자체에서 의도하지 않은 동작을 트리거하는 경우에만 해당됩니다.
역사적 사례
Raydium의 프로그램은 CPI를 통해 악용된 사례가 없습니다 — Raydium의 계정 검증자는 잘못된 형태의 계정을 포착하고 되돌립니다. 광범위한 생태계의 익스플로잇은 AMM을 조합했지만 AMM에서 비롯되지 않은 사용자 정의 프로그램 버그를 통해 발생했습니다.방어 수단
- 호출 프로그램은 가능하면 수동 구축 명령이 아닌 Anchor CPI 도우미를 사용해야 합니다 — 타입 안전성이 대부분의 오용을 포착합니다.
- 메인넷 포크 상태에 대한 통합 테스트는 조합 케이스를 다룹니다.
6. 관리자 / 키 손상
공격
관리자 키 (업그레이드 권한, AmmConfig 관리자, 프로토콜 수수료 청구)가 손상되었습니다. 공격자는 풀을 드레인하는 악성 업그레이드를 배포하거나, AmmConfigs를 수정하여 수수료를 공격자 지갑으로 라우팅하거나, 프로토콜 수수료를 드레인합니다.노출도
security/admin-and-multisig에서 문서화된 모든 역할.
방어 수단
- 3/4 다중 서명 업그레이드 권한에서 4명의 독립적인 서명자를 손상시키도록 요구합니다.
- 24시간 타임락 업그레이드는 악성 업그레이드가 활성화되기 전에 사용자가 풀 해제할 시간을 제공합니다.
- 운영 모니터링 — Squads의 공개 큐를 통해 다중 서명 활동에 대한 경고.
역사적 사건
AMM v4의 풀 권한 키는 2022년 12월에 손상되었습니다 (다중 서명 이전). 수정: 모든 권한을 Squads 다중 서명으로 이동. 수정 후 사건 없음.7. CLMM 틱 수학에 대한 경제적 공격
공격
정교한 공격자는 CLMM 틱 수학의 반올림 또는 수수료 회계 엣지 케이스를 악용합니다. 다른 CLMM 구현에서 발견된 예 (Raydium 아님):- 사용자에 반하는 반올림을 하는 수수료 성장 회계, 먼지 축적.
- 잘못된 fee_growth 델타를 크레딧/차변하는 틱 교차.
sqrtPrice * liquidity곱에서 정수 오버플로우.
노출도
복잡한 맞춤형 수학. 감사 및 퍼징이 주요 방어입니다.Raydium의 입장
CLMM은 두 개의 독립적인 감사(OtterSec + MadShield) 및 지속적인 속성 기반 퍼징을 거쳤습니다. 현재까지 프로덕션 영향 버그가 발견되지 않았습니다.sqrt_price_x64 Q64.64 산술은 경계 틱을 다루는 단위 테스트와 함께 포화 128비트 수학을 사용합니다.
8. 포지션 NFT 혼동
공격
사용자가 CLMM 포지션 NFT를 공격자에게 전송하는 트랜잭션에 서명하도록 속습니다. 공격자는 이제 포지션의 유동성을 소유합니다.노출도
포지션 NFT 홀더.방어 수단
- 지갑 UI는 Raydium 포지션 NFT를 인식하고 구별되게 표시해야 합니다 (“전송”할 일반 NFT가 아님).
- 사용자는 NFT를 전송하는 트랜잭션에 서명할 때 주의해야 합니다.
Raydium의 입장
포지션 NFT는 Metaplex의 메타데이터 표준을 구현합니다. CLMM 포지션을 이해하는 지갑 앱은 거래 가능한 NFT가 아닌 유동성 포지션으로 표시합니다. 대부분의 주요 Solana 지갑은 2026년 기준으로 이들을 특별하게 표시합니다.9. 팜 보상 스트림 조작
공격
팜 작성자가 보상 금고에 자금을 조성하고, 스테이커를 끌어들인 다음,restartRewards를 호출하여 미결제 보상 계산을 복잡하게 만들고, 수확 가치를 훔칩니다.
노출도
악의적인 작성자가 있는 팜. Farm v6는 작성자 권한을 엄격하게 제한합니다. 이 공격은 작동하지 않습니다.방어 수단
Farm v6의 관리자 명령어 (setRewards, restartRewards, addReward)는 pro-rata 자격을 유지합니다 — reward_per_share는 변경 시점에 조정되므로, 사전 변경 적립금이 소급하여 손상되지 않습니다.
Raydium의 입장
OtterSec의 팜 감사는 특히 restart-rewards 시나리오를 테스트했습니다. 익스플로잇이 발견되지 않았습니다.10. 시뮬레이션-실행 발산
공격
공격자는 시뮬레이션에서 성공하지만 실행 시 되돌려지는 트랜잭션을 구성합니다 (또는 그 반대). 시뮬레이션에 의존하는 지갑을 괴롭히는 데 사용됩니다.노출도
시뮬레이션을 기반으로 “받을 금액 X”를 표시하는 지갑.방어 수단
- 실제 제출과 동일한 블로케시로
simulateTransaction을 사용합니다. - 예상 출력을 정확한 것이 아닌 ”≈” (약)로 표시합니다.
- 제출 직전에 재시뮬레이션합니다.
Raydium의 입장
CLMM 시뮬레이션은 현재 풀 상태가 주어진 결정론적입니다. 발산은 시뮬레이션과 실행 사이에 상태가 변경될 때만 발생합니다 (정상 케이스, 슬리피지 바운드를 통해 처리됨).요약 표
| 벡터 | Raydium 특화 | 방어 위치 | 사용자를 위한 잔존 위험 |
|---|---|---|---|
| 샌드위칭 / MEV | 예 | 제출 계층 (Jito, 슬리피지) | Jito를 사용하면 낮음 |
| 가격 조작 | 조합만 | TWAP 사용 | TWAP이 소비되면 낮음 |
| 기증 공격 | CPMM | MINIMUM_LIQUIDITY | 낮음 |
| Transfer-hook 남용 | Token-2022 풀 | UI 플래그 | 검증되지 않은 훅의 경우 중간 |
| CPI 익스플로잇 | 통합자 버그 | Raydium의 검증자 되돌림 | 낮음 (버그는 통합자에 유지) |
| 관리자 손상 | 모든 프로그램 | 다중 서명 + 타임락 | 낮음 (대응할 시간 24h) |
| CLMM 틱 수학 | CLMM | 감사 + 퍼징 | 낮음 |
| 포지션 NFT 혼동 | CLMM | 지갑 UX | 현대 지갑으로 낮음 |
| 팜 조작 | Farm v6 | 제한된 작성자 권한 | 낮음 |
| 시뮬레이션 발산 | 모두 | 지갑 UX | 낮음 |
사용자가 할 수 있는 것
- 기본적으로 슬리피지를 엄격하게 유지합니다. 필요할 때만 높입니다.
- Jito 지원 지갑 / 스왑 흐름을 사용합니다.
- LP 전에 민트 확장을 확인합니다.
- Squads 다중 서명에서 보류 중인 업그레이드를 모니터링합니다.
- 풀에 다양하게 분산하세요. 모든 LP를 하나의 신규 출시 풀에 집중하지 마세요.
통합자가 할 수 있는 것
- 파생상품 가격책정을 위해 ObservationState TWAP을 사용합니다.
- CPI를 통해 조합할 때 계정 제약 조건을 검증합니다.
tags필드로 풀을 필터링합니다 (scam,honeypot, 검증되지 않은 transfer-hook 건너뛰기).- 합리적인 슬리피지 바운드를 설정합니다. 사용자 입력에서 0 슬리피지를 받아들이지 마세요.
- 주의해서
simulateTransaction을 사용합니다 — 추정값임을 문서화합니다.
포인터
security/oracle-and-token-risks— Token-2022 위험 상세.security/admin-and-multisig— 권한 구조.security/disclosure— 버그 바운티 프로그램.integration-guides/routing-and-mev— MEV 완화.
- Rekt News — 이 목록을 알리는 DeFi 사후 분석.
security/audits에 링크된 감사 보고서.


