Skip to content

Commit

Permalink
Merge branch 'refs/heads/development' into merge-dev-feat-sov-jan30
Browse files Browse the repository at this point in the history
  • Loading branch information
bogdan-rosianu committed Jan 30, 2025
2 parents df9a93c + a541f0f commit d9f1e5f
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/common/gateway/gateway.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export class GatewayService {
GatewayComponentRequest.vmQuery,
GatewayComponentRequest.transactionPool,
GatewayComponentRequest.guardianData,
GatewayComponentRequest.validatorAuction,
]);

private readonly deepHistoryRequestsSet: Set<String> = new Set([
Expand Down
12 changes: 12 additions & 0 deletions src/common/indexer/elastic/elastic.indexer.helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,12 @@ export class ElasticIndexerHelper {
elasticQuery = elasticQuery.withMustMatchCondition('round', filter.round);
}

if (filter.isScCall !== undefined) {
elasticQuery = filter.isScCall
? elasticQuery.withMustCondition(QueryType.Match('isScCall', true))
: elasticQuery.withMustNotCondition(QueryType.Match('isScCall', true));
}

return elasticQuery;
}

Expand Down Expand Up @@ -629,6 +635,12 @@ export class ElasticIndexerHelper {
]));
}

if (filter.isScCall !== undefined) {
elasticQuery = filter.isScCall
? elasticQuery.withMustCondition(QueryType.Match('isScCall', true))
: elasticQuery.withMustNotCondition(QueryType.Match('isScCall', true));
}

return elasticQuery;
}

Expand Down
1 change: 1 addition & 0 deletions src/common/indexer/entities/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ export interface Transaction {
relayer: string;
relayerSignature: string;
isRelayed: boolean;
isScCall: boolean;
}
19 changes: 19 additions & 0 deletions src/endpoints/accounts/account.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ export class AccountController {
@ApiQuery({ name: 'isSmartContract', description: 'Return total smart contracts count', required: false })
@ApiQuery({ name: 'name', description: 'Filter accounts by assets name', required: false })
@ApiQuery({ name: 'tags', description: 'Filter accounts by assets tags', required: false })
@ApiQuery({ name: 'search', description: 'Search by account address, assets name', required: false })
@ApiQuery({ name: 'excludeTags', description: 'Exclude specific tags from result', required: false })
@ApiQuery({ name: 'hasAssets', description: 'Returns a list of accounts that have assets', required: false })
async getAccountsCount(
Expand All @@ -156,6 +157,7 @@ export class AccountController {
@Query("tags", ParseArrayPipe) tags?: string[],
@Query("excludeTags", ParseArrayPipe) excludeTags?: string[],
@Query("hasAssets", ParseBoolPipe) hasAssets?: boolean,
@Query("search") search?: string,
): Promise<number> {
return await this.accountService.getAccountsCount(
new AccountQueryOptions(
Expand All @@ -166,6 +168,7 @@ export class AccountController {
tags,
excludeTags,
hasAssets,
search,
}));
}

Expand All @@ -178,6 +181,7 @@ export class AccountController {
@Query("tags", ParseArrayPipe) tags?: string[],
@Query("excludeTags", ParseArrayPipe) excludeTags?: string[],
@Query("hasAssets", ParseBoolPipe) hasAssets?: boolean,
@Query("search") search?: string,
): Promise<number> {
return await this.accountService.getAccountsCount(
new AccountQueryOptions(
Expand All @@ -188,6 +192,7 @@ export class AccountController {
tags,
excludeTags,
hasAssets,
search,
}));
}

Expand Down Expand Up @@ -877,6 +882,7 @@ export class AccountController {
@ApiQuery({ name: 'computeScamInfo', required: false, type: Boolean })
@ApiQuery({ name: 'senderOrReceiver', description: 'One address that current address interacted with', required: false })
@ApiQuery({ name: 'isRelayed', description: 'Returns isRelayed transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'isScCall', description: 'Returns sc call transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'withActionTransferValue', description: 'Returns value in USD and EGLD for transferred tokens within the action attribute', required: false })
@ApiQuery({ name: 'withRelayedScresults', description: 'If set to true, will include smart contract results that resemble relayed transactions', required: false, type: Boolean })
async getAccountTransactions(
Expand Down Expand Up @@ -905,6 +911,7 @@ export class AccountController {
@Query('withBlockInfo', ParseBoolPipe) withBlockInfo?: boolean,
@Query('senderOrReceiver', ParseAddressPipe) senderOrReceiver?: string,
@Query('isRelayed', ParseBoolPipe) isRelayed?: boolean,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
@Query('withActionTransferValue', ParseBoolPipe) withActionTransferValue?: boolean,
@Query('withRelayedScresults', ParseBoolPipe) withRelayedScresults?: boolean,
) {
Expand All @@ -925,6 +932,7 @@ export class AccountController {
order,
senderOrReceiver,
isRelayed,
isScCall,
round,
withRelayedScresults,
});
Expand All @@ -949,6 +957,7 @@ export class AccountController {
@ApiQuery({ name: 'round', description: 'Round number', required: false })
@ApiQuery({ name: 'senderOrReceiver', description: 'One address that current address interacted with', required: false })
@ApiQuery({ name: 'isRelayed', description: 'Returns isRelayed transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'isScCall', description: 'Returns sc call transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'withRelayedScresults', description: 'If set to true, will include smart contract results that resemble relayed transactions', required: false, type: Boolean })
async getAccountTransactionsCount(
@Param('address', ParseAddressPipe) address: string,
Expand All @@ -966,6 +975,7 @@ export class AccountController {
@Query('round', ParseIntPipe) round?: number,
@Query('senderOrReceiver', ParseAddressPipe) senderOrReceiver?: string,
@Query('isRelayed', ParseBoolPipe) isRelayed?: boolean,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
@Query('withRelayedScresults', ParseBoolPipe) withRelayedScresults?: boolean,

): Promise<number> {
Expand All @@ -984,6 +994,7 @@ export class AccountController {
after,
senderOrReceiver,
isRelayed,
isScCall,
round,
withRelayedScresults,
}), address);
Expand All @@ -1010,6 +1021,7 @@ export class AccountController {
@ApiQuery({ name: 'round', description: 'Round number', required: false })
@ApiQuery({ name: 'fields', description: 'List of fields to filter by', required: false, isArray: true, style: 'form', explode: false })
@ApiQuery({ name: 'relayer', description: 'Address of the relayer', required: false })
@ApiQuery({ name: 'isScCall', description: 'Returns sc call transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'withScamInfo', description: 'Returns scam information', required: false, type: Boolean })
@ApiQuery({ name: 'withUsername', description: 'Integrates username in assets for all addresses present in the transactions', required: false, type: Boolean })
@ApiQuery({ name: 'withBlockInfo', description: 'Returns sender / receiver block details', required: false, type: Boolean })
Expand Down Expand Up @@ -1042,6 +1054,7 @@ export class AccountController {
@Query('withUsername', ParseBoolPipe) withUsername?: boolean,
@Query('withBlockInfo', ParseBoolPipe) withBlockInfo?: boolean,
@Query('senderOrReceiver', ParseAddressPipe) senderOrReceiver?: string,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
@Query('withLogs', ParseBoolPipe) withLogs?: boolean,
@Query('withOperations', ParseBoolPipe) withOperations?: boolean,
@Query('withActionTransferValue', ParseBoolPipe) withActionTransferValue?: boolean,
Expand Down Expand Up @@ -1070,6 +1083,7 @@ export class AccountController {
round,
withRefunds,
withTxsRelayedByAddress,
isScCall,
}),
new QueryPagination({ from, size }),
options,
Expand All @@ -1092,6 +1106,7 @@ export class AccountController {
@ApiQuery({ name: 'before', description: 'Before timestamp', required: false })
@ApiQuery({ name: 'after', description: 'After timestamp', required: false })
@ApiQuery({ name: 'round', description: 'Round number', required: false })
@ApiQuery({ name: 'isScCall', description: 'Returns sc call transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'senderOrReceiver', description: 'One address that current address interacted with', required: false })
@ApiQuery({ name: 'withRefunds', description: 'Include refund transactions', required: false })
async getAccountTransfersCount(
Expand All @@ -1109,6 +1124,7 @@ export class AccountController {
@Query('after', ParseIntPipe) after?: number,
@Query('round', ParseIntPipe) round?: number,
@Query('senderOrReceiver', ParseAddressPipe) senderOrReceiver?: string,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
@Query('withRefunds', ParseBoolPipe) withRefunds?: boolean,
): Promise<number> {
return await this.transferService.getTransfersCount(new TransactionFilter({
Expand All @@ -1126,6 +1142,7 @@ export class AccountController {
after,
senderOrReceiver,
round,
isScCall,
withRefunds,
}));
}
Expand All @@ -1148,6 +1165,7 @@ export class AccountController {
@Query('round', ParseIntPipe) round?: number,
@Query('senderOrReceiver', ParseAddressPipe) senderOrReceiver?: string,
@Query('withRefunds', ParseBoolPipe) withRefunds?: boolean,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
): Promise<number> {
return await this.transferService.getTransfersCount(new TransactionFilter({
address,
Expand All @@ -1165,6 +1183,7 @@ export class AccountController {
senderOrReceiver,
round,
withRefunds,
isScCall,
}));
}

Expand Down
14 changes: 14 additions & 0 deletions src/endpoints/tokens/token.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ export class TokenController {
@ApiQuery({ name: 'order', description: 'Sort order (asc/desc)', required: false, enum: SortOrder })
@ApiQuery({ name: 'from', description: 'Number of items to skip for the result set', required: false })
@ApiQuery({ name: 'size', description: 'Number of items to retrieve', required: false })
@ApiQuery({ name: 'isScCall', description: 'Returns sc call transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'withScResults', description: 'Return scResults for transactions', required: false, type: Boolean })
@ApiQuery({ name: 'withOperations', description: 'Return operations for transactions', required: false, type: Boolean })
@ApiQuery({ name: 'withLogs', description: 'Return logs for transactions', required: false, type: Boolean })
Expand All @@ -222,6 +223,7 @@ export class TokenController {
@Query('round', ParseIntPipe) round?: number,
@Query('order', new ParseEnumPipe(SortOrder)) order?: SortOrder,
@Query('fields', ParseArrayPipe) fields?: string[],
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
@Query('withScResults', ParseBoolPipe) withScResults?: boolean,
@Query('withOperations', ParseBoolPipe) withOperations?: boolean,
@Query('withLogs', ParseBoolPipe) withLogs?: boolean,
Expand Down Expand Up @@ -252,6 +254,7 @@ export class TokenController {
after,
order,
round,
isScCall,
withRelayedScresults,
});
TransactionFilter.validate(transactionFilter, size);
Expand Down Expand Up @@ -279,6 +282,7 @@ export class TokenController {
@ApiQuery({ name: 'before', description: 'Before timestamp', required: false })
@ApiQuery({ name: 'after', description: 'After timestamp', required: false })
@ApiQuery({ name: 'round', description: 'Filter by round number', required: false })
@ApiQuery({ name: 'isScCall', description: 'Returns sc call transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'withRelayedScresults', description: 'If set to true, will include smart contract results that resemble relayed transactions', required: false, type: Boolean })
async getTokenTransactionsCount(
@Param('identifier', ParseTokenPipe) identifier: string,
Expand All @@ -293,6 +297,7 @@ export class TokenController {
@Query('after', ParseIntPipe) after?: number,
@Query('round', ParseIntPipe) round?: number,
@Query('withRelayedScresults', ParseBoolPipe) withRelayedScresults?: boolean,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
) {
return await this.transactionService.getTransactionCount(new TransactionFilter({
sender,
Expand All @@ -307,6 +312,7 @@ export class TokenController {
after,
round,
withRelayedScresults,
isScCall,
}));
}

Expand Down Expand Up @@ -360,6 +366,7 @@ export class TokenController {
@ApiQuery({ name: 'after', description: 'After timestamp', required: false })
@ApiQuery({ name: 'round', description: 'Filter by round number', required: false })
@ApiQuery({ name: 'fields', description: 'List of fields to filter by', required: false, isArray: true, style: 'form', explode: false })
@ApiQuery({ name: 'isScCall', description: 'Returns sc call transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'withScamInfo', description: 'Returns scam information', required: false, type: Boolean })
@ApiQuery({ name: 'withUsername', description: 'Integrates username in assets for all addresses present in the transactions', required: false, type: Boolean })
@ApiQuery({ name: 'withBlockInfo', description: 'Returns sender / receiver block details', required: false, type: Boolean })
Expand All @@ -381,6 +388,7 @@ export class TokenController {
@Query('round', ParseIntPipe) round?: number,
@Query('fields', ParseArrayPipe) fields?: string[],
@Query('order', new ParseEnumPipe(SortOrder)) order?: SortOrder,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
@Query('withScamInfo', ParseBoolPipe) withScamInfo?: boolean,
@Query('withUsername', ParseBoolPipe) withUsername?: boolean,
@Query('withBlockInfo', ParseBoolPipe) withBlockInfo?: boolean,
Expand All @@ -402,6 +410,7 @@ export class TokenController {
after,
order,
round,
isScCall,
}),
new QueryPagination({ from, size }),
options,
Expand All @@ -423,6 +432,7 @@ export class TokenController {
@ApiQuery({ name: 'before', description: 'Before timestamp', required: false })
@ApiQuery({ name: 'after', description: 'After timestamp', required: false })
@ApiQuery({ name: 'round', description: 'Filter by round number', required: false })
@ApiQuery({ name: 'isScCall', description: 'Returns sc call transactions details', required: false, type: Boolean })
async getTokenTransfersCount(
@Param('identifier', ParseTokenPipe) identifier: string,
@Query('sender', ParseAddressArrayPipe) sender?: string[],
Expand All @@ -436,6 +446,7 @@ export class TokenController {
@Query('before', ParseIntPipe) before?: number,
@Query('after', ParseIntPipe) after?: number,
@Query('round', ParseIntPipe) round?: number,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
): Promise<number> {
return await this.transferService.getTransfersCount(new TransactionFilter({
senders: sender,
Expand All @@ -450,6 +461,7 @@ export class TokenController {
before,
after,
round,
isScCall,
}));
}

Expand All @@ -468,6 +480,7 @@ export class TokenController {
@Query('before', ParseIntPipe) before?: number,
@Query('after', ParseIntPipe) after?: number,
@Query('round', ParseIntPipe) round?: number,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
): Promise<number> {
return await this.transferService.getTransfersCount(new TransactionFilter({
senders: sender,
Expand All @@ -482,6 +495,7 @@ export class TokenController {
before,
after,
round,
isScCall,
}));
}

Expand Down
1 change: 1 addition & 0 deletions src/endpoints/transactions/entities/transaction.filter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export class TransactionFilter {
type?: TransactionType;
tokens?: string[];
senderOrReceiver?: string;
isScCall?: boolean;
isRelayed?: boolean;
relayer?: string;
round?: number;
Expand Down
3 changes: 3 additions & 0 deletions src/endpoints/transactions/entities/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ export class Transaction {
@ApiProperty({ type: String, nullable: true, required: false })
relayerSignature: string | undefined = undefined;

@ApiProperty({ type: Boolean, nullable: true, required: false })
isScCall: boolean | undefined = undefined;

getDate(): Date | undefined {
if (this.timestamp) {
return new Date(this.timestamp * 1000);
Expand Down
8 changes: 8 additions & 0 deletions src/endpoints/transactions/transaction.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export class TransactionController {
@ApiQuery({ name: 'withBlockInfo', description: 'Returns sender / receiver block details', required: false, type: Boolean })
@ApiQuery({ name: 'relayer', description: 'Search by a relayer address', required: false })
@ApiQuery({ name: 'isRelayed', description: 'Returns relayed transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'isScCall', description: 'Returns sc call transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'withActionTransferValue', description: 'Returns value in USD and EGLD for transferred tokens within the action attribute', required: false })
@ApiQuery({ name: 'withRelayedScresults', description: 'If set to true, will include smart contract results that resemble relayed transactions', required: false, type: Boolean })
getTransactions(
Expand Down Expand Up @@ -77,6 +78,7 @@ export class TransactionController {
@Query('withUsername', ParseBoolPipe) withUsername?: boolean,
@Query('withBlockInfo', ParseBoolPipe) withBlockInfo?: boolean,
@Query('isRelayed', ParseBoolPipe) isRelayed?: boolean,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
@Query('withActionTransferValue', ParseBoolPipe) withActionTransferValue?: boolean,
@Query('withRelayedScresults', ParseBoolPipe) withRelayedScresults?: boolean,
) {
Expand All @@ -98,6 +100,7 @@ export class TransactionController {
order,
relayer,
isRelayed,
isScCall,
round,
withRelayedScresults: withRelayedScresults,
});
Expand Down Expand Up @@ -127,6 +130,7 @@ export class TransactionController {
@ApiQuery({ name: 'after', description: 'After timestamp', required: false })
@ApiQuery({ name: 'round', description: 'Round number', required: false })
@ApiQuery({ name: 'isRelayed', description: 'Returns relayed transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'isScCall', description: 'Returns sc call transactions details', required: false, type: Boolean })
@ApiQuery({ name: 'relayer', description: 'Filter by a relayer address', required: false })
@ApiQuery({ name: 'withRelayedScresults', description: 'If set to true, will include smart contract results that resemble relayed transactions', required: false, type: Boolean })
getTransactionCount(
Expand All @@ -145,6 +149,7 @@ export class TransactionController {
@Query('round', ParseIntPipe) round?: number,
@Query('relayer', ParseAddressPipe) relayer?: string,
@Query('isRelayed', ParseBoolPipe) isRelayed?: boolean,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
@Query('withRelayedScresults', ParseBoolPipe) withRelayedScresults?: boolean,
): Promise<number> {
return this.transactionService.getTransactionCount(new TransactionFilter({
Expand All @@ -162,6 +167,7 @@ export class TransactionController {
condition,
relayer,
isRelayed,
isScCall,
round,
withRelayedScresults: withRelayedScresults,
}));
Expand All @@ -185,6 +191,7 @@ export class TransactionController {
@Query('round', ParseIntPipe) round?: number,
@Query('relayer', ParseAddressPipe) relayer?: string,
@Query('isRelayed', ParseBoolPipe) isRelayed?: boolean,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
@Query('withRelayedScresults', ParseBoolPipe) withRelayedScresults?: boolean,
): Promise<number> {
return this.transactionService.getTransactionCount(new TransactionFilter({
Expand All @@ -203,6 +210,7 @@ export class TransactionController {
isRelayed,
relayer,
round,
isScCall,
withRelayedScresults: withRelayedScresults,
}));
}
Expand Down
Loading

0 comments on commit d9f1e5f

Please sign in to comment.