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’un kodunu okumadan önce anlaşılması gereken en önemli şey Solana’nın hesap modelidir. Ethereum’da durumun sözleşme kodu yanında yaşadığı yerde, Solana programları tamamen durumsuz olur: tüm durum programların işlem yaptığı ayrı “hesaplar” içinde yaşar. Her Raydium havuzu, pozisyonu ve vault bir hesaptır — bu hesapların nasıl çalıştığını anlamak belgelerin geri kalanının anlamlı olmasını sağlar.

Temel ayrım: programlar ve hesaplar

Programlar

Solana’da bir program yürütülebilir kod — derlenmemiş bir dosyadan yüklenen, bir Pubkey adresine dağıtılan ve işlemler aracılığıyla çağrılabilen ikili dosya. Programların ilişkili durumu yoktur; yalnızca mantık içerirler. Raydium’un programları:
  • CPMM: CPMMoo8L3F4NbTegBCKVNunggL7H1Zpdmwpwh8KMoZ0F
  • CLMM: CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK
  • AMM v4: 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8
Her biri sabit bir ikili dosyadır. Program çağrılar arasında hiçbir şeyi “hatırlamaz”.

Hesaplar

Bir hesap zincir üzerindeki bir veri satırıdır. Her hesabın:
  • pubkey — adresi.
  • owner — onu sahibi olan program (yazmaları kontrol eder).
  • data — ham baytlar.
  • lamports — SOL bakiyesi (1 SOL = 1.000.000.000 lamport).
  • rent_epoch — eski kira toplama alanı (kira muafiyeti zorunlu hale geldikten beri yok sayılır).
Bir Raydium havuzunu sorguladığınızda, bir veya daha fazla hesabı okursunuz. Bir swap çalıştırıldığında, CPMM programı birden fazla hesabı okur/yazar — havuz durumu, vault’lar, gözlem durumu ve kullanıcının token hesapları.

Sahiplik

Her hesap tam olarak bir program tarafından sahiplenilir. Yalnızca o programın kodu hesabın data alanını değiştirebilir. Bir kullanıcı, imzaladıkları hesapta lamports değiştirebilir (SOL gönder/al), ancak data değiştirmek sahibi programın adına bunu yapmasını gerektirir. Örnekler:
  • Kullanıcı cüzdan: Sistem Programı tarafından sahiplenilir. Lamportlar burada yaşar; aktarmak için imzalarsınız.
  • USDC token hesabınız: SPL Token Programı tarafından sahiplenilir. Token programının transfer komutu bakiyeyi günceller.
  • Raydium havuz durumu hesabı: CPMM programı tarafından sahiplenilir. Yalnızca CPMM’nin komutları rezervleri, ücretleri vb. değiştirebilir.
  • Raydium pozisyon NFT’sinin PersonalPositionState: CLMM programı tarafından sahiplenilir.
“Sahip olunması” kesindir: Program A, Program B tarafından sahiplenilen bir hesabına yazarsa, Solana çalışma zamanı işlemi reddeder.

Kira ve kira muafiyeti

Bir hesap oluşturmak depolama alanı tüketir. Solana bu alan için kira alır, ancak 2020’den beri tüm yeni hesaplar kira muaf olmalıdır — bu, 2 yıl boyunca borçlu olacakları kiranın ön ödenmiş olacağı kadar lamport tuttuğu anlamına gelir. Uygulamada:
  • Kira muaf hesap selameten yaşar.
  • Hesabı kapatmak lamportları kapatan imzalayıcıya döndürür.
165 baytlık bir hesap için (örneğin SPL Token hesabı), kira muafiyeti ~0,00204 SOL’dir. 1.440 baytlık bir Raydium CPMM havuz durumu için, ~0,011 SOL’dir.

Raydium kira masrafları

HesapBoyutKira
CPMM PoolState~1.440 B~0,011 SOL
CLMM PoolState~1.500 B~0,012 SOL
CLMM TickArray~9.000 B~0,063 SOL
CLMM PersonalPositionState~280 B~0,003 SOL
ATA165 B~0,002 SOL
Vault (Token Hesabı)165 B~0,002 SOL
Havuz oluşturma aynı anda birden fazla hesap için kira gerektirir — bu nedenle CPMM havuz oluşturma toplam ~0,15 SOL’ye mal olur.

Veri ve yürütülebilir hesaplar

Hesaplar iki türde gelir:

Veri hesapları

Durumu tutar (havuz rezervleri, token bakiyeleri, kullanıcı pozisyonları). executable = false. Bunlar çoğunluğudur.

Yürütülebilir hesaplar

Program bytecode’unu tutar. executable = true. Bunlar programlardır (CPMM, CLMM, vb.). Programların bytecode’larının ötesinde veri yoktur.

Program türetilmiş hesaplar (PDA’lar)

Bir PDA, adresi bir program ve bazı seedler’den belirleyici biçimde türetilen veri hesabıdır — bu adres için özel bir anahtar yoktur. Yalnızca türetme programı invoke_signed aracılığıyla bir PDA adına imzalayabilir. Raydium, PDA’ları yaygın olarak kullanır:
  • Havuz durumu PDA’ları: [poolTypeDiscriminator, mintA, mintB, ammConfig] adresinden türetilir.
  • Vault PDA’ları: [pool, mint] adresinden türetilir.
  • Gözlem durumu PDA’sı: [observationSeed, pool] adresinden türetilir.
PDA’lar Raydium’un anahtarları yönetmeden öngörülebilir adresler halinde hesaplar oluşturmasını sağlar. Bilinen havuz için seedler’i alan herkes bir PDA adresini hesaplayabilir. Bkz. solana-fundamentals/pdas-and-cpis.

İşlemler ve hesap referansları

Her Solana işlemi, okuacağı/yazacağı hesapların açık bir listesini taşır. Çalışma zamanı şunları uygular:
  • Listelenen hesaplar okunabilir veya yazılabilir (ilgili is_writable bayrağına göre).
  • Listelenmemiş hesaplara dokunulamaz.
Bir Raydium swap’ı için işlemin hesap listesi şunları içerir:
[readonly] CPMM programı
[writable] havuz durumu
[readonly] amm yapılandırması
[readonly] havuz otoritesi (PDA)
[writable] giriş vault
[writable] çıkış vault
[writable] kullanıcı giriş ATA
[writable] kullanıcı çıkış ATA
[readonly] giriş mint
[readonly] çıkış mint
[readonly] giriş token programı
[readonly] çıkış token programı
[writable] gözlem durumu
[signer,writable] kullanıcı
Bu açık numaralandırma, Solana işlemlerinin neden hızlı ve paralelleştirilebilir olduğunun nedenidir — çalışma zamanı önceden çakışmayan tx’leri belirleyebilir.

Hesap boyutu ve veri düzeni

Her Raydium hesabının sabit veya sınırlı bir boyutu vardır. Düzen koddaki Rust yapıları (#[repr(C)] ile) olarak tanımlanır ve sdk-api/anchor-idl içinde belgelenmiştir. Anchor programları, oluşturdukları her hesaba 8 baytlık bir diskriminatör ekler; bu hash("account:<StructName>")[0..8] adresinden türetilir. Bu, istemcilerin ilk 8 baytı okuyarak hesap türünü belirlemesine izin verir — bir türün tüm hesaplarını numaralandıran getProgramAccounts taramaları için önemlidir.

Raydium havuz durumunu okuma

SDK aracılığıyla:
const pool = await raydium.cpmm.getPoolInfoFromRpc({ poolId });
console.log(pool.poolInfo);
Ham RPC + düzen aracılığıyla:
const accountInfo = await connection.getAccountInfo(poolId);
const data = accountInfo.data;
// İlk 8 baytı (diskriminatör) atla, sonra yapı düzenine göre ayrıştır.
const poolState = CpmmPoolStateLayout.decode(data.slice(8));
Düzen, SDK kaynağında src/raydium/cpmm/layout.ts içindedir.

Çalışan örnek: token hesabını okuma

Bir kullanıcının USDC bakiyesini oku.
import { Connection, PublicKey } from "@solana/web3.js";
import { getAssociatedTokenAddressSync, AccountLayout } from "@solana/spl-token";

const connection = new Connection("https://api.mainnet-beta.solana.com");
const user       = new PublicKey("YourUserWallet...");
const usdcMint   = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");

// 1. ATA adresini hesapla (PDA tarzı türetme).
const ata = getAssociatedTokenAddressSync(usdcMint, user);

// 2. Hesabı oku.
const accountInfo = await connection.getAccountInfo(ata);
if (!accountInfo) {
  console.log("ATA henüz yok (kullanıcı hiç USDC tutmadı).");
  return;
}

// 3. Sahibi SPL Token programı olduğunu doğrula.
console.assert(accountInfo.owner.toBase58() === "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");

// 4. Veriyi kodu çöz.
const parsed = AccountLayout.decode(accountInfo.data);
console.log("Bakiye (en küçük birimler):", parsed.amount.toString());
console.log("Mint:",                     new PublicKey(parsed.mint).toBase58());
console.log("Sahibi:",                    new PublicKey(parsed.owner).toBase58());
Bu desen — adres türet, hesabı getir, sahibi doğrula, kodu çöz — Raydium havuzları da dahil olmak üzere her zincir üstü okuma için geçerlidir.

Raydium için neden bu önemli

Hesap modeli Raydium’un tasarımını şekillendirir:
  • Havuz durumu tek bir hesaptır — bir havuz hakkında her şey (mintler, rezervler, ücretler, yönetici) havuz programı tarafından sahiplenilen tek bir hesapta yaşar.
  • LP tokenler standart SPL token hesaplarıdır — Raydium tokenleştirmeyi SPL Token programına delegeler.
  • Tick dizileri bölünmüştür — CLMM’nin tek bir büyüyebilir tick dizisi olamaz çünkü hesaplar sabit ayrılmış boyuta sahiptir; bunun yerine bölünmüş TickArray PDA’larını kullanır.
  • Pozisyon NFT’leri Metaplex NFT’leridir — CLMM pozisyonları Metaplex başına standart NFT’lerdir; pozisyon durumu ayrı bir PDA’dır.
Bunu anlamak “X nerede yaşıyor?” sorularını doğru yanıtlamanıza izin verir:
  • “Havuz rezervleri nerede?” → SPL Token programı tarafından sahiplenilen iki vault hesabı (token hesapları), yetki havuz programının bir PDA’sına devredilmiş.
  • “CLMM için tick verisi nerede?” → ardışık 60 tick’i kapsayan bir dizi TickArray PDA’ları.
  • “Benim farm stake’im nerede?” → [user, farmId] adresinden türetilmiş UserLedger PDA’sı, farm programı tarafından sahiplenilir.

İşaretçiler

Kaynaklar: