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 →
AMM v4, CPMM veya CLMM’ye kıyasla önemli ölçüde daha ağır bir hesap yapısına sahiptir çünkü her işlem OpenBook durumuna erişir. Bu sayfa hesapları “havuz sahibi” ve “OpenBook sahibi” bölümlerine ayırmıştır; böylece entegratör hangi tarafın ne olduğunu hızlıca görebilir.

Envanter

Bir AMM v4 havuzu oluşturulurken tam olarak bir OpenBook piyasasına bağlanır. Canlı durum şu şekildedir:
KategoriHesapSahibiRol
PoolAmmInfoAMM v4 programıHavuz durumu: biriken ücretler, durum, vault’lar ve OpenBook piyasasına referanslar.
Poolamm_authorityAMM v4 programıVault hareketlerini imzalayan programa ait PDA. Tüm AMM v4 havuzları tarafından paylaşılır.
Poolamm_open_ordersOpenBookHavuzun bu piyasa için OpenBook OpenOrders hesabı.
Poolamm_target_ordersAMM v4 programıOpenBook’a geri yayınlanacak hedef limit emirlerin havuz tarafı ızgarası.
Poolpool_coin_token_accountSPL TokenHavuzun coin-tarafı vault’ı (amm_authority ATA’sı).
Poolpool_pc_token_accountSPL TokenHavuzun pc-tarafı vault’ı.
Poollp_mintSPL TokenFungible LP mint’i.
Poolpool_withdraw_queueAMM v4 programıGecikmeli çekişler için eski kuyruk; sıfır uzunlukta tutulur.
Poolpool_temp_lpAMM v4 programıInitialize sırasında kullanılan yardımcı LP hesabı.
Market (OpenBook)serum_marketOpenBookPiyasanın kendisi (base/quote mint’leri, vault imzalayıcısı, vb.).
Marketserum_bids, serum_asksOpenBookTeklif ve talep kuyrukları.
Marketserum_event_queueOpenBookBekleyen olaylar (doldurular, iptaller).
Marketserum_coin_vault, serum_pc_vaultSPL TokenOpenBook’un piyasa düzeyindeki vault’ları.
Marketserum_vault_signerOpenBookserum_*_vault hareketlerini imzalayan piyasa düzeyindeki PDA.
Not: “serum” ön eki, geriye dönük uyumluluk için AMM v4’ün IDL ve alan adlarında korunmuştur. Günümüzde OpenBook piyasasını ifade eder.

AmmInfo

Havuzun kök durum hesabı. Hem havuz hem de OpenBook referanslarını satır içinde taşıdığı için büyüktür (≈ 752 byte).
// programs/amm/src/state.rs (kısaltılmış; alan sırası / adları IDL'yi takip eder)
pub struct AmmInfo {
    pub status: u64,           // bitmask: swap/deposit/withdraw/crank etkin
    pub nonce:  u64,           // amm_authority türetmek için kullanılan bump
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals:   u64,
    pub state:         u64,    // iç durum makinesi
    pub reset_flag:    u64,
    pub min_size:      u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,    // OpenBook piyasasını yansıtır
    pub pc_lot_size:   u64,
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,

    pub fees: Fees,            // işlem/protokol/fon ücret oranları
    pub state_data: StateData,

    // Havuz tarafından sahip olunan hesaplar:
    pub coin_vault: Pubkey,
    pub pc_vault:   Pubkey,
    pub coin_vault_mint: Pubkey,
    pub pc_vault_mint:   Pubkey,
    pub lp_mint:  Pubkey,
    pub open_orders: Pubkey,   // havuzun OpenBook'taki OpenOrders'ı
    pub market: Pubkey,        // OpenBook piyasası
    pub market_program: Pubkey, // OpenBook program ID'si
    pub target_orders: Pubkey,
    pub withdraw_queue: Pubkey,
    pub lp_vault:       Pubkey, // = pool_temp_lp
    pub owner: Pubkey,          // yönetici (multisig)
    pub lp_reserve: u64,
    pub padding: [u64; 3],
}

pub struct Fees {
    pub min_separate_numerator:   u64,     // 5
    pub min_separate_denominator: u64,     // 10_000
    pub trade_fee_numerator:      u64,     // 25  → OpenBook entegrasyonu tarafından kullanılır
    pub trade_fee_denominator:    u64,     // 10_000
    pub pnl_numerator:            u64,     // 12  → protokolün swap ücretinin payı
    pub pnl_denominator:          u64,     // 100 → yani 12/100 = %12 ücretin, = hacmin %0,03'ü
    pub swap_fee_numerator:       u64,     // 25  → %0,25 brüt swap ücreti
    pub swap_fee_denominator:     u64,     // 10_000
}

pub struct StateData {
    pub need_take_pnl_coin: u64,
    pub need_take_pnl_pc:   u64,
    pub total_pnl_pc:   u64,
    pub total_pnl_coin: u64,
    pub pool_open_time: u64,
    pub punish_pc_amount: u64,
    pub punish_coin_amount: u64,
    pub orderbook_to_init_time: u64,
    pub swap_coin_in_amount: u128,
    pub swap_pc_out_amount:  u128,
    pub swap_acc_pc_fee:    u64,
    pub swap_pc_in_amount:  u128,
    pub swap_coin_out_amount: u128,
    pub swap_acc_coin_fee:  u64,
}
Entegratör açısından önemli alanlar:
  • coin_vault, pc_vault — havuzun SPL Token vault’ları. Serum/OpenBook kuralına göre coin token_0’dır (temel), pc token_1’dir (fiyat).
  • coin_decimals, pc_decimals — mint’lerle eşleşir.
  • open_orders, target_orders, market — her swap/deposit/withdraw talimatına geçilmelidir.
  • fees.swap_fee_numerator / swap_fee_denominator — birleşik işlem ücreti. Varsayılan 25 / 10_000 = %0,25.
  • status — işlemleri kontrol eden bitmask. AdminSetStatus aracılığıyla yönetici tarafından ayarlanabilir.
  • state_data.need_take_pnl_* — brüt biriken ücretler ile tarama yapılan arasındaki delta. TakePnl bunları sıfırlar.

OpenBook bağlantısı

Artık aktif değil. AMM v4 havuzları artık likiditeyi OpenBook’a paylaşmaz — limit emir ızgarası devre dışı bırakılmıştır. Bu bölümde açıklanan OpenBook hesapları, her havuzun AmmInfo’sinde kalır ve geriye dönük uyumluluk için V1 swap uç noktaları tarafından (ve Initialize, Deposit, Withdraw tarafından) doğrulanmaya devam eder; ancak onlar tarafından referans verilen defter üzerindeki durum pratik olarak boştur. Aşağıdaki V2 swap uç noktalarını kullanın, kanonik yürütme yolu budur: V2 swap uç noktaları (SwapBaseInV2 / SwapBaseOutV2) bu hesapları tamamen atlarlar ve günümüzde kanonik yürütme yolunu temsil ederler.
Bir AMM v4 havuzunda herhangi bir V1 okuma veya yazma talimatı çağırdığınızda, OpenBook hesaplarını geçmelisiniz. Program onları yeniden türetir ve doğrular; bu nedenle uyumsuz bir küme geçirmek geri döner. (V2 swap varyantları bu hesapları hiç gerektirmez.)
const market = ...;  // OpenBook piyasası PublicKey

// OpenBook'un piyasa hesabında gösterdiği alanlar:
const marketDecoded = OpenBookMarket.decode(marketAccountData);
const {
  bids:           serumBids,
  asks:           serumAsks,
  eventQueue:     serumEventQueue,
  requestQueue:   serumRequestQueue,
  baseVault:      serumCoinVault,
  quoteVault:     serumPcVault,
  vaultSignerNonce,
} = marketDecoded;

const serumVaultSigner = PublicKey.createProgramAddressSync(
  [market.toBuffer(), u64ToBytes(vaultSignerNonce)],
  OPENBOOK_PROGRAM_ID,
);
AMM’nin amm_open_orders’ı OpenBook tarafından sahip olunan hesaptır ve havuzun bu piyasadaki limit emir durumunu tutar: aktif emirler, kapatılmış bakiyeler, yönlendiriciler, vb. amm_target_orders AMM tarafı: AMM’nin amaçlanan ızgarasını tutar (her emir yuvası için fiyat/boyut); bu nedenle program şu anda ne yayınlandığıyla ucuz bir şekilde karşılaştırabilir ve farkı yer/iptal edebilir.

Authority PDA’ları

Tüm AMM v4 programı için tam olarak bir amm_authority PDA’sı vardır. Tohumu önemsizdir (["amm authority"]) ve bump’ı her AmmInfo’da depolanır. Bu authority, tüm AMM v4 havuzları için tüm token hareketlerini imzalar.
const AMM_V4_PROGRAM_ID = new PublicKey(
  "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
);
const [ammAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("amm authority")],
  AMM_V4_PROGRAM_ID,
);
OpenBook işlemlerini imzalamak için havuz başına türetilen ayrı bir havuz kapsamlı authority vardır (amm_authority yukarıda aslında bu programın tasarımında her ikisini de kapsar; farklı sürümler farklı türetim kullandığından, kodda belirli havuzun AmmInfo.nonce’sini kontrol edin).

Vault’lar

Havuzun SPL Token vault’ları, sahibi amm_authority olan standart token hesaplarıdır. ATA değil — adresler Initialize’de ["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id] tohumlarıyla türetilen belirli PDA’lardır. Adresler AmmInfo’da depolanır; türetim tek seferlik bir merak konusudur. Token-2022 desteklenmez. Program tüm vault hareketleri için SPL Token’ın program ID’sini sabit kodlar. AMM v4 havuzunu Token-2022 mint’ine bağlamaya çalışmak Initialize’de başarısız olur.

LP mint

Otoritesi amm_authority olan klasik SPL Token mint’i. Toplam arz, LP’nin havuza sahiplik oranını izler; LP’yi yakarak her iki vault’tan pro-rata token döner. AMM v4 CPMM’den daha eski olduğundan, havuz durumunda lp_supply yansıması yoktur — mint’in zincir üzerinde arzını doğrudan okuyun.

Durum bitmask’ı

AmmInfo.status, işlemleri kontrol eder. Bitler (konum program sürümleri arasında farklı olabilir — kaynaktan doğrulayın):
BitBayrakEtki
0SWAP_DISABLEDSwap* reddeder.
1DEPOSIT_DISABLEDDeposit reddeder.
2WITHDRAW_DISABLEDWithdraw reddeder.
3CLMM_LIKE_MIGRATEOperasyonlar tarafından kullanılan geçiş kapısı bayrak.
Raydium multisig’i bunları AdminCancelOrders, AdminSetParams, vb. aracılığıyla ayarlar.

Gözlem / oracle

AMM v4’ün adanmış bir gözlem hesabı yoktur. Zincir üstü TWAP’a ihtiyaç duyan diğer protokoller, OpenBook’un defter geçişlerini dolaylı olarak tüketir veya zincir dışından okur. Eğer program desteğiyle Raydium TWAP’a ihtiyacınız varsa CPMM veya CLMM kullanın.

Bir havuzun hesaplarını sıfırdan türetmek

AMM v4, deterministik çift başına PDA’lar için tasarlanmadığından (Solana kuralını önceden yayınladığından), kanonik amm_id tohum anahtar olarak türetilir:
ammId = createWithSeed(
  owner: ammAuthority,
  seed:  marketPubkey.toBase58().slice(0, 32),
  programId: AMM_V4_PROGRAM_ID,
)
Aynı tohum anahtar modeli amm_open_orders, amm_target_orders, amm_withdraw_queue, pool_temp_lp, pool_coin_token_account, pool_pc_token_account ve lp_mint’e uygulanır. SDK ve API bunları önceden hesaplar; bkz. raydium-sdk-v2’nin Liquidity.getAssociatedPoolKeys. Pratikte, entegratörler havuzun tam hesap setini GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID>’den veya SDK’den okurlar. El ile türetme nadiren gereklidir.

Yaşam döngüsü hızlı referansı

OlayOluşturulan HesaplarSilinen Hesaplar
Initialize2amm_info, amm_open_orders, amm_target_orders, vault’lar, lp_mint, pool_withdraw_queue, pool_temp_lp
Deposit— (kullanıcı LP ATA’sı oluşturabilir)
Withdraw
SwapBaseIn / SwapBaseOut— (kullanıcı ATA’sı oluşturabilir)
TakePnl
MonitorStep (crank)
Havuzlar ve hesapları süresiz olarak devam eder. Likidite tamamen çekilse bile, AmmInfo kalır.

Nerede ne okumak

Kaynaklar: