Piyasa Yapıcı Koruması (MMP)
Piyasa yapıcılar için dolum penceresi limitleri ve otomatik iptal davranışı.
Cüzdan kapsamlı tüm MMP uç noktaları EIP-712 kimlik doğrulaması gerektirir. Yapılandırma yazma işlemleri, cüzdan sahibini veya o cüzdan için yetkilendirilmiş bir ajanı kabul eder. Okuma işlemleri yalnızca sahibe açıktır ve yetkilendirilmiş ajan imzalarını reddeder.
MMP, dolumların ait olduğu işlem hesabına uygulanır. Portföy teminatlı bir
yönetici için, yönetici cüzdanı adına imzalanan okuma ve yazma işlemleri o yöneticinin
Account.sol işlem hesabına, yani emir girişinin kullandığı hesabın aynısına çözümlenir.
Yanıtlar bu hesabı wallet_address alanında raporlar ve MMP nonce dizisi
bu hesaba aittir.
Yazma sonrası okuma tutarlılığı için, herhangi bir MMP değişikliği isteğinde X-Hypercall-Fence-Wait: 1
gönderin. Başarılı bir yanıt bu durumda X-Hypercall-Fence içerir; bu değeri
kimlik doğrulamalı GET isteğinde X-Hypercall-Fence olarak geri gönderin. İsteğe bağlı bekleme
başlığı olmayan değişiklik istekleri bilinçli olarak fence döndürmez.
Genel Bakış
MMP, piyasa yapıcıları hızlı ve aleyhte gerçekleşen dolumlardan şu yollarla korur:
- Kayan bir zaman penceresi içinde kümülatif dolum metriklerini izleyerek
- Limitler aşıldığında emirleri iptal ederek
- Aynı cüzdan+dayanak varlık için MMP etkin diğer tüm emirleri otomatik olarak iptal ederek
Yapılandırma
MMP Yapılandırmasını Ayarlama
Uç nokta: POST /mmp-config
İstek: SetMmpConfigRequest
{
"wallet": "0x...",
"currency": "BTC",
"interval_ms": 60000,
"frozen_time_ms": 300000,
"qty_limit": "1000000",
"delta_limit": "10.0",
"vega_limit": "5.0",
"nonce": 1,
"signature": "0x..."
}
Alanlar:
wallet: Cüzdan adresicurrency: Dayanak varlık para birimi (ör."BTC","ETH")interval_ms: Milisaniye cinsinden kayan pencere uzunluğufrozen_time_ms: Tetiklenme sonrası dondurma süresi (milisaniye)qty_limit: İsteğe bağlı miktar limiti (kontrat birimi), ondalık string olarak serileştirilirdelta_limit: İsteğe bağlı delta limiti, ondalık string olarak serileştirilirvega_limit: İsteğe bağlı vega limiti, ondalık string olarak serileştirilirnonce: Tekrar oynatma koruması nonce değeri; kimlik doğrulamalı okumanın döndürdüğü son kaydedilmiş nonce değerinden tam olarak bir fazla olmalıdırsignature: Tüm istek alanları üzerinde EIP-712SetMmpConfigimzası
Yanıt: ApiResponse<MmpConfigData>
MMP Yapılandırmasını Okuma
Uç nokta: GET /mmp-config?wallet=...¤cy=...
Sorgu parametreleri:
wallet(zorunlu)currency(isteğe bağlı filtre)
Zorunlu başlıklar:
X-Hypercall-Expires-At-Ms: Milisaniye cinsinden Unix geçerlilik sonu, en fazla 60 saniye ilerideX-Hypercall-Signature:wallet,currency(belirtilmediğinde boş string) ve başlıktaki geçerlilik sonu üzerindeGetMmpConfigimzası
Kurtarılan imzalayan, cüzdan sahibi olmalıdır. Bu okuma için yetkilendirilmiş ajan imzaları kabul edilmez.
Yanıt: MmpConfigResponse
{
"success": true,
"data": [
{
"wallet_address": "0x...",
"currency": "BTC",
"interval_ms": 60000,
"frozen_time_ms": 300000,
"qty_limit": "1000000",
"delta_limit": "10.0",
"vega_limit": "5.0",
"enabled": true,
"nonce": 1
}
]
}
MMP Yapılandırmasını Silme
Uç nokta: DELETE /mmp-config
İstek: DeleteMmpConfigRequest
{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}
Yanıt: ApiResponse<String>. Başarılı bir komut, cüzdan/dayanak varlık için sayısal
yetki durumunu devre dışı bırakır. X-Hypercall-Fence-Wait: 1 istek başlığı ile
yanıt, projeksiyon tabanlı okuma için X-Hypercall-Fence içerir.
MMP Durumunu Sıfırlama
Uç nokta: POST /mmp-config/reset
İstek: ResetMmpRequest
{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}
Yanıt: ApiResponse<String>. Başarılı bir komut, tekrar oynatılabilir yetki durumundaki MMP dolum
penceresini ve dondurma durumunu temizler. X-Hypercall-Fence-Wait: 1 istek başlığı ile
yanıt, projeksiyon tabanlı okuma için X-Hypercall-Fence içerir.
MMP Davranışı (Anlaşılması Kritik)
Hangi Dolumlar Sayılır
Her dolum, emrinde mmp_enabled=true bulunan her bir tarafın MMP penceresine sayılır;
bu emrin defterde bekleyen (maker) ya da gelen (taker) emir olması fark etmez:
- Bekleyen kotasyonlar: gelen bir emir, sizin defterde bekleyen MMP etkin emrinizle eşleştiğinde, bu dolum pencerenize eklenir. MMP'nin var olma nedeni budur: kotasyonlarınıza karşı ani bir dolum dalgası MMP'yi tetikler ve o dayanak varlıktaki kalan MMP etkin kotasyonlarınızı iptal eder.
- Gelen emirler: likidite alan MMP etkin bir emir, kendi dolumlarını aynı şekilde sayar.
- Kombo ve türetilmiş (implied) emirler: bir paketin korunan her katılımcısı, işlem yaptığı her bacağı sayar; değerlendirme paket başına bir kez yapılır.
- RFQ ve RPI dolumları henüz MMP'ye sayılmaz. Bununla birlikte MMP dondurması, dondurulmuş kotasyon sağlayıcısı için yeni RFQ işlemlerini engeller.
Her dolum sizin kendi tarafınızdan ölçülür: bir alım opsiyonu satan dolum, satıcının penceresine negatif delta, alıcınınkine ise pozitif delta ekler.
Bir emirde mmp_enabled=true olduğu hâlde cüzdanın o dayanak varlık için MMP yapılandırması
yoksa, MMP güvenli tarafta kalarak kapanır (fail closed): ilk dolum tetiklenir ve o cüzdanın
ilgili dayanak varlıktaki MMP etkin emirlerini iptal eder. Emirleri işaretlemeden önce
MMP'yi yapılandırın.
Dolum İşleme Sırası
MMP değerlendirmesi DOLUM SONRASI yapılır:
- Motor eşleştirir ve önce dolumu kabul eder
- Ardından MMP, dolumun korunan her tarafı için kümülatif metrikleri kontrol eder
- Bir tarafın limitleri aşılırsa:
- MMP, o tarafın cüzdanı ve dayanak varlığı için tetiklenir
- Motor
MmpTriggeredolayını yayar - Motor, o cüzdan+dayanak varlık için MMP etkin tüm açık emirleri otomatik olarak iptal eder
- Limiti aşan taraf gelen emirse, kalan miktarı durur ve emir
"MMP triggered during fill processing"nedeniyleCANCELEDdurumuna geçer - Limiti aşan taraf defterde bekleyen maker ise, gelen emir diğer likiditeye karşı eşleşmeye devam eder; maker'ın diğer MMP etkin kotasyonları zaten iptal edilmiştir
Sonuç: MMP tetiklenmeden önce, yapılandırdığınız eşiklerin ötesine geçmenize yol açan dolumlar alabilirsiniz.
Tetiklenme Koşulları
Yapılandırılmış limitlerden herhangi biri aşılırsa MMP tetiklenir:
- Miktar limiti:
cumulative_qty > qty_limit - Delta limiti:
|cumulative_delta| > delta_limit - Vega limiti:
|cumulative_vega| > vega_limit
Kümülatif metrikler kayan pencere (interval_ms) üzerinden hesaplanır.
İptal Davranışı
MMP tetiklendiğinde:
- Tetikleyen gelen emir: kalan miktarı durur, emir
"MMP triggered during fill processing"nedeniyleCANCELEDdurumuna geçer - Tetikleyen bekleyen emir: dolum geçerli kalır; emrin varsa kalan kısmı diğer MMP etkin emirlerle birlikte iptal edilir
- Diğer emirler: Aynı cüzdan+dayanak varlık için MMP etkin tüm açık emirler
"Order canceled by MMP trigger"nedeniyle otomatik olarak iptal edilir
Not: Yalnızca MMP etkin emirler iptal edilir. mmp_enabled=false olan emirler etkilenmez.
Dondurma Davranışı
MMP tetiklendikten sonra:
- Cüzdan ve dayanak varlık
frozen_time_msmilisaniye boyunca dondurulur - Dondurma süresince cüzdan, o dayanak varlıktaki RPI açık artırmalarından ve RFQ'lardan hariç tutulur; cüzdanı dolduracak kombo veya türetilmiş işlemler reddedilir
- Dondurma sırasında MMP etkin bir emirde gerçekleşen doğrudan (outright) dolum yine geçerli kalır, ardından MMP'yi yeniden tetikler ve o cüzdanın ilgili dayanak varlıktaki MMP etkin emirlerini iptal eder
POST /mmp-config/resetdondurmayı erken sonlandırır
Dolum Metriklerinin Hesaplanması
Miktar
- Kaynak: Dolum
sizedeğeri (kontrat birimi) - Kümülatif: Kayan penceredeki tüm dolumların toplamı
Delta
- Kaynak: Dolum sembolü ve GreeksCache üzerinden hesaplanır
- Kümülatif: Kayan penceredeki tüm dolum deltalarının toplamı
Vega
- Kaynak: Dolum sembolü ve GreeksCache üzerinden hesaplanır
- Kümülatif: Kayan penceredeki tüm dolum vegalarının toplamı
Kayan Pencere
Pencereden Çıkarma
interval_ms değerinden daha eski dolumlar pencereden otomatik olarak çıkarılır:
- Çıkarma işlemi, bir sonraki dolum işlenirken, yeni dolum eklenmeden önce çalışır
- Eski dolumlar çıkarıldıkça kümülatif metrikler azaltılır
Pencereyi Sıfırlama
MMP durumunu POST /mmp-config/reset ile sıfırlayın:
- Penceredeki tüm dolumları temizler
- Kümülatif metrikleri sıfıra çeker
- Para biriminin dondurmasını kaldırır
MMP Olayları
MmpTriggered Olayı
Dahili olay (şu anda WS istemcilerine iletilmez):
MmpTriggeredMessage {
wallet: WalletAddress,
currency: String,
reason: String, // "MMP triggered during fill processing" | "MMP triggered by a resting order fill"
timestamp: u64,
}
En İyi Uygulamalar
Yapılandırma
- Uygun limitler belirleyin: Risk toleransınıza ve tipik dolum büyüklüklerinize göre
- Para birimine özgü yapılandırmalar kullanın: Her dayanak varlık için ayrı yapılandırın (BTC, ETH vb.)
- MMP tetiklenmelerini izleyin: Yüksek tetiklenme oranı, hatalı yapılandırılmış limitlere veya aleyhte piyasa koşullarına işaret edebilir
Emir Yönetimi
- MMP'yi seçici olarak etkinleştirin:
mmp_enabled=truedeğerini yalnızca korunmasını istediğiniz emirlerde ayarlayın - Tutarlı para birimi kullanın: Aynı dayanak varlığa ait tüm emirlerin MMP yapılandırmasında aynı para birimini kullandığından emin olun
- MMP iptallerini ele alın: MMP kaynaklı iptalleri tespit edip kotasyonlarınızı ayarlayan bir mantık uygulayın
İzleme
- MMP tetiklenmelerini takip edin:
"MMP triggered during fill processing"ve"Order canceled by MMP trigger"nedenlerini izleyin - Dolum pencerelerini gözden geçirin: Kümülatif pencere metrikleri henüz API üzerinden sunulmamaktadır; dolumlarınızı dayanak varlık bazında kendiniz takip edin
- Limitleri ayarlayın: MMP çok sık tetikleniyorsa limitleri artırın; çok seyrek tetikleniyorsa limitleri azaltın
Sık Karşılaşılan Sorunlar
MMP Çok Sık Tetikleniyor
Nedenler:
- Limitler tipik dolum büyüklükleri için çok düşük
- Aleyhte piyasa koşulları
- Hızlı kotasyon nedeniyle çok sayıda dolum
Çözümler:
qty_limit,delta_limitveyavega_limitdeğerlerini artırın- Pencerede daha fazla doluma izin vermek için
interval_msdeğerini artırın - Kotasyon sıklığını azaltın
MMP Tetiklenmiyor
Nedenler:
- Limitler çok yüksek
- Emirlerde MMP etkin değil (
mmp_enabled=false) - Para birimi uyuşmazlığı (MMP yapılandırma para birimi != emrin dayanak varlığı)
Çözümler:
- Limitleri azaltın
- Emirlerde
mmp_enabled=trueolduğunu doğrulayın - MMP yapılandırma para biriminin emrin dayanak varlığıyla eşleştiğini doğrulayın
Beklenmeyen İptaller
Belirti: Emirler "Order canceled by MMP trigger" nedeniyle iptal edildi, ancak bunu beklemiyordunuz.
Neden: Aynı cüzdan+dayanak varlık için başka bir emir MMP'yi tetikledi.
Çözüm: Biri tetiklendiğinde aynı dayanak varlığa ait tüm MMP etkin emirleri gözden geçirin.