Skip to content

Commit 64fa582

Browse files
ViktorOshkaloviktoroshkalo-qntJKorf
authored
Funding bill history (#92)
* Added GetFundingBillHistoryAsync method and related tests Co-authored-by: Viktor Oshkalo <viktor.oshkalo@quantfury.com> Co-authored-by: Jkorf <jankorf91@gmail.com>
1 parent 71a38b6 commit 64fa582

5 files changed

Lines changed: 76 additions & 2 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
GET
2+
/api/v5/asset/bills-history
3+
true
4+
{
5+
"code": "0",
6+
"msg": "",
7+
"data": [{
8+
"billId": "12344",
9+
"ccy": "BTC",
10+
"clientId": "",
11+
"balChg": "2",
12+
"bal": "12",
13+
"type": "1",
14+
"ts": "1597026383085",
15+
"notes": ""
16+
}]
17+
}

OKX.Net.UnitTests/OKXRestIntegrationTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using OKX.Net.Clients;
1+
using OKX.Net.Clients;
22
using OKX.Net.Objects;
33
using CryptoExchange.Net.Authentication;
44
using CryptoExchange.Net.Testing;
@@ -73,6 +73,7 @@ public async Task TestAccount()
7373
await RunAndCheckResult(client => client.UnifiedApi.Account.GetAssetsAsync(default, default), true);
7474
await RunAndCheckResult(client => client.UnifiedApi.Account.GetFundingBalanceAsync(default, default), true);
7575
await RunAndCheckResult(client => client.UnifiedApi.Account.GetFundingBillDetailsAsync(default, default, default, default, 100, default, default, default, default), true);
76+
await RunAndCheckResult(client => client.UnifiedApi.Account.GetFundingBillHistoryAsync(default, default, default, default, 100, default, default, default, default), true);
7677
await RunAndCheckResult(client => client.UnifiedApi.Account.GetDepositHistoryAsync(default, default, default, default, default, 100, default, default, default, default), true);
7778
await RunAndCheckResult(client => client.UnifiedApi.Account.GetWithdrawalHistoryAsync(default, default, default, default, default, 100, default, default, default), true);
7879
await RunAndCheckResult(client => client.UnifiedApi.Account.GetAssetValuationAsync(default, default), true);

OKX.Net.UnitTests/RestRequestTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using CryptoExchange.Net.Authentication;
1+
using CryptoExchange.Net.Authentication;
22
using CryptoExchange.Net.Objects;
33
using CryptoExchange.Net.Testing;
44
using NUnit.Framework;
@@ -45,6 +45,7 @@ public async Task ValidateAccountCalls()
4545
await tester.ValidateAsync(client => client.UnifiedApi.Account.GetFundingBalanceAsync(), "GetFundingBalance");
4646
await tester.ValidateAsync(client => client.UnifiedApi.Account.TransferAsync("ETH", 1, Enums.TransferType.MasterAccountToSubAccount, Enums.AccountType.Funding, Enums.AccountType.Funding), "Transfer", useSingleArrayItem: true);
4747
await tester.ValidateAsync(client => client.UnifiedApi.Account.GetFundingBillDetailsAsync("ETH"), "GetFundingBillDetails");
48+
await tester.ValidateAsync(client => client.UnifiedApi.Account.GetFundingBillHistoryAsync("ETH"), "GetFundingBillHistory");
4849
await tester.ValidateAsync(client => client.UnifiedApi.Account.GetLightningDepositsAsync("ETH", 1), "GetLightningDeposits");
4950
await tester.ValidateAsync(client => client.UnifiedApi.Account.GetDepositAddressAsync("ETH"), "GetDepositAddress");
5051
await tester.ValidateAsync(client => client.UnifiedApi.Account.GetDepositHistoryAsync("ETH"), "GetDepositHistory");

OKX.Net/Clients/UnifiedApi/OKXRestClientUnifiedApiAccount.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,40 @@ public virtual async Task<WebCallResult<OKXFundingBill[]>> GetFundingBillDetails
481481
return await _baseClient.SendAsync<OKXFundingBill[]>(request, parameters, ct).ConfigureAwait(false);
482482
}
483483

484+
/// <inheritdoc />
485+
public virtual async Task<WebCallResult<OKXFundingBill[]>> GetFundingBillHistoryAsync(
486+
string? asset = null,
487+
FundingBillType? type = null,
488+
DateTime? endTime = null,
489+
DateTime? startTime = null,
490+
int limit = 100,
491+
string? clientId = null,
492+
long? startBillId = null,
493+
long? endBillId = null,
494+
CancellationToken ct = default)
495+
{
496+
if (limit < 1 || limit > 100)
497+
throw new ArgumentException("Limit can be between 1-100.");
498+
499+
if ((startTime != null || endTime != null) && (startBillId != null || endBillId != null))
500+
throw new ArgumentException("Filter can be either on start/end bill id or start/end time");
501+
502+
var parameters = new ParameterCollection();
503+
parameters.AddOptionalParameter("ccy", asset);
504+
parameters.AddOptionalEnum("type", type);
505+
parameters.AddOptionalParameter("before", DateTimeConverter.ConvertToMilliseconds(startTime)?.ToString());
506+
parameters.AddOptionalParameter("after", DateTimeConverter.ConvertToMilliseconds(endTime)?.ToString());
507+
parameters.AddOptionalString("before", endBillId);
508+
parameters.AddOptionalString("after", startBillId);
509+
parameters.AddOptionalParameter("limit", limit.ToString(CultureInfo.InvariantCulture));
510+
parameters.AddOptionalParameter("clientId", clientId);
511+
parameters.AddOptionalParameter("pagingType", startBillId != null || endBillId != null ? "2" : null);
512+
513+
var request = _definitions.GetOrCreate(HttpMethod.Get, $"api/v5/asset/bills-history", OKXExchange.RateLimiter.EndpointGate, 1, true,
514+
limitGuard: new SingleLimitGuard(1, TimeSpan.FromSeconds(1), RateLimitWindowType.Sliding, keySelector: SingleLimitGuard.PerApiKey));
515+
return await _baseClient.SendAsync<OKXFundingBill[]>(request, parameters, ct).ConfigureAwait(false);
516+
}
517+
484518
/// <inheritdoc />
485519
public virtual async Task<WebCallResult<OKXLightningDeposit[]>> GetLightningDepositsAsync(
486520
string asset,

OKX.Net/Interfaces/Clients/UnifiedApi/IOKXRestClientUnifiedApiAccount.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,27 @@ Task<WebCallResult<OKXFeeRate>> GetFeeRatesAsync(
278278
/// <returns></returns>
279279
Task<WebCallResult<OKXFundingBill[]>> GetFundingBillDetailsAsync(string? asset = null, FundingBillType? type = null, DateTime? endTime = null, DateTime? startTime = null, int limit = 100, string? clientId = null, long? startBillId = null, long? endBillId = null, CancellationToken ct = default);
280280

281+
/// <summary>
282+
/// Get historical asset billing records (longer lookback than asset bills details)
283+
/// <para>
284+
/// Docs:<br />
285+
/// <a href="https://www.okx.com/docs-v5/en/#funding-account-rest-api-asset-bills-history" /><br />
286+
/// Endpoint:<br />
287+
/// GET /api/v5/asset/bills-history
288+
/// </para>
289+
/// </summary>
290+
/// <param name="asset">["<c>ccy</c>"] Asset, for example `ETH`</param>
291+
/// <param name="type">["<c>type</c>"] Bill type</param>
292+
/// <param name="startTime">["<c>before</c>"] Pagination of data to return records earlier than the requested ts</param>
293+
/// <param name="endTime">["<c>after</c>"] Pagination of data to return records newer than the requested ts</param>
294+
/// <param name="limit">["<c>limit</c>"] Number of results per request. The maximum is 100; the default is 100.</param>
295+
/// <param name="startBillId">["<c>after</c>"] Filter by start bill id</param>
296+
/// <param name="endBillId">["<c>before</c>"] Filter by end bill id</param>
297+
/// <param name="clientId">["<c>clientId</c>"] Client id</param>
298+
/// <param name="ct">Cancellation Token</param>
299+
/// <returns></returns>
300+
Task<WebCallResult<OKXFundingBill[]>> GetFundingBillHistoryAsync(string? asset = null, FundingBillType? type = null, DateTime? endTime = null, DateTime? startTime = null, int limit = 100, string? clientId = null, long? startBillId = null, long? endBillId = null, CancellationToken ct = default);
301+
281302
/// <summary>
282303
/// Get interest-accrued
283304
/// <para>

0 commit comments

Comments
 (0)