From 352d257f621215c7a4f5ff52c5a3d438113df07a Mon Sep 17 00:00:00 2001 From: fa2a5qj3 <174058787+fa2a5qj3@users.noreply.github.com> Date: Sun, 14 Jul 2024 09:30:25 -0400 Subject: [PATCH] Add tradestatistics tests --- src/HavenoClient.test.ts | 25 +++++++++++++++++++++++++ src/HavenoClient.ts | 19 +++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/HavenoClient.test.ts b/src/HavenoClient.test.ts index b016351a..84f80a68 100644 --- a/src/HavenoClient.test.ts +++ b/src/HavenoClient.test.ts @@ -2217,6 +2217,31 @@ test("Selects arbitrators which are online, registered, and least used", async ( } }); +test("Can get trade statistics", async () => { + // a simple test to exercise the trade statistics API + const tradeStatisticsArbitrator = await arbitrator.getTradeStatistics(); + const tradeStatisticsUser1 = await user1.getTradeStatistics(); + const tradeStatisticsUser2 = await user2.getTradeStatistics(); + HavenoUtils.log(0, "Trade statistics size (arb/u1/u2): " + tradeStatisticsArbitrator.length + "/" + tradeStatisticsUser1.length + "/" + tradeStatisticsUser2.length); + assert(tradeStatisticsArbitrator.length === tradeStatisticsUser1.length && tradeStatisticsUser1.length === tradeStatisticsUser2.length); +}); + +test("Check one trade statistic written per trade", async () => { + const tradeStatisticsPre = await arbitrator.getTradeStatistics(); + let randomOfferAmount = 1.0 + (Math.random() * 1.0); // random amount between 1 and 2 xmr + await executeTrade({ + price: 150, + offerAmount: HavenoUtils.xmrToAtomicUnits(randomOfferAmount), + offerMinAmount: HavenoUtils.xmrToAtomicUnits(.15), + tradeAmount: HavenoUtils.xmrToAtomicUnits(.92), + reserveExactAmount: true, + testBalanceChangeEndToEnd: true + }); + const tradeStatisticsPost = await arbitrator.getTradeStatistics(); + HavenoUtils.log(0, "Trade statistics size before/after trade: " + tradeStatisticsPre.length + "/" + tradeStatisticsPost.length); + assert(tradeStatisticsPost.length - tradeStatisticsPre.length === 1); +}); + // ----------------------------- TEST HELPERS --------------------------------- function getTradeContexts(numConfigs: number): TradeContext[] { diff --git a/src/HavenoClient.ts b/src/HavenoClient.ts index 6a3d29ca..09bdeb0a 100644 --- a/src/HavenoClient.ts +++ b/src/HavenoClient.ts @@ -20,8 +20,8 @@ import HavenoError from "./types/HavenoError"; import HavenoUtils from "./utils/HavenoUtils"; import TaskLooper from "./utils/TaskLooper"; import type * as grpcWeb from "grpc-web"; -import { GetVersionClient, AccountClient, XmrConnectionsClient, DisputesClient, DisputeAgentsClient, NotificationsClient, WalletsClient, PriceClient, OffersClient, PaymentAccountsClient, TradesClient, ShutdownServerClient, XmrNodeClient } from './protobuf/GrpcServiceClientPb'; -import { GetVersionRequest, GetVersionReply, IsAppInitializedRequest, IsAppInitializedReply, RegisterDisputeAgentRequest, UnregisterDisputeAgentRequest, MarketPriceRequest, MarketPriceReply, MarketPricesRequest, MarketPricesReply, MarketPriceInfo, MarketDepthRequest, MarketDepthReply, MarketDepthInfo, GetBalancesRequest, GetBalancesReply, XmrBalanceInfo, GetMyOfferRequest, GetMyOfferReply, GetOffersRequest, GetOffersReply, OfferInfo, GetPaymentMethodsRequest, GetPaymentMethodsReply, GetPaymentAccountFormRequest, CreatePaymentAccountRequest, ValidateFormFieldRequest, CreatePaymentAccountReply, GetPaymentAccountFormReply, GetPaymentAccountsRequest, GetPaymentAccountsReply, CreateCryptoCurrencyPaymentAccountRequest, CreateCryptoCurrencyPaymentAccountReply, PostOfferRequest, PostOfferReply, CancelOfferRequest, TakeOfferRequest, TakeOfferReply, TradeInfo, GetTradeRequest, GetTradeReply, GetTradesRequest, GetTradesReply, GetXmrSeedRequest, GetXmrSeedReply, GetXmrPrimaryAddressRequest, GetXmrPrimaryAddressReply, GetXmrNewSubaddressRequest, GetXmrNewSubaddressReply, ConfirmPaymentSentRequest, ConfirmPaymentReceivedRequest, CompleteTradeRequest, XmrTx, GetXmrTxsRequest, GetXmrTxsReply, XmrDestination, CreateXmrTxRequest, CreateXmrTxReply, RelayXmrTxRequest, RelayXmrTxReply, CreateAccountRequest, AccountExistsRequest, AccountExistsReply, DeleteAccountRequest, OpenAccountRequest, IsAccountOpenRequest, IsAccountOpenReply, CloseAccountRequest, ChangePasswordRequest, BackupAccountRequest, BackupAccountReply, RestoreAccountRequest, StopRequest, NotificationMessage, RegisterNotificationListenerRequest, SendNotificationRequest, UrlConnection, AddConnectionRequest, RemoveConnectionRequest, GetConnectionRequest, GetConnectionsRequest, SetConnectionRequest, CheckConnectionRequest, CheckConnectionsReply, CheckConnectionsRequest, StartCheckingConnectionRequest, StopCheckingConnectionRequest, GetBestAvailableConnectionRequest, SetAutoSwitchRequest, CheckConnectionReply, GetConnectionsReply, GetConnectionReply, GetBestAvailableConnectionReply, GetDisputeRequest, GetDisputeReply, GetDisputesRequest, GetDisputesReply, OpenDisputeRequest, ResolveDisputeRequest, SendDisputeChatMessageRequest, SendChatMessageRequest, GetChatMessagesRequest, GetChatMessagesReply, StartXmrNodeRequest, StopXmrNodeRequest, IsXmrNodeOnlineRequest, IsXmrNodeOnlineReply, GetXmrNodeSettingsRequest, GetXmrNodeSettingsReply } from "./protobuf/grpc_pb"; +import { GetTradeStatisticsClient, GetVersionClient, AccountClient, XmrConnectionsClient, DisputesClient, DisputeAgentsClient, NotificationsClient, WalletsClient, PriceClient, OffersClient, PaymentAccountsClient, TradesClient, ShutdownServerClient, XmrNodeClient } from './protobuf/GrpcServiceClientPb'; +import { GetTradeStatisticsRequest, GetTradeStatisticsReply, GetVersionRequest, GetVersionReply, IsAppInitializedRequest, IsAppInitializedReply, RegisterDisputeAgentRequest, UnregisterDisputeAgentRequest, MarketPriceRequest, MarketPriceReply, MarketPricesRequest, MarketPricesReply, MarketPriceInfo, MarketDepthRequest, MarketDepthReply, MarketDepthInfo, GetBalancesRequest, GetBalancesReply, XmrBalanceInfo, GetMyOfferRequest, GetMyOfferReply, GetOffersRequest, GetOffersReply, OfferInfo, GetPaymentMethodsRequest, GetPaymentMethodsReply, GetPaymentAccountFormRequest, CreatePaymentAccountRequest, ValidateFormFieldRequest, CreatePaymentAccountReply, GetPaymentAccountFormReply, GetPaymentAccountsRequest, GetPaymentAccountsReply, CreateCryptoCurrencyPaymentAccountRequest, CreateCryptoCurrencyPaymentAccountReply, PostOfferRequest, PostOfferReply, CancelOfferRequest, TakeOfferRequest, TakeOfferReply, TradeStatistics3, TradeInfo, GetTradeRequest, GetTradeReply, GetTradesRequest, GetTradesReply, GetXmrSeedRequest, GetXmrSeedReply, GetXmrPrimaryAddressRequest, GetXmrPrimaryAddressReply, GetXmrNewSubaddressRequest, GetXmrNewSubaddressReply, ConfirmPaymentSentRequest, ConfirmPaymentReceivedRequest, CompleteTradeRequest, XmrTx, GetXmrTxsRequest, GetXmrTxsReply, XmrDestination, CreateXmrTxRequest, CreateXmrTxReply, RelayXmrTxRequest, RelayXmrTxReply, CreateAccountRequest, AccountExistsRequest, AccountExistsReply, DeleteAccountRequest, OpenAccountRequest, IsAccountOpenRequest, IsAccountOpenReply, CloseAccountRequest, ChangePasswordRequest, BackupAccountRequest, BackupAccountReply, RestoreAccountRequest, StopRequest, NotificationMessage, RegisterNotificationListenerRequest, SendNotificationRequest, UrlConnection, AddConnectionRequest, RemoveConnectionRequest, GetConnectionRequest, GetConnectionsRequest, SetConnectionRequest, CheckConnectionRequest, CheckConnectionsReply, CheckConnectionsRequest, StartCheckingConnectionRequest, StopCheckingConnectionRequest, GetBestAvailableConnectionRequest, SetAutoSwitchRequest, CheckConnectionReply, GetConnectionsReply, GetConnectionReply, GetBestAvailableConnectionReply, GetDisputeRequest, GetDisputeReply, GetDisputesRequest, GetDisputesReply, OpenDisputeRequest, ResolveDisputeRequest, SendDisputeChatMessageRequest, SendChatMessageRequest, GetChatMessagesRequest, GetChatMessagesReply, StartXmrNodeRequest, StopXmrNodeRequest, IsXmrNodeOnlineRequest, IsXmrNodeOnlineReply, GetXmrNodeSettingsRequest, GetXmrNodeSettingsReply } from "./protobuf/grpc_pb"; import { OfferDirection, PaymentMethod, PaymentAccountForm, PaymentAccountFormField, PaymentAccount, PaymentAccountPayload, AvailabilityResult, Attachment, DisputeResult, Dispute, ChatMessage, XmrNodeSettings } from "./protobuf/pb_pb"; /** @@ -31,6 +31,7 @@ export default class HavenoClient { // grpc clients /** @private */ _appName: string | undefined; + /** @private */ _getTradeStatisticsClient: GetTradeStatisticsClient; /** @private */ _getVersionClient: GetVersionClient; /** @private */ _disputeAgentsClient: DisputeAgentsClient; /** @private */ _disputesClient: DisputesClient; @@ -74,6 +75,7 @@ export default class HavenoClient { HavenoUtils.log(2, "Creating Haveno client connected to " + url); this._url = url; this._password = password; + this._getTradeStatisticsClient = new GetTradeStatisticsClient(this._url); this._getVersionClient = new GetVersionClient(this._url); this._accountClient = new AccountClient(this._url); this._xmrConnectionsClient = new XmrConnectionsClient(this._url); @@ -1101,6 +1103,19 @@ export default class HavenoClient { } } + /** + * Get all trade statistics. + * + * @return {TradeStatistics3[]} all user trades + */ + async getTradeStatistics(): Promise { + try { + return (await this._getTradeStatisticsClient.getTradeStatistics(new GetTradeStatisticsRequest(), {password: this._password})).getTradeStatisticsList(); + } catch (e: any) { + throw new HavenoError(e.message, e.code); + } + } + /** * Get all trades. *