Skip to content

Commit d691e68

Browse files
committed
refactor(cardano-services): optimize redeemer query hoisting the sort at node.js level
1 parent f2eddc2 commit d691e68

File tree

5 files changed

+8
-5
lines changed

5 files changed

+8
-5
lines changed

packages/cardano-services/src/ChainHistory/DbSyncChainHistory/ChainHistoryBuilder.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,9 @@ export class ChainHistoryBuilder {
317317
values: [ids]
318318
});
319319
const redeemerMap: TransactionDataMap<Cardano.Redeemer[]> = new Map();
320-
for (const redeemer of result.rows) {
320+
for (const redeemer of result.rows
321+
.map(({ id, ...rest }) => ({ id: BigInt(id), ...rest }))
322+
.sort((a, b) => Number(a.id - b.id))) {
321323
const txId = redeemer.tx_id.toString('hex') as unknown as Cardano.TransactionId;
322324
const currentRedeemers = redeemerMap.get(txId) ?? [];
323325
redeemerMap.set(txId, [...currentRedeemers, mapRedeemer(redeemer)]);

packages/cardano-services/src/ChainHistory/DbSyncChainHistory/mappers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ const mapRedeemerPurpose = (purpose: RedeemerModel['purpose']): Cardano.Redeemer
153153
throw new NotImplementedError(`Failed to map redeemer "purpose": ${purpose}`);
154154
})();
155155

156-
export const mapRedeemer = (redeemerModel: RedeemerModel): Cardano.Redeemer => ({
156+
export const mapRedeemer = (redeemerModel: Omit<RedeemerModel, 'id'>): Cardano.Redeemer => ({
157157
data: stubRedeemerData,
158158
executionUnits: {
159159
memory: Number(redeemerModel.unit_mem),

packages/cardano-services/src/ChainHistory/DbSyncChainHistory/queries.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ export const findWithdrawalsByTxIds = `
176176

177177
export const findRedeemersByTxIds = `
178178
SELECT
179+
redeemer.id AS id,
179180
redeemer."index" AS "index",
180181
redeemer.purpose AS purpose,
181182
redeemer.script_hash AS script_hash,
@@ -184,8 +185,7 @@ export const findRedeemersByTxIds = `
184185
tx.hash AS tx_id
185186
FROM redeemer
186187
JOIN tx ON tx.id = redeemer.tx_id
187-
WHERE tx.id = ANY($1)
188-
ORDER BY redeemer.id ASC`;
188+
WHERE tx.id = ANY($1)`;
189189

190190
export const findVotingProceduresByTxIds = `
191191
SELECT

packages/cardano-services/src/ChainHistory/DbSyncChainHistory/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ export interface WithdrawalModel {
104104
}
105105

106106
export interface RedeemerModel {
107+
id: string;
107108
index: number;
108109
purpose: 'cert' | 'mint' | 'spend' | 'reward' | 'voting' | 'proposing';
109110
script_hash: Buffer;

packages/cardano-services/test/ChainHistory/DbSyncChainHistoryProvider/mappers.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ describe('chain history mappers', () => {
440440
);
441441
});
442442
describe('mapRedeemer', () => {
443-
const redeemerModel: Omit<RedeemerModel, 'purpose'> = {
443+
const redeemerModel: Omit<RedeemerModel, 'id' | 'purpose'> = {
444444
index: 1,
445445
script_hash: Buffer.from(hash28ByteBase16, 'hex'),
446446
tx_id: Buffer.from(transactionHash, 'hex'),

0 commit comments

Comments
 (0)