Skip to main content
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 her ikisi de katı bir izin listesi modunda çalışır: varsayılan olarak yalnızca küçük bir uzantı seti geçer; diğer her şey havuz oluşturma sırasında reddedilir. Bir avuç güvenilir mint, hardcoded adres tarafından kabul edilir; CLMM ek olarak yönetici tarafından yönetilen mint başına kayıt defterini ve çalışma zamanı Superstate token algılamasını destekler. Bu sayfa, neyin uygulandığı ve nerede olduğunun tek sayfalık referansıdır ve program kaynağına dosya-satır alıntıları içerir.

Program düzeyinde destek

İzin listesi kontrolleri şurada bulunur: CPMM veya CLMM’de swap zamanında mint kontrolü yoktur — kapı yalnızca havuz oluşturma sırasında açılır. Bir havuz var olduktan sonra, swaplar mint’lerin değişmediğini güvenerek çalışır, bu Token-2022 mint durumunun değişmez kısımları için doğrudur.

CLMM pozisyon NFT’si kısıtlı ihraççılar için dondurma

Pozisyon NFT hesapları varsayılan olarak donmuş değildir. CLMM yalnızca pozisyon bir V2 açık yolunu ve en az bir kasa mint’inin mevcut freeze_authority’si hardcoded kısıtlı-ihraççı listesiyle eşleştiğinde birini dondurur. İlk liste, aşağıdaki Superstate algılaması yolunda kullanılan aynı authority’yi içerir. Havuz PDA’sını pozisyon NFT mint’inin freeze authority’si olarak ayarlamak kendi başına bir dondurma değildir. Bu bir pozisyon-saklama kuralıdır, başka bir havuz oluşturma izin listesi değildir:
  • Havuz zaten var olabilir ve değiştirilebilir kalabilir.
  • Pozisyon NFT mint’i CLMM havuz PDA’sını kendi freeze authority’si olarak kullanır; temel ihraççı pozisyon NFT’yi kontrol etmez.
  • OpenPositionV2 klasik SPL pozisyon NFT’lerini Token-2022 havuz varlıkları üzerinde kapsar. OpenPositionWithToken22Nft Token-2022 pozisyon NFT’lerini kapsar.
  • OpenPosition V1 kasa mint’lerini incelemez ve gönderilen liste tarafından hedeflenen Token-2022 kısıtlı varlıklarına hizmet edemez.
  • Mevcut pozisyonlar değişmez.
Donmuş pozisyonlar sahibi tarafından yönetilebilir kalır ancak aktarılamaz. ClosePosition istemci havuzu ilk kalan hesap olarak geçtiğinde atomik olarak çözer ve yakar. Bkz. products/clmm/ticks-and-positions.

LaunchLab quote mint’leri

LaunchLab’ın iki mint’i çok farklı şekilde kapılıdır ve asimetri kaçırması kolaydır.
  • Base mint — LaunchLab bunu oluşturur. Token-2022 base mint’i yalnızca initialize_with_token_2022 aracılığıyla ulaşılabilir ve program yalnızca MetadataPointer ve (isteğe bağlı olarak) TransferFeeConfig ekleyecektir. Başka bir şey NoSupportExtension döndürür. Önceden var olan bir Token-2022 mint’i base olarak hiç sağlanamaz. TransferFeeConfig eklendiğinde, mint’in transfer_fee_config_authority’si başlatma authority PDA’sıdır (mezuniyet’e kadar), withdraw_withheld_authority’si ise mint oluşturmadan itibaren platformun yapılandırılmış transfer_fee_extension_auth’ıdır — launchpad programının kendisinin withdraw-withheld talimatı yoktur. Bkz. products/launchlab/platform-config.
  • Quote mint — LaunchLab bunu oluşturmaz ve taramaz. CreateConfig mint hesabını olduğu gibi kabul eder, bu nedenle quote tarafında is_supported_mint eşdeğeri yoktur. Tek kapı, bir yönetici tarafından GlobalConfig’e bağlanmayı seçen mint’lerdir.
Bu, Token-2022 quote mint’ini bağlamayı yüksek güven gerektiren bir eylem haline getirir, CPMM ve CLMM statik whitelistleri ile aynı mantıkla: TransferHook quote mint’i her satın alma, satış ve ücret talebinde kendi hook’unu çalıştırır ve PermanentDelegate quote mint’i delegate’in bu havuzların quote kasalarını temizlemesine izin verir. İkisi de program tarafından engellenmez. LaunchLab’ın bir quote mint’i bağlandıktan sonra doğru şekilde işlediği:
  • Quote kasası, her iki ücret kasası ve share-fee alıcısının token hesabı quote mint’inin kendi programında oluşturulur.
  • Quote tarafında TransferFeeConfig dört ticaret talimatının tümüne fiyatlandırılır ve slippage sınırı kasa brüt hareketi yerine ödeyicinin net tutarına karşı kontrol edilir. Bkz. products/launchlab/instructions.
  • PoolState.token_program_flag her iki mint’in programlarını kaydeder — base mint için bit0, quote mint için bit1. Bunu bit başına çöz; bayt bir boolean değildir. Bkz. products/launchlab/accounts.
Kullanımdan kaldırılan Initialize talimatı hala eski quote programını alır, bu nedenle Token-2022 quote mint’i olan bir config yalnızca InitializeV2 ve InitializeWithToken2022 aracılığıyla ulaşılabilir.

CPMM ve CLMM uzantı izin listesi

Statik-whitelist kısa devrelerinden sonra (aşağıda ele alınmıştır), program mint’in uzantılarını yineler ve mint’i bu beş dışında herhangi bir uzantı taşıyorsa reddeder: Bu listede olmayan herhangi bir şey — TransferHook, NonTransferable, ConfidentialTransferMint, PermanentDelegate, MintCloseAuthority, DefaultAccountState, GroupPointer, GroupMemberPointer, MemberPointer, Pausable, vb. — is_supported_mint’in false döndürmesine ve havuz oluşturmanın geri alınmasına neden olur. İlgili satırlar (CPMM, CLMM’de özdeş şekil):
cp-swap/src/utils/token.rs:190–200

Bypass yolları

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

1. Statik mint whitelist

Sabit bir MINT_WHITELIST base58 dizesi dizisi her programda hardcoded’dir. Mint’in adresi eşleşirse, işlev hemen true döndürür ve uzantı kontrolü yapılmaz. Bu adresler programa baked’dir; listeyi güncellemek 3/4 upgrade multisig aracılığıyla program yükseltmesi gerektirir.

2. Mint başına kayıt defteri — yalnızca CLMM

CLMM ek olarak SupportMintAssociated PDA’sını [b"support_mint", mint] seed’inde danışır. Bu mint için PDA varsa, uzantı setinden bağımsız olarak kabul edilir. PDA, CreateSupportMintAssociated tarafından oluşturulur (admin/create_support_mint_associated.rs). Talimat iki imzacıya kapılıdır:
  • crate::admin::ID — standart Raydium yönetici authority’si.
  • crate::create_support_mint_associated_owner::ID — bu amaç için özel authority: RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY (mainnet), rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5 (devnet).
Etki: CLMM ekibi, program yükseltmesi olmadan belirli bir Token-2022 mint’ini havuz oluşturmaya katabilir. CPMM’nin eşdeğeri yoktur — izin listesi kesinlikle kaynak kodlanmıştır.

3. Superstate algılaması — yalnızca CLMM

CLMM, özellikle Superstate’in tokenize edilmiş varlıkları için üçüncü bir yola sahiptir; bunlar CLMM programına bağlı spl-token-2022 sürümünün açamadığı ScaledUiConfig uzantısını kullanır. Bağımlılığı yükseltmek yerine, CLMM Superstate token’larını authority şekilleriyle algılar:
raydium-clmm/programs/amm/src/util/token.rs:485 Bir mint bu daldan geçer eğer dördü de tutarsa:
  • Sahibi olan programı Token-2022 programıdır.
  • Freeze authority’si superstate_allowlist::ID’ye eşittir. Mainnet-beta ve devnet değerleri için reference/program-addresses bölümüne bakın.
  • DefaultAccountState uzantısı Frozen olarak ayarlanmıştır.
  • Kalıcı delegate’i de superstate_allowlist::ID’dir.
Bu bir kayıt defteri değil, bir buluşsal yöntemdir — Superstate’in aynı authority şekliyle yayınladığı gelecekteki herhangi bir mint otomatik olarak kabul edilecektir.

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 sahiplenilir. Özel token programı upstream’de reddedilir.
  • Havuz kasaları Token-2022 havuzları için doğru ATA uzantılarıyla oluşturulur (ImmutableOwner, vb.).
  • Tüm transferler transfer_checked aracılığıyla gider — ücret taşıyan mint’ler kasaya doğru tutarı indirir.
Daha sonra TransferHook ekleyen whitelisted veya PDA-kayıtlı bir mint, swap zamanında kontrol kazanmaz; hook basitçe her transferde çalışır ve swap’ları bozabilir. Whitelisting bu nedenle yüksek güven gerektiren bir eylemdir.

”Engellendi” semantiği

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 bölümüne bakın. Mevcut havuzlar bu kontrolü geriye dönük olarak başarısız olamaz — kapı yalnızca oluşturma sırasında çalışır. Mint uzantıları Raydium’un reddettiği kategoriler için değişmezdir (transfer hook, non-transferable, confidential transfer oluşturma sonrasında eklenemez), bu nedenle statik kontrol yeterlidir.

Her dışlanan uzantı neden dışlanır

  • 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 giren yeteneği ile. Güvenli sandbox yoktur. Bazı DEX’ler hook izin listelerini korur; Raydium yapmaz.
  • NonTransferableTransfer her zaman başarısız olur. Havuz saklama alamaz.
  • ConfidentialTransfer — transfer tutarları şifrelenmiştir; eğri swap’ı fiyatlandıramaz.
  • PermanentDelegate — delegate’in sahibi, havuz kasası da dahil olmak üzere herhangi bir token hesabını temizleyebilir. Yalnızca güvenilir ihraççılar (örn. düzenlenmiş stablecoin’ler) için statik whitelist aracılığıyla izin verilir.
  • MintCloseAuthority — mint kapatılabilir; mevcut havuzlar kullanılamaz hale gelir. Varsayılan olarak disallowed.
  • DefaultAccountState (Frozen) — havuz ATA’ları Frozen durumunda inecek ve hesap başına çözmesi gerekir. Yalnızca Superstate algılaması aracılığıyla izin verilir, bu da ihraççının kurumsal hesapları kayıt sırasında çözeceğini varsayar.
  • Group/Member pointers — aktif olarak zararlı değildir, ancak gözden geçirilmemiştir. Yüzeyi dar tutmak için varsayılan olarak disallowed.

Transfer ücreti muhasebesi

TransferFeeConfig taşıyan mint’ler için, her swap, yatırma ve çekme nominal tutardan daha az hareket ettirir. SDK hesaplamanın her iki yarısını yüzeylendirir:
Doğru bir UI şunları gösterir:
  • amountIn + token2022FeeIn olarak “gönderdiğiniz”
  • amountOut - token2022FeeOut olarak “aldığınız”
  • feeAmount havuz ücreti (LP + protokol) olarak, Token-2022 transfer ücretinden ayrıdır
Yalnızca amountIn → amountOut gösteren naif bir UI maliyetleri az gösterir.

maximumFee sınırı

Token-2022 transfer ücretleri transfer başına sınırlandırılır. %1 mint’i ve 10.000 token sınırı için, 100.000.000 token transfer yalnızca 10.000 ücret öder. SDK’nın computeSwapAmount sınırı uygular; doğrudan program çağıranları bunu çoğaltmalıdır.

Epoch geçişi

Bir mint authority, sonraki epoch’ta etkinleşen bir ücret oranı değişikliğini planlayabilir. Geçiş penceresi sırasında, iki config (older, newer) mint’te aynı anda yaşar ve TransferChecked mevcut epoch’a göre seçer. CPMM SwapV2 ve CLMM SwapV2 her ikisi de accounts’ta tam mint hesabını geçer, bu nedenle program ekstra arama olmadan doğru config’i okur. Trade API veya SDK aracılığıyla bir epoch’tan daha fazla ileri fiyat belirtirseniz, yürütülen ücret fiyatlandırılan ücretten farklı olabilir — eski config’in maximum_fee_basis_points tarafından sınırlandırılır.

Faiz taşıyan ve ScaledUiAmount

Havuz ana tutarı tutar; “UI tutarı” ana tutarın zaman bağımlı veya yönetici tarafından ayarlanan ölçek faktörü ile çarpılmasıdır. Swap matematiği ana tutarda çalışır:
SDK otomatik olarak dönüştürür. Doğrudan RPC okuyucuları pool.token0Vault.amount’u ana tutarı olarak ele almalıdır.

”Token-2022 havuzu” tanımı

Bir havuz Token-2022 havuzudur eğer herhangi bir mint’in programId == TokenzQdB... varsa. API bunu yüzeylendirir:
Göndermek için programId kullanın ve UI uyarısını yüzeylemek için hasTransferFee kullanın.

SDK yardımcıları

Yaygın entegrasyon hataları

  • Yalnızca program ID’sini ön kontrol etmek. Bir mint Token-2022 ve desteklenmeyen olabilir. Havuz oluşturmaya izin vermeden önce uzantı listesini izin listesine (ve statik whitelist’e) karşı yürütün.
  • Mint hiç kabul edilmediğinde SDK’nın teklifine güvenmek. Teklif API’si teklif vermeyi reddetmez — havuz oluşturma geri alınır. Havuz oluşturmayı UI’nize sunmadan önce is_supported_mint semantiğini çevrimdışı olarak onaylayın.
  • Transfer ücreti kesintisi olmadan teklif vermek. Her iki tarafında %1 transfer ücreti olan mint’i %0,25 CPMM havuzunda %2,25 civarında etkili ücret vardır, %0,25 değil. SDK teklifini veya Trade API teklifini kullanın — asla ücret’i yalnızca havuzun ücret katmanından manuel olarak hesaplamayın.
  • Token-2022 havuzunda eski Swap talimatını çağırmak. Swap Token-2022’den önce geliştirildi. Herhangi bir mint Token-2022 olduğunda SwapV2 kullanın.
  • Yeni Token-2022 mint’lerini otomatik olarak listelemek. Cüzdanlar ve toplayıcılar, bir mint’i kullanıcılara sunmadan önce TransferHook ve NonTransferable kontrol etmelidir; her ikisi de Raydium’a düşmandı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 konvansiyonu gelişiyor).
  • Gizli transfer uyumlu AMM’ler (araştırma aşaması).
  • Daha geniş CPMM mint başına kayıt defteri (CLMM ile eşlik).
  • Bağımlılık yükseltmesi böylece CLMM’nin ScaledUiConfig kod çözme Superstate buluşsal yöntemi olmadan çalışır.
Herhangi biri indiğinde bu sayfa 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 defteri talimatı.
  • raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs — LaunchLab Token-2022 base-mint oluşturma.
  • raydium-launchpad/programs/launchpad/src/instructions/admin/create_config.rs — LaunchLab quote-mint bağlama (uzantı kontrolü yok).