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 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
모든 Raydium 프로그램에는 최소 하나의 권한 있는 역할이 있습니다 — 프로그램을 업그레이드하거나, 새 설정을 생성하거나, 프로토콜 수수료를 인출할 수 있는 키입니다. 이러한 역할의 권한 범위를 최소화하고 (지연이 있는 멀티시그 뒤에 두는 방식으로) 어드민이 침해되었을 때의 주요 방어 수단으로 활용합니다. 이 페이지에서는 각 역할과 실제 보안 방식을 정리합니다.
프로그램별 역할
AMM v4
| 역할 | 권한 주소 | 할 수 있는 것 |
|---|
| 프로그램 업그레이드 | Squads 멀티시그 (3/4) | 새 프로그램 바이트코드 배포 |
| 풀 어드민 | Treasury 멀티시그 (3/5) | 풀 상태 토글, 기존 풀 수수료 업데이트 |
CPMM
| 역할 | 권한 주소 | 할 수 있는 것 |
|---|
| 프로그램 업그레이드 | Squads 멀티시그 (3/4) | 새 프로그램 바이트코드 배포 |
| AmmConfig 어드민 | Treasury 멀티시그 (3/5) | 새 AmmConfig(수수료 티어) 생성 및 기존 항목 토글 |
| 풀 생성 수수료 수취인 | Treasury 멀티시그 (3/5) | 풀 생성 시 일회성 수수료 수취 |
CLMM
| 역할 | 권한 주소 | 할 수 있는 것 |
|---|
| 프로그램 업그레이드 | Squads 멀티시그 (3/4) | 새 프로그램 바이트코드 배포 |
| AmmConfig 어드민 | Treasury 멀티시그 (3/5) | AmmConfig 생성/수정 |
| DynamicFeeConfig 어드민 | Treasury 멀티시그 (3/5) | CreateDynamicFeeConfig / UpdateDynamicFeeConfig — CreateCustomizablePool 호출이 선택할 수 있는 동적 수수료 티어 설정 |
limit_order_admin (프로그램 전역) | 오프체인 운영용 핫 월렛 (멀티시그 아님) | 주문 소유자 대신 지정가 주문을 정산하고 닫습니다. 키퍼 키는 단일 프로그램 전역 상수입니다 (메인넷과 데브넷에서 값이 다름). SettleLimitOrder / CloseLimitOrder 시 signer == limit_order.owner || signer == limit_order_admin::ID 조건으로 검증됩니다. 출력은 항상 원래 소유자의 ATA로 전달되며, 키퍼는 자금을 다른 곳으로 보내거나 주문을 수정하거나 새 주문을 열 수 없습니다. |
limit_order_admin은 의도적으로 범위를 좁힌 운영 역할입니다. 오프체인 키퍼가 주문 소유자가 온라인 상태가 아니어도 체결된 주문을 처리할 수 있도록 설계되었습니다. 키퍼 키는 핫 상태 (키퍼 VM에 상주)이며 위의 멀티시그와는 독립적으로 교체됩니다. 키퍼 권한이 실제로 할 수 있는 것은 다음으로 엄격히 제한됩니다:
SettleLimitOrder — 주문의 체결된 출력을 주문의 지정가 기준으로 소유자의 ATA로 전달합니다.
CloseLimitOrder — 완전히 정산된 주문 계정을 닫아 렌트를 회수합니다 (렌트는 주문 소유자에게 귀속).
OpenLimitOrder, IncreaseLimitOrder, DecreaseLimitOrder 호출, 풀 필드 변경, 다른 명령어 서명 등은 불가능합니다 — 이러한 제한은 명령어의 Accounts 구조체 내 시드 및 has_one 제약 조건으로 온체인에서 강제됩니다. 키퍼가 침해되더라도 최악의 경우는 사용 불가 (소유자가 직접 정산할 때까지 주문이 대기)이거나, 합법적으로 체결 가능한 주문을 순서와 다르게 정산/종료하는 정도입니다. 소유자가 이미 허가한 곳 이외로 사용자 자금을 이동시키는 것은 불가능합니다.
Farm v6
| 역할 | 권한 주소 | 할 수 있는 것 |
|---|
| 프로그램 업그레이드 | Squads 멀티시그 (3/4) | 새 프로그램 바이트코드 배포 |
| 팜 생성자 (팜별) | 팜 생성자 지갑 | 보상 볼트 자금 충전, 스케줄 연장, 미사용 보상 회수 |
개별 팜에는 프로토콜 어드민이 없습니다 — 각 팜의 생성자는 자신의 팜만 관리하며, 생성자의 권한 범위는 제한되어 있습니다 (사용자 스테이킹 자산 탈취 불가, 스테이킹 민트 변경 불가).
LaunchLab
| 역할 | 권한 주소 | 할 수 있는 것 |
|---|
| 프로그램 업그레이드 | Squads 멀티시그 (3/4) | 새 프로그램 바이트코드 배포 |
| 런치 생성자 (런치별) | 런치 생성자 지갑 | 졸업 후 생성자 수수료 수령; 미졸업 커브 잔액 인출 |
런치에는 커브를 변경하거나 모금된 자금을 탈취할 수 있는 프로토콜 어드민이 없습니다.
프로그램 업그레이드 권한
Raydium의 프로그램은 표준 Solana BPF Loader v3 업그레이드 메커니즘을 사용합니다. 모든 프로그램의 업그레이드 권한은 3/4 Squads 멀티시그가 보유합니다.
3/4 구성을 선택한 이유: 단일 침해로는 부족할 만큼 서명자 수가 충분하면서, 합법적인 업그레이드를 조율하기에 너무 많지 않은 수입니다. 네 명의 권한자는 각각 독립적인 에어갭 콜드 디바이스 서명자로, 핵심 팀원이 보유합니다. 순차 서명 방식으로 동일 트랜잭션에 대한 병렬 승인을 방지하며, 트랜잭션에는 고정 만료 기간이 적용됩니다. 멀티시그 운영은 Solana STRIDE Program (Asymmetric Research) 과의 협력 하에 주기적으로 검토됩니다.
업그레이드 권한 제거
Raydium은 어떤 프로그램의 업그레이드 권한도 null로 설정하지 않았습니다. 프로토콜은 버그 패치, Token-2022 같은 확장 추가, 통합 드리프트 수정을 위해 프로그램이 업그레이드 가능해야 한다는 원칙 하에 운영됩니다. 트레이드오프: 사용자는 3/4 멀티시그가 충분히 검토된 업그레이드만 배포할 것이라고 신뢰해야 합니다.
불변성을 선호하는 사용자를 위해, 구 버전인 AMM v4 프로그램은 마지막 감사 이후 안정적으로 유지되고 있습니다. 18개월 동안 업그레이드가 없었으며, 권한은 여전히 존재하지만 해당 코드 경로는 사실상 동결 상태입니다.
AmmConfig 권한
새 AmmConfig 생성은 권한이 필요한 작업입니다 — 3/5 treasury 멀티시그가 새 수수료 티어와 틱 간격을 승인합니다. 기존 풀은 PDA로 AmmConfig를 참조하며, 풀의 수수료 티어는 AmmConfig에 정의된 값을 따릅니다.
어드민이 기존 AmmConfig를 변경할 수 있나요? 기술적으로는 가능합니다. updateAmmConfig는 어드민이 호출할 수 있습니다. 하지만 실제로는 해당 설정을 사용하는 모든 풀의 경제 구조가 조용히 변경되기 때문에 배포된 AmmConfig 수정은 피하고 있습니다. 변경이 필요한 경우 새 AmmConfig를 생성하고 마이그레이션하는 것이 프로토콜 정책입니다.
어드민이 설정을 통해 프로토콜 수수료를 탈취할 수 있나요? 아닙니다 — AmmConfig에는 수수료 매개변수가 포함되지만 프로토콜 수수료 수취인은 포함되지 않습니다. 수취인 주소는 풀별로 별도의 불변 주소입니다.
프로토콜 수수료 수령
스왑 수수료의 일부 (설정에 따라 25 bps 스왑 수수료 중 일반적으로 3–12 bps)가 프로토콜 수수료 볼트에 누적됩니다. 멀티시그는 이 누적된 수수료를 인출할 수 있습니다. 사용자의 LP 잔액에는 영향을 주지 않습니다 — LP 자금이 아닌 프로토콜에 사전 할당된 몫입니다.
팜 생성자 권한
Farm v6에서 생성자에게 부여된 권한:
- 보상 볼트 자금 충전 (토큰 추가).
- 스케줄 연장 (종료 시간 연장).
- 종료 시간 이후
withdrawReward 호출로 볼트 미사용 잔액 회수.
팜 생성자가 할 수 없는 것:
- 사용자 스테이킹 LP 인출.
- 스테이킹 민트 변경.
- 이미 지난 보상 비율 소급 변경 (
setRewards를 통한 이후 시점 변경만 가능).
- 사용자 수확 동결.
악의적인 팜 생성자가 할 수 있는 최악의 경우는 볼트 자금을 충분히 채우지 않아 팜이 고갈되는 것입니다. 사용자의 원금 스테이크는 항상 안전합니다.
Squads 멀티시그 구성
Raydium은 서로 다른 위험 영역을 위해 두 개의 별도 Squads 멀티시그를 운영합니다. 둘 다 Squads Protocol UI에서 온체인으로 확인할 수 있습니다.
| 멀티시그 | 임계값 | 타임락 | 범위 |
|---|
| 프로그램 업그레이드 | 3/4 | 24시간 | AMM v4, CPMM, CLMM, LaunchLab, Lock, AMM Routing, Stable Swap 및 레거시 Farm/Staking 프로그램의 새 바이트코드 배포 단독 권한. app.squads.so/.../FytDr…ceZQK에서 확인. |
| Treasury | 3/5 | 없음 | Treasury 자산, 프로토콜 수익, 운영 비용. 현재 Raydium의 제한된 프로그램 어드민 권한 (AmmConfig 생성, 프로토콜 수수료 수령, 풀 파라미터 설정)도 보유. v3.squads.so/dashboard/RVha…dHdtYz09에서 확인. |
업그레이드 멀티시그의 운영 특성:
- 모든 트랜잭션에 24시간 타임락 적용. 오늘 승인된 업그레이드는 24시간 이후에 실행되므로, 사용자가 대응할 시간이 주어집니다.
- 에어갭 콜드 디바이스 서명. 콜드 디바이스는 네트워크 카드가 물리적으로 제거되어 있으며, 하드웨어 월렛과만 연결되고 별도의 핫 디바이스로부터 QR 코드로 트랜잭션 데이터를 읽습니다.
- 순차 서명. 한 콜드 디바이스가 트랜잭션을 생성하고 서명한 후에야 다음 콜드 디바이스가 서명 프로세스를 시작할 수 있어 동일 트랜잭션에 대한 충돌 또는 병렬 서명을 방지합니다.
- 트랜잭션 만료. 모든 트랜잭션에 고정 만료 기간이 적용되어 오래된 트랜잭션은 자동으로 무효화됩니다.
- TOTP + 물리적 키 강제 적용 — 트랜잭션 개시 및 온체인 브로드캐스트에 사용되는 핫 디바이스에 적용.
- 공개 트랜잭션 큐. Squads UI에서 누구나 대기 중인 업그레이드를 모니터링할 수 있습니다.
Treasury 멀티시그에는 타임락이 없습니다 — 범위가 더 좁고 일상적인 운영 (AmmConfig 생성, 수수료 수령 등)은 당일 처리가 필요하기 때문입니다. Treasury 멀티시그는 위의 프로그램별 표에 나열된 제한적 프로그램 어드민 권한도 보유하며, 이는 임시 배치이고 프로젝트의 보안 파트너들과 주기적으로 검토됩니다.
온체인에서 권한 확인
프로그램의 현재 업그레이드 권한을 확인하는 가장 간단한 방법:
solana program show <PROGRAM_ID>
출력 예시:
Program Id: CPMMoo8L3F4NbTegBCKVNunggL7H1Zpdmwpwh8KMoZ0F
Owner: BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: <ProgramDataPDA>
Authority: <EXPECTED_MULTISIG_ADDRESS>
Last Deployed In Slot: <slot>
Data Length: <n> bytes
Authority가 예상되는 Squads 멀티시그 주소가 아니라면 문제가 있는 것입니다. Raydium은 예상 권한 주소를 reference/program-addresses에 게시하고 있습니다.
AmmConfig / 풀 어드민 역할의 경우, 온체인 계정을 가져와 디코딩하세요:
const config = await raydium.cpmm.getAmmConfig(configPda);
console.log("AmmConfig admin:", config.admin.toBase58());
// Expected: 3/5 treasury multisig.
권한 변경 이력
| 날짜 | 프로그램 | 변경 내용 |
|---|
| 2022-12 | AMM v4 | 인시던트 이후 업그레이드 권한을 싱글 시그에서 3/4 멀티시그로 마이그레이션 |
| 2023-02 | 전체 프로그램 | 모든 운영 역할을 3/5 treasury 멀티시그로 통합 |
| 2023-11 | CLMM | 노출 범위 축소를 위해 보상 전용 운영에 두 번째 멀티시그 추가 |
| 2024-05 | CPMM | 최초 배포부터 멀티시그 권한으로 시작 |
사용자 측 고려사항
사용자/LP/통합 개발자로서 무엇을 해야 할까요?
- 대규모 할당 전 업그레이드 권한을 확인하세요. 문서에 명시된 멀티시그와 일치하는지 확인합니다.
- 멀티시그 활동을 모니터링하세요. Squads UI에서 대기 중인 트랜잭션을 확인할 수 있으며, 예정된 업그레이드에 동의하지 않을 경우 24시간 내 포지션을 정리할 수 있습니다.
- 타임락을 고려한 청산 전략을 수립하세요. 자동 복리 운용 중이라면, 변경 예정인 명령어가 포함되지 않도록 청산 경로를 확인하세요.
- 프로그램 불변성을 가정하지 마세요. Raydium의 모든 프로그램은 업그레이드될 수 있으므로 이를 고려해 계획을 세우세요.
통합 개발자가 주의해야 할 함정
1. 권한 주소 캐싱
업그레이드 권한이나 어드민 멀티시그 주소를 코드에 하드코딩한 경우, 이후 교체되면 검증에 실패합니다. 런타임에 reference/program-addresses에서 가져오거나 주기적으로 갱신하세요.
2. AmmConfig가 고정불변이라고 가정
새 AmmConfig는 언제든지 생성될 수 있습니다. 애그리게이터/라우터는 전체 설정 목록을 주기적으로 (시간 단위도 충분) 다시 가져와야 합니다.
3. 팜 생성자의 악의적 행동 벡터
평판이 낮은 팜에 예치할 경우, 생성자는 팜을 일찍 종료하고 보상 볼트를 회수할 수 있습니다 (아직 스테이킹한 사용자가 없다고 가정). 사용자가 스테이킹을 시작하면 비례 권리가 프로그램에 의해 강제되며, 회수는 합리적 종료 이후 남은 잔액만 가능합니다.
관련 링크
출처: