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 →
sdk-api/rust-cpi her bir Raydium programını çağırmanın düşük seviye mekaniklerini kapsar. Bu sayfa daha yüksek seviye eşlidir: Raydium’u kendi programınıza neden bileştirebileceğiniz, hangi desen kullanım durumunuza uyar ve uçtan uca ihtiyacınız olan tam yapıştırıcı kod.CPI’nin doğru araç olduğu durumlar
Özel bir program, işlemin yalnızca sizin programınızın yapabileceği diğer zincir üstü durum değişiklikleriyle atomik olarak gerçekleşmesi gerektiğinde mantıklıdır. Yaygın durumlar:- Emanetçi / limit-order programları — kullanıcı bir mint’i emanetçinize yatırır, programınız bir fiyat koşulunu izler ve tetiklendiğinde, programınız Raydium aracılığıyla atomik olarak takas yapar ve kullanıcının hesabını krediye alır.
- Toplayıcı vekilleri — Raydium + bir veya daha fazla diğer DEX’ler aracılığıyla bir takas yönlendiren tek bir talimat, tüm atlamalar programınıza ait tek bir slippage kontrolü altında.
- Otomatik bileşik kasalar — LP veya farm stake’i kasanıza yatırın, kasa ödülleri bir programa göre hasat eder, likiditeyi yeniden sağlar, pay tokenları yayınlar.
- Strateji kasaları — CLMM aracılığıyla takas yaparak yeniden dengelenmiş kaldıraçlı LP pozisyonları; pozisyonları kapatıp teminatı bir işlemde takas eden tasfiye edenler.
- Özel vesting’li token-başlatma platformları — programınız vesting tokenlarını tutar ve Raydium havuzuna bir programa göre yayınlar.
Bileşim desenleri
Desen 1: İnce vekil
Programınız bazı politikaları doğrulayan (örn. beyaz listeye alınmış mint çiftleri, doğrulanmış kullanıcılar için ücret indirimi) ve ardından Raydium’a ileten tek bir talimat ortaya koymaktadır.Desen 2: Emanetçi
Programınız kullanıcının giriş mint’ini tutan bir PDA’ya sahiptir. Tetiklendiğinde, PDA Raydium’a takas yapmak için bir CPI imzalar.CpiContext::new_with_signer aracılığıyla imzalar. Bkz. İmzalayan tohumlar.
Desen 3: Bileşik çok-atlamalı
Programınız bir talimatta birden fazla CPI yayınlar ve tüm bunlar arasında tek bir slippage sınırı uygular. Raydium takas talimatlarının her birinin kendiminimum_amount_out değeri vardır, ancak bunları 0’a (veya çok gevşek bir tabana) ayarlarsınız ve son atlamadan sonra kesin bir minimum’u kendiniz uygularsınız.
Desen 4: Kasa / strateji
Programınız LP tokenlarını veya farm stake’i bir PDA’da tutar. Bir bekçi (veya kullanıcı)compound() çağırır, bu:
- Çiftlikten ödülleri hasat eder.
- Ödülleri pool tokenları için takas eder (CPMM veya CLMM’ye CPI).
- Gelirleri LP’ye geri yatırır (başka bir CPI).
- Yeni LP’yi stake eder (başka bir CPI).
Hesap listesi oluşturma
Çağıran programınAccounts yapısı Raydium programının hesap sırasını yansıtır, ancak çoğu Raydium tarafı hesap UncheckedAccount’tır çünkü Raydium bunları kendisi doğrular. Yalnızca sizin sahip olduğunuz hesaplara kısıtlamalar eklersiniz:
UncheckedAccount — tembellik değildir. Alıcı kendi hesaplarını doğrular; çağıran tarafında çift doğrulama sadece CU yakar ve Raydium yeni bir yapı düzeni alanı gönderdiğinde senkronizasyondan çıkma riskini taşır.
CPI çağrısının kendisi
PDA imzalayan tohumlar
CPI yalnızcaauthority olarak geçirilen PDA, çağıranın iddia ettiği türetme ile eşleşirse başarılı olur. İkisi şu konularda anlaşmalıdır:
- Tohum bayt dizisi (burada
[b"escrow", user.key().as_ref()]). - Bump.
- Çağıran program ID’si (Raydium’unki değil, sizin programınız).
authority yuvası kendi vault PDA’sıdır — sabit, program genelinde bir hesap, kendisiyle türetir ve imzalar ve programınız ne kontrol eder ne de değiştirir. PDA tohumlarınızın uyması gereken hesap payer’dir: kontrol CPMM’nin kendi transfer_from_user_to_pool_vault yardımcısının içinde gerçekleşir, bu da payer olarak geçirilen hesabın input_token_account’ın sahibi olmasını gerektirir.
Yaygın hata: escrow_input_ata emanetçi PDA’sı tarafından sahip olunan halde user’ı payer olarak geçirmek. SPL Token programı owner mismatch ile reddeder. Her zaman payer’ı ATA’nın sahibi yapın — ve bu sahip bir PDA olduğunda new_with_signer ile imzalayın.
Kalan hesaplar
Birkaç Raydium talimatı, sabit olanlardan sonra eklenen değişken uzunlukta bir hesap listesi alır — kalan hesaplar.- CLMM
SwapV2: takas yönünde takas yapabileceği tick dizileri için 1–8TickArrayStatehesabı. - Farm v6
Deposit/Harvest/Withdraw:(reward_vault, user_reward_ata)çiftleri, canlı her reward slot başına bir çift. - Token-2022 transfer-hook mint’leri: transfer-hook programı artı hook’un ihtiyaç duyduğu hesaplar.
Bileşik çağrılar için işlem bütçesi
Bir CPI çağrı çerçevesinin kendisi için ~1.500 CU’ya mal olur; çağrılanın kendi CU kullanımı üstüne yığılır. Aşağıdaki çağrılan rakamlar 2026-09-09 tarihinde yüksek hacimli havuzlarda canlı mainnet işlemlerinden ölçülmüştür, Raydium programının kendi çağrısı içinProgram <id> consumed N of M compute units günlük satırından okunmuştur (bu nedenle iç token-program CPI’lerini içerir):
Her CPI çerçevesi ve programınızın üstündeki ek yük için ~1.500 ekleyin. CLMM takas maliyeti tick geçişleriyle ölçeklenir, bu nedenle rakamını bir taban olarak değerlendirin. Token-2022 mint’leri transfer’in uzantı işleme maliyetini ekler; kendi mint’leriniz için düz bir çarpan uygulamak yerine ölçün.
Her zaman açık bir
ComputeBudgetProgram::set_compute_unit_limit ayarlayın:
Hata yayılması
Raydium’un programları kararlı hata kodlarıyla Anchor hataları döndürür. Çağıran programınız bunlarıErr(ProgramError::Custom(code)) olarak görür. Varsayılan olarak geçirin:
ERROR_CODE_OFFSET terimini not edin: #[error_code] varyantları 6000’den başlayarak yayınlanır, bu nedenle çıplak enum ayırıcısına karşı karşılaştırma hiçbir zaman eşleşmez. (anchor-lang veya raydium_cp_swap’ta is_err yardımcısı yoktur — bu sayfanın önceki revizyonları var olmayan bir tane kullandı.)
Hata kodu-anlam eşlemesi IDL politikasına göre kararlıdır (sdk-api/anchor-idl); yeni kodlar sonunda eklenir, mevcut kodlar hiçbir zaman anlam değiştirmez.
Tam çalışan örnek: limit-order emanetçi
Akış:open_order— kullanıcıinput_mint’inamount_in’ini emanetçi PDA’sına yatırır; hedefmin_amount_outve son kullanma tarihini kaydeder.execute_order— herkes (bekçi) mevcut havuz hesaplarıyla çağırır. Program mevcut teklifimin_amount_out≥ ile kontrol eder, ardından Raydium takas’ı CPI’ler ve çıktıyı emanetçide tutar.claim— kullanıcı çıkış mint’ini emanetçiden çeker.
order PDA, emanetçinin giriş ATA’sına sahip olduğu için payer olarak CPI’yi imzalar; ExecuteOrder bu nedenle CPMM’nin kendi vault PDA’sı için bir pool_authority: UncheckedAccount<'info> alanına da ihtiyaç duyar. Hem Raydium tarafı slippage kontrolü hem de emanetçinin kendi delta kontrolü tabanı uygular — çift güvenlik.
Test
Raydium programlarını entegrasyon testleri için yerel bir doğrulayıcıya çekmek (Anchor.toml’den):
anchor test başlangıçta bunları mainnet’ten getirir. Bkz. sdk-api/rust-cpi.
Bileşime özgü tuzaklar
Yeniden giriş
Solana’nın gerçek yeniden girişi yoktur — bir CPI aynı çağrıda kaynak programına geri çağrı yapamaz. Ancak yine de kendinizi mantıksal yeniden girişe inşa edebilirsiniz: durumunuzu okuyan bir CPI, ardından kodunuz CPI’nin bunu değiştirmediğini varsayarak yeniden okur. Raydium için, CPI’ler durumunuza dokunmaz, bu nedenle bu örn. flash-loan bağlamlarından daha az bir endişedir. Ancak Raydium’u bir borç verme protokolüyle bileştirirseniz, farkında olun.Hesap değişebilirlik kayması
Programınız bir hesabımut olarak geçerse ancak Raydium salt okunur olmasını beklerse (veya tersi), çalışma zamanı InvalidAccountData ile çağrıyı reddeder. Her zaman Raydium’un talimatının beklenen değişebilirliğini IDL’de kontrol edin; raydium_cp_swap::cpi::accounts::Swap her hesabın değişebilirliğini sizin için ayarlar, CPMM’nin kendi Swap yapısındaki #[account(mut)] işaretleyicilerinden — türetilen alanlar tümü düz AccountInfo<'info>’dir, bu nedenle bayrakları taşıyan şey alan türleri değil, türetilen ToAccountMetas impl’idir.
Token-2022 program alanı
Giriş ve çıkış mint’leri farklı token programları altında olabilir — biri SPL Token, biri Token-2022. CPI bu nedenle ayrıinput_token_program ve output_token_program alanlarına sahiptir. Her zaman her mint’in owner alanını kontrol edin ve doğru programı her yuvaya yönlendirin.
Sürümlü işlemler
2+ Raydium CPI’si artı bir ATA oluşturma yapan bileşik bir tx nadiren eski (v0-LUT olmadan) bir işleme sığar. V0’ı adres arama tabloları ile kullanın;raydium.getRaydiumLutAddresses() aracılığıyla Raydium’un genel LUT’larını çekin.
İşaretçiler
sdk-api/rust-cpi— düşük seviye CPI mekanikler.integration-guides/priority-fee-tuning— işlem bütçesi boyutlandırma.products/cpmm/code-demos,products/clmm/code-demos,products/farm-staking/code-demos— ürün başına CPI parçacıkları.

