Bazı hatalar her seferinde ortaya çıkar. Bazıları ise belirli bir düzene göre ortaya çıkar. 2026.9'da düzeltilen Huobi ve HTX imzalama hatası ikinci türdendi ve bu da hatayı tespit etmeyi çok daha zorlaştırıyordu: UTC dışında çalışan bir sunucuda, özel istekler her günün belirli bir bölümünde başarısız oluyor, günün geri kalanında ise sorunsuz çalışıyordu; bu da, birisi örüntünün saatle örtüştüğünü fark edene kadar tam anlamıyla aralıklı bir kimlik doğrulama sorunu gibi görünüyordu.
İki farklı saatten oluşturulan bir zaman damgası
Huobi ve HTX, imzalanmış isteğin yyyy-MM-ddTHH:mm:ss biçiminde UTC cinsinden bir zaman damgası taşımasını gerektirir. Hem TsgcWSAPI_Huobi hem de TsgcWSAPI_HTX tarafından ortak olarak kullanılan TsgcWS_API_Huobi_Base içindeki imzalama rutini, bu zaman damgasını iki farklı kaynaktan oluşturuyordu: tarih kısmı yerel sistem saatinden, saat kısmı ise UTC'den alınıyordu. Çoğu makinede günün büyük bir bölümünde yerel tarih ile UTC tarihi aynı değere sahip olduğundan, hiçbir sorun görünmüyordu. UTC gece yarısına yakın saatlerde, yerel saat dilimi farkı nedeniyle bu sınırın diğer tarafında kalan herhangi bir sunucuda, tarih ve saat birbiriyle uyuşmaz hale geliyor, Huobi'nin kendi tarafında hesapladığı imza eşleşmiyor ve istek reddediliyordu.
Düzeltme, hem tarihi hem de saati aynı UTC değerinden alır:
uses
sgcBase_Helpers;
var
vUTC: TDateTime;
vTimeStamp: string;
begin
vUTC := sgcGetDateTimeAsUTC;
vTimeStamp := FormatDateTime('yyyy-mm-dd', vUTC) + 'T' +
FormatDateTime('hh:nn:ss', vUTC);
end;
Yapılandırılması gereken hiçbir şey yoktur. TsgcWSAPI_Huobi ve TsgcWSAPI_HTX ikisi de aynı imzalama rutinini çağırır, bu nedenle ikisi de birlikte düzeltilmiş olur:
uses
sgcWebSocket, sgcWebSocket_APIs;
var
oHuobi: TsgcWSAPI_Huobi;
begin
oHuobi := TsgcWSAPI_Huobi.Create(nil);
oHuobi.Client := oClient;
oHuobi.Huobi.ApiKey := 'your_api_key';
oHuobi.Huobi.ApiSecret := 'your_api_secret';
oClient.Active := True;
// Authentication now signs with a timestamp taken entirely from UTC.
oHuobi.SubscribeOrderUpdates('btcusdt');
end;
Günlüklerinizde özel Huobi veya HTX isteklerinin belirgin bir tetikleyici olmadan gelip gidiyormuş gibi görünen bir şekilde başarısız olduğunu görüyorsanız, özellikle sunucularınız UTC'de çalışmıyorsa, nedeni büyük olasılıkla budur.
Yeniden bağlanma sırasında kaybolan özel abonelikler
Huobi, aynı çalışmada düzeltilen ayrı bir yeniden bağlanma hatasından etkilenen birkaç borsa istemcisinden biriydi: WatchDog yeniden bağlandıktan sonra, özel abonelikler, emirler, bakiyeler, gerçekleşen işlemler yeniden gönderilmiyordu. Yeniden bağlanmanın kendisi başarılı oluyor ve öyle günlüğe kaydediliyordu, dolayısıyla bağlantı kopmadan önce almakta olduğunuz özel akışların artık sessizce kaybolduğuna dair hiçbir belirti yoktu. Bu yeniden gönderim artık, bir yeniden bağlanmanın ardından genel piyasa verisi aboneliklerini zaten geri yükleyen aynı yeniden abone olma yolunun bir parçasıdır.
Güncelleme
Her iki düzeltme de doğrudan uygulanabilir. Ayarlanması gereken bir özellik veya değiştirilmesi gereken bir kod yoktur; imza artık basitçe doğrudur ve yeniden bağlanma sırasındaki yeniden gönderim artık özel aboneliklerinizi de içerir.
Sorularınız, geri bildiriminiz mi var ya da geçiş konusunda yardıma mı ihtiyacınız var? Bizimle iletişime geçin — yanıtı kodu yazan kişilerden alacaksınız.
