DeriSock is a client library that connects to the Deribit API via WebSocket.
All methods and subscriptions found on https://docs.deribit.com are supported.
To connect to the Deribit Network just instantiate a new instance of the DeribitClient
class and call the Connect
method to connect and the Disconnect
method to disconnect.
var client = new DeribitClient(EndpointType.Testnet);
await client.Connect();
// do something
await client.Disconnect();
To use a proxy, you can assign an IWebProxy
instance to the default ITextMessageClient
implementation (TextMessageMessageWebSocketClient
) and pass it to the DeribitClient
constructor.
// Use a web proxy to connect to the API
var messageSource = new TextMessageWebSocketClient(null);
messageSource.Proxy = new WebProxy("socks5://socks5.example.com:1080")
{
Credentials = new NetworkCredential
{
UserName = "username",
Password = "password"
}
};
var clientWithProxy = new DeribitClient(EndpointType.Testnet, messageSource);
The various methods are organized in categories (Authentication, Supporting, Market Data, ...) and scopes (Private, Public).
Example: Calling GetOrderBook
from the Public
scope.
var response = await client.Public.GetOrderBook(
new PublicGetOrderBookRequest
{
InstrumentName = "BTC-PERPETUAL"
});
if (response.Error is not null) {
// Handle errors returned by the API
return;
}
if (response.Data is null) {
// Something unexpected happened. 'Data' should not be null if 'Error' is null
return;
}
var bestBidPrice = response.Data.BestBidPrice;
Example: Calling GetOrderBook
from the MarketData
category.
var response = await client.MarketData.PublicGetOrderBook(
new PublicGetOrderBookRequest
{
InstrumentName = "BTC-PERPETUAL"
});
if (response.Error is not null) {
// Handle errors returned by the API
return;
}
if (response.Data is null) {
// Something unexpected happened. 'Data' should not be null if 'Error' is null
return;
}
var bestBidPrice = response.Data.BestBidPrice;
The library supports authentication via credentials and signature
await client.Authentication.PublicLogin()
.WithClientCredentials(
"<client id",
"<client secret>",
"<optional state>",
"<optional scope>");
await client.Authentication.PublicLogin()
.WithClientSignature(
"<client id",
"<client secret>",
"<optional state>",
"<optional scope>");
When authenticated, you can logout like this (this is the only synchroneous method):
client.Authentication.PrivateLogout();
Note: The server will automatically close the connection when you logout
The subscription system will choose public/subscribe
or private/subscribe
automatically.
If the client is authenticated it will use private/subscribe
, if the client is not authenticated it will use public/subscribe
.
This is also the reason why the subscription methods are not present in the Public
or Private
scopes.
// Subscribe to one or more channels.
var subscriptionStream = await client.Subscriptions.SubscribeBookChanges(
new BookChangesChannel
{
InstrumentName = "BTC-PERPETUAL",
Interval = NotificationInterval2._100ms
},
new BookChangesChannel
{
InstrumentName = "ETH-PERPETUAL",
Interval = NotificationInterval2._100ms
});
// Create a CancellationTokenSource to be able to stop the stream
// (i.e. unsubscribe from the channel(s))
var cts = new CancellationTokenSource();
// An IAsyncEnumerable<T> stream that will listen to incoming notifications as long as
// cts.Cancel(); is not called.
await foreach (var notification in subscriptionStream.WithCancellation(cts.Token)) {
//Here you can do something with the received information.
var bookChangeId = notification.Data.ChangeId;
}