2026.9'a dört ayrı Kraken hatası girdi ve bunların hiçbiri kodu bir kez okuyarak yakalayabileceğiniz türden değildi. Her biri yalnızca belirli bir koşulda ortaya çıkıyor: bağlantı anında yanlış uç nokta, makineden hiç çıkmayan bir istek gövdesi, birkaç yüz milisaniye erken gerçekleşen bir yeniden bağlanma. Dördü de düzeltildi ve dördünü de anlamaya değer, çünkü her durumda hatanın belirtisi tamamen başka bir şeymiş gibi görünüyor.
Spot istemcisi v2 uç noktasına v1 konuşuyordu
TsgcWSAPI_Kraken, v1 şemasını oluşturur ve ayrıştırır: event, pair, subscription, subscriptionStatus, systemStatus. Bu şemanın bir nedeni var, bu bileşendeki her subscribe çağrısı ve her olay işleyicisi bu şemaya göre yazılmış. Ancak bağlandığı uç nokta varsayılan olarak Kraken'in v2 WebSocket'iydi ve bu tamamen farklı bir şema konuşuyor: method, params, channel, type. Bağlantı hatasız açılıyordu. Sadece tek bir abonelik onayı veya durum olayı üretmiyordu, çünkü sunucu istemcinin hiç ayrıştırmadığı bir biçimde yanıt veriyordu.
Kraken.Version artık varsayılan olarak 1 değerini alıyor ve bileşen buna karşılık gelen v1 uç noktasını seçiyor:
uses
sgcWebSocket, sgcWebSocket_APIs;
var
oKraken: TsgcWSAPI_Kraken;
begin
oKraken := TsgcWSAPI_Kraken.Create(nil);
oKraken.Client := oClient;
// Version defaults to 1, matching the event/pair/subscription
// schema this component already builds and parses.
oKraken.Kraken.Version := 1;
oClient.Active := True;
oKraken.SubscribeTicker('XBT/USD');
end;
Uygulamanız bir şekilde eski, sessizce yanlış olan varsayılan değere güveniyorduysa, bu zaten v1 olaylarını da hiç almadığı anlamına gelir, dolayısıyla korunması gereken çalışan bir şey yok. Version := 2 değerini açıkça ayarlamak, o şemaya bilerek karşı geliştirme yapanlar için hâlâ v2 uç noktasına bağlanıyor; bu durumda RawMessages etkinleştirilmeli ve yük OnKrakenData veya OnMessage içinde işlenmelidir.
Futures emirleri GET olarak gönderiliyordu, gövde atılıyordu
Bu hata daha sessiz ve daha ciddi. Kraken Futures REST istemcisindeki her özel istek, bir emir gönderme, düzenleme, iptal etme, bir transfer, bir para çekme işlemi, HTTP GET olarak gönderiliyordu. İmzalı istek gövdesi doğru şekilde oluşturuluyor, hesaplanıyor, biçimlendiriliyor, gönderilmeye hazır hale getiriliyordu ve ardından atılıyordu, çünkü bir GET isteğinin gövdeyi koyacağı bir yeri yok. Kraken parametresiz bir GET aldı ve bunu reddetti ya da yok saydı. Bu çağrıların hiçbiri çalışmıyordu.
uses
sgcHTTP_API_Kraken;
var
oKraken: TsgcHTTP_API_Kraken_Futures_Rest;
oOrder: TsgcHTTPKrakenFuturesOrder;
begin
oKraken := TsgcHTTP_API_Kraken_Futures_Rest.Create(nil);
oKraken.KrakenOptions.ApiKey := 'your_api_key';
oKraken.KrakenOptions.ApiSecret := 'your_api_secret';
oOrder := TsgcHTTPKrakenFuturesOrder.Create;
try
oOrder.OrderType := kotfLMT;
oOrder.Symbol := 'PF_XBTUSD';
oOrder.Side := kosfBuy;
oOrder.Size := 1;
oOrder.LimitPrice := 30000;
// SendOrder now posts through DoHTTP_POST_PRIVATE, body included.
ShowMessage(oKraken.SendOrder(oOrder));
finally
oOrder.Free;
end;
end;
SendOrder, EditOrderByOrderId, EditOrderByCliOrderId, CancelOrderByOrderId, CancelOrderByCliOrderId, Transfer ve WithdrawalToSpotWallet artık hepsi, imzalı gövde isteğe gerçekten eklenmiş şekilde, özel POST yolundan geçiyor.
Yeniden bağlanmada özel abonelikler kayboluyordu
WatchDog yeniden bağlanıyor, günlükte temiz bir yeniden bağlanma görünüyor ve o andan itibaren orders, balance ve fills kanallarınız ortadan kayboluyor. Hiçbir hata yok. Hiçbir kayıt yok. Yeniden bağlanma tamamen başarılı görünüyordu, çünkü bağlantının kendisi gerçekten başarılı oluyordu; yalnızca bağlantı kesilmeden önce verilen özel abonelikler sonrasında hiç yeniden oynatılmıyordu. Bu durum hem Kraken spot hem de Kraken Futures'ı, aynı geçişte düzeltilen birkaç başka borsa istemcisiyle birlikte etkiliyordu. Artık bu, genel piyasa verisi aboneliklerinizi yeniden bağlanma sonrasında zaten geri yükleyen standart resubscribe yeniden oynatma yolunun bir parçası.
Futures, oturum kimlik doğrulaması tamamlanmadan yeniden abone oluyordu
Özellikle Kraken Futures'a özgü, yakından ilişkili bir hata daha vardı: yeniden bağlanma sonrasında, etkin aboneliklerin yeniden oynatılması, kimlik doğrulama el sıkışması gerçekte tamamlanmadan önce çalışabiliyordu. Subscribe istekleri, Kraken'in henüz kimlik doğrulamadığı bir oturumda gönderiliyordu, bu yüzden özel olanlar reddediliyordu, yine istemcide nedenini gösteren hiçbir şey olmadan. Yeniden oynatma artık yeniden abone olmadan önce kimlik doğrulamanın tamamlanmasını bekliyor.
Güncelleme
Dört düzeltmenin tümü doğrudan uygulanabilir, taşınması gereken bir API yok. Dikkat edilmesi gereken tek davranış değişikliği, Kraken.Version varsayılanının önceki, fiilen işlevsiz değerden 1'e dönmesi; kodunuz zaten açıkça Version := 2 ayarlıyorsa, sizin için hiçbir şey değişmez.
Sorularınız, geri bildiriminiz veya taşıma konusunda yardıma mı ihtiyacınız var? Bizimle iletişime geçin — kodu yazan kişilerden bir yanıt alacaksınız.
