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의 최신 프로그램(CPMM, CLMM, Farm v6, LaunchLab)은 Anchor로 작성되었습니다. Anchor는 솔라나의 원시 프로그램 모델을 기반으로 계정 검증, 에러 처리, IDL(인터페이스 설명) 기능을 제공하는 Rust 프레임워크입니다. AMM v4 및 이전 버전의 farm은 Anchor 이전에 만들어졌습니다. 두 가지 패러다임을 모두 이해하면 코드를 읽고, IDL에서 클라이언트를 생성하며, 예상치 못한 에러를 디버그할 수 있습니다.
프로그램 배포 모델
모든 솔라나 프로그램은Pubkey에 존재합니다. 프로그램의 바이트코드는 BPF Upgradable Loader(BPFLoaderUpgradeab1e11111111111111111111111)가 소유한 executable 계정에 저장됩니다.
프로그램 배포는 세 개의 계정으로 구성됩니다:
- Program 계정: 프로그램의 ID에 있는 작은 메타데이터 계정입니다. 소유자: BPF Upgradable Loader.
- ProgramData 계정: 실제 바이트코드를 보유합니다.
[program_id, "programdata"]로 도출됩니다. - Buffer 계정 (임시): 업그레이드 중에 새로운 바이트코드를 보유합니다. 업그레이드 후 폐기됩니다.
security/admin-and-multisig를 참조하세요.
배포된 프로그램 검증
온체인에 있는 것이 감사 승인된 소스와 일치하는지 확인하려면:Anchor: 솔라나 위의 프레임워크
원시 솔라나 프로그램은 다음 시그니처를 가진 Rust 함수입니다:- 각 명령어와 각 계정 타입에 대해 결정론적 8바이트 discriminator를 자동 생성합니다.
- 계정 제약 조건(소유자, 시드, writable, signer, mint-matches, token-program-matches)을 코드 실행 전에 검증합니다.
- 클라이언트가 프로그램을 호출할 때 사용하는 인터페이스 설명 파일인 IDL을 생성합니다.
- Rust, TypeScript, Python 클라이언트 라이브러리와 함께 제공됩니다.
8바이트 discriminator
모든 Anchor 계정과 모든 Anchor 명령어는 8바이트 discriminator로 시작합니다. 이는 고정 문자열의 SHA-256 첫 8바이트입니다:getProgramAccounts 같은 도구가 타입의 모든 계정을 열거할 때 중요합니다.
에러
Anchor 프로그램은#[error_code]를 통해 에러를 정의합니다:
reference/error-codes에 있습니다.
IDL
Anchor IDL(Interface Description Language) 파일은 프로그램의 JSON 설명입니다. 명령어, 계정, 타입, 에러, 이벤트를 포함합니다. 이더리움의 ABI와 동등합니다. Raydium은 모든 Anchor 프로그램의 IDL을 공개합니다. 온체인에서 실시간으로 가져오기:src/raydium/*/idl/*.json.
IDL 구조
IDL에서 클라이언트 생성
Anchor의anchor CLI는 TypeScript 및 Rust 타입을 생성합니다:
IDL이 도움이 되는 경우
Raydium SDK를 거치지 않는 커스텀 통합을 구축하려면:- IDL을 가져옵니다(온체인 실시간 또는 SDK 소스).
- 원하는 명령어를 찾습니다(예:
swap_base_input). - 명령어 데이터를 구성합니다: 8바이트 discriminator + 인코딩된 인자.
- IDL이 지정하는 순서대로 계정을 전달합니다.
sdk-api/anchor-idl을 참조하세요.
Anchor 이전 프로그램: AMM v4 및 Farm v3/v5
이 프로그램들은 Anchor 이전에 만들어졌습니다. 다음을 사용합니다:- 수동 명령어 디스패치:
instruction_data의u8태그와match문. - 수동 계정 검증:
if accounts[0].owner != &expected_program { ... }. - Borsh 직렬화 명령어 인자: discriminator 없이,
instruction_data[1..]만 사용. #[repr(C, packed)]레이아웃: C 구조체 바이너리 레이아웃.
프로그램 업그레이드 메커니즘
ProgramData의upgrade_authority만이 업그레이드할 수 있습니다. 절차:
- 새로운 바이트코드를 컴파일합니다.
- 버퍼 계정에 작성합니다(
solana program write-buffer). - 업그레이드 명령어를 제출합니다:
BpfLoaderUpgradeable::Upgrade { buffer, program, authority }. - 런타임이 프로그램의 바이트코드를 버퍼의 내용으로 원자적으로 교체합니다.
security/admin-and-multisig를 참조하세요.
프로그램을 불변으로 만들기
업그레이드 권한을None으로 설정할 수 있으며, 이 경우 프로그램은 영구적으로 불변이 됩니다. Raydium은 어떤 제품에 대해서도 이를 수행하지 않았습니다. 팀은 보안 수정 사항을 푸시할 수 있는 능력을 유지합니다. 절충: 사용자는 멀티시그 + 타임락 프로세스를 신뢰해야 합니다.
프로그램과 렌트
프로그램 배포는 렌트 면제 lamport를 소비합니다:- 50 KB 프로그램: ~0.35 SOL의 렌트.
- 200 KB 프로그램: ~1.4 SOL의 렌트.
solana program close 통해)는 lamport를 반환합니다. Raydium 프로그램은 활성 상태이며 폐쇄될 예정이 아닙니다.
Anchor 프로그램 디버깅
로그 출력
Anchor의msg! 매크로는 트랜잭션의 로그에 씁니다. 트랜잭션을 시뮬레이트하여 로그를 보기:
- 프로그램 호출(
Program CPMMoo8... invoke [1]). - 프로그램 코드의
msg!호출. - 컴퓨트 단위 소비(
consumed 137842 of 400000 compute units). - 프로그램 성공 또는 에러.
에러 코드
Anchor 프로그램이 던지면, 로그는 다음을 보여줍니다:SlippageExceeded). IDL의 errors 배열로 교차 참조하세요.
Raydium의 전체 에러 테이블은 reference/error-codes를 참조하세요.
계정 레이아웃 불일치
잘못된 슬롯에 잘못된 계정을 전달하면, Anchor의 계정 검증 매크로는 다음과 같은 에러를 반환합니다:ErrorCode enum 참조). 6000 이상은 프로그램의 커스텀 코드입니다.
포인터
solana-fundamentals/account-model— 프로그램이 계정을 소유하는 방식.solana-fundamentals/pdas-and-cpis— Anchor가 선언하는 PDA.sdk-api/anchor-idl— Raydium의 IDL 가져오기 및 사용.reference/program-addresses— 프로그램 ID.reference/error-codes— 에러 코드 레퍼런스.security/admin-and-multisig— 업그레이드 권한 제어.
- Anchor book.
- Solana program deployment.
- Raydium IDL (SDK
src/raydium/*/idl/*.json에 공개됨).


