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 transactions 'isScCall' filter support #1440

Merged
Show file tree
Hide file tree
Changes from 4 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
14 changes: 14 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,14 @@ export class ElasticIndexerHelper {
]));
}

if (filter.isScCall !== undefined) {
if (filter.isScCall) {
elasticQuery = elasticQuery.withMustCondition(QueryType.Match('isScCall', true));
} else {
elasticQuery = 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;
}
14 changes: 14 additions & 0 deletions src/endpoints/accounts/account.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -877,6 +877,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 +906,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 +927,7 @@ export class AccountController {
order,
senderOrReceiver,
isRelayed,
isScCall,
round,
withRelayedScresults,
});
Expand All @@ -949,6 +952,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 +970,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 +989,7 @@ export class AccountController {
after,
senderOrReceiver,
isRelayed,
isScCall,
round,
withRelayedScresults,
}), address);
Expand All @@ -1010,6 +1016,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 +1049,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 +1078,7 @@ export class AccountController {
round,
withRefunds,
withTxsRelayedByAddress,
isScCall,
}),
new QueryPagination({ from, size }),
options,
Expand All @@ -1092,6 +1101,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 +1119,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 +1137,7 @@ export class AccountController {
after,
senderOrReceiver,
round,
isScCall,
withRefunds,
}));
}
Expand All @@ -1148,6 +1160,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 +1178,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 @@ -212,6 +212,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 @@ -237,6 +238,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 @@ -267,6 +269,7 @@ export class TokenController {
after,
order,
round,
isScCall,
withRelayedScresults,
});
TransactionFilter.validate(transactionFilter, size);
Expand Down Expand Up @@ -294,6 +297,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 @@ -308,6 +312,7 @@ export class TokenController {
@Query('after', ParseIntPipe) after?: number,
@Query('round', ParseIntPipe) round?: number,
@Query('withRelayedScresults', ParseBoolPipe) withRelayedScresults?: boolean,
@Query('isScCall', ParseBoolPipe) isScCall?: boolean,
) {
const isToken = await this.tokenService.isToken(identifier);
if (!isToken) {
Expand All @@ -327,6 +332,7 @@ export class TokenController {
after,
round,
withRelayedScresults,
isScCall,
}));
}

Expand Down Expand Up @@ -390,6 +396,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 @@ -411,6 +418,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 @@ -437,6 +445,7 @@ export class TokenController {
after,
order,
round,
isScCall,
}),
new QueryPagination({ from, size }),
options,
Expand All @@ -458,6 +467,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 @@ -471,6 +481,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> {
const isToken = await this.tokenService.isToken(identifier);
if (!isToken) {
Expand All @@ -490,6 +501,7 @@ export class TokenController {
before,
after,
round,
isScCall,
}));
}

Expand All @@ -508,6 +520,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> {
const isToken = await this.tokenService.isToken(identifier);
if (!isToken) {
Expand All @@ -527,6 +540,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
Loading