Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Get Historical BEP-20 Token Account Balance by ContractAddress & … #104

Merged
merged 1 commit into from
Mar 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/BscScan.NetCore/Constants/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ internal static class TokenModuleAction
public const string TOKEN_BALANCE = "tokenbalance";
public const string TOKEN_HOLDER_LIST = "tokenholderlist";
public const string TOKEN_SUPPLY_HISTORY = "tokensupplyhistory";
public const string TOKEN_BALANCE_HISTORY = "tokenbalancehistory";
}

/// <summary>
Expand Down
8 changes: 8 additions & 0 deletions src/BscScan.NetCore/Contracts/IBscScanTokensService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,13 @@ public interface IBscScanTokensService
/// <param name="blockNo">the integer block number to check total supply for eg. 4000000</param>
/// <returns>Returns the historical amount of a BEP-20 token in circulation at a certain block height.</returns>
Task<HistoricalBep20TokenTotalSupply?> GetHistoricalBep20TokenTotalSupplyByContractAddressAndBlockNo(string contractAddress, int blockNo);


/// <summary>
/// Get Historical BEP-20 Token Account Balance by ContractAddress and BlockNo 🅰🅿🅸 🅿🆁🅾
/// </summary>
/// <param name="request">HistoricalBep20TokenAccountBalanceRequest</param>
/// <returns>Returns the balance of a BEP-20 token of an address at a certain block height.</returns>
Task<HistoricalBep20TokenAccountBalance?> GetHistoricalBep20TokenAccountBalanceByContractAddressAndBlockNo(HistoricalBep20TokenAccountBalanceRequest request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System.Text.Json.Serialization;

namespace BscScan.NetCore.Models.Request.Tokens
{
/// <summary>
/// HistoricalBep20TokenAccountBalanceRequest
/// </summary>
public class HistoricalBep20TokenAccountBalanceRequest
{
/// <summary>
/// the contract address of the BEP-20 token
/// </summary>
[JsonPropertyName("contractaddress")]
public string? ContractAddress { get; set; }
/// <summary>
/// the integer page number, if pagination is enabled (default is 1)
/// </summary>
[JsonPropertyName("page")]
public int Page { get; set; } = 1;

/// <summary>
/// the number of transactions displayed per page (default is 10)
/// </summary>
[JsonPropertyName("offset")]
public int OffSet { get; set; } = 10;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System.Text.Json.Serialization;

namespace BscScan.NetCore.Models.Response.Tokens
{
/// <summary>
///
/// </summary>
public class HistoricalBep20TokenAccountBalance : BaseResponse
{
/// <summary>
/// result
/// </summary>
[JsonPropertyName("result")]
public string? Result { get; set; }
}
}
20 changes: 18 additions & 2 deletions src/BscScan.NetCore/Services/BscScanTokensService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ public class BscScanTokensService : BaseHttpClient, IBscScanTokensService
private readonly string _bscScanModuleAccount;

/// <inheritdoc />
public BscScanTokensService(HttpClient bscScanHttpClient, BscScanConfiguration bscScanConfiguration) : base(bscScanHttpClient, bscScanConfiguration)
public BscScanTokensService(HttpClient bscScanHttpClient, BscScanConfiguration bscScanConfiguration)
: base(bscScanHttpClient, bscScanConfiguration)
{
_bscScanModuleStat = BscScanModule.STATS.AppendApiKey(bscScanConfiguration.BscScanOptions.Token);
_bscScanModuleToken = BscScanModule.TOKEN.AppendApiKey(bscScanConfiguration.BscScanOptions.Token);
Expand Down Expand Up @@ -83,7 +84,8 @@ public BscScanTokensService(HttpClient bscScanHttpClient, BscScanConfiguration b
}

/// <inheritdoc />
public async Task<HistoricalBep20TokenTotalSupply?> GetHistoricalBep20TokenTotalSupplyByContractAddressAndBlockNo(string contractAddress, int blockNo)
public async Task<HistoricalBep20TokenTotalSupply?> GetHistoricalBep20TokenTotalSupplyByContractAddressAndBlockNo(
string contractAddress, int blockNo)
{
var queryParameters = $"{_bscScanModuleStat}".AddAction(TokenModuleAction.TOKEN_SUPPLY_HISTORY)
.AddQuery(BscQueryParam.ContractAddress.AppendValue(contractAddress))
Expand All @@ -98,5 +100,19 @@ public BscScanTokensService(HttpClient bscScanHttpClient, BscScanConfiguration b
var result = await JsonSerializer.DeserializeAsync<HistoricalBep20TokenTotalSupply>(responseStream);
return result;
}

/// <inheritdoc />
public async Task<HistoricalBep20TokenAccountBalance?> GetHistoricalBep20TokenAccountBalanceByContractAddressAndBlockNo(
HistoricalBep20TokenAccountBalanceRequest request)
{
var queryParameters = $"{_bscScanModuleAccount}{request.ToRequestParameters(TokenModuleAction.TOKEN_BALANCE_HISTORY)}";
using var response = await BscScanHttpClient.GetAsync($"{queryParameters}")
.ConfigureAwait(false);

response.EnsureSuccessStatusCode();
await using var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);
var result = await JsonSerializer.DeserializeAsync<HistoricalBep20TokenAccountBalance>(responseStream);
return result;
}
}
}