Skip to content

Commit 375107d

Browse files
committed
Chang
1 parent b23e31f commit 375107d

13 files changed

+175
-151
lines changed

package-lock.json

Lines changed: 39 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"@babel/core": "^7.24.5",
2727
"@babel/preset-env": "^7.24.5",
2828
"@babel/preset-typescript": "^7.24.1",
29-
"@cardano-ogmios/client": "^5.5.7",
29+
"@cardano-ogmios/client": "^6.6.0",
3030
"@types/cors": "^2.8.14",
3131
"@types/express": "^4.17.17",
3232
"@types/helmet": "^4.0.0",

src/IndexerApplication.ts

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import 'reflect-metadata';
22
import { dbService, eventService, metadataService, operationWs, queue } from './indexerServices';
33
import {
4-
createChainSyncClient,
4+
createChainSynchronizationClient,
55
createInteractionContext,
66
InteractionContext
77
} from '@cardano-ogmios/client';
8-
import { Block, TipOrOrigin, Point, PointOrOrigin, BlockAlonzo, BlockBabbage } from '@cardano-ogmios/schema';
8+
import { Block, TipOrOrigin, Point, PointOrOrigin, BlockPraos } from '@cardano-ogmios/schema';
99
import { logError, logInfo } from './logger';
1010
import { BaseIndexer } from './indexers/BaseIndexer';
11-
import { ChainSyncClient } from '@cardano-ogmios/client/dist/ChainSync';
1211
import { AmmDexTransactionIndexer } from './indexers/AmmDexTransactionIndexer';
1312
import { BaseCacheStorage } from './storage/BaseCacheStorage';
1413
import { MinswapAnalyzer } from './dex/MinswapAnalyzer';
@@ -29,14 +28,15 @@ import { CacheStorage } from './storage/CacheStorage';
2928
import { HybridDexTransactionIndexer } from './indexers/HybridDexTransactionIndexer';
3029
import { AxoAnalyzer } from './dex/AxoAnalyzer';
3130
import { VyFiAnalyzer } from './dex/VyFiAnalyzer';
31+
import { ChainSynchronization } from '@cardano-ogmios/client';
3232
// import { SundaeSwapV3Analyzer } from './dex/SundaeSwapV3Analyzer';
3333

3434
export class IndexerApplication {
3535

3636
private readonly _cache: BaseCacheStorage;
3737

3838
private _eventListeners: BaseEventListener[] = [];
39-
private chainSyncClient: ChainSyncClient | undefined = undefined;
39+
private chainSyncClient: ChainSynchronization.ChainSynchronizationClient | undefined = undefined;
4040

4141
/**
4242
* Indexers to make aware of new blocks & rollbacks.
@@ -150,7 +150,7 @@ export class IndexerApplication {
150150
process.exit(0);
151151
});
152152

153-
this.chainSyncClient = await createChainSyncClient(
153+
this.chainSyncClient = await createChainSynchronizationClient(
154154
context,
155155
{
156156
rollForward: this.rollForward.bind(this),
@@ -178,8 +178,8 @@ export class IndexerApplication {
178178
* GeniusYield - 110315300, d7281a52d68eef89a7472860fdece323ecc39d3054cdd1fa0825afe56b942a86
179179
*/
180180
return lastSync
181-
? this.chainSyncClient.startSync([{ slot: lastSync.slot, hash: lastSync.blockHash }])
182-
: this.chainSyncClient.startSync([{ slot: FIRST_SYNC_SLOT, hash: FIRST_SYNC_BLOCK_HASH }]);
181+
? this.chainSyncClient?.resume([{ slot: lastSync.slot, id: lastSync.blockHash }])
182+
: this.chainSyncClient?.resume([{ slot: FIRST_SYNC_SLOT, id: FIRST_SYNC_BLOCK_HASH }]);
183183
}
184184

185185
/**
@@ -188,19 +188,13 @@ export class IndexerApplication {
188188
* @param requestNext - Callback to request next block.
189189
*/
190190
private async rollForward(update: { block: Block, tip: TipOrOrigin }, requestNext: () => void): Promise<void> {
191-
let block: BlockAlonzo | BlockBabbage | undefined = undefined;
191+
if (update.block.type === 'praos') {
192+
const block: BlockPraos = update.block;
192193

193-
if ('babbage' in update.block) {
194-
block = update.block.babbage;
195-
} else if ('alonzo' in update.block) {
196-
block = update.block.alonzo;
197-
}
198-
199-
if (block) {
200-
logInfo(`====== Analyzing block at slot ${block.header.slot} ======`);
194+
logInfo(`====== Analyzing block at slot ${block.slot} ======`);
201195

202196
await Promise.all(
203-
this._indexers.map((indexer: BaseIndexer) => indexer.onRollForward(block as BlockAlonzo | BlockBabbage)),
197+
this._indexers.map((indexer: BaseIndexer) => indexer.onRollForward(block)),
204198
);
205199

206200
if (queue.size > 0) {
@@ -209,7 +203,7 @@ export class IndexerApplication {
209203
logInfo('[Queue] Finished jobs');
210204
}
211205

212-
logInfo(`====== Finished with block at slot ${block.header.slot} ======`);
206+
logInfo(`====== Finished with block at slot ${block.slot} ======`);
213207
}
214208

215209
requestNext();
@@ -227,7 +221,7 @@ export class IndexerApplication {
227221
const point: Point = update.point;
228222

229223
await Promise.all(
230-
this._indexers.map((indexer: BaseIndexer) => indexer.onRollBackward(point.hash, point.slot)),
224+
this._indexers.map((indexer: BaseIndexer) => indexer.onRollBackward(point.id, point.slot)),
231225
);
232226
}
233227

src/dex/BaseAmmDexAnalyzer.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { LiquidityPoolDeposit } from '../db/entities/LiquidityPoolDeposit';
1111
import { LiquidityPoolZap } from '../db/entities/LiquidityPoolZap';
1212
import { LiquidityPoolWithdraw } from '../db/entities/LiquidityPoolWithdraw';
1313
import { IndexerApplication } from '../IndexerApplication';
14+
import { Redeemer } from '@cardano-ogmios/schema';
1415

1516
export abstract class BaseAmmDexAnalyzer {
1617

@@ -56,11 +57,9 @@ export abstract class BaseAmmDexAnalyzer {
5657
* Retrieve the corresponding spent operations for a transaction.
5758
*/
5859
protected spentOperationInputs(transaction: Transaction): OperationStatus[] {
59-
const indexes: number[] = Object.keys(transaction.redeemers).filter((label: string) => {
60-
return label.startsWith('spend');
61-
}).map((label: string) => {
62-
return parseInt(label.split(':')[1]);
63-
});
60+
const indexes: number[] = transaction.redeemers.filter((redeemer: Redeemer) => {
61+
return redeemer.validator.purpose === 'spend';
62+
}).map((redeemer: Redeemer) => redeemer.validator.index);
6463

6564
return transaction.inputs.reduce((spentInputs: OperationStatus[], input: Utxo, index: number) => {
6665
if (indexes.includes(index)) {
@@ -87,15 +86,17 @@ export abstract class BaseAmmDexAnalyzer {
8786
*/
8887
protected cancelledOperationInputs(transaction: Transaction, orderAddresses: string[], redeemerDatum: string): OperationStatus[] {
8988
const containsOrderAddress: boolean = transaction.scriptHashes?.some((scriptHash: string) => {
90-
return orderAddresses.includes(scriptHashToAddress(scriptHash));
89+
return orderAddresses.includes(scriptHashToAddress(scriptHash));
9190
}) ?? false;
9291

9392
if (! containsOrderAddress) return [];
9493

9594
return transaction.inputs.reduce((cancelInputs: OperationStatus[], input: Utxo, index: number) => {
96-
const redeemerLabel: string = `spend:${index}`;
95+
const redeemer: Redeemer | undefined = transaction.redeemers.find((redeemer: Redeemer) => {
96+
return redeemer.validator.index === index && redeemer.redeemer === redeemerDatum;
97+
});
9798

98-
if ((redeemerLabel in transaction.redeemers) && transaction.redeemers[redeemerLabel] === redeemerDatum) {
99+
if (redeemer) {
99100
cancelInputs.push(
100101
OperationStatus.make(
101102
DexOperationStatus.Cancelled,

src/dex/BaseHybridDexAnalyzer.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AmmDexOperation, HybridOperation, OrderBookDexOperation, Transaction, Utxo } from '../types';
1+
import { HybridOperation, Transaction, Utxo } from '../types';
22
import { scriptHashToAddress } from '../utils';
33
import { DexOperationStatus } from '../constants';
44
import { OperationStatus } from '../db/entities/OperationStatus';
@@ -10,6 +10,7 @@ import { LiquidityPoolWithdraw } from '../db/entities/LiquidityPoolWithdraw';
1010
import { IndexerApplication } from '../IndexerApplication';
1111
import { OrderBookMatch } from '../db/entities/OrderBookMatch';
1212
import { OrderBookOrder } from '../db/entities/OrderBookOrder';
13+
import { Redeemer } from '@cardano-ogmios/schema';
1314

1415
export abstract class BaseHybridDexAnalyzer {
1516

@@ -41,11 +42,9 @@ export abstract class BaseHybridDexAnalyzer {
4142
* Retrieve the corresponding spent operations for a transaction.
4243
*/
4344
protected spentOperationInputs(transaction: Transaction): OperationStatus[] {
44-
const indexes: number[] = Object.keys(transaction.redeemers).filter((label: string) => {
45-
return label.startsWith('spend');
46-
}).map((label: string) => {
47-
return parseInt(label.split(':')[1]);
48-
});
45+
const indexes: number[] = transaction.redeemers.filter((redeemer: Redeemer) => {
46+
return redeemer.validator.purpose === 'spend';
47+
}).map((redeemer: Redeemer) => redeemer.validator.index);
4948

5049
return transaction.inputs.reduce((spentInputs: OperationStatus[], input: Utxo, index: number) => {
5150
if (indexes.includes(index)) {
@@ -78,9 +77,11 @@ export abstract class BaseHybridDexAnalyzer {
7877
if (! containsOrderAddress) return [];
7978

8079
return transaction.inputs.reduce((cancelInputs: OperationStatus[], input: Utxo, index: number) => {
81-
const redeemerLabel: string = `spend:${index}`;
80+
const redeemer: Redeemer | undefined = transaction.redeemers.find((redeemer: Redeemer) => {
81+
return redeemer.validator.index === index && redeemer.redeemer === redeemerDatum;
82+
});
8283

83-
if ((redeemerLabel in transaction.redeemers) && transaction.redeemers[redeemerLabel] === redeemerDatum) {
84+
if (redeemer) {
8485
cancelInputs.push(
8586
OperationStatus.make(
8687
DexOperationStatus.Cancelled,

src/indexers/AmmDexTransactionIndexer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { BaseIndexer } from './BaseIndexer';
2-
import { BlockAlonzo, BlockBabbage, Slot, TxAlonzo, TxBabbage } from '@cardano-ogmios/schema';
2+
import { Slot, BlockPraos, Transaction as OgmiosTransaction } from '@cardano-ogmios/schema';
33
import { BaseAmmDexAnalyzer } from '../dex/BaseAmmDexAnalyzer';
44
import { AmmDexOperation, Transaction } from '../types';
55
import { dbService } from '../indexerServices';
@@ -21,8 +21,8 @@ export class AmmDexTransactionIndexer extends BaseIndexer {
2121
this._handler = new AmmOperationHandler();
2222
}
2323

24-
async onRollForward(block: BlockBabbage | BlockAlonzo): Promise<any> {
25-
const operationPromises: Promise<AmmDexOperation[]>[] = block.body?.map((transaction: TxBabbage | TxAlonzo) => {
24+
async onRollForward(block: BlockPraos): Promise<any> {
25+
const operationPromises: Promise<AmmDexOperation[]>[] = (block.transactions ?? []).map((transaction: OgmiosTransaction) => {
2626
return this._analyzers.map((analyzer: BaseAmmDexAnalyzer) => {
2727
const tx: Transaction = formatTransaction(block, transaction);
2828

src/indexers/BaseIndexer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { BlockAlonzo, BlockBabbage, Slot } from '@cardano-ogmios/schema';
1+
import { BlockPraos, Slot } from '@cardano-ogmios/schema';
22

33
export abstract class BaseIndexer {
44

5-
abstract onRollForward(block: BlockBabbage | BlockAlonzo): Promise<any>;
5+
abstract onRollForward(block: BlockPraos): Promise<any>;
66

77
abstract onRollBackward(blockHash: string, slot: Slot): Promise<any>;
88

src/indexers/HybridDexTransactionIndexer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { BaseIndexer } from './BaseIndexer';
2-
import { BlockAlonzo, BlockBabbage, Slot, TxAlonzo, TxBabbage } from '@cardano-ogmios/schema';
2+
import { Slot, BlockPraos, Transaction as OgmiosTransaction } from '@cardano-ogmios/schema';
33
import { HybridOperation, Transaction } from '../types';
44
import { LiquidityPoolState } from '../db/entities/LiquidityPoolState';
55
import { OperationStatus } from '../db/entities/OperationStatus';
@@ -21,8 +21,8 @@ export class HybridDexTransactionIndexer extends BaseIndexer {
2121
this._handler = new HybridOperationHandler();
2222
}
2323

24-
async onRollForward(block: BlockBabbage | BlockAlonzo): Promise<any> {
25-
const operationPromises: Promise<HybridOperation[]>[] = block.body?.map((transaction: TxBabbage | TxAlonzo) => {
24+
async onRollForward(block: BlockPraos): Promise<any> {
25+
const operationPromises: Promise<HybridOperation[]>[] = (block.transactions ?? []).map((transaction: OgmiosTransaction) => {
2626
return this._analyzers.map((analyzer: BaseHybridDexAnalyzer) => {
2727
const tx: Transaction = formatTransaction(block, transaction);
2828

src/indexers/OrderBookDexTransactionIndexer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { BaseIndexer } from './BaseIndexer';
2-
import { BlockAlonzo, BlockBabbage, Slot, TxAlonzo, TxBabbage } from '@cardano-ogmios/schema';
2+
import { Slot, BlockPraos, Transaction as OgmiosTransaction } from '@cardano-ogmios/schema';
33
import { OrderBookDexOperation, Transaction } from '../types';
44
import { dbService } from '../indexerServices';
55
import { EntityManager, MoreThan } from 'typeorm';
@@ -23,8 +23,8 @@ export class OrderBookDexTransactionIndexer extends BaseIndexer {
2323
this._handler = new OrderBookOperationHandler();
2424
}
2525

26-
async onRollForward(block: BlockBabbage | BlockAlonzo): Promise<any> {
27-
const operationPromises: Promise<OrderBookDexOperation[]>[] = block.body?.map((transaction: TxBabbage | TxAlonzo) => {
26+
async onRollForward(block: BlockPraos): Promise<any> {
27+
const operationPromises: Promise<OrderBookDexOperation[]>[] = (block.transactions ?? []).map((transaction: OgmiosTransaction) => {
2828
return this._analyzers.map((analyzer: BaseOrderBookDexAnalyzer) => {
2929
const tx: Transaction = formatTransaction(block, transaction);
3030

0 commit comments

Comments
 (0)