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 →

Cargo bağımlılıkları

cpi özellik bayrağı, crate’lerin tam program yerine sadece CPI yüzeyine (hesap struct’ları + invoker’lar) derlemesini sağlar, böylece ikili dosyanızın boyutu küçük kalır. Hesap struct’larını baştan sona bağlayan çalışan CPI örnekleri için, bkz. raydium-io/raydium-cpi-example (AMM v4, CPMM ve CLMM’yi kapsar).

Hesap listesi oluşturma

Her Raydium CPI, çağıran programda bir Accounts struct’ı gerektirir. Alanlar, programın instruction hesap sırasına 1’e 1 eşlenir, alan düzeyinde doğrulayıcılarla:
Raydium tarafındaki hesapların çoğu UncheckedAccount’dir çünkü çağrılan program (Raydium) doğrulamaya sahiptir. Çağıran programınız sadece sizin sahip olduğunuz hesapları titizlikle doğrular — kullanıcı ATA’ları, kendi PDA’larınız. /// CHECK: yorum satırı Anchor’ın eksik kontroller hakkındaki uyarısını bastırır.

CPI çağrısı oluşturma

Anchor, her instruction için bir helper üretir:
cpi::swap_base_input IDL’den üretilir; argüman listesi Anchor instruction’ının argüman listesini yansıtır.

İmzalayan seed’leri (PDA-imzalı CPI)

Programınız bir PDA adına CPI’ı imzaladığında (vault’lar, escrow’lar vb. için yaygın), CpiContext::new_with_signer kullanın:
İmzalayan seed’leri PDA’nın türetilmesiyle eşleşmelidir. authority (veya benzer imzalayan rol) olarak iletilen herhangi bir hesap için Solana çalışma zamanı, PDA’nın bu seed’ler aracılığıyla imzaladığını kontrol eder.

Kalan hesaplar

Bazı Raydium instruction’ları kalan hesapları alır — sabit hesaplardan sonra eklenen değişken uzunlukta bir liste. Kanonik örnekler:
  • CLMM SwapV2: swap’ın geçebileceği tick dizilerine karşılık gelen 1–8 TickArrayState hesabı ekler.
  • Farm v6 Deposit: her canlı reward akışı için (reward_vault, user_reward_ata) çiftlerini ekler.
Anchor’ın CPI helper’ları kalan hesapları tür-kontrol etmez. .with_remaining_accounts(...) aracılığıyla iletiniz:
Sıra önemlidir: alıcı program kalan hesapları ilettiğiniz sıraya göre yineler. CLMM için tick dizileri yönsel olarak sıralanmalı (swap yönündeki ilk dizi önce). Farm v6 için reward slot’ları slot indeks sırasına göre gider.

Hata yayılımı

Raydium’un programları kendi hata enum’larını döndürür. Anchor onları sarar; çağıran programınız onları Err(ProgramError::Custom(code)) olarak görür. Belirli hataları işlemek için:
Hata kodu numarası IDL politikasına göre sabittir (sdk-api/anchor-idl). Sayısal değere karşı karşılaştırarak belirli kodlara karşı test edebilirsiniz.

Bileşik CPI’larda işlem bütçesi

Her CPI frame’inin ek yükü vardır (~çağrı kendisi için 1.500 CU) ve çağrılanın kendi CU tüketimi bunun üzerine yığılır. Programınızın içinden CPMM swap çağıran bir işlem şunları harcar:
Yığılı yönlendirme için (programınız → aggregator → CPMM + CLMM + farm harvest), bütçe ≥500k CU. İşlemde her zaman açık bir ComputeBudgetProgram::set_compute_unit_limit(...) instruction’ı ayarlayın — varsayılan 200k CU limiti sessizce tükenecektir.

AMM v4 — manuel Instruction oluşturma

AMM v4’ün Anchor crate’i yoktur. Instruction’ı elle oluşturun:
Tam hesap listesi için bkz. products/amm-v4/code-demos.

Farm v6 — reward-çift kalan hesaplar

Farm v6’nın Deposit / Withdraw / Harvest’i kalan hesaplarda (reward_vault_i, user_reward_ata_i) çift deseni kullanır. Tam sıra:
Canlı (çalışan veya talep edilmemiş sonu biten) reward slot’ı başına bir çift. Kullanılmayan slot’ları atlayın; program farm_state.reward_infos[i].reward_state dışında gönderir.

CPI akışını test etme

Yerel geliştirme, Raydium programlarının test validator’ünüzde mevcut olmasını gerektirir. Seçenekler:
  1. Program klonla anchor testAnchor.toml içinde:
    Bu, dağıtılan bytecode’unu mainnet’ten yerel validator’ünüze çeker.
  2. Devnet — Raydium tüm programları devnet’e mainnet ile aynı program ID’leri ile dağıtır. Canlı koda vurmak için anchor test --provider.cluster devnet çalıştırın.
  3. Yerel dağıtım — Raydium repo’larını klonlayın ve yerel validator’e anchor deploy yapın. Test döngüsü ek yükü ekler ancak hata ayıklama için çağrılanı değiştirmenize izin verir.

İşaretçiler

Kaynaklar: