Ana içeriğe atla
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 kendi programıdır; havuz tarafı hesap yapısı AMM v4’e benzer (AmmInfo, vault’lar, yetki), ve ayrıca arama tablosunu depolayan bir ModelDataInfo hesabına sahiptir. Bu sayfa her ikisini de kapsar.

Envanter

Saf AMM. Stable AMM tüm likiditeyi kendi vault’larında tutar ve OpenBook’a bağlı değildir. Yaşamının erken döneminde bir OpenBook pazar yapıcılığı yolu taşıdı, ancak bu yol yıllardır hareketsiz kalmıştır ve 2026-06-22 yükseltmesi kalan kodu kaldırmıştır. Aşağıdaki serum_* pazar hesapları ve amm_open_orders bu nedenle eski: geriye dönük uyumluluk için eski düzen işlemlerinde hala görünebilirler, ancak program bunları doğrulamaz veya okumaz ve yeni düzen talimatları bunları tamamen çıkarır.
Aktif envanter artık tamamen havuz tarafıdır:
KategoriHesapSahibiRol
HavuzAmmInfoStable programıHavuz durumu, vault’lar ve model-veri hesabına referanslar.
Havuzamm_authorityStable programıVault hareketlerini imzalayan programa ait PDA. Tüm Stable AMM havuzları arasında paylaşılır.
Havuzamm_target_ordersStable programıHavuz tarafı ızgara hesabı (düzenlerde tutulur; artık OpenBook siparişlerini yönlendirmez).
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.
Eskiamm_open_ordersOpenBookHavuzun eski OpenBook OpenOrders hesabı. Kullanılmıyor.
Eskiserum_marketOpenBookOpenBook pazarı. Kullanılmıyor.
Eskiserum_bids, serum_asksOpenBookAlış/satış kuyrukları. Kullanılmıyor.
Eskiserum_event_queueOpenBookOlay kuyruğu. Kullanılmıyor.
Eskiserum_coin_vault, serum_pc_vaultSPL TokenOpenBook pazar düzeyi vault’ları. Kullanılmıyor.
Eskiserum_vault_signerOpenBookPazar düzeyi vault imzalayıcısı. Kullanılmıyor.

AmmInfo

Kök durum hesabı. Düzen AMM v4’e neredeyse özdeştir — havuz parametreleri, ondalıklar, ücretler, vault/mint referansları — bir ekleme ile: arama tablosuna 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, swap'lar, 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,            // eski: OpenBook OpenOrders (ayrıştırmadan sonra kullanılmıyor)
    pub serum_market: Pubkey,           // eski: ayrıştırmadan sonra kullanılmıyor
    pub serum_program: Pubkey,          // eski: ayrıştırmadan sonra kullanılmıyor
    pub target_orders: Pubkey,
    pub amm_admin: Pubkey,              // yönetici 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 erişilen 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’ı 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 (örn., coin tutarı)
    pub y: u64,         // tablo Y (örn., pc tutarı)
    pub price: u64,     // (x, y) konumundaki 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ü (örn., 10^6)
    pub valid_data_count: u64,          // kaç eleman doldurulmuş
    pub elements: [DataElement; 50000], // tablonun kendisi
}
Yaşam döngüsü: Bu tabloları oluşturan kurulum talimatları — InitModelData (hesabı oluşturdu) ve UpdateModelData (elemanları doldurdu, valid_data_count ayarladı) — 2026-06-22 yükseltmesinde kaldırıldı. Mevcut havuzlardaki tablolar artık sabitlenmiştir. Çalışma zamanında, kalan çağrılabilir talimatlar bunları hala tüketir:
  • Swap / deposit / withdraw, elements[0..valid_data_count] içinde ikili arama ve enterpolasyon yapan arama işlevlerini çağırır.

DataElement

Tablodaki atomik giriş. İkili aramanın çalışması için sıralanmış olmalıdır (x artan, y azalan, fiyat artan).
pub struct DataElement {
    pub x: u64,         // X koordinatı (örn., token_a bakiyesi, çarpan tarafından ölçeklenmiş)
    pub y: u64,         // Y koordinatı (örn., token_b bakiyesi, çarpan tarafından ölçeklenmiş)
    pub price: u64,     // fiyat (ölçeklenmiş biçimde x/y, çarpan tarafından ölçeklenmiş)
}
Tabloyu doldururken, yönetici bunları önceden ölçeklenmiş olarak belirtir. Program sıra sırasını zincir üzerinde doğrulamaz (hız için), bu nedenle yanlış sıralama yanlış tekliflere neden olur.

Yetki ve vault’lar

AMM v4 ile aynı:
  • amm_authority, ["amm authority"] tohumu ile türetilen tek bir programa geniş PDA’dır. Tüm havuz vault’larına sahiptir ve hareketlerini imzalar.
  • Vault’lar, sahibi amm_authority olan SPL Token hesaplarıdır, ATA değildir.
Token-2022 desteklenmez.

Durum bitmask’ı

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

Ücret ve PnL izlemesi

out_put yapısı şunları izler:
  • need_take_pnl_coin, need_take_pnl_pc — tahakkuk eden ancak henüz temizlenmemiş protokol ücretleri. WithdrawPnl bunları çıkarır.
  • swap_coin_in_amount, swap_pc_in_amount, vb. — analitik sayaçları.
Havuz varlığı hesaplaması (ayrıştırmadan sonra). Artık OpenBook açık siparişleri olarak hiçbir fon emanet edilmediğinden, havuzun toplam varlıkları artık tamamen vault’lardan hesaplanır:
Eski: toplam varlıklar = vault bakiyeleri + açık sipariş fonları (native_coin_total / native_pc_total) − bekleyen PnL (need_take_pnl)
Yeni: toplam varlıklar = vault bakiyeleri − bekleyen PnL (need_take_pnl)
OpenOrders bakiyelerinden havuz değerini yeniden oluşturan indeksleyiciler ve alıntı kodu bu terimi bırakmalıdır.

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’sı ve araçları bunu şeffaf bir şekilde işler; entegratörler nadiren manuel olarak tahsis etmek zorunda kalırlar.

Hesapları sıfırdan türetme

AMM v4 gibi, Stable AMM tohumlanmış anahtarlar kullanır (saf PDA’lar değil). Kanonik 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 siparişleri vb. için benzer şekilde. Uygulamada, önceden hesaplanmış adresleri getirmek için SDK veya API’yi kullanın.

Nerede ne okuyacağınız

Kaynaklar: