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 →
Stable AMM, AMM v4’ün havuz tarafı hesap yapısını (AmmInfo, vault’lar, authority) paylaşır ve ayrıca arama tablosunu depolayan bir ModelDataInfo hesabı gerektirir. Bu sayfa her ikisini de kapsar.

Envanter

Bir Stable AMM havuzu tam olarak bir OpenBook piyasasına bağlıdır. Tam envanter AMM v4’ü yakından yansıtır:
KategoriHesapSahibiRol
HavuzAmmInfoStable programıHavuz durumu, vault’lar, OpenBook ve model-data hesabına referanslar.
Havuzamm_authorityStable programıVault hareketlerini imzalayan programa ait PDA. Tüm Stable AMM havuzları arasında paylaşılan.
Havuzamm_open_ordersOpenBookHavuzun OpenBook OpenOrders hesabı.
Havuzamm_target_ordersStable programıLimit emirleri için havuz tarafı ızgarası.
Havuzpool_coin_token_accountSPL TokenHavuzun coin tarafı vault’u.
Havuzpool_pc_token_accountSPL TokenHavuzun pc tarafı vault’u.
Havuzlp_mintSPL TokenFungible LP mint’i.
Modelmodel_data_accountStable programıArama tablosu: 50.000 × DataElement.
Piyasaserum_marketOpenBookOpenBook piyasası.
Piyasaserum_bids, serum_asksOpenBookAlış/satış kuyrukları.
Piyasaserum_event_queueOpenBookOlay kuyruğu.
Piyasaserum_coin_vault, serum_pc_vaultSPL TokenOpenBook piyasa düzeyi vault’ları.
Piyasaserum_vault_signerOpenBookPiyasa düzeyi vault imzalayıcısı.

AmmInfo

Kök durum hesabı. Düzeni AMM v4’e neredeyse özdeş — havuz parametreleri, ondalıklar, ücretler, vault/mint referansları — bir ekleme ile: arama tablosunu işaret eden bir model_data_key alanı.
// raydium-stable/program/src/state.rs (kısaltılmış)
pub struct AmmInfo {
    pub account_type: u64,              // = 0 (AmmAccount)
    pub status: u64,                    // bitmask: swap/deposit/withdraw/crank etkin
    pub nonce: u64,                     // amm_authority için bump
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals: u64,
    pub state: u64,                     // durum makinesi (IdleState, vb.)
    pub reset_flag: u64,
    pub min_size: u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,             // OpenBook'u yansıtır
    pub pc_lot_size: u64,
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,
    pub abort_trade_factor: u64,
    pub price_tick_multiplier: u64,
    pub price_tick: u64,
    
    pub fees: Fees,                     // aşağıya bakın
    pub out_put: OutPutData,            // PnL, swaplar, ceza tutarları
    
    pub coin_vault: Pubkey,
    pub pc_vault: Pubkey,
    pub coin_mint: Pubkey,
    pub pc_mint: Pubkey,
    pub lp_mint: Pubkey,
    pub model_data_key: Pubkey,         // ← ARAMA TABLOSU
    pub open_orders: Pubkey,            // OpenBook OpenOrders
    pub serum_market: Pubkey,
    pub serum_program: Pubkey,
    pub target_orders: Pubkey,
    pub amm_admin: Pubkey,              // admin anahtarı
    pub client_order_id: u64,
    pub lp_amount: u64,                 // LP arzı
    pub lp_net: u64,                    // LP değer metriği
    pub padding: [u64; 61],
}

pub struct Fees {
    pub min_separate_numerator: u64,
    pub min_separate_denominator: u64,
    pub trade_fee_numerator: u64,       // 25
    pub trade_fee_denominator: u64,     // 10_000 → %0,25
    pub pnl_numerator: u64,             // 12
    pub pnl_denominator: u64,           // 100 → ücretin %12'si = hacmin %0,03'ü
    pub swap_fee_numerator: u64,        // 25
    pub swap_fee_denominator: u64,      // 10_000
}

pub struct OutPutData {
    pub need_take_pnl_coin: u64,        // tahakkuk eden protokol ücreti (coin)
    pub need_take_pnl_pc: u64,          // tahakkuk eden protokol ücreti (pc)
    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_pc_in_amount: u128,
    pub swap_coin_out_amount: u128,
    pub swap_pc_fee: u64,
    pub swap_coin_fee: u64,
}
Entegratör tarafından karşılaşılan anahtar alanlar:
  • model_data_key — arama tablosunun adresi. Her talimata geçirilmelidir.
  • fees — AMM v4 ile özdeş yapı. Varsayılan olarak %0,25 işlem ücreti, %0,22 LP / %0,03 protokol bölünmesi.
  • coin_vault, pc_vault — havuzların vault’ları.
  • status — swap/deposit/withdraw/crank’ı kapı kültürleri kontrol eden bitmask.
  • out_put.need_take_pnl_*WithdrawPnl tarafından temizlenir.

ModelDataInfo

Arama tablosu. Fiyat/miktar noktalarının geniş bir seyrek dizisi.
// raydium-stable/program/src/state.rs
pub const ELEMENT_SIZE: usize = 50000;

pub struct DataElement {
    pub x: u64,         // tablo X (ör., coin miktarı)
    pub y: u64,         // tablo Y (ör., pc miktarı)
    pub price: u64,     // (x, y) adresindeki fiyat
}

pub struct ModelDataInfo {
    pub account_type: u64,              // = 2 (ModleDataAccount)
    pub status: u64,                    // Initialized veya Uninitialized
    pub multiplier: u64,                // x, y için ölçek faktörü (ör., 10^6)
    pub valid_data_count: u64,          // kaç eleman doldurulmuş
    pub elements: [DataElement; 50000], // tablo kendisi
}
Yaşam döngüsü:
  1. InitModelData hesabı oluşturur ve status = Initialized, multiplier = <yönetici tarafından sağlanan>, valid_data_count = 0 ayarlar.
  2. UpdateModelData (işlem başına 5 adede kadar çağrılabilir) elemanları şu şekilde doldurur:
    • Giriş: (index: u64, DataElement) çiftleri dizisi.
    • Her birini elements[index]’e yazar.
    • index >= valid_data_count ise valid_data_count’ı artırır.
  3. Swap/deposit/withdraw elements[0..valid_data_count] içinde ikili arama ve enterpolasyon yapan arama işlevlerini çağırır.

DataElement

Tablodaki atomik girdi. İkili aramanın işlemesi için sıralanmalıdır (x artan, y azalan, fiyat artan).
pub struct DataElement {
    pub x: u64,         // X koordinatı (ör., token_a bakiyesi, çarpan ile ölçeklenmiş)
    pub y: u64,         // Y koordinatı (ör., token_b bakiyesi, çarpan ile ölçeklenmiş)
    pub price: u64,     // fiyat (x/y ölçeklenmiş biçimde, çarpan ile ölçeklenmiş)
}
Tabloyu doldururken, yönetici bunları önceden ölçeklenmiş şekilde belirtir. Program zincir üzerinde sıra sırasını doğrulamaz (hız için), bu nedenle yanlış sıralanma yanlış alıntılara neden olur.

Authority ve vault’lar

AMM v4 ile aynı:
  • amm_authority ["amm authority"] tohumu ile türetilmiş tek programa özgü bir PDA’dır. Tüm havuz vault’larına sahip olur ve hareketlerini imzalar.
  • Vault’lar sahibi amm_authority olan, ATA olmayan SPL Token hesaplarıdır.
Token-2022 desteklenmez.

Status bitmask

AMM v4 ile özdeş. Swap/deposit/withdraw/crank’ın etkin olup olmadığını kontrol eder.

Ücret ve PnL izlemesi

AMM v4 ile aynı. out_put yapısı şunları izler:
  • need_take_pnl_coin, need_take_pnl_pc — tahakkuk eden ancak henüz temizlenmemiş protokol ücretleri. WithdrawPnl bunları dışarı çıkarır.
  • swap_coin_in_amount, swap_pc_in_amount, vb. — analitik sayaçları.

Hesap boyutu

ModelDataInfo büyüktür (~1,2 MB, çünkü 50.000 eleman × eleman başına 24 bayt). Bu nedenle bir Stable havuzu oluşturmak açık kira ve hesap ön-tahsisini gerektirir. Raydium SDK ve araçları bunu şeffaf bir şekilde yönetir; entegratörler nadiren manuel tahsis yapması gerekir.

Hesapları sıfırdan türetme

AMM v4 gibi, Stable AMM tohum anahtar (saf PDA’lar değil) kullanır. Kurallı havuz kimliği şu şekilde türetilir:
ammId = createWithSeed(
  owner: ammAuthority,
  seed: marketPubkey.toBase58().slice(0, 32),
  programId: STABLE_PROGRAM_ID,
)
Vault’lar, LP mint’i, hedef emirler vb. için benzer şekilde. Uygulamada, önceden hesaplanmış adresleri getirmek için SDK veya API’yi kullanın.

Nereyi okumak gerekir

Kaynaklar: