Ana içeriğe atla

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.

Bu sayfa yapay zekâ tarafından otomatik olarak çevrilmiştir. İngilizce sürüm esas alınır.İngilizce sürümü görüntüle →
Raydium keyfi Token-2022 mint’lerini kabul etmez. CPMM ve CLMM ikisi de katı izin listesi modunda çalışır: varsayılan olarak sadece küçük bir uzantı seti geçer; geri kalanı havuz oluşturmada reddedilir. Az sayıda güvenilen mint, hardcoded adresle kabul edilir; CLMM ek olarak yönetim tarafından yönetilen mint başına kayıt ve çalışma zamanında Superstate token tespitini destekler. Bu sayfa, hangi kontrollerin nerede uygulandığının tek sayfa referansıdır ve program kaynağına dosya ile satır atıfları içerir.

Program düzeyinde destek

ProgramToken-2022 base/quote mint’leri?Mod
CPMMEvet — kontrollüKatı uzantı izin listesi + 4 mint statik whitelist.
CLMMEvet — kontrollüKatı uzantı izin listesi + 6 mint statik whitelist + yönetim mint başına kayıt + Superstate tespiti.
AMM v4HayırProgram Token-2022 öncesinden; her iki mint’in klasik SPL Token olması gerekir.
Stable AMMHayırAMM v4 ile aynı kısıtlamalar.
Farm v6Evet, kısmiReward mint Token-2022 olabilir (bir farm CPMM/CLMM LP’yi sarlıyorsa aynı izin listesine tabi); kullanıcı stake LP mint’leri sarılı havuzdan devralır.
LaunchLabEvet, program tarafından yönetilenBase mint Token-2022 olabilir, ancak sadece initialize_with_token_2022 talimatı aracılığıyla; program kendisi mint’i MetadataPointer (her zaman) ve isteğe bağlı olarak TransferFeeConfig (%5 ≤ oran) ile oluşturur. Rasgele uzantıları olan önceden var olan Token-2022 mint’leri base olarak kullanılamaz.
Burn & EarnHavuz programını yansıtırCPMM / CLMM kapıyı devralır.
İzin listesi kontrolleri şu yerlerde yer alır: CPMM veya CLMM’de swap zamanında mint kontrolü yoktur — kapı sadece havuz oluştururken açılır. Havuz oluşturulduktan sonra, swap’lar mint’lerin değişmediğine güvenir, bu Token-2022 mint durumunun değişmez kısımları için doğrudur.

CPMM ve CLMM uzantı izin listesi

Statik whitelist kısayolundan sonra (aşağıda ele alınmıştır), program mint’in uzantılarını yineler ve bu beşi dışında başka bir uzantı taşıyorsa mint’i reddeder:
UzantıNeden izinli
TransferFeeConfigHavuz matematiksel olarak gelen ücreti çıkarır; Token-2022 programı giden ücreti işler. Bkz. algorithms/token-2022-transfer-fees.
MetadataPointerDekoratif — zincir üstü metaverileri işaret eder.
TokenMetadataDekoratif — satır içi metaveri.
InterestBearingConfigHavuz ana miktarı görür; UI çarpanı sadece dekoratör ve altta yatan bakiye korunur.
ScaledUiAmountFaiz taşıyan ile aynı şekil — ölçek faktörü sadece UI görüntüsüne uygulanır.
Bu listede olmayan herhangi bir şey — TransferHook, NonTransferable, ConfidentialTransferMint, PermanentDelegate, MintCloseAuthority, DefaultAccountState, GroupPointer, GroupMemberPointer, MemberPointer, Pausable, vb. — is_supported_mint ifadesinin false döndürmesine ve havuz oluşturmanın geri alınmasına neden olur. İlgili satırlar (CPMM, CLMM’de özdeş şekil):
for e in extensions {
    if e != ExtensionType::TransferFeeConfig
        && e != ExtensionType::MetadataPointer
        && e != ExtensionType::TokenMetadata
        && e != ExtensionType::InterestBearingConfig
        && e != ExtensionType::ScaledUiAmount
    {
        return Ok(false);
    }
}
Ok(true)
cp-swap/src/utils/token.rs:190–200

Bypass yolları

İzin listesine uymayan bir Token-2022 mint’i yine de üç açık bypass’dan biri aracılığıyla kabul edilebilir. Uzantı yinelemesi çalışmadan önce sırayla denenir.

1. Statik mint whitelist’i

Sabit bir MINT_WHITELIST base58 dizeleri dizisi her programda hardcoded’dir. Mint’in adresi eşleşirse, işlev hemen true döndürür ve uzantı kontrolü yapılmaz.
ProgramWhitelist’e eklenen mint’ler
CPMMHVbpJAQGNpkgBaYBZQBR1t7yFdvaYVp2vCQQfKKEN4tM, Crn4x1Y2HUKko7ox2EZMT6N2t2ZyH7eKtwkBGVnhEq1g, FrBfWJ4qE5sCzKm3k3JaAtqZcXUh4LvJygDeketsrsH4, 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
CLMMAynı dört, artı DAUcJBg4jSpVoEzASxYzdqHMUN8vuTpQyG2TvDcCHfZg, AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9
Bu adresler programa katıştırılmıştır; listeyi güncellemek 3/4 yükseltme multisig’i aracılığıyla program yükseltmesi gerekir.

2. Mint başına kayıt — sadece CLMM

CLMM ek olarak SupportMintAssociated PDA’sını [b"support_mint", mint] tohumunda danışır. Bu mint için PDA varsa, uzantı setine bakılmaksızın kabul edilir. PDA CreateSupportMintAssociated tarafından oluşturulur (admin/create_support_mint_associated.rs). Talimat iki imza sahibine kısıtlanmıştır:
  • crate::admin::ID — standart Raydium yönetim otoritesi.
  • crate::create_support_mint_associated_owner::ID — bu amaç için ayrılmış otorite: RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY (mainnet), rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5 (devnet).
Etki: CLMM ekibi, program yükseltmesi olmadan belirli bir Token-2022 mint’ini havuz oluşturmaya dahil edebilir. CPMM’nin eşdeğeri yoktur — izin listesi tamamen kaynak kodludur.

3. Superstate tespiti — sadece CLMM

CLMM, özellikle Superstate’in tokenize edilmiş varlıkları için, ScaledUiConfig uzantısı kullanırlar ve bu, CLMM programına bağlı spl-token-2022 sürümü tarafından açılamaz. Bağımlılığı yükseltmek yerine, CLMM Superstate token’larını otorite şekline göre tespit eder:
superstate_allowlist::ID == freeze_authority
    && *mint_account_info.owner == spl_token_2022::ID
    && default_account_state_freeze
    && maybe_permanent_delegate
raydium-clmm/programs/amm/src/util/token.rs:485 Bir mint dört de tutar varsa bu dalı geçer:
  • Sahibi olan programı Token-2022 programıdır.
  • Freeze otoritesi superstate_allowlist::ID eşittir. Mainnet: 2Yq4T3mPNfjtEyTxSbRjRKqLf1pwbTasuCQrWe6QpM7x. Devnet: 3TRuL3MFvzHaUfQAb6EsSAbQhWdhmYrKxEiViVkdQfXu.
  • DefaultAccountState uzantısı Frozen olarak ayarlanmıştır.
  • Kalıcı delegesi de superstate_allowlist::ID dir.
Bu kayıt değil bir buluşsaldır — Superstate gelecekte aynı otorite şekliyle yayınladığı herhangi bir mint otomatik olarak kabul edilir.

Bypass’ların feragat etmediği şeyler

Bypass’lar uzantı izin listesini atlar, ancak program yine de uygulanır:
  • Mint Token veya Token-2022 tarafından sahip olunur. Özel bir token programı yukarıda reddedilir.
  • Havuz kasaları Token-2022 havuzları (ImmutableOwner, vb.) için doğru ATA uzantıları ile oluşturulur.
  • Tüm transferler transfer_checked aracılığıyla yapılır — ücreti taşıyan mint’ler kasa içinde doğru tutarı belirler.
Whitelist’e veya PDA’ya kayıtlı bir mint, daha sonra örneğin TransferHook eklerse, swap zamanında kontrol kazanmaz; hook her transferde çalıştırılır ve swap’ları kırabilir. Bu nedenle whitelist oluşturma yüksek güven gerektiren bir işlemdir.

”Engellendi” anlamı

is_supported_mint false döndürdüğünde, havuz oluşturma ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM) ile geri alınır. Sayısal kodlar için reference/error-codes bakınız. Mevcut havuzlar bu kontrol geriye dönük olarak başarısız olamaz — kapı sadece oluşturmada açılır. Mint uzantıları Raydium’un reddettiği kategoriler için değişmezdir (transfer hook, non-transferable, gizli transfer oluşturmadan sonra eklenemez), bu nedenle statik kontrol yeterlidir.

Her dışarıda bırakılan uzantının neden dışarıda bırakıldığı

  • TransferHook — her transferde özel bir programı çağırır, keyfi CU tüketimi, keyfi başarısızlık koşulları ve çağıran programı yeniden giriş yapabilme yeteneği. Güvenli bir sandbox yoktur. Bazı DEX’ler hook izin listeleri tutar; Raydium tutmaz.
  • NonTransferableTransfer her zaman başarısız olur. Havuz intiyat sağlayamaz.
  • ConfidentialTransfer — transfer tutarları şifrelenir; eğri swap’ı fiyatlandıramaz.
  • PermanentDelegate — temsilcinin sahibi, havuz kasası da dahil olmak üzere herhangi bir token hesabını temizleyebilir. Güvenilen ihraççılar (örneğin düzenlü stablecoin’ler) için statik whitelist aracılığıyla izinlidir.
  • MintCloseAuthority — mint kapatılabilir; mevcut havuzlar kullanılamaz hale gelir. Varsayılan olarak yasaklanmıştır.
  • DefaultAccountState (Frozen) — havuz ATA’ları Frozen durumda ve her hesap başına çözülmesi gerekir. Sadece Superstate tespiti aracılığıyla izinlidir, ihraççı kaydolmada kurumsal hesapları çözer.
  • Group/Member pointer’lar — aktif olarak zararlı değildir, ancak gözden geçirilmemiştir. Yüzeyi dar tutmak için varsayılan olarak yasaklanmıştır.

Transfer ücreti muhasebesı

TransferFeeConfig taşıyan mint’ler için, her swap, depozito ve çekim nominal tutardan daha az hareket ettirir. SDK hesaplamanın her iki yarısını ortaya çıkarır:
const { amountIn, amountOut, feeAmount, token2022FeeIn, token2022FeeOut } =
  await raydium.cpmm.computeSwapAmount({ ... });
Doğru bir UI gösterir:
  • amountIn + token2022FeeIn as “gönderdikleriniz”
  • amountOut - token2022FeeOut as “aldıklarınız”
  • feeAmount havuz ücreti olarak (LP + protokol), Token-2022 transfer ücretinden ayrı
Sadece amountIn → amountOut gösteren naif bir UI maliyetleri az gösterir.

maximumFee sınırı

Token-2022 transfer ücretleri transfer başına sınırlanmıştır. %1 mint’i ve 10.000 token sınırı için 100.000.000 token transferi sadece 10.000 ücreti öder. SDK’nın computeSwapAmount sınırı uygular; doğrudan program çağıranları onu çoğaltmalıdır.

Epok geçişi

Bir mint otoritesi, bir sonraki epochte etkinleşecek bir ücret oranı değişikliği planlayabilir. Geçiş penceresi sırasında, iki config (older, newer) mint’te aynı anda var olur ve TransferChecked geçerli epoche göre seçer. CPMM SwapV2 ve CLMM SwapV2 her ikisi de full mint hesabını accounts’de geçer, bu nedenle program ekstra bir lookup olmadan doğru config’i okur. Trade API’sı veya SDK’sı aracılığıyla bir epochten fazla süre önceden alıntı yaparsanız, icra edilen ücret alıntı yapılan ücretten farklı olabilir — eski config’in maximum_fee_basis_points ile sınırlanmış.

Faiz taşıyan ve ScaledUiAmount

Havuz ana tutarı tutar; “UI tutarı” ana tutarı zaman bağımlı veya yönetim tarafından ayarlanan ölçek faktörü ile çarpılır. Swap matematiği ana tutarında çalışır:
principal_in = ui_amount_in / ui_multiplier(now)
SDK otomatik olarak dönüştürür. Doğrudan RPC okuyucuları pool.token0Vault.amount öğesini ana tutarı olarak ele almalıdır.

”Token-2022 havuzu” tanımı

Havuz ya mint’in programId == TokenzQdB... varsa Token-2022 havuzudur. API bunu ortaya çıkarır:
GET /pools/info/ids?ids=<POOL_ID>
{
  "data": [{
    "mintA": { "programId": "TokenzQdB...", "hasTransferFee": true, ... },
    "mintB": { "programId": "Tokenkeg...", ... }
  }]
}
Göndermek için programId kullanın ve UI uyarısı ortaya çıkarmak için hasTransferFee kullanın.

SDK yardımcıları

import { Raydium, TOKEN_2022_PROGRAM_ID } from "@raydium-io/raydium-sdk-v2";
import { ExtensionType, getExtensionTypes, unpackMint } from "@solana/spl-token";

const raydium = await Raydium.load({ owner, connection });

const acct = await connection.getAccountInfo(mintPubkey);
if (!acct) throw new Error("mint not found");
const mint = unpackMint(mintPubkey, acct, acct.owner);

if (acct.owner.equals(TOKEN_2022_PROGRAM_ID)) {
  const extensions = getExtensionTypes(mint.tlvData);
  const accepted = new Set([
    ExtensionType.TransferFeeConfig,
    ExtensionType.MetadataPointer,
    ExtensionType.TokenMetadata,
    ExtensionType.InterestBearingConfig,
    ExtensionType.ScaledUiAmount,
  ]);
  const rejecting = extensions.filter(e => !accepted.has(e));
  if (rejecting.length) {
    console.warn("Pool creation will revert unless this mint is whitelisted:", rejecting);
  }
}

Ortak entegrasyon hataları

  • Sadece program kimliğini ön kontrol etme. Bir mint Token-2022 ve desteklenmeyen olabilir. Havuz oluşturmaya izin vermeden önce uzantı listesini izin listesine (ve statik whitelist’e) göre yürütün.
  • Mint hiç kabul edilmediğinde SDK’nın alıntısına güvenme. Alıntı API’sı alıntı yapmayı reddetmez — havuz oluşturma geri alınır. Havuz oluşturmayı UI’ınızda ortaya çıkarmadan önce is_supported_mint anlamını çevrimdışı olarak onaylayın.
  • Transfer ücreti kesintisi olmadan alıntı yapma. Her iki tarafında %1 transfer ücreti mint’i 0,25% CPMM havuzun efektif ücret sınırı %0,25 değil, yaklaşık %2,25. SDK alıntısı veya Trade API alıntısı kullanın — asla havuzun ücret katmanından manuel olarak ücret hesaplamayın.
  • Token-2022 havuzunda eski Swap talimatını çağırma. Swap Token-2022’yi önceden oluşturdu. Ya mint Token-2022 olduğunda her zaman SwapV2 kullanın.
  • Otomatik olarak yeni Token-2022 mint’lerini listeleme. Cüzdanlar ve toplayıcılar, bir mint’i kullanıcılara ortaya koymadan önce TransferHook ve NonTransferable’ı kontrol etmelidir; her ikisi de Raydium düşmanıdır.

Gelecek çalışma

Bu matrisi değiştirecek Solana ekosistemi ve protokol yol haritası öğeleri:
  • Solana düzeyinde izin listesi transfer-hook programları (ekosistem sözleşmesi gelişmekte).
  • Gizli transfere uyumlu AMM’ler (araştırma aşaması).
  • Daha geniş CPMM mint başına kayıt (CLMM ile eşlik).
  • Bağımlılık yükseltmesi böylece CLMM’nin ScaledUiConfig dekodu Superstate sezgisel olmadan çalışır.
Bu sayfa hiçbiri iniş yaptığında güncellenecektir.

İşaretçiler

Kaynaklar:
  • raydium-cp-swap/programs/cp-swap/src/utils/token.rsMINT_WHITELIST, is_supported_mint.
  • raydium-clmm/programs/amm/src/util/token.rsMINT_WHITELIST, superstate_allowlist, is_superstate_token, is_supported_mint.
  • raydium-clmm/programs/amm/src/instructions/admin/create_support_mint_associated.rs — mint başına kayıt talimatı.
  • raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs — LaunchLab Token-2022 base-mint oluşturma.