mirror of
https://github.com/JKorf/CryptoExchange.Net.git
synced 2026-10-18 00:50:58 +00:00
a8517d2c768c970b4b78a9e6c0e35a8a69cd56bc
18 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
e823114623 |
CryptoExchange V12 (#281)
* Result types: * (Web)CallResult types are replaced by HttpResult, WebSocketResult and QueryResult with the same logic * Updated result types to record type * Result creation can be done with (Http/WebSocket/Query)Result.Ok(..) and .Fail(..) * Removed implicit result type conversion to bool, `if (result)` no longer works, instead use `if (result.Success)` * Replaced CallResult.SuccessResult with CallResult.Ok() * Fixed result object nullability hinting, for example Data might be null if Success isn't checked for true * Parameters & serialization: * Added support for `enabled` and `disabled` strings to bool converter * Removed ParameterCollection type, has been replaced by Parameters type * Removed ArraySerialization, OrderParameters and ParameterOrderComparer properties from RestApiClient, moved to ParameterSerializationsSettings * Updated RestRequestConfiguration in AuthenticationProvider.ProcessRequest to contain the full RequestDefinition instead of copied fields * Clients: * Updated Api client constructor logging parameter from ILogger to ILoggerFactory? * Added Api client constructor exchange name parameter * Added ToString overrides on base API types * Added Exchange property on BaseApiClient * Added ApiCredentials property on IRestApiClient and ISocketApiClient interfaces * Updated ILogger source from client name to topic specific client name * Removed logging from client creation * Fixed BaseRestClient SetApiCredentials not marked as virtual * Rest: * Added BaseAddress to RequestDefinition object * Updated RestApiClient AuthenticationProvider logic from private to protected and virtual * Removed RestApiClient.SendAsync baseAddress parameter removed * Removed RestApiClient.SendAsync without type parameter * WebSocket: * Updated MessageRouting definition into CreateForEvent for subscriptions and CreateForQuery for queries * Improved Query type safety with CeateForQuery which allows second parameter for specifying the result type * Renamed MessageRouter.CreateWithoutHandler to CreateVoid * Updated SocketApiClient.GetSocketConnection to check connection uri instead of Tag for finding compatible connections * Removed unused UnhandledMessageExpected property SocketApiClient * Fixed issue in SocketApiClient.GetSocketConnection causing requests to always wait the full max 10 seconds when there was a reconnecting socket * Shared APIs: * Updated Option definitions to always require the exchange name as first parameter * Added missing dedicated option types * Added Discover method on ISharedClient interface, returning info on supported capabilities and operations * Added SharedRequest GetParamValue helper method accepting multiple parameter names * Added ResetStaticExchangeParameters method on ExchangeParameters * Added Status property to SharedWithdrawal model * Added TradingModes property to SharedBalance model * Updated ExchangeSymbolCache to support multiple environments and additional key separation * Updated Shared ExchangeParameters parameter names to be case insensitive * Updated code comments * Replaced ExchangeResult with ExchangeCallResult type * Removed AsExchangeResult/ExchangeWebResult * Removed TradingMode from the response model, only maintained on models where it makes sense * Removed IListenKey support, listen keys now rely on internal management with TokenManager * Rate limiting: * Fixed websocket connection attempts counting towards rate limit even when server could not be reached * Removed host from rate limit methods, now part of the already provided RequestDefinition * Added amount parameter to RateLimit Reset method to allow partially resetting the limit * Added TokenManager implementation for automatic listenkey/token management * Added UserClientProvider base class * Added async streaming on UserDataTracker items with StreamUpdatesAsync * Added cancellation token support to UserDataTracker starting * Added Unit type for non-result types * Added ServerError constructor taking ErrorType and message to make it easier to create * Added SupportedEnvironments property to PlatformInfo * Updated SymbolOrderBook DoResyncAsync to return CallResult instead of CallResult<bool> which was redundant * Various small performance improvements |
||
|
|
a896fffdb3 |
Time offset management (#266)
Updated time sync / time offset management for REST API's Added time offset tracking for WebSocket API's Added GetAuthenticationQuery virtual method on AuthenticationProvider Updated AuthenticationProvider GetTimestamp methods to include a one second offset by default Added AuthenticationProvider GetTimestamp methods for SocketApiClient instances Added ClientName property on BaseApiClient, resolving to the type name Added ObjectOrArrayConverter JsonConverterFactory implementation for resolving json data which might be returned as object or array Added UpdateServerTime, UpdateLocalTime and DataAge properties to (I)SymbolOrderBook Added OutputToConsoleAsync method to (I)SymbolOrderBook Updated SymbolOrderBook string representation Added DataTimeLocal and DataAge properties to DataEvent object Added SocketConnection parameter to subscription HandleSubQueryResponse and HandleUnsubQueryResponse methods |
||
|
|
d079796020 |
Websocket performance update (#261)
Performance update: Authentication Added Ed25519 signing support for NET8.0 and newer Added static methods on ApiCredentials to create credentials of a specific type Added static ApiCredentials.ReadFromFile method to read a key from file Added required abstract SupportedCredentialTypes property on AuthenticationProvider base class General Performance Added checks before logging statements to prevent overhead of building the log string if logging is not needed Added ExchangeHelpers.ProcessQueuedAsync method to process updates async Replaced locking object types from object to Lock in NET9.0 and newer Replaced some Task response types with ValueTask to prevent allocation overhead on hot paths Updated Json ArrayConverter to reduce some allocation overhead Updated Json BoolConverter to prevent boxing Updated Json DateTimeConverter to prevent boxing Updated Json EnumConverter caching to reduce lookup overhead Updated ExtensionMethods.CreateParamString to reduce allocations Updated ExtensionMethods.AppendPath to reduce overhead REST Refactored REST message processing to separate IRestMessageHandler instance Split RestApiClient.PrepareAsync into CheckTimeSync and RateLimitAsync Updated IRequest.Accept type from string to MediaTypeWithQualityHeaderValue to prevent creation on each request Updated IRequest.GetHeaders response type from KeyValuePair<string, string[]>[] to HttpRequestHeaders to prevent additional mapping Updated IResponse.ResponseHeaders type from KeyValuePair<string, string[]>[] to HttpResponseHeaders to prevent additional mapping Updated WebCallResult RequestHeaders and ResponseHeaders types to HttpRequestHeaders and HttpResponseHeaders Removed unnecessary empty dictionary initializations for each request Removed CallResult creation in internal methods to prevent having to create multiple versions for different result types Socket Added HighPerformance websocket client implementation which significantly reduces memory overhead and improves speed but with certain limitations Added MaxIndividualSubscriptionsPerConnection setting in SocketApiClient to limit the number of individual stream subscriptions on a connection Added SocketIndividualSubscriptionCombineTarget option to set the target number of individual stream subscriptions per connection Added new websocket message handling logic which is faster and reduces memory allocation Added UseUpdatedDeserialization option to toggle between updated deserialization and old deserialization Added Exchange property to DataEvent to prevent additional mapping overhead for Shared apis Refactored message callback to be sync instead of async to prevent async overhead Refactored CryptoExchangeWebSocketClient.IncomingKbps calculation to significantly reduce overhead Moved websocket client creation from SocketApiClient to SocketConnection Removed DataEvent.As and DataEvent.ToCallResult methods in favor of single ToType method Removed DataEvent creation on lower levels to prevent having to create multiple versions for different result types Removed Subscription<TSubResponse, TUnsubResponse> as its no longer used Other Added null check to ParameterCollection for required parameters Added Net10.0 target framework Updated dependency versions Updated Shared asset aliases check to be culture invariant Updated Error string representation Updated some namespaces Updated SymbolOrderBook processing of buffered updates to prevent additional allocation Removed ExchangeEvent type which is no longer needed Removed unused usings |
||
|
|
6b14cdbf06 |
Feature/9.0.0 (#236)
* Added support for Native AOT compilation * Updated all IEnumerable response types to array response types * Added Pass support for ApiCredentials, removing the need for most implementations to add their own ApiCredentials type * Added KeepAliveTimeout setting setting ping frame timeouts for SocketApiClient * Added IBookTickerRestClient Shared interface for requesting book tickers * Added ISpotTriggerOrderRestClient Shared interface for managing spot trigger orders * Added ISpotOrderClientIdClient Shared interface for managing spot orders by client order id * Added IFuturesTriggerOrderRestClient Shared interface for managing futures trigger orders * Added IFuturesOrderClientIdClient Shared interface for managing futures orders by client order id * Added IFuturesTpSlRestClient Shared interface for setting TP/SL on open futures positions * Added GenerateClientOrderId to ISpotOrderRestClient and IFuturesOrderRestClient interface * Added OptionalExchangeParameters and Supported properties to EndpointOptions * Refactor Shared interfaces quantity parameters and properties to use SharedQuantity * Added SharedSymbol property to Shared interface models returning a symbol * Added TriggerPrice, IsTriggerOrder, TakeProfitPrice, StopLossPrice and IsCloseOrder to SharedFuturesOrder response model * Added MaxShortLeverage and MaxLongLeverage to SharedFuturesSymbol response model * Added StopLossPrice and TakeProfitPrice to SharedPosition response model * Added TriggerPrice and IsTriggerOrder to SharedSpotOrder response model * Added QuoteVolume property to SharedSpotTicker response model * Added AssetAlias configuration models * Added static ExchangeSymbolCache for tracking symbol information from exchanges * Added static CallResult.SuccessResult to be used instead of constructing success CallResult instance * Added static ApplyRules, RandomHexString and RandomLong helper methods to ExchangeHelpers class * Added AsErrorWithData To CallResult * Added OriginalData property to CallResult * Added support for adjusting the rate limit key per call, allowing for ratelimiting depending on request parameters * Added implementation for integration testing ISymbolOrderBook instances * Added implementation for integration testing socket subscriptions * Added implementation for testing socket queries * Updated request cancellation logging to Debug level * Updated logging SourceContext to include the client type * Updated some logging logic, errors no longer contain any data, exception are not logged as string but instead forwarded to structured logging * Fixed warning for Enum parsing throwing exception and output warnings for each object in a response to only once to prevent slowing down execution * Fixed memory leak in AsyncAutoRestEvent * Fixed logging for ping frame timeout * Fixed warning getting logged when user stops SymbolOrderBook instance * Fixed socket client `UnsubscribeAll` not unsubscribing dedicated connections * Fixed memory leak in Rest client cache * Fixed integers bigger than int16 not getting correctly parsed to enums * Fixed issue where the default options were overridden when using SetApiCredentials * Removed Newtonsoft.Json dependency * Removed legacy Rest client code * Removed legacy ISpotClient and IFuturesClient support |
||
|
|
e07f24ea0a | Fixed various info-warnings and spelling issues | ||
|
|
8ddd9ecf22 | Some small improvements and fixes | ||
|
|
da6ed580f1 | Added CalculateTradableAmount to SymbolOrderBook | ||
|
|
c22b54c898 |
Squashed commit of the following:
commit |
||
|
|
2ea48d6de9 | Added nonce provider default implementation | ||
|
|
dcb2fa35af |
Squashed commit of the following:
commit 1ca93ce870468c7effcc69a05b1675f855598f3e Author: Jkorf <jankorf91@gmail.com> Date: Thu Aug 12 13:44:03 2021 +0200 Version 4.0.0 release commit f8cefe72cae8b845aa995d16415f160228f5dfc4 Author: Jkorf <jankorf91@gmail.com> Date: Mon Aug 9 11:46:50 2021 +0200 Fix for processing a duplicate message in symbol order book commit f3573e414f80ea622caadb38f9e020f2eab7c834 Author: Jkorf <jankorf91@gmail.com> Date: Mon Aug 9 11:36:50 2021 +0200 Updated version commit 170a3b5c83cd500f0adb5cf74eaaa9c1a8674a10 Merge: 73a0e2c 0d43f6e Author: Jkorf <jankorf91@gmail.com> Date: Mon Aug 9 11:33:59 2021 +0200 Merge branch 'feature/replace-websocket4net' of https://github.com/JKorf/CryptoExchange.Net into feature/replace-websocket4net commit 73a0e2cb62f8d51b4b8fe1b29fbf16f07ebf13e0 Author: Jkorf <jankorf91@gmail.com> Date: Mon Aug 9 11:33:45 2021 +0200 Fixed processing issue in SymbolOrderBook commit 0d43f6e14e9b61af9bb3250fd72559a5fbf5300a Author: Jan Korf <jankorf91@gmail.com> Date: Sat Jul 31 14:48:23 2021 +0200 Updated version commit 037d765fc73740d2aa2159bce6d57f01d989bdc2 Author: Jan Korf <jankorf91@gmail.com> Date: Sat Jul 31 11:14:42 2021 +0200 Socket fixes commit 13cf3e27b9e91b252368a5dc799363111eed9148 Author: Jkorf <jankorf91@gmail.com> Date: Mon Jul 26 09:55:51 2021 +0200 Updated version commit 333c6c4207cafbfd09b37743fb36008f87939666 Author: Jkorf <jankorf91@gmail.com> Date: Mon Jul 26 09:50:35 2021 +0200 Update CryptoExchangeWebSocketClient.cs commit ad2b6284b042cfa846e55f8b5f53b2397039dff7 Merge: 64bdcdf 2591cc6 Author: Jan Korf <jankorf91@gmail.com> Date: Sun Jul 25 22:44:49 2021 +0200 Merge branch 'feature/replace-websocket4net' of https://github.com/jkorf/CryptoExchange.Net into feature/replace-websocket4net commit 64bdcdf087d56b8470baedac1ac86d263ad72490 Author: Jan Korf <jankorf91@gmail.com> Date: Sun Jul 25 22:44:03 2021 +0200 Fix for deadlock commit 2591cc6782e281595c436ccb4b74a9c7c7f5dc57 Author: Jkorf <jankorf91@gmail.com> Date: Thu Jul 15 15:10:08 2021 +0200 Cleanup commit b3b6235b6edf0ea1a6437239919666d08c274129 Author: Jkorf <jankorf91@gmail.com> Date: Fri Jul 9 16:14:33 2021 +0200 Updated version commit 12975fd13f7884382fea608d774b1e0ac384cb70 Author: Jkorf <jankorf91@gmail.com> Date: Fri Jul 9 16:12:04 2021 +0200 Async postfix for order book methods commit d49d59094e18c83de994a1b591f906f7efe916c5 Author: Jkorf <jankorf91@gmail.com> Date: Fri Jul 9 15:47:38 2021 +0200 Renamed async methods with Async post fixes commit cbe103930ab90378507780cb150596abcb15eb3f Author: Jkorf <jankorf91@gmail.com> Date: Thu Jul 8 09:29:34 2021 +0200 Added Book property on SymbolOrderBook commit ecc101aed11bab73c49fadc93d3ca4607094d92a Merge: 181f942 a172461 Author: Jan Korf <jankorf91@gmail.com> Date: Wed Jul 7 23:38:58 2021 +0200 Merge branch 'feature/replace-websocket4net' of https://github.com/jkorf/CryptoExchange.Net into feature/replace-websocket4net commit 181f942e2137ff5dfede5365012e24dfb2f07cf9 Author: Jan Korf <jankorf91@gmail.com> Date: Wed Jul 7 23:38:49 2021 +0200 Added CalculateAverageFillPrice to order book commit a17246153df463aa881e9808ffb87fa25f144d90 Author: Jkorf <jankorf91@gmail.com> Date: Wed Jul 7 13:11:39 2021 +0200 Updated version commit c60f138ae846a991662e7544d45845decd25cc10 Author: Jkorf <jankorf91@gmail.com> Date: Wed Jul 7 13:05:44 2021 +0200 Fix not logging responses with LogLevel.Debug commit 91f168fd25150b3048346bcc6acc549ee3685e50 Author: Jkorf <jankorf91@gmail.com> Date: Mon Jul 5 10:39:48 2021 +0200 Added ExchangeHelpers to ReadMe commit ff6c02e574d3f8a270e2960fdda0222c53457868 Author: Jkorf <jankorf91@gmail.com> Date: Mon Jul 5 10:34:25 2021 +0200 Added some helper methods, some code comments commit 55900a3db938f032436303c2399f41b7a3a5fef1 Merge: 9067a8a |
||
|
|
4b1baf8b82 | changed some events actions to named tuples for ability more clearly understanding what does exactly happened. fixes typo at OnOrderBookUpdate event invocation | ||
|
|
d384d1ee5b | Rename ValueTuple in BestOffers | ||
|
|
07d0a0159d | Use ValueTuple for BestOffers | ||
|
|
4a01c30f34 | Expose BestOffers on ISymbolOrderBook interface | ||
|
|
ccaf1da5c9 | Renamed OnPriceChanged to OnBestOffersChanged | ||
|
|
e7ec10e98d | Ticking price event | ||
|
|
3ba0507a79 | Cleaned up order book | ||
|
|
8cb3420520 | Cleanup/Fixed Resharper comments |