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 →
CPI’nin doğru araç olduğu durumlar
Özel bir program, işlemin yalnızca sizin programınızın gerçekleştirebileceği diğer zincir üstü durum değişiklikleriyle atomik olarak gerçekleşmesi gerektiğinde anlamlıdır. Yaygın durumlar:- Emanet / limit order programları — kullanıcı bir mint’i emanetinize yatırır, programınız bir fiyat koşulunu izler ve tetiklenmesi halinde programınız atomik olarak Raydium’dan swap yapar ve kullanıcının hesabını krediye alır.
- Toplayıcı proxy’ler — bir swap’ı Raydium + bir veya daha fazla başka DEX’ten geçiren ve tüm atlamaları programınızın sahip olduğu tek bir slippage kontrolü altında tutan tek bir talimat.
- Otomatik bileşik vault’lar — LP veya farm stake’i vault’unuza yatırın, vault ödülleri belirli bir programa göre hasat eder, likiditeyi yeniden sağlar, hisse token’ları yayınlar.
- Strateji vault’ları — CLMM üzerinden swap yaparak yeniden dengelenen kaldıraçlı LP pozisyonları; pozisyonları kapatıp teminatı bir işlemde swap eden likidatörler.
- Özel vesting’li token-lansman platformları — programınız vesting token’larını tutar ve Raydium havuzuna belirli bir programa göre serbest bırakır.
Bileşim desenleri
Desen 1: İnce proxy
Programınız bir politikayu doğrulayan (örn. beyaz listedeki mint çiftleri, doğrulanmış kullanıcılar için ücret indirimi) tek bir talimat ortaya koyan ve ardından Raydium’a iletir.Desen 2: Emanet
Programınız kullanıcının input mint’ini tutan bir PDA’ya sahiptir. Tetiklenmesi halinde, PDA kendi bakiyesini swap yapmak için Raydium’a bir CPI imzalar.CpiContext::new_with_signer aracılığıyla imzalar. Signer seeds bölümüne bakın.
Desen 3: Bileşik çok-atlama
Programınız bir talimatta birden fazla CPI yayınlar, tümü arasında tek bir slippage sınırı uygular. Raydium swap talimatlardır her birinin kendiminimum_amount_out vardır, ancak bunları 0’a (veya çok gevşek bir tabana) ayarlar ve son atlama sonrasında kesin bir minimum uygularsınız.
Desen 4: Vault / strateji
Programınız bir PDA’da LP token’larını veya farm stake’ini tutar. Bir keeper (veya kullanıcı)compound() çağırır, bu:
- Farm’dan ödülleri hasat eder.
- Ödülleri pool token’ları için swap yapar (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 inşası
Çağıran programınAccounts yapısı Raydium programının hesap sırasını yansıtır, ancak çoğu Raydium tarafındaki hesap UncheckedAccount’tır çünkü Raydium onları kendisi doğrular. Yalnızca sizin sahip olduğunuz hesaplara kısıtlamalar eklersiniz:
UncheckedAccount — tembelliktir değil. Alıcı kendi dosyasını doğrular; çağıran üzerinde çift doğrulama sadece CU yakar ve Raydium yeni bir yapı düzeni alanı gönderdiğinde senkronizasyon çıkması riskidir.
CPI çağrısının kendisi
PDA imzalayan seed’ler
CPI yalnızcaauthority olarak iletilen PDA, çağıranın söylediği türetmeyle eşleşirse başarılı olur. İkisinin şu konularda anlaşması gerekir:
- Seed bayt sırası (burada
[b"escrow", user.key().as_ref()]). - Bump.
- Çağıran program kimliği (Raydium’unkisi değil, sizin programınız).
authority imzasının işlemi kapsamasını ve input ATA’nın bu authority’ye ait olmasını umursar. Doğrulama anchor_spl::token::transfer’de gerçekleşir: ATA’nın authority alanı imzalayan ile eşleşmelidir.
Yaygın hata: user’ı authority olarak iletmek (ve escrow PDA’sına ait olan escrow_input_ata’dan transfer etmek). SPL Token programı owner mismatch ile reddeder. Her zaman authority alanını ATA sahibi ile eşleştirin.
Kalan hesaplar
Birçok Raydium talimatı, sabit olanlardan sonra eklenen değişken uzunluklu bir hesap listesi alır — kalan hesaplar.- CLMM
SwapV2: swap yönünde swap’ın geçebileceği tick arrayları için 1–8TickArrayStatehesabı. - Farm v6
Deposit/Harvest/Withdraw:(reward_vault, user_reward_ata)çiftleri, canlı her ödül slotu 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 kendisi ~1.500 CU’ya mal olur; çağrılan tarafın kendi CU kullanımı üstüne yığılır. Raydium CPI başına kabaca bütçe:| Çağrı | CU (SPL Token) | CU (Token-2022) |
|---|---|---|
| CPMM swap_base_input | ~150,000 | ~200,000 |
| CLMM swap_v2 (tek tick array) | ~180,000 | ~230,000 |
| CLMM swap_v2 (2 tick’i geçer) | ~220,000 | ~270,000 |
| Farm v6 deposit | ~120,000 | ~150,000 |
| Farm v6 harvest (ödül slotu başına) | +30,000 | +40,000 |
| AMM v4 swap_base_in | ~140,000 | n/a |
harvest → swap A → swap B → deposit LP → stake LP yapan bir otomatik bileşik kolay 700k CU’ya ulaşır.
Her zaman açık bir ComputeBudgetProgram::set_compute_unit_limit ayarlayın:
Hata yayılması
Raydium programları istikrarlı 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:
sdk-api/anchor-idl); yeni kodlar sonda ekleyerek, mevcut kodlar asla anlam değişikliği yapmaz.
Tam çalışan örnek: limit-order emaneti
Akış:open_order— kullanıcıamount_inkadarınıinput_mint’den emanet PDA’ya yatırır; hedefmin_amount_outve son kullanma tarihini kaydeder.execute_order— herkes (keeper) mevcut pool hesaplarıyla çağırır. Program mevcut teklifi ≥min_amount_outolup olmadığını kontrol eder, ardından Raydium swap’ı CPI’ye verir ve çıktıyı emanette tutar.claim— kullanıcı output mint’i emanetten çeker.
Test
Raydium programlarını yerel bir doğrulayıcıya entegrasyon testleri için çekmek (Anchor.toml’den):
anchor test bunları başlangıçta mainnet’ten alır. sdk-api/rust-cpi adresine bakın.
Bileşime özgü tuzaklar
Yeniden-girişkenlik
Solana’da gerçek yeniden-girişkenlik yok — bir CPI aynı çağrıda kaynak programına geri çağrı yapamaz. Ancak yine de kendinizi mantıksal yeniden-girişkenliğe inşa edebilirsiniz: durumunuzu okuyan bir CPI, ardından kodunuz tekrar okur ve CPI’nin onu değiştirmediğini varsayarak. Raydium için CPI’ler durumunuza dokunmaz, bu nedenle örn. flash-loan bağlamlarından daha az bir endişe konusudur. Ancak Raydium’u bir borç verme protokolüyle bileştirirseniz, farkında olun.Hesap değişebilirlik sapması
Programınız bir hesabımut olarak iletirse ancak Raydium onu salt okunur olarak beklerse (veya tersi), çalışma zamanı çağrıyı InvalidAccountData ile reddeder. Raydium’un talimattının beklenen değişebilirliğini her zaman IDL’de kontrol edin; anchor_cp_swap::cpi::accounts::Swap bunu alan türleriyle zorunlu kılar.
Token-2022 program alanı
Input ve output mint’ler 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 mint’in owner alanını her zaman kontrol edin ve doğru programı her slota yönlendirin.
Sürümlü işlemler
2+ Raydium CPI’sı artı bir ATA oluşturması yapan bileşik bir tx nadiren eski (v0-olmadan-LUT) işlemde uyar. 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 mekaniği.integration-guides/priority-fee-tuning— işlem bütçesini boyutlandırma.products/cpmm/code-demos,products/clmm/code-demos,products/farm-staking/code-demos— ürün başına CPI snippet’leri.

