메인 콘텐츠로 건너뛰기

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 풀의 베이스 및 쿼트 자산 포함 — 은 두 프로그램 중 하나로 발행된 토큰입니다: 레거시 SPL 토큰 프로그램 또는 그 후속 프로그램인 Token-2022. 이들은 서로 다른 주소에 있는 별도의 프로그램이며, 계정 레이아웃과 확장 의미가 다릅니다. Raydium은 둘 다 지원하지만, 모든 곳에서 지원하지는 않습니다: CPMM, CLMM, 및 Farm v6은 Token-2022 민트를 수락하지만 AMM v4는 그렇지 않습니다. 풀과 통합하기 전에 이 구분을 이해하는 것이 필수적입니다.

두 프로그램

SPL 토큰Token-2022
프로그램 IDTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DATokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
출시20202022
계정 크기 (토큰 계정)165 B165 B + 확장 (가변)
확장 기능없음있음 — 17개 이상의 공식 확장
레거시 호환성완전민트별 선택 옵션
둘 다 솔라나 랩스 팀(현재 Anza)에서 유지 관리하며 solana-program-library 저장소에 있습니다.

왜 두 개의 프로그램이 있을까요?

SPL 토큰은 전방 호환성을 위해 동결되었습니다 — 바이트코드는 사실상 불변이며, 전체 생태계를 위한 깨끗한 기반을 제공합니다. 사용 사례가 증가하면서 (스테이블코인이 송금 수수료를 원하고, 기관용 민트가 섬세한 동결 권한이 필요하며, NFT가 메타데이터 포인터를 필요로 함), 솔라나 팀은 SPL 토큰을 업그레이드하기보다 Token-2022를 별도의 확장 가능한 프로그램으로 도입했습니다. 이는 기존 통합을 보존하고 각 민트가 필요한 확장 기능만 선택할 수 있게 합니다. Token-2022는 기능상 완전 상위 집합이지만, 주소 공간에서는 아닙니다: 두 프로그램이 공존하며, 특정 주소의 민트는 정확히 그 중 하나에만 속합니다.

계정 구조

민트 계정

토큰의 정체를 정의합니다. SPL 토큰 민트 (82바이트):
u32   mint_authority_option
Pubkey mint_authority
u64   supply
u8    decimals
bool  is_initialized
u32   freeze_authority_option
Pubkey freeze_authority
Token-2022 민트: 동일한 기본 레이아웃에 기본 이후 0개 이상의 확장 TLV (type-length-value) 레코드가 추가됩니다.

토큰 계정

특정 민트의 특정 소유자의 잔액을 보유합니다. SPL 토큰 계정 (165바이트):
Pubkey mint
Pubkey owner
u64    amount
u32    delegate_option
Pubkey delegate
u8     state         // initialized, frozen
u32    is_native_option
u64    is_native
u64    delegated_amount
u32    close_authority_option
Pubkey close_authority
Token-2022 계정: 동일한 기본에 활성 확장 기능이 있는 경우 확장 TLV 레코드.

Token-2022 확장 기능

확장 기능은 민트 또는 계정에 첨부할 수 있는 모듈식 기능입니다. 각 확장 기능은 별도의 TLV 레코드입니다. Raydium의 주요 기능:

송금 수수료

민트는 모든 송금에 대해 비율 기반 수수료를 부과할 수 있습니다. 수수료는 구성된 출금 권한으로 갑니다. Raydium CPMM 및 CLMM에서 SwapV2를 통해 지원됩니다 — 프로그램이 환율을 계산할 때 수수료를 고려하므로 풀의 수학이 유지됩니다.
let extension = TransferFeeConfig {
    transfer_fee_config_authority,
    withdraw_withheld_authority,
    withheld_amount: 0,
    older_transfer_fee: ...,
    newer_transfer_fee: ...,
};

송금 훅

민트는 모든 송금 시 런타임이 호출하는 프로그램을 가리킵니다. 훅 프로그램은 송금을 거부하거나 부작용을 수행할 수 있습니다 (준수 상태 업데이트, 로깅 등). Raydium CPMM/CLMM은 SwapV2를 통해 훅을 호출합니다 — 트랜잭션에 훅 프로그램과 필요한 추가 계정이 포함됩니다.

이자 발생

온체인 잔액이 구성된 비율로 이자를 발생합니다. 실제 민트가 아닌 표시용입니다 (시간이 지남에 따라 잔액이 더 높게 표시됨); 기본 공급량은 변경되지 않습니다.

민트 종료 권한

공급량이 0에 도달하면 민트를 종료할 수 있습니다.

영구 위임자

지정된 지갑은 어떤 계정에서도 토큰을 무조건 전송하거나 소각할 수 있습니다. Raydium은 이 확장 기능이 있는 민트에 대한 풀 생성을 차단합니다 — 풀 예비금을 압류할 수 없다는 불변식과 양립하지 않습니다.

전송 불가

토큰은 발행된 계정에서 이동할 수 없습니다. Raydium은 풀 생성을 차단합니다 — 거래 불가능한 자산은 LP 풀의 베이스 또는 쿼트가 될 수 없습니다.

기본 계정 상태

이 민트에 대한 새 토큰 계정은 기본적으로 동결되어 있으며 동결 권한에 의해 해제되어야 합니다. 사용 가능하지만 드뭅니다.

기밀 송금

잔액과 송금 금액이 암호화됩니다. Raydium은 기밀 송금 민트를 지원하지 않습니다 (풀의 수학은 평문 잔액을 필요로 함).

메타데이터 포인터 + 토큰 메타데이터

Token-2022 민트용 Metaplex 메타데이터를 대체합니다. Raydium 풀 목록에 지원됩니다.

그룹 / 멤버 포인터

민트를 그룹 (예: NFT 컬렉션)에 속하는 것으로 선언합니다. 정보 제공용입니다. Raydium은 이를 표시에 사용합니다. 전체 목록은 공식 Token-2022 확장 기능 페이지를 참조하세요.

Raydium 상품별 지원 현황

상품SPL 토큰Token-2022비고
AMM v4아니오OpenBook 통합을 위해서는 SPL 토큰 필요
CPMMToken-2022 풀의 경우 SwapV2 필요
CLMMToken-2022 풀의 경우 SwapV2 필요
Farm v6스테이킹 민트 및 보상 민트 모두에 지원
LaunchLab졸업한 CPMM 풀은 Token-2022 지원을 상속합니다
Raydium 풀의 민트 적격성 — 나열되지 않은 모든 확장 기능이 허용됩니다:
  • 차단됨: 전송 불가, 영구 위임자, 기밀 송금, 기본 계정 상태 (거부된 구성에서).
  • 주의사항이 있는 허용 (LP는 위험을 수락해야 함): 송금 수수료, 송금 훅, 활성 동결 권한.
  • 완전히 허용: 이자 발생, 메타데이터 포인터, 그룹 포인터, 민트 종료 권한.
getPoolInfoFromRpc 응답에는 민트의 확장 기능 플래그가 포함됩니다 — 클라이언트는 LP하기 전에 확인해야 합니다.

토큰 계정 표준

관련 토큰 계정 (ATA)

두 프로그램 모두 관련 토큰 계정 규칙을 공유합니다: 관련 토큰 프로그램 (ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL)을 통해 [owner, programId, mint]에서 파생된 PDA입니다. 솔라나의 거의 모든 사용자 토큰 계정은 ATA입니다.
import { getAssociatedTokenAddressSync } from "@solana/spl-token";

// SPL 토큰
const ata = getAssociatedTokenAddressSync(mint, owner);

// Token-2022
const ata22 = getAssociatedTokenAddressSync(
  mint,
  owner,
  false,               // allowOwnerOffCurve
  TOKEN_2022_PROGRAM_ID,
);
ATA 프로그램은 민트를 소유한 프로그램에 따라 적절한 토큰 프로그램의 소유로 계정을 생성합니다.

ATA가 아닌 토큰 계정

지갑은 단일 민트에 대해 여러 토큰 계정을 가질 수 있습니다. ATA는 단지 규칙입니다. 풀 볼트는 예를 들어 ATA가 아닙니다 — 풀 프로그램의 PDA이며 풀의 예비금을 보유합니다.

민트가 어떤 프로그램에 속하는지 감지

모든 민트의 계정에는 SPL 토큰 또는 Token-2022 중 하나를 가리키는 owner 필드가 있습니다:
const mintInfo = await connection.getAccountInfo(mintPubkey);
if (mintInfo.owner.equals(TOKEN_PROGRAM_ID)) {
  console.log("SPL 토큰 민트");
} else if (mintInfo.owner.equals(TOKEN_2022_PROGRAM_ID)) {
  console.log("Token-2022 민트");
}
Raydium SDK는 이 감지를 자동으로 처리합니다 — getPoolInfoFromRpc는 토큰당 적절한 programId를 반환하므로 클라이언트는 올바른 ATA를 구성할 수 있습니다.

프로그램별 스왑 명령어

Raydium의 CPMM과 CLMM은 각각 두 개의 스왑 명령어를 가집니다:
명령어지원되는 민트
Swap / SwapBaseInput (레거시)SPL 토큰만
SwapV2 / SwapBaseInputV2SPL 토큰 및 Token-2022 모두
SwapV2는 추가 계정을 받습니다: 양쪽의 민트 계정, 각 쪽의 토큰 프로그램 (다를 수 있으므로), 그리고 송금 훅 민트의 경우 훅 프로그램과 필요한 계정. 클라이언트는 최소한 한 쪽이 Token-2022인 경우 항상 SwapV2를 사용해야 합니다. SwapV2는 SPL 전용 풀에서도 작동하지만, 레거시 Swap이 계산 비용이 더 저렴합니다. SDK는 올바른 변형을 자동으로 선택합니다.

SPL 토큰 프로젝트를 Token-2022로 마이그레이션

Token-2022는 민트 수준에서 드롭인 교체가 아닙니다 — 주소 X의 민트는 SPL 또는 Token-2022이며, 이것은 생성 시 고정됩니다. “마이그레이션”하려면 다음을 수행해야 합니다:
  1. 원하는 확장 기능을 사용하여 Token-2022에서 새 민트를 만듭니다.
  2. 기존 SPL 민트 보유자가 새 민트로 교환할 수 있도록 스왑/래핑 메커니즘을 제공합니다.
  3. 모든 LP 풀, 팜, 및 통합을 업데이트하여 새 민트를 참조합니다.
이는 무겁습니다. 대부분의 프로젝트는 특정 확장 기능 필요가 이동을 강제하지 않는 한 SPL에서 시작하면 SPL로 유지됩니다.

작업 예: 송금 수수료가 있는 Token-2022 민트 생성

import {
  Connection, Keypair, SystemProgram, Transaction, sendAndConfirmTransaction,
} from "@solana/web3.js";
import {
  TOKEN_2022_PROGRAM_ID, ExtensionType, createInitializeMintInstruction,
  getMintLen, createInitializeTransferFeeConfigInstruction,
} from "@solana/spl-token";

const connection = new Connection("https://api.mainnet-beta.solana.com");
const payer      = Keypair.generate();
const mint       = Keypair.generate();

const extensions    = [ExtensionType.TransferFeeConfig];
const mintLen       = getMintLen(extensions);
const rentLamports  = await connection.getMinimumBalanceForRentExemption(mintLen);

const tx = new Transaction().add(
  SystemProgram.createAccount({
    fromPubkey:       payer.publicKey,
    newAccountPubkey: mint.publicKey,
    space:            mintLen,
    lamports:         rentLamports,
    programId:        TOKEN_2022_PROGRAM_ID,
  }),
  createInitializeTransferFeeConfigInstruction(
    mint.publicKey,
    payer.publicKey,                  // 송금 수수료 권한
    payer.publicKey,                  // 보류 출금 권한
    50,                               // 50 bps = 0.5%
    BigInt(1_000_000),                // 송금당 최대 수수료 (최소 단위)
    TOKEN_2022_PROGRAM_ID,
  ),
  createInitializeMintInstruction(
    mint.publicKey,
    9,                                // 소수 자리
    payer.publicKey,                  // 민트 권한
    null,                             // 동결 권한
    TOKEN_2022_PROGRAM_ID,
  ),
);

await sendAndConfirmTransaction(connection, tx, [payer, mint]);
이 민트는 Raydium CPMM 풀에 LP될 수 있습니다. 스왑 실행자는 풀의 스왑 수수료 외에 0.5% 송금 수수료를 지불합니다.

보안 고려사항

Token-2022 민트에 LP하거나 스왑하기 전에:
  • freeze_authority 확인. null이 아니고 중앙화된 당사자가 보유 중인 경우, 당신의 ATA (그리고 아마도 풀 볼트)를 동결할 수 있습니다.
  • transfer_hook 확인. 훅 프로그램은 송금을 임의로 차단할 수 있습니다 — 훅의 소스를 조사하세요.
  • transfer_fee 확인. 예상되는 스왑 출력에서 수수료를 고려하세요.
  • permanent_delegatenon_transferable 확인. Raydium의 프로그램은 이들을 거부하지만, 사용자 정의 통합을 구축하는 경우 확인하세요.
전체 위험 수용 프레임워크는 security/oracle-and-token-risks를 참조하세요.

포인터

출처: